From f9fc9c242fa62c214dc4a92bd89ca9a36bc8308c Mon Sep 17 00:00:00 2001 From: Imre Kaloz Date: Thu, 13 Oct 2016 12:44:08 +0200 Subject: [PATCH] hostapd: add interoperability workaround for 80+80 and 160 MHz channels Signed-off-by: Imre Kaloz --- .../700-160mhz_interop_workaround.patch | 48 +++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 package/network/services/hostapd/patches/700-160mhz_interop_workaround.patch 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 + +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); -- 2.35.1