diff options
Diffstat (limited to 'net/mac80211/agg-rx.c')
| -rw-r--r-- | net/mac80211/agg-rx.c | 38 | 
1 files changed, 34 insertions, 4 deletions
diff --git a/net/mac80211/agg-rx.c b/net/mac80211/agg-rx.c index 31bf2586fb8..ced0abcfc05 100644 --- a/net/mac80211/agg-rx.c +++ b/net/mac80211/agg-rx.c @@ -127,6 +127,28 @@ void ieee80211_stop_rx_ba_session(struct ieee80211_vif *vif, u16 ba_rx_bitmap,  }  EXPORT_SYMBOL(ieee80211_stop_rx_ba_session); +void ieee80211_change_rx_ba_max_subframes(struct ieee80211_vif *vif, +					  const u8 *addr, +					  u8 max_subframes) +{ +	struct ieee80211_sub_if_data *sdata = vif_to_sdata(vif); +	struct sta_info *sta; + +	if (max_subframes == 0) +		return; + +	rcu_read_lock(); +	sta = sta_info_get_bss(sdata, addr); +	if (!sta) { +		rcu_read_unlock(); +		return; +	} +	sta->sta.max_rx_aggregation_subframes = max_subframes; +	ieee80211_queue_work(&sta->local->hw, &sta->ampdu_mlme.work); +	rcu_read_unlock(); +} +EXPORT_SYMBOL(ieee80211_change_rx_ba_max_subframes); +  /*   * After accepting the AddBA Request we activated a timer,   * resetting it after each frame that arrives from the originator. @@ -254,6 +276,12 @@ void ieee80211_process_addba_request(struct ieee80211_local *local,  		goto end_no_lock;  	} +	if (tid == 6 || tid == 7) { +		ht_dbg(sta->sdata, "ADDBA on VO AC TID %d - Deny request\n", +		       tid); +		goto end_no_lock; +	} +  	/* sanity check for incoming parameters:  	 * check if configuration can support the BA policy  	 * and if buffer size does not exceeds max value */ @@ -271,13 +299,15 @@ void ieee80211_process_addba_request(struct ieee80211_local *local,  	if (buf_size == 0)  		buf_size = IEEE80211_MAX_AMPDU_BUF; -	/* make sure the size doesn't exceed the maximum supported by the hw */ -	if (buf_size > local->hw.max_rx_aggregation_subframes) -		buf_size = local->hw.max_rx_aggregation_subframes; -  	/* examine state machine */  	mutex_lock(&sta->ampdu_mlme.mtx); +	/* make sure the size doesn't exceed the maximum supported by link */ +	if (buf_size > sta->sta.max_rx_aggregation_subframes) +		buf_size = sta->sta.max_rx_aggregation_subframes; + +	ht_dbg(sta->sdata, "AddBA Req buf_size=%d\n", buf_size); +  	if (sta->ampdu_mlme.tid_rx[tid]) {  		ht_dbg_ratelimited(sta->sdata,  				   "unexpected AddBA Req from %pM on tid %u\n",  |