[PATCH] mac80211: Ensure bss-coloring is always configured

greearb
2024-01-30T18:08:52Z

From: Ben Greear <greearb@candelatech.com>

Old code would not set it to disabled, just assumed that driver
would default to disabled. Change this to explicitly request
bss color be flushed on initial driver configuration.

And I think the beacon-change logic was slightly wrong, so adjust
that as well.

Signed-off-by: Ben Greear <greearb@candelatech.com>
---
net/mac80211/cfg.c | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/net/mac80211/cfg.c b/net/mac80211/cfg.c
index 1c7fb0959cfd..1a6c6c764cbc 100644
--- a/net/mac80211/cfg.c
+++ b/net/mac80211/cfg.c
@@ -1331,8 +1331,7 @@ static int ieee80211_start_ap(struct wiphy *wiphy, struct net_device *dev,
IEEE80211_HE_OPERATION_RTS_THRESHOLD_MASK);
changed |= BSS_CHANGED_HE_OBSS_PD;

- if (params->beacon.he_bss_color.enabled)
- changed |= BSS_CHANGED_HE_BSS_COLOR;
+ changed |= BSS_CHANGED_HE_BSS_COLOR;
}

if (params->he_cap) {
@@ -1512,6 +1511,7 @@ static int ieee80211_change_beacon(struct wiphy *wiphy, struct net_device *dev,
int err;
struct ieee80211_bss_conf *link_conf;
u64 changed = 0;
+ bool color_en;

lockdep_assert_wiphy(wiphy);

@@ -1549,9 +1549,9 @@ static int ieee80211_change_beacon(struct wiphy *wiphy, struct net_device *dev,
return err;
changed |= err;

- if (beacon->he_bss_color_valid &&
- beacon->he_bss_color.enabled != link_conf->he_bss_color.enabled) {
- link_conf->he_bss_color.enabled = beacon->he_bss_color.enabled;
+ color_en = beacon->he_bss_color.enabled && beacon->he_bss_color_valid;
+ if (color_en != link_conf->he_bss_color.enabled) {
+ link_conf->he_bss_color.enabled = color_en;
changed |= BSS_CHANGED_HE_BSS_COLOR;
}

--
2.41.0