提交 213ed579 编写于 作者: S Sara Sharon 提交者: Johannes Berg

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: NSara Sharon <sara.sharon@intel.com>
Signed-off-by: NJohannes Berg <johannes.berg@intel.com>
上级 7011ba58
...@@ -4315,6 +4315,11 @@ struct cfg80211_pmsr_capabilities { ...@@ -4315,6 +4315,11 @@ struct cfg80211_pmsr_capabilities {
* @txq_memory_limit: configuration internal TX queue memory limit * @txq_memory_limit: configuration internal TX queue memory limit
* @txq_quantum: configuration of internal TX queue scheduler quantum * @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.
*
* @pmsr_capa: peer measurement capabilities * @pmsr_capa: peer measurement capabilities
*/ */
struct wiphy { struct wiphy {
...@@ -4455,6 +4460,9 @@ struct wiphy { ...@@ -4455,6 +4460,9 @@ struct wiphy {
u32 txq_memory_limit; u32 txq_memory_limit;
u32 txq_quantum; u32 txq_quantum;
u8 support_mbssid:1,
support_only_he_mbssid:1;
const struct cfg80211_pmsr_capabilities *pmsr_capa; const struct cfg80211_pmsr_capabilities *pmsr_capa;
char priv[0] __aligned(NETDEV_ALIGN); char priv[0] __aligned(NETDEV_ALIGN);
......
...@@ -1417,6 +1417,11 @@ static void cfg80211_parse_mbssid_data(struct wiphy *wiphy, ...@@ -1417,6 +1417,11 @@ static void cfg80211_parse_mbssid_data(struct wiphy *wiphy,
return; return;
if (!cfg80211_find_ie(WLAN_EID_MULTIPLE_BSSID, ie, ielen)) if (!cfg80211_find_ie(WLAN_EID_MULTIPLE_BSSID, ie, ielen))
return; 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); new_ie = kmalloc(IEEE80211_MAX_DATA_LEN, gfp);
if (!new_ie) if (!new_ie)
...@@ -1701,7 +1706,11 @@ cfg80211_inform_bss_frame_data(struct wiphy *wiphy, ...@@ -1701,7 +1706,11 @@ cfg80211_inform_bss_frame_data(struct wiphy *wiphy,
res = cfg80211_inform_single_bss_frame_data(wiphy, data, mgmt, res = cfg80211_inform_single_bss_frame_data(wiphy, data, mgmt,
len, NULL, gfp); 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; return res;
/* process each non-transmitting bss */ /* process each non-transmitting bss */
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册