X-Git-Url: http://git.openwrt.org/?a=blobdiff_plain;f=package%2Fmadwifi%2Ffiles%2Flib%2Fwifi%2Fmadwifi.sh;h=a3bab5b8f081b4641a4b630d760084f3abaef26f;hb=b28a095964426af37c9506dae1d6f8f2d76cc041;hp=d2bbed3b2f5405e11c27f5a698bb18a2880ae99b;hpb=fbc77ede0a7f61fef8d5d227d2ee288dd83a5e6b;p=openwrt%2Fstaging%2Fwigyori.git diff --git a/package/madwifi/files/lib/wifi/madwifi.sh b/package/madwifi/files/lib/wifi/madwifi.sh index d2bbed3b2f..a3bab5b8f0 100755 --- a/package/madwifi/files/lib/wifi/madwifi.sh +++ b/package/madwifi/files/lib/wifi/madwifi.sh @@ -18,14 +18,13 @@ scan_atheros() { append $mode "$vif" ;; wds) - config_get addr "$vif" bssid config_get ssid "$vif" ssid - [ -z "$addr" -a -n "$ssid" ] && { - config_set "$vif" wds 1 - config_set "$vif" mode sta - mode="sta" - addr="$ssid" - } + [ -z "$ssid" ] && continue + + config_set "$vif" wds 1 + config_set "$vif" mode sta + mode="sta" + addr="$ssid" ${addr:+append $mode "$vif"} ;; *) echo "$device($vif): Invalid mode, ignored."; continue;; @@ -79,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 @@ -94,21 +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;; - *a) agmode=11a;; - *) agmode=auto;; - esac - iwpriv "$ifname" mode "$agmode" - iwpriv "$ifname" pureg "$pureg" iwconfig "$ifname" channel "$channel" >/dev/null 2>/dev/null } @@ -120,9 +126,6 @@ enable_atheros() { iwpriv "$ifname" ff "$ff" fi - config_get wdssep "$vif" wdssep - [ -n "$wdssep" ] && iwpriv "$ifname" wdssep "$wdssep" - config_get wds "$vif" wds case "$wds" in 1|on|enabled) wds=1;; @@ -130,7 +133,11 @@ enable_atheros() { esac iwpriv "$ifname" wds "$wds" - wpa= + [ "$mode" = ap -a "$wds" = 1 ] && { + config_get_bool wdssep "$vif" wdssep 1 + [ -n "$wdssep" ] && iwpriv "$ifname" wdssep "$wdssep" + } + case "$enc" in WEP|wep) for idx in 1 2 3 4; do @@ -144,16 +151,13 @@ enable_atheros() { *) iwconfig "$ifname" enc "$key";; esac ;; - PSK|psk|PSK2|psk2) + psk*|wpa*) + start_hostapd=1 config_get key "$vif" key ;; esac case "$mode" in - wds) - config_get addr "$vif" bssid - iwpriv "$ifname" wds_add "$addr" - ;; adhoc|ahdemo) config_get addr "$vif" bssid [ -z "$addr" ] || { @@ -258,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 @@ -269,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