mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-08 11:50:43 +09:00
UPSTREAM: cfg80211: parse multi-bssid only if HW supports it
Parsing and exposing nontransmitted APs is problematic
when underlying HW doesn't support it. Do it only if
driver indicated support. Allow HE restriction as well,
since the HE spec defined the exact manner that Multiple
BSSID set should behave. APs that not support the HE
spec will have less predictable Multiple BSSID set
support/behavior
Signed-off-by: Sara Sharon <sara.sharon@intel.com>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
(cherry picked from commit 213ed579d3)
Bug: 154523213
Signed-off-by: Connor O'Brien <connoro@google.com>
Change-Id: Ib691778353cce81d6251dca65177ef19010b4ae3
This commit is contained in:
committed by
Connor O'Brien
parent
4b215175c4
commit
8f2a99bad0
@@ -4111,6 +4111,11 @@ struct wiphy_iftype_ext_capab {
|
||||
* @txq_limit: configuration of internal TX queue frame limit
|
||||
* @txq_memory_limit: configuration internal TX queue memory limit
|
||||
* @txq_quantum: configuration of internal TX queue scheduler quantum
|
||||
*
|
||||
* @support_mbssid: can HW support association with nontransmitted AP
|
||||
* @support_only_he_mbssid: don't parse MBSSID elements if it is not
|
||||
* HE AP, in order to avoid compatibility issues.
|
||||
* @support_mbssid must be set for this to have any effect.
|
||||
*/
|
||||
struct wiphy {
|
||||
/* assign these fields before you register the wiphy */
|
||||
@@ -4249,6 +4254,9 @@ struct wiphy {
|
||||
u32 txq_memory_limit;
|
||||
u32 txq_quantum;
|
||||
|
||||
u8 support_mbssid:1,
|
||||
support_only_he_mbssid:1;
|
||||
|
||||
char priv[0] __aligned(NETDEV_ALIGN);
|
||||
};
|
||||
|
||||
|
||||
@@ -1422,6 +1422,11 @@ static void cfg80211_parse_mbssid_data(struct wiphy *wiphy,
|
||||
return;
|
||||
if (!cfg80211_find_ie(WLAN_EID_MULTIPLE_BSSID, ie, ielen))
|
||||
return;
|
||||
if (!wiphy->support_mbssid)
|
||||
return;
|
||||
if (wiphy->support_only_he_mbssid &&
|
||||
!cfg80211_find_ext_ie(WLAN_EID_EXT_HE_CAPABILITY, ie, ielen))
|
||||
return;
|
||||
|
||||
new_ie = kmalloc(IEEE80211_MAX_DATA_LEN, gfp);
|
||||
if (!new_ie)
|
||||
@@ -1706,7 +1711,11 @@ cfg80211_inform_bss_frame_data(struct wiphy *wiphy,
|
||||
|
||||
res = cfg80211_inform_single_bss_frame_data(wiphy, data, mgmt,
|
||||
len, NULL, gfp);
|
||||
if (!res || !cfg80211_find_ie(WLAN_EID_MULTIPLE_BSSID, ie, ielen))
|
||||
if (!res || !wiphy->support_mbssid ||
|
||||
!cfg80211_find_ie(WLAN_EID_MULTIPLE_BSSID, ie, ielen))
|
||||
return res;
|
||||
if (wiphy->support_only_he_mbssid &&
|
||||
!cfg80211_find_ext_ie(WLAN_EID_EXT_HE_CAPABILITY, ie, ielen))
|
||||
return res;
|
||||
|
||||
/* process each non-transmitting bss */
|
||||
|
||||
Reference in New Issue
Block a user