X-Git-Url: http://git.ipfire.org/?a=blobdiff_plain;ds=sidebyside;f=src%2Finitscripts%2Finit.d%2Fhostapd;h=02e8c161472623109f1586904e42b234eb760794;hb=ed974e08c54b293afb71405dc71e2cc56779fc9b;hp=bbdb24f44e0697edc1a98d0cb0b812aa6176ab36;hpb=b67ff08f300046b384a5d6cfb43e14c74a65ab21;p=ipfire-2.x.git diff --git a/src/initscripts/init.d/hostapd b/src/initscripts/init.d/hostapd index bbdb24f44e..02e8c16147 100644 --- a/src/initscripts/init.d/hostapd +++ b/src/initscripts/init.d/hostapd @@ -2,71 +2,125 @@ . /etc/sysconfig/rc . ${rc_functions} -CHANNEL="05" +CHANNEL="6" +COUNTRY="00" TXPOWER="auto" INTERFACE="blue0" +MACMODE="0" + eval $(/usr/local/bin/readhash /var/ipfire/wlanap/settings) case "${1}" in - start) - boot_mesg "Starting hostapd... " + start) mkdir -p /var/run/hostapd - # enable wlan module of collectd - sed -i -e "s|#LoadPlugin wireless|LoadPlugin wireless|g" /etc/collectd.conf - # Set Atheros Cards to master mode - /usr/bin/wlanconfig $INTERFACE destroy > /dev/null - /usr/bin/wlanconfig $INTERFACE create wlandev wifi0 wlanmode ap > /dev/null + boot_mesg "Starting hostapd... " - # Set other cards to master mode - #/usr/sbin/iwconfig blue0 mode master + # Check Interface configuration + if ! ip link show $INTERFACE > /dev/null 2>&1; then + boot_mesg "Interface $INTERFACE doesn't exist." ${FAILURE} + echo_failure + exit 0 + fi + if [ "$(ip link show $INTERFACE | /bin/grep "ether")" == "" ]; then + boot_mesg "Interface $INTERFACE is assigned to wlan master device." ${FAILURE} + boot_mesg "Please reboot to fix this." ${FAILURE} + echo_failure + exit 0 + fi + if [ "$(iwconfig $INTERFACE | /bin/grep "IEEE")" == "" ]; then + boot_mesg "Interface $INTERFACE is no wireless device." ${FAILURE} + echo_failure + exit 0 + fi - if [ "$(/usr/sbin/iwconfig $INTERFACE | /bin/grep "Mode:Master")" == "" ]; then - boot_mesg "Error! Can't set wlan master mode" - echo_failure; - exit 1; + # Detect driver + if [ -e "/sys/class/net/$INTERFACE/phy80211" ]; then + DRIVER="NL80211" + driver="nl80211" + elif [ "$(/bin/grep hostap /sys/class/net/$INTERFACE/uevent)" != "" ]; then + DRIVER="HOSTAP" + driver="hostap" else - /usr/sbin/iwconfig $INTERFACE channel $CHANNEL - /usr/sbin/iwconfig $INTERFACE txpower $TXPOWER - /usr/bin/hostapd -P /var/run/hostapd /etc/hostapd.conf /dev/tty12 2>&1 & - evaluate_retval + boot_mesg "Interface $INTERFACE is a not supported wireless device." ${FAILURE} + echo_failure + exit 0 fi - # Bring blue up (but not at boot) - if [ "$(basename $0)" == "hostapd" ]; then - /etc/rc.d/init.d/networking/blue start - if [ -f /var/ipfire/dhcp/enable_blue ]; then - /etc/rc.d/init.d/dhcp restart - fi + echo driver=$driver > /etc/hostapd.conf.tmp + grep -v "^driver=" /etc/hostapd.conf >> /etc/hostapd.conf.tmp + mv /etc/hostapd.conf.tmp /etc/hostapd.conf + + echo DRIVER=$DRIVER > /var/ipfire/wlanap/settings.tmp + grep -v "^DRIVER=" /var/ipfire/wlanap/settings >> /var/ipfire/wlanap/settings.tmp + chown nobody:nobody /var/ipfire/wlanap/settings.tmp + chmod 644 /var/ipfire/wlanap/settings.tmp + mv /var/ipfire/wlanap/settings.tmp /var/ipfire/wlanap/settings + + if [ "$DRIVER" == "HOSTAP" ]; then + if [ "$(/usr/sbin/iwconfig $INTERFACE | /bin/grep "Mode:Master")" == "" ]; then + boot_mesg "Setting HOSTAP wlan $INTERFACE to Master mode... " + # Set Prism Cards to master mode + /usr/bin/iwconfig $INTERFACE mode master > /dev/null + fi fi - ;; - stop) - boot_mesg "Stopping hostapd..." + # First set to any country then reset to World (00) + # and then set new country because the card is only + # reprogrammed if the region was changed. + /usr/sbin/iw reg set DE + /usr/sbin/iw reg set 00 + /usr/sbin/iw reg set $COUNTRY + + /usr/sbin/iwconfig $INTERFACE channel $CHANNEL 2>/dev/null + + ip link set ${INTERFACE} up 2>/dev/null + /usr/sbin/iwconfig $INTERFACE txpower $TXPOWER 2>/dev/null + + /usr/bin/hostapd -P /var/run/hostapd /etc/hostapd.conf >/dev/null 2>&1 & - # Set Atheros Card to managed mode - /usr/bin/wlanconfig $INTERFACE destroy > /dev/null - /usr/bin/wlanconfig $INTERFACE create wlandev wifi0 wlanmode sta > /dev/null + sleep 3 - # Set other cards to managed mode - #/usr/sbin/iwconfig blue0 mode Managed + if [ "$(/usr/sbin/iwconfig $INTERFACE | /bin/grep "Mode:Master")" == "" ]; then + killproc /usr/bin/hostapd > /dev/null 2>&1 + boot_mesg "Try to create additional AP device ..." + ip link set ${INTERFACE} down + ip link set ${INTERFACE} name ${INTERFACE}_man + iw dev ${INTERFACE}_man interface add ${INTERFACE} type __ap + evaluate_retval; + if [ -d /sys/class/net/${INTERFACE} ]; then + /usr/bin/hostapd -P /var/run/hostapd /etc/hostapd.conf >/dev/null 2>&1 & + else + ip link set ${INTERFACE}_man down + ip link set ${INTERFACE}_man name ${INTERFACE} + fi + exit 0; + else + echo_ok + fi + ;; - killproc /usr/bin/hostapd - evaluate_retval - ;; + stop) + boot_mesg "Stopping hostapd..." + ip link set ${INTERFACE} down > /dev/null 2>&1 + ip link set ${INTERFACE} down_man > /dev/null 2>&1 + sleep 1 + killproc /usr/bin/hostapd + evaluate_retval + ;; - restart) - ${0} stop - sleep 1 - ${0} start - ;; + restart) + ${0} stop + sleep 1 + ${0} start + ;; - status) - statusproc /usr/bin/hostapd - ;; + status) + statusproc /usr/bin/hostapd + ;; - *) - echo "Usage: ${0} {start|stop|restart|status}" - exit 1 - ;; + *) + echo "Usage: ${0} {start|stop|restart|status}" + exit 1 + ;; esac