--- a/net/mac80211/main.c +++ b/net/mac80211/main.c @@ -239,7 +239,9 @@ void ieee80211_bss_info_change_notify(st u32 changed) { struct ieee80211_local *local = sdata->local; + struct ieee80211_supported_band *sband; static const u8 zero[ETH_ALEN] = { 0 }; + struct sta_info *sta; if (!changed) return; @@ -269,6 +271,22 @@ void ieee80211_bss_info_change_notify(st switch (sdata->vif.type) { case NL80211_IFTYPE_AP: + if (!(changed & BSS_CHANGED_HT)) + break; + + sband = local->hw.wiphy->bands[local->hw.conf.channel->band]; + rcu_read_lock(); + list_for_each_entry(sta, &local->sta_list, list) { + if (sta->sdata != sdata && + (!sdata->bss || sta->sdata->bss != sdata->bss)) + continue; + + rate_control_rate_update(local, sband, sta, + IEEE80211_RC_HT_CHANGED, + local->_oper_channel_type); + } + rcu_read_unlock(); + break; case NL80211_IFTYPE_ADHOC: case NL80211_IFTYPE_WDS: case NL80211_IFTYPE_MESH_POINT: