X-Git-Url: https://git.archive.openwrt.org/?a=blobdiff_plain;f=package%2Fmadwifi%2Ffiles%2Flib%2Fwifi%2Fmadwifi.sh;h=1cd727ade711e8c4b301653a3a980d6c4666f05e;hb=6e8c336f90f207ebc635f7ee57284256ec675bf2;hp=a22b5c4adc8e46c7365ce88253867595ef324324;hpb=677a254d9932b578f1bc4d55171c76e09e47abd2;p=openwrt.git diff --git a/package/madwifi/files/lib/wifi/madwifi.sh b/package/madwifi/files/lib/wifi/madwifi.sh index a22b5c4adc..1cd727ade7 100755 --- a/package/madwifi/files/lib/wifi/madwifi.sh +++ b/package/madwifi/files/lib/wifi/madwifi.sh @@ -38,7 +38,7 @@ scan_atheros() { :1:1)config_set "$device" nosbeacon 1;; # AP+STA, can't use beacon timers for STA :1:);; ::1);; - :::);; + ::);; *) echo "$device: Invalid mode combination in config"; return 1;; esac @@ -73,6 +73,7 @@ enable_atheros() { config_get vifs "$device" vifs disable_atheros "$device" + local first=1 for vif in $vifs; do nosbeacon= config_get ifname "$vif" ifname @@ -89,8 +90,25 @@ enable_atheros() { } config_set "$vif" ifname "$ifname" - config_get "$device" mode - iwpriv "$ifname" mode "${mode:-11g}" + [ "$first" = 1 ] && { + # only need to change freq band and channel on the first vif + 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=11g;; + esac + iwconfig "$ifname" channel 0 + iwpriv "$ifname" mode "$agmode" + iwpriv "$ifname" pureg "$pureg" + iwconfig "$ifname" channel "$channel" + } + + config_get_bool hidden "$vif" hidden + iwpriv "$ifname" hide_ssid "$hidden" config_get wds "$vif" wds case "$wds" in @@ -107,7 +125,14 @@ enable_atheros() { iwconfig "$ifname" enc "[$idx]" "${key:-off}" done config_get key "$vif" key - iwconfig "$ifname" enc "[${key:-1}]" + key="${key:-1}" + case "$key" in + [1234]) iwconfig "$ifname" enc "[$key]";; + *) iwconfig "$ifname" enc "$key";; + esac + ;; + PSK|psk|PSK2|psk2) + config_get key "$vif" key ;; esac @@ -119,10 +144,44 @@ enable_atheros() { *) config_get ssid "$vif" ssid ;; + adhoc) + config_get addr "$vif" bssid + [ -z "$addr" ] || { + iwconfig "$ifname" ap "$addr" + } + ;; esac - iwconfig "$ifname" channel "$channel" + + [ "$mode" = "sta" ] && { + config_get_bool bgscan "$vif" bgscan 1 + iwpriv "$ifname" bgscan "$bgscan" + } + + config_get_bool antdiv "$device" diversity 1 + sysctl -w dev."$device".diversity="$antdiv" >&- + + config_get antrx "$device" rxantenna + if [ -n "$antrx" ]; then + sysctl -w dev."$device".rxantenna="$antrx" >&- + fi + + config_get anttx "$device" txantenna + if [ -n "$anttx" ]; then + sysctl -w dev."$device".txantenna="$anttx" >&- + fi + + config_get distance "$device" distance + if [ -n "$distance" ]; then + athctrl -i "$device" -d "$distance" >&- + fi + + config_get txpwr "$vif" txpower + if [ -n "$txpwr" ]; then + iwconfig "$ifname" txpower "${txpwr%%.*}" + fi + ifconfig "$ifname" up - + local net_cfg bridge net_cfg="$(find_net_config "$vif")" [ -z "$net_cfg" ] || { @@ -142,9 +201,33 @@ enable_atheros() { } ;; wds|sta) - # FIXME: implement wpa_supplicant calls here + case "$enc" in + PSK|psk|PSK2|psk2) + case "$enc" in + PSK|psk) + proto='proto=WPA';; + PSK2|psk2) + proto='proto=RSN';; + esac + cat > /var/run/wpa_supplicant-$ifname.conf <&-); do config_get type "$dev" type [ "$type" = atheros ] && return cat <