Browse Source

mac80211: fix HT mode selection for ad-hoc

Signed-off-by: Felix Fietkau <[email protected]>

SVN-Revision: 43769
Felix Fietkau 11 years ago
parent
commit
ff3464eb30
1 changed files with 32 additions and 3 deletions
  1. 32 3
      package/kernel/mac80211/files/lib/netifd/wireless/mac80211.sh

+ 32 - 3
package/kernel/mac80211/files/lib/netifd/wireless/mac80211.sh

@@ -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 ..