X-Git-Url: http://git.openwrt.org/?p=openwrt%2Fsvn-archive%2Farchive.git;a=blobdiff_plain;f=package%2Fmadwifi%2Ffiles%2Flib%2Fwifi%2Fmadwifi.sh;h=0b24886903de29bc4b3c1288b7407a1d20e4519b;hp=d8a6d00ea36f58a159314aa39102a73e85c4dec2;hb=60aae6f0b7ae3a8d36d51376248a544d814969c3;hpb=ec1e9f660e37064af950d03da7d79e28e847d079 diff --git a/package/madwifi/files/lib/wifi/madwifi.sh b/package/madwifi/files/lib/wifi/madwifi.sh index d8a6d00ea3..0b24886903 100755 --- a/package/madwifi/files/lib/wifi/madwifi.sh +++ b/package/madwifi/files/lib/wifi/madwifi.sh @@ -78,9 +78,11 @@ enable_atheros() { local first=1 for vif in $vifs; do + local start_hostapd nosbeacon= config_get ifname "$vif" ifname config_get enc "$vif" encryption + config_get eap_type "$vif" eap_type config_get mode "$vif" mode [ "$mode" = sta ] && config_get nosbeacon "$device" nosbeacon @@ -93,25 +95,26 @@ enable_atheros() { } config_set "$vif" ifname "$ifname" + # only need to change freq band and channel on the first vif + config_get agmode "$device" agmode + [ -z "$agmode" ] && config_get agmode "$device" mode + + pureg=0 + case "$agmode" in + *b) agmode=11b;; + *bg) agmode=11g;; + *g) agmode=11g; pureg=1;; + *gdt) agmode=11gdt;; + *a) agmode=11a;; + *adt) agmode=11adt;; + *ast) agmode=11ast;; + *fh) agmode=fh;; + *) agmode=auto;; + esac + iwpriv "$ifname" mode "$agmode" + iwpriv "$ifname" pureg "$pureg" + [ "$first" = 1 ] && { - # only need to change freq band and channel on the first vif - config_get agmode "$device" agmode - [ -z "$agmode" ] && config_get agmode "$device" mode - - pureg=0 - case "$agmode" in - *b) agmode=11b;; - *bg) agmode=11g;; - *g) agmode=11g; pureg=1;; - *gdt) agmode=11gdt;; - *a) agmode=11a;; - *adt) agmode=11adt;; - *ast) agmode=11ast;; - *fh) agmode=fh;; - *) agmode=auto;; - esac - iwpriv "$ifname" mode "$agmode" - iwpriv "$ifname" pureg "$pureg" iwconfig "$ifname" channel "$channel" >/dev/null 2>/dev/null } @@ -135,7 +138,6 @@ enable_atheros() { [ -n "$wdssep" ] && iwpriv "$ifname" wdssep "$wdssep" } - wpa= case "$enc" in WEP|wep) for idx in 1 2 3 4; do @@ -150,6 +152,7 @@ enable_atheros() { esac ;; PSK|psk|PSK2|psk2) + start_hostapd=1 config_get key "$vif" key ;; esac @@ -259,9 +262,9 @@ enable_atheros() { config_get_bool isolate "$vif" isolate 0 iwpriv "$ifname" ap_bridge "$((isolate^1))" - if eval "type hostapd_setup_vif" 2>/dev/null >/dev/null; then + if [ -n "$start_hostapd" ] && eval "type hostapd_setup_vif" 2>/dev/null >/dev/null; then hostapd_setup_vif "$vif" madwifi || { - echo "enable_atheros($device): Failed to set up wpa for interface $ifname" >&2 + echo "enable_atheros($device): Failed to set up hostapd for interface $ifname" >&2 # make sure this wifi interface won't accidentally stay open without encryption ifconfig "$ifname" down wlanconfig "$ifname" destroy @@ -270,42 +273,14 @@ enable_atheros() { fi ;; wds|sta) - config_get_bool usepassphrase "$vif" passphrase 1 - case "$enc" in - PSK|psk|PSK2|psk2) - case "$enc" in - PSK|psk) - proto='proto=WPA' - if [ "$usepassphrase" = "1" ]; then - passphrase="psk=\"${key}\"" - else - passphrase="psk=${key}" - fi - ;; - PSK2|psk2) - proto='proto=RSN' - if [ "$usepassphrase" = "1" ]; then - passphrase="psk=\"${key}\"" - else - passphrase="psk=${key}" - fi - ;; - esac - cat > /var/run/wpa_supplicant-$ifname.conf </dev/null >/dev/null; then + wpa_supplicant_setup_vif "$vif" madwifi || { + echo "enable_atheros($device): Failed to set up wpa_supplicant for interface $ifname" >&2 + ifconfig "$ifname" down + wlanconfig "$ifname" destroy + continue + } + fi ;; esac first=0