aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorImre Kaloz <kaloz@openwrt.org>2016-10-13 12:59:10 +0200
committerImre Kaloz <kaloz@openwrt.org>2016-10-13 12:59:10 +0200
commitb41b40c00d7d8e582c6af78f481412644a5b2a7d (patch)
treef4650d974b43c3fce2244746a7e883a57e596921
parent8a1f7c9d5588e7424cf28387e53e1abb4914d3d4 (diff)
downloadupstream-b41b40c00d7d8e582c6af78f481412644a5b2a7d.tar.gz
upstream-b41b40c00d7d8e582c6af78f481412644a5b2a7d.tar.bz2
upstream-b41b40c00d7d8e582c6af78f481412644a5b2a7d.zip
hostapd: add interoperability workaround for 80+80 and 160 MHz channels
backport of f9fc9c242fa62c214dc4a92bd89ca9a36bc8308c Signed-off-by: Imre Kaloz <kaloz@openwrt.org>
-rw-r--r--package/network/services/hostapd/patches/700-160mhz_interop_workaround.patch48
1 files changed, 48 insertions, 0 deletions
diff --git a/package/network/services/hostapd/patches/700-160mhz_interop_workaround.patch b/package/network/services/hostapd/patches/700-160mhz_interop_workaround.patch
new file mode 100644
index 0000000000..75ece9b6cc
--- /dev/null
+++ b/package/network/services/hostapd/patches/700-160mhz_interop_workaround.patch
@@ -0,0 +1,48 @@
+VHT: Add an interoperability workaround for 80+80 and 160 MHz channels
+
+Number of deployed 80 MHz capable VHT stations that do not support 80+80
+and 160 MHz bandwidths seem to misbehave when trying to connect to an AP
+that advertises 80+80 or 160 MHz channel bandwidth in the VHT Operation
+element. To avoid such issues with deployed devices, modify the design
+based on newly proposed IEEE 802.11 standard changes.
+
+This allows poorly implemented VHT 80 MHz stations to connect with the
+AP in 80 MHz mode. 80+80 and 160 MHz capable stations need to support
+the new workaround mechanism to allow full bandwidth to be used.
+However, there are more or less no impacted station with 80+80/160
+capability deployed.
+
+Signed-off-by: Jouni Malinen <jouni@qca.qualcomm.com>
+
+diff --git a/src/ap/ieee802_11_vht.c b/src/ap/ieee802_11_vht.c
+index 3236016..e923094 100644
+--- a/src/ap/ieee802_11_vht.c
++++ b/src/ap/ieee802_11_vht.c
+@@ -82,6 +82,27 @@ u8 * hostapd_eid_vht_operation(struct hostapd_data *hapd, u8 *eid)
+
+ oper->vht_op_info_chwidth = hapd->iconf->vht_oper_chwidth;
+
++ if (hapd->iconf->vht_oper_chwidth == 2) {
++ /*
++ * Convert 160 MHz channel width to new style as interop
++ * workaround.
++ */
++ oper->vht_op_info_chwidth = 1;
++ oper->vht_op_info_chan_center_freq_seg1_idx =
++ oper->vht_op_info_chan_center_freq_seg0_idx;
++ if (hapd->iconf->channel <
++ hapd->iconf->vht_oper_centr_freq_seg0_idx)
++ oper->vht_op_info_chan_center_freq_seg0_idx -= 8;
++ else
++ oper->vht_op_info_chan_center_freq_seg0_idx += 8;
++ } else if (hapd->iconf->vht_oper_chwidth == 3) {
++ /*
++ * Convert 80+80 MHz channel width to new style as interop
++ * workaround.
++ */
++ oper->vht_op_info_chwidth = 1;
++ }
++
+ /* VHT Basic MCS set comes from hw */
+ /* Hard code 1 stream, MCS0-7 is a min Basic VHT MCS rates */
+ oper->vht_basic_mcs_set = host_to_le16(0xfffc);