Do not report NL80211_STA_INFO_BSS_PARAM for station information generated on AP interfaces, as beacon interval, DTIM period, CTS protection, short preamble and short slot time are AP BSS configuration parameters already managed by userspace. Retain BSS parameter reporting for STA interfaces, where these parameters describe the BSS to which the station is associated. Use the per-link BSS configuration when populating BSS parameters for STA link station information. Signed-off-by: Aaradhana Sahu --- v3: -Change the subject and commit message from "wifi: mac80211: Report parent AP BSS parameters for AP_VLAN" -Stop reporting BSS parameters in station information for AP interfaces. -Remove the BSS configuration lookup v2: -Remove unnecessary sdata->bss NULL check. --- net/mac80211/sta_info.c | 49 ++++++++++++++++++++++++----------------- 1 file changed, 29 insertions(+), 20 deletions(-) diff --git a/net/mac80211/sta_info.c b/net/mac80211/sta_info.c index fdf00cbf49d8..cc6dbfc9cad1 100644 --- a/net/mac80211/sta_info.c +++ b/net/mac80211/sta_info.c @@ -2864,7 +2864,6 @@ static void sta_set_link_sinfo(struct sta_info *sta, link_sinfo); link_sinfo->filled |= BIT_ULL(NL80211_STA_INFO_INACTIVE_TIME) | - BIT_ULL(NL80211_STA_INFO_BSS_PARAM) | BIT_ULL(NL80211_STA_INFO_RX_DROP_MISC); if (sdata->vif.type == NL80211_IFTYPE_STATION) { @@ -3037,15 +3036,20 @@ static void sta_set_link_sinfo(struct sta_info *sta, link_id); } - link_sinfo->bss_param.flags = 0; - if (sdata->vif.bss_conf.use_cts_prot) - link_sinfo->bss_param.flags |= BSS_PARAM_FLAGS_CTS_PROT; - if (sdata->vif.bss_conf.use_short_preamble) - link_sinfo->bss_param.flags |= BSS_PARAM_FLAGS_SHORT_PREAMBLE; - if (sdata->vif.bss_conf.use_short_slot) - link_sinfo->bss_param.flags |= BSS_PARAM_FLAGS_SHORT_SLOT_TIME; - link_sinfo->bss_param.dtim_period = link->conf->dtim_period; - link_sinfo->bss_param.beacon_interval = link->conf->beacon_int; + if (sdata->vif.type == NL80211_IFTYPE_STATION) { + link_sinfo->bss_param.flags = 0; + if (link->conf->use_cts_prot) + link_sinfo->bss_param.flags |= BSS_PARAM_FLAGS_CTS_PROT; + if (link->conf->use_short_preamble) + link_sinfo->bss_param.flags |= + BSS_PARAM_FLAGS_SHORT_PREAMBLE; + if (link->conf->use_short_slot) + link_sinfo->bss_param.flags |= + BSS_PARAM_FLAGS_SHORT_SLOT_TIME; + link_sinfo->bss_param.dtim_period = link->conf->dtim_period; + link_sinfo->bss_param.beacon_interval = link->conf->beacon_int; + link_sinfo->filled |= BIT_ULL(NL80211_STA_INFO_BSS_PARAM); + } thr = sta_get_expected_throughput(sta); if (!thr && (link_sinfo->filled & BIT_ULL(NL80211_STA_INFO_TX_BITRATE))) @@ -3099,7 +3103,6 @@ void sta_set_sinfo(struct sta_info *sta, struct station_info *sinfo, drv_sta_statistics(local, sdata, &sta->sta, sinfo); sinfo->filled |= BIT_ULL(NL80211_STA_INFO_INACTIVE_TIME) | BIT_ULL(NL80211_STA_INFO_STA_FLAGS) | - BIT_ULL(NL80211_STA_INFO_BSS_PARAM) | BIT_ULL(NL80211_STA_INFO_CONNECTED_TIME) | BIT_ULL(NL80211_STA_INFO_ASSOC_AT_BOOTTIME) | BIT_ULL(NL80211_STA_INFO_RX_DROP_MISC); @@ -3267,15 +3270,21 @@ void sta_set_sinfo(struct sta_info *sta, struct station_info *sinfo, sta_set_mesh_sinfo(sta, sinfo); #endif - sinfo->bss_param.flags = 0; - if (sdata->vif.bss_conf.use_cts_prot) - sinfo->bss_param.flags |= BSS_PARAM_FLAGS_CTS_PROT; - if (sdata->vif.bss_conf.use_short_preamble) - sinfo->bss_param.flags |= BSS_PARAM_FLAGS_SHORT_PREAMBLE; - if (sdata->vif.bss_conf.use_short_slot) - sinfo->bss_param.flags |= BSS_PARAM_FLAGS_SHORT_SLOT_TIME; - sinfo->bss_param.dtim_period = sdata->vif.bss_conf.dtim_period; - sinfo->bss_param.beacon_interval = sdata->vif.bss_conf.beacon_int; + if (sdata->vif.type == NL80211_IFTYPE_STATION) { + sinfo->bss_param.flags = 0; + if (sdata->vif.bss_conf.use_cts_prot) + sinfo->bss_param.flags |= BSS_PARAM_FLAGS_CTS_PROT; + if (sdata->vif.bss_conf.use_short_preamble) + sinfo->bss_param.flags |= + BSS_PARAM_FLAGS_SHORT_PREAMBLE; + if (sdata->vif.bss_conf.use_short_slot) + sinfo->bss_param.flags |= + BSS_PARAM_FLAGS_SHORT_SLOT_TIME; + sinfo->bss_param.dtim_period = sdata->vif.bss_conf.dtim_period; + sinfo->bss_param.beacon_interval = + sdata->vif.bss_conf.beacon_int; + sinfo->filled |= BIT_ULL(NL80211_STA_INFO_BSS_PARAM); + } sinfo->sta_flags.set = 0; sinfo->sta_flags.mask = BIT(NL80211_STA_FLAG_AUTHORIZED) | base-commit: 42a9fb3382fc2573e92f41d203b095d9a372cfc9 -- 2.34.1