Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit dcbe73ca authored by Pradeep Kumar Chitrapu's avatar Pradeep Kumar Chitrapu Committed by Johannes Berg
Browse files

mac80211: notify driver for change in multicast rates



With drivers implementing rate control in driver or firmware
rate_control_send_low() may not get called, and thus the
driver needs to know about changes in the multicast rate.

Add and use a new BSS change flag for this.

Signed-off-by: default avatarPradeep Kumar Chitrapu <pradeepc@codeaurora.org>
[rewrite commit message]
Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
parent 13cf6dec
Loading
Loading
Loading
Loading
+3 −0
Original line number Original line Diff line number Diff line
@@ -302,6 +302,8 @@ struct ieee80211_vif_chanctx_switch {
 * @BSS_CHANGED_MU_GROUPS: VHT MU-MIMO group id or user position changed
 * @BSS_CHANGED_MU_GROUPS: VHT MU-MIMO group id or user position changed
 * @BSS_CHANGED_KEEP_ALIVE: keep alive options (idle period or protected
 * @BSS_CHANGED_KEEP_ALIVE: keep alive options (idle period or protected
 *	keep alive) changed.
 *	keep alive) changed.
 * @BSS_CHANGED_MCAST_RATE: Multicast Rate setting changed for this interface
 *
 */
 */
enum ieee80211_bss_change {
enum ieee80211_bss_change {
	BSS_CHANGED_ASSOC		= 1<<0,
	BSS_CHANGED_ASSOC		= 1<<0,
@@ -329,6 +331,7 @@ enum ieee80211_bss_change {
	BSS_CHANGED_OCB                 = 1<<22,
	BSS_CHANGED_OCB                 = 1<<22,
	BSS_CHANGED_MU_GROUPS		= 1<<23,
	BSS_CHANGED_MU_GROUPS		= 1<<23,
	BSS_CHANGED_KEEP_ALIVE		= 1<<24,
	BSS_CHANGED_KEEP_ALIVE		= 1<<24,
	BSS_CHANGED_MCAST_RATE		= 1<<25,


	/* when adding here, make sure to change ieee80211_reconfig */
	/* when adding here, make sure to change ieee80211_reconfig */
};
};
+2 −0
Original line number Original line Diff line number Diff line
@@ -2313,6 +2313,8 @@ static int ieee80211_set_mcast_rate(struct wiphy *wiphy, struct net_device *dev,
	memcpy(sdata->vif.bss_conf.mcast_rate, rate,
	memcpy(sdata->vif.bss_conf.mcast_rate, rate,
	       sizeof(int) * NUM_NL80211_BANDS);
	       sizeof(int) * NUM_NL80211_BANDS);


	ieee80211_bss_info_change_notify(sdata, BSS_CHANGED_MCAST_RATE);

	return 0;
	return 0;
}
}


+1 −1
Original line number Original line Diff line number Diff line
@@ -1839,7 +1839,7 @@ int ieee80211_ibss_join(struct ieee80211_sub_if_data *sdata,
		  IEEE80211_HT_OP_MODE_PROTECTION_NONHT_MIXED
		  IEEE80211_HT_OP_MODE_PROTECTION_NONHT_MIXED
		| IEEE80211_HT_PARAM_RIFS_MODE;
		| IEEE80211_HT_PARAM_RIFS_MODE;


	changed |= BSS_CHANGED_HT;
	changed |= BSS_CHANGED_HT | BSS_CHANGED_MCAST_RATE;
	ieee80211_bss_info_change_notify(sdata, changed);
	ieee80211_bss_info_change_notify(sdata, changed);


	sdata->smps_mode = IEEE80211_SMPS_OFF;
	sdata->smps_mode = IEEE80211_SMPS_OFF;
+2 −1
Original line number Original line Diff line number Diff line
@@ -880,7 +880,8 @@ int ieee80211_start_mesh(struct ieee80211_sub_if_data *sdata)
		      BSS_CHANGED_BEACON_ENABLED |
		      BSS_CHANGED_BEACON_ENABLED |
		      BSS_CHANGED_HT |
		      BSS_CHANGED_HT |
		      BSS_CHANGED_BASIC_RATES |
		      BSS_CHANGED_BASIC_RATES |
		      BSS_CHANGED_BEACON_INT;
		      BSS_CHANGED_BEACON_INT |
		      BSS_CHANGED_MCAST_RATE;


	local->fif_other_bss++;
	local->fif_other_bss++;
	/* mesh ifaces must set allmulti to forward mcast traffic */
	/* mesh ifaces must set allmulti to forward mcast traffic */
+2 −1
Original line number Original line Diff line number Diff line
@@ -1968,7 +1968,8 @@ int ieee80211_reconfig(struct ieee80211_local *local)
			  BSS_CHANGED_CQM |
			  BSS_CHANGED_CQM |
			  BSS_CHANGED_QOS |
			  BSS_CHANGED_QOS |
			  BSS_CHANGED_IDLE |
			  BSS_CHANGED_IDLE |
			  BSS_CHANGED_TXPOWER;
			  BSS_CHANGED_TXPOWER |
			  BSS_CHANGED_MCAST_RATE;


		if (sdata->vif.mu_mimo_owner)
		if (sdata->vif.mu_mimo_owner)
			changed |= BSS_CHANGED_MU_GROUPS;
			changed |= BSS_CHANGED_MU_GROUPS;