#!/bin/sh . /etc/sysconfig/rc . ${rc_functions} CHANNEL="05" COUNTRY="00" TXPOWER="auto" INTERFACE="blue0" MACMODE="0" eval $(/usr/local/bin/readhash /var/ipfire/wlanap/settings) case "${1}" in 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 # 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 /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