nl80211: MBSSID and EMA support in AP mode
Add new attributes to configure support for multiple BSSID and advanced multi-BSSID advertisements (EMA) in AP mode. - NL80211_ATTR_MBSSID_CONFIG used for per interface configuration. - NL80211_ATTR_MBSSID_ELEMS used to MBSSID elements for beacons. Memory for the elements is allocated dynamically. This change frees the memory in existing functions which call nl80211_parse_beacon(), a comment is added to indicate the new references to do the same. Signed-off-by: John Crispin <john@phrozen.org> Co-developed-by: Aloka Dixit <alokad@codeaurora.org> Signed-off-by: Aloka Dixit <alokad@codeaurora.org> Link: https://lore.kernel.org/r/20210916025437.29138-2-alokad@codeaurora.org [don't leave ERR_PTR hanging around] Signed-off-by: Johannes Berg <johannes.berg@intel.com>
This commit is contained in:
committed by
Johannes Berg
parent
05075fe745
commit
dc1e3cb8da
@@ -1056,6 +1056,36 @@ struct cfg80211_crypto_settings {
|
||||
enum nl80211_sae_pwe_mechanism sae_pwe;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct cfg80211_mbssid_config - AP settings for multi bssid
|
||||
*
|
||||
* @tx_wdev: pointer to the transmitted interface in the MBSSID set
|
||||
* @index: index of this AP in the multi bssid group.
|
||||
* @ema: set to true if the beacons should be sent out in EMA mode.
|
||||
*/
|
||||
struct cfg80211_mbssid_config {
|
||||
struct wireless_dev *tx_wdev;
|
||||
u8 index;
|
||||
bool ema;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct cfg80211_mbssid_elems - Multiple BSSID elements
|
||||
*
|
||||
* @cnt: Number of elements in array %elems.
|
||||
*
|
||||
* @elem: Array of multiple BSSID element(s) to be added into Beacon frames.
|
||||
* @elem.data: Data for multiple BSSID elements.
|
||||
* @elem.len: Length of data.
|
||||
*/
|
||||
struct cfg80211_mbssid_elems {
|
||||
u8 cnt;
|
||||
struct {
|
||||
const u8 *data;
|
||||
size_t len;
|
||||
} elem[];
|
||||
};
|
||||
|
||||
/**
|
||||
* struct cfg80211_beacon_data - beacon data
|
||||
* @head: head portion of beacon (before TIM IE)
|
||||
@@ -1074,6 +1104,7 @@ struct cfg80211_crypto_settings {
|
||||
* @assocresp_ies_len: length of assocresp_ies in octets
|
||||
* @probe_resp_len: length of probe response template (@probe_resp)
|
||||
* @probe_resp: probe response template (AP mode only)
|
||||
* @mbssid_ies: multiple BSSID elements
|
||||
* @ftm_responder: enable FTM responder functionality; -1 for no change
|
||||
* (which also implies no change in LCI/civic location data)
|
||||
* @lci: Measurement Report element content, starting with Measurement Token
|
||||
@@ -1091,6 +1122,7 @@ struct cfg80211_beacon_data {
|
||||
const u8 *probe_resp;
|
||||
const u8 *lci;
|
||||
const u8 *civicloc;
|
||||
struct cfg80211_mbssid_elems *mbssid_ies;
|
||||
s8 ftm_responder;
|
||||
|
||||
size_t head_len, tail_len;
|
||||
@@ -1205,6 +1237,7 @@ enum cfg80211_ap_settings_flags {
|
||||
* @he_oper: HE operation IE (or %NULL if HE isn't enabled)
|
||||
* @fils_discovery: FILS discovery transmission parameters
|
||||
* @unsol_bcast_probe_resp: Unsolicited broadcast probe response parameters
|
||||
* @mbssid_config: AP settings for multiple bssid
|
||||
*/
|
||||
struct cfg80211_ap_settings {
|
||||
struct cfg80211_chan_def chandef;
|
||||
@@ -1237,6 +1270,7 @@ struct cfg80211_ap_settings {
|
||||
struct cfg80211_he_bss_color he_bss_color;
|
||||
struct cfg80211_fils_discovery fils_discovery;
|
||||
struct cfg80211_unsol_bcast_probe_resp unsol_bcast_probe_resp;
|
||||
struct cfg80211_mbssid_config mbssid_config;
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -5003,6 +5037,13 @@ struct wiphy_iftype_akm_suites {
|
||||
* %NL80211_TID_CONFIG_ATTR_RETRY_LONG attributes
|
||||
* @sar_capa: SAR control capabilities
|
||||
* @rfkill: a pointer to the rfkill structure
|
||||
*
|
||||
* @mbssid_max_interfaces: maximum number of interfaces supported by the driver
|
||||
* in a multiple BSSID set. This field must be set to a non-zero value
|
||||
* by the driver to advertise MBSSID support.
|
||||
* @mbssid_max_ema_profile_periodicity: maximum profile periodicity supported by
|
||||
* the driver. Setting this field to a non-zero value indicates that the
|
||||
* driver supports enhanced multi-BSSID advertisements (EMA AP).
|
||||
*/
|
||||
struct wiphy {
|
||||
struct mutex mtx;
|
||||
@@ -5147,6 +5188,9 @@ struct wiphy {
|
||||
|
||||
struct rfkill *rfkill;
|
||||
|
||||
u8 mbssid_max_interfaces;
|
||||
u8 ema_max_profile_periodicity;
|
||||
|
||||
char priv[] __aligned(NETDEV_ALIGN);
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user