Commit 3b3ec3d5 authored by Shaul Triebitz's avatar Shaul Triebitz Committed by Johannes Berg

mac80211: check the correct bit for EMA AP

An AP supporting EMA (Enhanced Multi-BSSID advertisement) should set
bit 83 in the extended capabilities IE (9.4.2.26 in the 802.11ax D5 spec).
So the *3rd* bit of the 10th byte should be checked.
Also, in one place, the wrong byte was checked.
(cfg80211_find_ie returns a pointer to the beginning of the IE,
 so the data really starts at ie[2], so the 10th byte
 should be ie[12]. To avoid this confusion, use cfg80211_find_elem
 instead).
Signed-off-by: default avatarShaul Triebitz <shaul.triebitz@intel.com>
Link: https://lore.kernel.org/r/20200528213443.4316121fa2a3.I9745582f8d41ad8e689dac0fefcd70b276d7c1ea@changeidSigned-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
parent 57fa5e85
...@@ -3082,7 +3082,7 @@ enum ieee80211_tdls_actioncode { ...@@ -3082,7 +3082,7 @@ enum ieee80211_tdls_actioncode {
#define WLAN_EXT_CAPA10_OBSS_NARROW_BW_RU_TOLERANCE_SUPPORT BIT(7) #define WLAN_EXT_CAPA10_OBSS_NARROW_BW_RU_TOLERANCE_SUPPORT BIT(7)
/* Defines support for enhanced multi-bssid advertisement*/ /* Defines support for enhanced multi-bssid advertisement*/
#define WLAN_EXT_CAPA11_EMA_SUPPORT BIT(1) #define WLAN_EXT_CAPA11_EMA_SUPPORT BIT(3)
/* TDLS specific payload type in the LLC/SNAP header */ /* TDLS specific payload type in the LLC/SNAP header */
#define WLAN_TDLS_SNAP_RFTYPE 0x2 #define WLAN_TDLS_SNAP_RFTYPE 0x2
......
...@@ -5596,7 +5596,7 @@ int ieee80211_mgd_assoc(struct ieee80211_sub_if_data *sdata, ...@@ -5596,7 +5596,7 @@ int ieee80211_mgd_assoc(struct ieee80211_sub_if_data *sdata,
assoc_data->timeout_started = true; assoc_data->timeout_started = true;
assoc_data->need_beacon = true; assoc_data->need_beacon = true;
} else if (beacon_ies) { } else if (beacon_ies) {
const u8 *ie; const struct element *elem;
u8 dtim_count = 0; u8 dtim_count = 0;
ieee80211_get_dtim(beacon_ies, &dtim_count, ieee80211_get_dtim(beacon_ies, &dtim_count,
...@@ -5613,15 +5613,15 @@ int ieee80211_mgd_assoc(struct ieee80211_sub_if_data *sdata, ...@@ -5613,15 +5613,15 @@ int ieee80211_mgd_assoc(struct ieee80211_sub_if_data *sdata,
sdata->vif.bss_conf.sync_dtim_count = dtim_count; sdata->vif.bss_conf.sync_dtim_count = dtim_count;
} }
ie = cfg80211_find_ext_ie(WLAN_EID_EXT_MULTIPLE_BSSID_CONFIGURATION, elem = cfg80211_find_ext_elem(WLAN_EID_EXT_MULTIPLE_BSSID_CONFIGURATION,
beacon_ies->data, beacon_ies->len); beacon_ies->data, beacon_ies->len);
if (ie && ie[1] >= 3) if (elem && elem->datalen >= 3)
sdata->vif.bss_conf.profile_periodicity = ie[4]; sdata->vif.bss_conf.profile_periodicity = elem->data[2];
ie = cfg80211_find_ie(WLAN_EID_EXT_CAPABILITY, elem = cfg80211_find_elem(WLAN_EID_EXT_CAPABILITY,
beacon_ies->data, beacon_ies->len); beacon_ies->data, beacon_ies->len);
if (ie && ie[1] >= 11 && if (elem && elem->datalen >= 11 &&
(ie[10] & WLAN_EXT_CAPA11_EMA_SUPPORT)) (elem->data[10] & WLAN_EXT_CAPA11_EMA_SUPPORT))
sdata->vif.bss_conf.ema_ap = true; sdata->vif.bss_conf.ema_ap = true;
} else { } else {
assoc_data->timeout = jiffies; assoc_data->timeout = jiffies;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment