implement doth (802.11h) and wmm (802.11e) options for broadcom as well; update docs
[openwrt/openwrt.git] / package / broadcom-wl / files / lib / wifi / broadcom.sh
index aa8258d3dc4eb4cf37c3de94df40588e4a5424ed..985100f6f69b812a188b8abd5cb62e86da624e61 100644 (file)
@@ -124,7 +124,9 @@ enable_broadcom() {
        config_get maclist "$device" maclist
        config_get macaddr "$device" macaddr
        config_get txpower "$device" txpower
-       local vif_pre_up vif_post_up vif_do_up
+       local vif_pre_up vif_post_up vif_do_up vif_txpower
+       local doth=0
+       local wmm=0
 
        _c=0
        nas="$(which nas)"
@@ -139,7 +141,7 @@ enable_broadcom() {
        } || {
                slottime="${slottime:--1}"
        }
-       
+
        case "$macfilter" in
                allow|2)
                        macfilter=2;
@@ -153,11 +155,16 @@ enable_broadcom() {
        esac
 
        for vif in $vifs; do
+               config_get vif_txpower "$vif" txpower
+
                config_get mode "$vif" mode
                append vif_pre_up "vif $_c" "$N"
                append vif_post_up "vif $_c" "$N"
                append vif_do_up "vif $_c" "$N"
-               
+
+               config_get_bool wmm "$vif" wmm "$wmm"
+               config_get_bool doth "$vif" doth "$doth"
+
                [ "$mode" = "sta" ] || {
                        config_get_bool hidden "$vif" hidden 0
                        append vif_pre_up "closed $hidden" "$N"
@@ -197,6 +204,7 @@ enable_broadcom() {
                                case "$enc" in
                                        wpa*+wpa2*|WPA*+WPA2*|*psk+*psk2|*PSK+*PSK2) auth=132; wsec=6;;
                                        wpa2*|WPA2*|*PSK2|*psk2) auth=128; wsec=4;;
+                                       *aes|*AES) auth=4; wsec=4;;
                                        *) auth=4; wsec=2;;
                                esac
                                eval "${vif}_key=\"\$key\""
@@ -231,18 +239,26 @@ enable_broadcom() {
                        append vif_post_up "monitor $monitor" "$N"
                        append vif_post_up "passive $passive" "$N"
                }
+
+               [ "$mode" = "adhoc" ] && {
+                       config_get bssid "$vif" bssid
+                       [ -n "$bssid" ] && {
+                               append vif_pre_up "des_bssid $bssid" "$N"
+                               append vif_pre_up "allow_mode 1" "$N"
+                       }
+               } || append vif_pre_up "allow_mode 0" "$N"
                
                append vif_post_up "enabled 1" "$N"
                
                config_get ifname "$vif" ifname
                #append if_up "ifconfig $ifname up" ";$N"
-               [ -z "$macaddr" ] || append if_up "ifconfig $ifname hw ether $macaddr" ";$N"
+
                local net_cfg bridge
                net_cfg="$(find_net_config "$vif")"
                [ -z "$net_cfg" ] || {
                        bridge="$(bridge_interface "$net_cfg")"
-                       append if_up "start_net '$ifname' '$net_cfg'" ";$N"
                        append if_up "set_wifi_up '$vif' '$ifname'" ";$N"
+                       append if_up "start_net '$ifname' '$net_cfg' \$(wlc ifname '$ifname' bssid)" ";$N"
                }
                [ -z "$nasopts" ] || {
                        eval "${vif}_ssid=\"\$ssid\""
@@ -265,13 +281,14 @@ enable_broadcom() {
        wlc stdin <<EOF
 $ifdown
 
+apsta $apsta
 ap $ap
 ${mssid:+mssid $mssid}
-apsta $apsta
 infra $infra
 ${wet:+wet 1}
 802.11d 0
-802.11h 0
+802.11h ${doth:-0}
+wme ${wmm:-0}
 rxant ${rxantenna:-3}
 txant ${txantenna:-3}
 monitor ${monitor:-0}
@@ -296,7 +313,11 @@ EOF
        wlc stdin <<EOF
 $vif_do_up
 EOF
-       [ -z "$txpower" ] || iwconfig $device txpower ${txpower}dBm 
+
+       # use vif_txpower (from last wifi-iface) instead of txpower (from
+       # wifi-device) if the latter does not exist
+       txpower=${txpower:-$vif_txpower}
+       [ -z "$txpower" ] || iwconfig $device txpower ${txpower}dBm
 
        eval "$nas_cmd"
 }