X-Git-Url: http://git.ipfire.org/?p=people%2Fpmueller%2Fipfire-2.x.git;a=blobdiff_plain;f=src%2Finitscripts%2Finit.d%2Fhostapd;h=9a400823d989da9530e73fe471d2fd758c0d44ff;hp=b529c5cd22a2207cf8e450d119fc45b17b0720e3;hb=ef7d03bb34fb5e86ac495d4eb698a80e6ed784af;hpb=cca449193c2206d59d733407379792cb4fc2967c diff --git a/src/initscripts/init.d/hostapd b/src/initscripts/init.d/hostapd index b529c5cd22..9a400823d9 100644 --- a/src/initscripts/init.d/hostapd +++ b/src/initscripts/init.d/hostapd @@ -2,37 +2,129 @@ . /etc/sysconfig/rc . ${rc_functions} +CHANNEL="05" +TXPOWER="auto" +INTERFACE="blue0" +MACMODE="0" + +eval $(/usr/local/bin/readhash /var/ipfire/wlanap/settings) + case "${1}" in - start) - # enable wlan module of collectd - sed -i -e "s|#LoadPlugin wireless|LoadPlugin wireless|g" /etc/collectd.conf - /usr/bin/wlanconfig ath0 destroy - /usr/bin/wlanconfig blue0 create wlandev wifi0 wlanmode ap - /usr/sbin/iwconfig blue0 channel 05 - /usr/bin/hostapd -P /var/run/hostapd /etc/hostapd.conf & - evaluate_retval - ;; - - stop) - # Just make sure when going down the first time blue0 nw values are ignored - sed -i -e 's/^ACTION=="add", SUBSYSTEM=="net", SYSFS{address}=="*", NAME="blue0"*/#ACTION=="add", SUBSYSTEM=="net", SYSFS{address}=="*", NAME="blue0"*/' /etc/udev/rules.d/30-persistent-network.rules - /usr/bin/wlanconfig blue0 destroy - killproc /usr/bin/hostapd - evaluate_retval - ;; - - restart) - ${0} stop - sleep 1 - ${0} start - ;; - - status) - statusproc /usr/bin/hostapd - ;; - - *) - echo "Usage: ${0} {start|stop|restart|status}" - exit 1 - ;; + start) + mkdir -p /var/run/hostapd + + boot_mesg "Starting hostapd... " + + # 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 + + # Detect driver + if [ -e "/sys/class/net/$INTERFACE/phy80211" ]; then + DRIVER="NL80211" + driver="nl80211" + elif [ -e "/sys/class/net/$INTERFACE/madwifi_name_type" ]; then + DRIVER="MADWIFI" + driver="madwifi" + elif [ "$(/bin/grep hostap /sys/class/net/$INTERFACE/uevent)" != "" ]; then + DRIVER="HOSTAP" + driver="hostap" + else + boot_mesg "Interface $INTERFACE is a not supported wireless device." ${FAILURE} + echo_failure + exit 0 + 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" == "MADWIFI" ]; then + if [ "$(/usr/sbin/iwconfig $INTERFACE | /bin/grep "Mode:Master")" == "" ]; then + boot_mesg "Setting MADWIFI wlan $INTERFACE to Master mode... " + # Set Atheros Cards to master mode + /usr/bin/wlanconfig $INTERFACE destroy > /dev/null + /usr/bin/wlanconfig $INTERFACE create wlandev wifi0 wlanmode ap > /dev/null + fi + elif [ "$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 + + /usr/sbin/iwconfig $INTERFACE channel $CHANNEL + /usr/sbin/iwconfig $INTERFACE txpower $TXPOWER + + /usr/bin/hostapd -P /var/run/hostapd /etc/hostapd.conf >/dev/null 2>&1 & + + sleep 2 + + if [ $DRIVER == "MADWIFI" ]; then + iwpriv $INTERFACE maccmd 3 + if [ $MACMODE != 0 ]; then + FILE="/var/ipfire/wlanap/macfile" + exec < $FILE + while read LINE + do + iwpriv $INTERFACE addmac $LINE + done + + iwpriv $INTERFACE maccmd $MACMODE + fi + fi + + sleep 2 + + if [ "$(/usr/sbin/iwconfig $INTERFACE | /bin/grep "Mode:Master")" == "" ]; then + boot_mesg "Error! Can't set wlan master mode" + echo_failure; + exit 0; + else + echo_ok + fi + ;; + + stop) + boot_mesg "Stopping hostapd..." + + killproc /usr/bin/hostapd + evaluate_retval + ;; + + restart) + ${0} stop + sleep 1 + ${0} start + ;; + + status) + statusproc /usr/bin/hostapd + ;; + + *) + echo "Usage: ${0} {start|stop|restart|status}" + exit 1 + ;; esac