mac80211: fix HT mode selection for ad-hoc
[openwrt.git] / package / kernel / mac80211 / files / lib / netifd / wireless / mac80211.sh
index d8fa07e..3a7ad3b 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
@@ -523,7 +523,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} \
@@ -614,7 +643,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 ..