mac80211: indicate support for multiple BSSID
Set multi-bssid support flags according to driver support. Signed-off-by: Sara Sharon <sara.sharon@intel.com> Signed-off-by: Johannes Berg <johannes.berg@intel.com>
This commit is contained in:
parent
78ac51f815
commit
caf56338c2
@ -2657,6 +2657,11 @@ enum ieee80211_tdls_actioncode {
|
||||
*/
|
||||
#define WLAN_EXT_CAPA1_EXT_CHANNEL_SWITCHING BIT(2)
|
||||
|
||||
/* Multiple BSSID capability is set in the 6th bit of 3rd byte of the
|
||||
* @WLAN_EID_EXT_CAPABILITY information element
|
||||
*/
|
||||
#define WLAN_EXT_CAPA3_MULTI_BSSID_SUPPORT BIT(6)
|
||||
|
||||
/* TDLS capabilities in the the 4th byte of @WLAN_EID_EXT_CAPABILITY */
|
||||
#define WLAN_EXT_CAPA4_TDLS_BUFFER_STA BIT(4)
|
||||
#define WLAN_EXT_CAPA4_TDLS_PEER_PSM BIT(5)
|
||||
|
@ -2234,6 +2234,11 @@ struct ieee80211_txq {
|
||||
* @IEEE80211_HW_TX_STATUS_NO_AMPDU_LEN: Driver does not report accurate A-MPDU
|
||||
* length in tx status information
|
||||
*
|
||||
* @IEEE80211_HW_SUPPORTS_MULTI_BSSID: Hardware supports multi BSSID
|
||||
*
|
||||
* @IEEE80211_HW_SUPPORTS_ONLY_HE_MULTI_BSSID: Hardware supports multi BSSID
|
||||
* only for HE APs. Applies if @IEEE80211_HW_SUPPORTS_MULTI_BSSID is set.
|
||||
*
|
||||
* @NUM_IEEE80211_HW_FLAGS: number of hardware flags, used for sizing arrays
|
||||
*/
|
||||
enum ieee80211_hw_flags {
|
||||
@ -2283,6 +2288,8 @@ enum ieee80211_hw_flags {
|
||||
IEEE80211_HW_SUPPORTS_VHT_EXT_NSS_BW,
|
||||
IEEE80211_HW_STA_MMPDU_TXQ,
|
||||
IEEE80211_HW_TX_STATUS_NO_AMPDU_LEN,
|
||||
IEEE80211_HW_SUPPORTS_MULTI_BSSID,
|
||||
IEEE80211_HW_SUPPORTS_ONLY_HE_MULTI_BSSID,
|
||||
|
||||
/* keep last, obviously */
|
||||
NUM_IEEE80211_HW_FLAGS
|
||||
|
@ -3,7 +3,7 @@
|
||||
*
|
||||
* Copyright 2007 Johannes Berg <johannes@sipsolutions.net>
|
||||
* Copyright 2013-2014 Intel Mobile Communications GmbH
|
||||
* Copyright (C) 2018 Intel Corporation
|
||||
* Copyright (C) 2018 - 2019 Intel Corporation
|
||||
*
|
||||
* GPLv2
|
||||
*
|
||||
@ -219,6 +219,8 @@ static const char *hw_flag_names[] = {
|
||||
FLAG(SUPPORTS_VHT_EXT_NSS_BW),
|
||||
FLAG(STA_MMPDU_TXQ),
|
||||
FLAG(TX_STATUS_NO_AMPDU_LEN),
|
||||
FLAG(SUPPORTS_MULTI_BSSID),
|
||||
FLAG(SUPPORTS_ONLY_HE_MULTI_BSSID),
|
||||
#undef FLAG
|
||||
};
|
||||
|
||||
|
@ -4,7 +4,7 @@
|
||||
* Copyright 2006-2007 Jiri Benc <jbenc@suse.cz>
|
||||
* Copyright 2013-2014 Intel Mobile Communications GmbH
|
||||
* Copyright (C) 2017 Intel Deutschland GmbH
|
||||
* Copyright (C) 2018 Intel Corporation
|
||||
* Copyright (C) 2018 - 2019 Intel Corporation
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
@ -1112,6 +1112,17 @@ int ieee80211_register_hw(struct ieee80211_hw *hw)
|
||||
if (ieee80211_hw_check(&local->hw, CHANCTX_STA_CSA))
|
||||
local->ext_capa[0] |= WLAN_EXT_CAPA1_EXT_CHANNEL_SWITCHING;
|
||||
|
||||
/* mac80211 supports multi BSSID, if the driver supports it */
|
||||
if (ieee80211_hw_check(&local->hw, SUPPORTS_MULTI_BSSID)) {
|
||||
local->hw.wiphy->support_mbssid = true;
|
||||
if (ieee80211_hw_check(&local->hw,
|
||||
SUPPORTS_ONLY_HE_MULTI_BSSID))
|
||||
local->hw.wiphy->support_only_he_mbssid = true;
|
||||
else
|
||||
local->ext_capa[2] |=
|
||||
WLAN_EXT_CAPA3_MULTI_BSSID_SUPPORT;
|
||||
}
|
||||
|
||||
local->hw.wiphy->max_num_csa_counters = IEEE80211_MAX_CSA_COUNTERS_NUM;
|
||||
|
||||
result = wiphy_register(local->hw.wiphy);
|
||||
|
@ -813,6 +813,21 @@ static void ieee80211_send_assoc(struct ieee80211_sub_if_data *sdata)
|
||||
}
|
||||
}
|
||||
|
||||
/* Set MBSSID support for HE AP if needed */
|
||||
if (ieee80211_hw_check(&local->hw, SUPPORTS_ONLY_HE_MULTI_BSSID) &&
|
||||
!(ifmgd->flags & IEEE80211_STA_DISABLE_HE) && assoc_data->ie_len) {
|
||||
struct element *elem;
|
||||
|
||||
/* we know it's writable, cast away the const */
|
||||
elem = (void *)cfg80211_find_elem(WLAN_EID_EXT_CAPABILITY,
|
||||
assoc_data->ie,
|
||||
assoc_data->ie_len);
|
||||
|
||||
/* We can probably assume both always true */
|
||||
if (elem && elem->datalen >= 3)
|
||||
elem->data[2] |= WLAN_EXT_CAPA3_MULTI_BSSID_SUPPORT;
|
||||
}
|
||||
|
||||
/* if present, add any custom IEs that go before HT */
|
||||
if (assoc_data->ie_len) {
|
||||
static const u8 before_ht[] = {
|
||||
|
Loading…
Reference in New Issue
Block a user