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

Johannes Berg
2024-01-31T11:53:46Z

On Tue, 2024-01-30 at 10:08 -0800, greearb@candelatech.com wrote:
> 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.

Arguably, the current behaviour is in line with the documentation of
BSS_CHANGED_HE_BSS_COLOR ... but I would tend to agree that
enabling/disabling coloring should be covered by it as well. Lorenzo?

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

That's not a great thing for a commit message to say ...

> 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;
> }
>

Not sure how this isn't updating the color itself, Lorenzo?

johannes