mac80211: Revert adding SM Power Save capability to hostapd configuration
[openwrt/svn-archive/archive.git] / package / kernel / mac80211 / files / lib / netifd / wireless / mac80211.sh
index b19b928cea10df17daa6a34362bcde1cd2b81e26..9526300379194e5e8347ef4e575e883124e8ede3 100644 (file)
@@ -37,6 +37,13 @@ drv_mac80211_init_device_config() {
                rx_antenna_pattern \
                tx_antenna_pattern
        config_add_int vht_max_a_mpdu_len_exp vht_max_mpdu vht_link_adapt vht160 rx_stbc tx_stbc
+       config_add_boolean \
+               ldpc \
+               greenfield \
+               short_gi_20 \
+               short_gi_40 \
+               max_amsdu \
+               dsss_cck_40
 }
 
 drv_mac80211_init_iface_config() {
@@ -47,7 +54,7 @@ drv_mac80211_init_iface_config() {
        config_add_boolean wds powersave
        config_add_int maxassoc
        config_add_int max_listen_int
-       config_add_int dtim_interval
+       config_add_int dtim_period
 
        # mesh
        config_add_string mesh_id
@@ -82,7 +89,7 @@ mac80211_hostapd_setup_base() {
 
        [ "$auto_channel" -gt 0 ] && channel=acs_survey
 
-       json_get_vars noscan htmode
+       json_get_vars noscan
        json_get_values ht_capab_list ht_capab
 
        ieee80211n=1
@@ -121,11 +128,12 @@ mac80211_hostapd_setup_base() {
 
                json_get_vars \
                        ldpc:1 \
-                       greenfield:1 \
+                       greenfield:0 \
                        short_gi_20:1 \
                        short_gi_40:1 \
                        tx_stbc:1 \
                        rx_stbc:3 \
+                       max_amsdu:1 \
                        dsss_cck_40:1
 
                ht_cap_mask=0
@@ -146,6 +154,7 @@ mac80211_hostapd_setup_base() {
                        RX-STBC1:0x300:0x100:1 \
                        RX-STBC12:0x300:0x200:1 \
                        RX-STBC123:0x300:0x300:1 \
+                       MAX-AMSDU-7935:0x800::$max_amsdu \
                        DSSS_CCK-40:0x1000::$dsss_cck_40
 
                ht_capab="$ht_capab$ht_capab_flags"
@@ -320,6 +329,13 @@ ${max_listen_int:+max_listen_interval=$max_listen_int}
 EOF
 }
 
+mac80211_get_addr() {
+       local phy="$1"
+       local idx="$(($2 + 1))"
+
+       head -n $(($macidx + 1)) /sys/class/ieee80211/${phy}/addresses | tail -n1
+}
+
 mac80211_generate_mac() {
        local phy="$1"
        local id="${macidx:-0}"
@@ -327,7 +343,18 @@ mac80211_generate_mac() {
        local ref="$(cat /sys/class/ieee80211/${phy}/macaddress)"
        local mask="$(cat /sys/class/ieee80211/${phy}/address_mask)"
 
-       [ "$mask" = "00:00:00:00:00:00" ] && mask="ff:ff:ff:ff:ff:ff";
+       [ "$mask" = "00:00:00:00:00:00" ] && {
+               mask="ff:ff:ff:ff:ff:ff";
+
+               [ "$(wc -l < /sys/class/ieee80211/${phy}/addresses)" -gt 1 ] && {
+                       addr="$(mac80211_get_addr "$phy" "$id")"
+                       [ -n "$addr" ] && {
+                               echo "$addr"
+                               return
+                       }
+               }
+       }
+
        local oIFS="$IFS"; IFS=":"; set -- $mask; IFS="$oIFS"
 
        local mask1=$1
@@ -358,9 +385,13 @@ mac80211_generate_mac() {
 
 find_phy() {
        [ -n "$phy" -a -d /sys/class/ieee80211/$phy ] && return 0
-       [ -n "$path" -a -d "/sys/devices/$path/ieee80211" ] && {
-               phy="$(ls /sys/devices/$path/ieee80211 | grep -m 1 phy)"
-               [ -n "$phy" ] && return 0
+       [ -n "$path" ] && {
+               for phy in /sys/devices/$path/ieee80211/phy*; do
+                       [ -e "$phy" ] && {
+                               phy="${phy##*/}"
+                               return 0
+                       }
+               done
        }
        [ -n "$macaddr" ] && {
                for phy in $(ls /sys/class/ieee80211 2>/dev/null); do
@@ -462,11 +493,43 @@ mac80211_setup_supplicant() {
        wpa_supplicant_run "$ifname" ${hostapd_ctrl:+-H $hostapd_ctrl}
 }
 
+mac80211_setup_adhoc_htmode() {
+       case "$htmode" in
+               VHT20|HT20) ibss_htmode=HT20;;
+               HT40*|VHT40|VHT80|VHT160)
+                       case "$hwmode" in
+                               a)
+                                       case "$(( ($channel / 4) % 2 ))" in
+                                               1) ibss_htmode="HT40+" ;;
+                                               0) ibss_htmode="HT40-";;
+                                       esac
+                               ;;
+                               *)
+                                       case "$htmode" in
+                                               HT40+) ibss_htmode="HT40+";;
+                                               HT40-) ibss_htmode="HT40-";;
+                                               *)
+                                                       if [ "$channel" -lt 7 ]; then
+                                                               ibss_htmode="HT40+"
+                                                       else
+                                                               ibss_htmode="HT40-"
+                                                       fi
+                                               ;;
+                                       esac
+                               ;;
+                       esac
+                       [ "$auto_channel" -gt 0 ] && ibss_htmode="HT40+"
+               ;;
+               *) ibss_htmode="" ;;
+       esac
+
+}
+
 mac80211_setup_adhoc() {
        json_get_vars bssid ssid key mcast_rate
 
        keyspec=
-       [ "$auth_type" == "wep" ] && {
+       [ "$auth_type" = "wep" ] && {
                set_default key 1
                case "$key" in
                        [1234])
@@ -489,13 +552,13 @@ mac80211_setup_adhoc() {
 
        brstr=
        for br in $basic_rate_list; do
-               hostapd_add_rate brstr "$br"
+               wpa_supplicant_add_rate brstr "$br"
        done
 
        mcval=
-       [ -n "$mcast_rate" ] && hostapd_add_rate mcval "$mcast_rate"
+       [ -n "$mcast_rate" ] && wpa_supplicant_add_rate mcval "$mcast_rate"
 
-       iw dev "$ifname" ibss join "$ssid" $freq $htmode fixed-freq $bssid \
+       iw dev "$ifname" ibss join "$ssid" $freq $ibss_htmode fixed-freq $bssid \
                ${beacon_int:+beacon-interval $beacon_int} \
                ${brstr:+basic-rates $brstr} \
                ${mcval:+mcast-rate $mcval} \
@@ -545,6 +608,7 @@ mac80211_setup_vif() {
                ;;
                adhoc)
                        wireless_vif_parse_encryption
+                       mac80211_setup_adhoc_htmode
                        if [ "$wpa" -gt 0 -o "$auto_channel" -gt 0 ]; then
                                mac80211_setup_supplicant || failed=1
                        else
@@ -586,7 +650,7 @@ drv_mac80211_setup() {
                country chanbw distance \
                txpower antenna_gain \
                rxantenna txantenna \
-               frag rts beacon_int
+               frag rts beacon_int htmode
        json_get_values basic_rate_list basic_rate
        json_select ..