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", |