summaryrefslogtreecommitdiff
path: root/drivers/net/wireless/virtual
diff options
context:
space:
mode:
authorAloka Dixit <quic_alokad@quicinc.com>2022-12-06 03:50:40 +0300
committerJohannes Berg <johannes.berg@intel.com>2023-03-22 15:55:03 +0300
commit0dd45ebc08de2449efe1a0908147796856a5f824 (patch)
treef234cbc42ec2f4244f6a016ba1315ff26135bd36 /drivers/net/wireless/virtual
parentc4f4d9f7e7f0a7af82b086354c9277fc8446fe9c (diff)
downloadlinux-0dd45ebc08de2449efe1a0908147796856a5f824.tar.xz
wifi: mac80211_hwsim: EMA support
Add support enhanced multi-BSS advertisements (EMA) for profile periodicity up to 3 beacons. Signed-off-by: Aloka Dixit <quic_alokad@quicinc.com> Link: https://lore.kernel.org/r/20221206005040.3177-5-quic_alokad@quicinc.com Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Diffstat (limited to 'drivers/net/wireless/virtual')
-rw-r--r--drivers/net/wireless/virtual/mac80211_hwsim.c25
1 files changed, 21 insertions, 4 deletions
diff --git a/drivers/net/wireless/virtual/mac80211_hwsim.c b/drivers/net/wireless/virtual/mac80211_hwsim.c
index 58ceabbd1550..2aa7b740b1ce 100644
--- a/drivers/net/wireless/virtual/mac80211_hwsim.c
+++ b/drivers/net/wireless/virtual/mac80211_hwsim.c
@@ -2125,11 +2125,27 @@ static void mac80211_hwsim_beacon_tx(void *arg, u8 *mac,
if (vif->mbssid_tx_vif && vif->mbssid_tx_vif != vif)
return;
- skb = ieee80211_beacon_get(hw, vif, link_id);
- if (!skb)
- return;
+ if (vif->bss_conf.ema_ap) {
+ struct ieee80211_ema_beacons *ema;
+ u8 i = 0;
+
+ ema = ieee80211_beacon_get_template_ema_list(hw, vif, link_id);
+ if (!ema || !ema->cnt)
+ return;
+
+ for (i = 0; i < ema->cnt; i++) {
+ __mac80211_hwsim_beacon_tx(link_conf, data, hw, vif,
+ ema->bcn[i].skb);
+ ema->bcn[i].skb = NULL; /* Already freed */
+ }
+ ieee80211_beacon_free_ema_list(ema);
+ } else {
+ skb = ieee80211_beacon_get(hw, vif, link_id);
+ if (!skb)
+ return;
- __mac80211_hwsim_beacon_tx(link_conf, data, hw, vif, skb);
+ __mac80211_hwsim_beacon_tx(link_conf, data, hw, vif, skb);
+ }
while ((skb = ieee80211_get_buffered_bc(hw, vif)) != NULL) {
mac80211_hwsim_tx_frame(hw, skb,
@@ -4409,6 +4425,7 @@ static int mac80211_hwsim_new_radio(struct genl_info *info,
}
hw->wiphy->mbssid_max_interfaces = 8;
+ hw->wiphy->ema_max_profile_periodicity = 3;
data->rx_rssi = DEFAULT_RX_RSSI;