Commit eb87d3e0 authored by John Crispin's avatar John Crispin Committed by Johannes Berg

mac80211: notify non-transmitting BSS of color changes

When color change is triggered in multiple bssid case, allow
only for transmitting BSS, and when it changes its bss color,
notify the non transmitting BSSs also of the new bss color.
Signed-off-by: default avatarJohn Crispin <john@phrozen.org>
Co-developed-by: default avatarLavanya Suresh <lavaks@codeaurora.org>
Signed-off-by: default avatarLavanya Suresh <lavaks@codeaurora.org>
Co-developed-by: default avatarRameshkumar Sundaram <quic_ramess@quicinc.com>
Signed-off-by: default avatarRameshkumar Sundaram <quic_ramess@quicinc.com>
Link: https://lore.kernel.org/r/1637146647-16282-1-git-send-email-quic_ramess@quicinc.comSigned-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
parent dc530783
...@@ -4268,6 +4268,21 @@ ieee80211_color_change_bss_config_notify(struct ieee80211_sub_if_data *sdata, ...@@ -4268,6 +4268,21 @@ ieee80211_color_change_bss_config_notify(struct ieee80211_sub_if_data *sdata,
changed |= BSS_CHANGED_HE_BSS_COLOR; changed |= BSS_CHANGED_HE_BSS_COLOR;
ieee80211_bss_info_change_notify(sdata, changed); ieee80211_bss_info_change_notify(sdata, changed);
if (!sdata->vif.bss_conf.nontransmitted && sdata->vif.mbssid_tx_vif) {
struct ieee80211_sub_if_data *child;
mutex_lock(&sdata->local->iflist_mtx);
list_for_each_entry(child, &sdata->local->interfaces, list) {
if (child != sdata && child->vif.mbssid_tx_vif == &sdata->vif) {
child->vif.bss_conf.he_bss_color.color = color;
child->vif.bss_conf.he_bss_color.enabled = enable;
ieee80211_bss_info_change_notify(child,
BSS_CHANGED_HE_BSS_COLOR);
}
}
mutex_unlock(&sdata->local->iflist_mtx);
}
} }
static int ieee80211_color_change_finalize(struct ieee80211_sub_if_data *sdata) static int ieee80211_color_change_finalize(struct ieee80211_sub_if_data *sdata)
...@@ -4352,6 +4367,9 @@ ieee80211_color_change(struct wiphy *wiphy, struct net_device *dev, ...@@ -4352,6 +4367,9 @@ ieee80211_color_change(struct wiphy *wiphy, struct net_device *dev,
sdata_assert_lock(sdata); sdata_assert_lock(sdata);
if (sdata->vif.bss_conf.nontransmitted)
return -EINVAL;
mutex_lock(&local->mtx); mutex_lock(&local->mtx);
/* don't allow another color change if one is already active or if csa /* don't allow another color change if one is already active or if csa
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment