mac80211: fix HT mode selection for ad-hoc
authorFelix Fietkau <nbd@openwrt.org>
Mon, 22 Dec 2014 21:46:52 +0000 (21:46 +0000)
committerFelix Fietkau <nbd@openwrt.org>
Mon, 22 Dec 2014 21:46:52 +0000 (21:46 +0000)
Signed-off-by: Felix Fietkau <nbd@openwrt.org>
Backport of r43769

SVN-Revision: 43770

package/kernel/mac80211/files/lib/netifd/wireless/mac80211.sh

index e6241deb5f8c115033cc9264fe9b2830e1e77c56..a464cc941d006ac61f3c174ff5367acaaedb0e96 100644 (file)
@@ -88,7 +88,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
@@ -505,7 +505,36 @@ mac80211_setup_adhoc() {
        mcval=
        [ -n "$mcast_rate" ] && hostapd_add_rate mcval "$mcast_rate"
 
-       iw dev "$ifname" ibss join "$ssid" $freq $htmode fixed-freq $bssid \
+       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
+
+       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} \
@@ -596,7 +625,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 ..