Skip to content

Commit

Permalink
mac80211: agg-rx: Accept ADDBA request update if timeout did not change
Browse files Browse the repository at this point in the history
As there is no support for updating an existing ADDBA session with
a peer, we decline the request (while keeping the session active).
However, in case that the timeout did not change, there is no need
to decline the request, so modify the code to reply with status success
in such a case (this is useful for interoperability with APs that send an
ADDBA request update without changing the timeout value).

Signed-off-by: Ilan Peer <ilan.peer@intel.com>
Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
  • Loading branch information
Ilan Peer authored and Johannes Berg committed Feb 27, 2018
1 parent 9251a47 commit 21b7022
Showing 1 changed file with 12 additions and 2 deletions.
14 changes: 12 additions & 2 deletions net/mac80211/agg-rx.c
Original file line number Diff line number Diff line change
Expand Up @@ -298,13 +298,23 @@ void ___ieee80211_start_rx_ba_session(struct sta_info *sta,

if (test_bit(tid, sta->ampdu_mlme.agg_session_valid)) {
if (sta->ampdu_mlme.tid_rx_token[tid] == dialog_token) {
struct tid_ampdu_rx *tid_rx;

ht_dbg_ratelimited(sta->sdata,
"updated AddBA Req from %pM on tid %u\n",
sta->sta.addr, tid);
/* We have no API to update the timeout value in the
* driver so reject the timeout update.
* driver so reject the timeout update if the timeout
* changed. If if did not change, i.e., no real update,
* just reply with success.
*/
status = WLAN_STATUS_REQUEST_DECLINED;
rcu_read_lock();
tid_rx = rcu_dereference(sta->ampdu_mlme.tid_rx[tid]);
if (tid_rx && tid_rx->timeout == timeout)
status = WLAN_STATUS_SUCCESS;
else
status = WLAN_STATUS_REQUEST_DECLINED;
rcu_read_unlock();
goto end;
}

Expand Down

0 comments on commit 21b7022

Please sign in to comment.