2021-01-20 00:53:22

by Aloka Dixit

[permalink] [raw]
Subject: [PATCH V7 4/4] mac80211: CSA on non-transmitting interfaces

From: John Crispin <[email protected]>

Trigger ieee80211_csa_finish() on the non-transmitting interfaces when
CSA concludes on the tranmitting interface.

Modify offset in beacon generation to reflect multiple BSSID element
length.

Signed-off-by: John Crispin <[email protected]>
Signed-off-by: Aloka Dixit <[email protected]>
---
v7: No change
v6: CSA is triggered on all interface, not only transmitting.

net/mac80211/cfg.c | 11 +++++++++++
1 file changed, 11 insertions(+)

diff --git a/net/mac80211/cfg.c b/net/mac80211/cfg.c
index 9c4346f69a7b..11a22a3b9cab 100644
--- a/net/mac80211/cfg.c
+++ b/net/mac80211/cfg.c
@@ -3239,6 +3239,17 @@ void ieee80211_csa_finish(struct ieee80211_vif *vif)
{
struct ieee80211_sub_if_data *sdata = vif_to_sdata(vif);

+ if (sdata->vif.multiple_bssid.flags & IEEE80211_VIF_MBSS_TRANSMITTING) {
+ struct ieee80211_sub_if_data *child;
+
+ rcu_read_lock();
+ list_for_each_entry_rcu(child, &sdata->local->interfaces, list)
+ if (child->vif.multiple_bssid.parent == &sdata->vif)
+ ieee80211_queue_work(&child->local->hw,
+ &child->csa_finalize_work);
+ rcu_read_unlock();
+ }
+
ieee80211_queue_work(&sdata->local->hw,
&sdata->csa_finalize_work);
}
--
2.25.0