mac80211: always set the buf_size in AddBA req to 64
Advertising reordering window in ADDBA less than 64 can crash some APs, an example is LinkSys WRT120N (with FW v1.0.07 build 002 Jun 18 2012). On the other hand, a driver may need to limit Tx A-MPDU size for its own reasons, like specific HW limitations. Signed-off-by: Gregory Greenman <gregory.greenman@intel.com> Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com> Signed-off-by: Johannes Berg <johannes.berg@intel.com>
This commit is contained in:
parent
5ad11b50fd
commit
ac0621971a
|
@ -2003,8 +2003,10 @@ enum ieee80211_hw_flags {
|
|||
* it shouldn't be set.
|
||||
*
|
||||
* @max_tx_aggregation_subframes: maximum number of subframes in an
|
||||
* aggregate an HT driver will transmit, used by the peer as a
|
||||
* hint to size its reorder buffer.
|
||||
* aggregate an HT driver will transmit. Though ADDBA will advertise
|
||||
* a constant value of 64 as some older APs can crash if the window
|
||||
* size is smaller (an example is LinkSys WRT120N with FW v1.0.07
|
||||
* build 002 Jun 18 2012).
|
||||
*
|
||||
* @offchannel_tx_hw_queue: HW queue ID to use for offchannel TX
|
||||
* (if %IEEE80211_HW_QUEUE_CONTROL is set)
|
||||
|
|
|
@ -500,7 +500,7 @@ void ieee80211_tx_ba_session_handle_start(struct sta_info *sta, int tid)
|
|||
/* send AddBA request */
|
||||
ieee80211_send_addba_request(sdata, sta->sta.addr, tid,
|
||||
tid_tx->dialog_token, start_seq_num,
|
||||
local->hw.max_tx_aggregation_subframes,
|
||||
IEEE80211_MAX_AMPDU_BUF,
|
||||
tid_tx->timeout);
|
||||
}
|
||||
|
||||
|
@ -926,6 +926,7 @@ void ieee80211_process_addba_resp(struct ieee80211_local *local,
|
|||
amsdu = capab & IEEE80211_ADDBA_PARAM_AMSDU_MASK;
|
||||
tid = (capab & IEEE80211_ADDBA_PARAM_TID_MASK) >> 2;
|
||||
buf_size = (capab & IEEE80211_ADDBA_PARAM_BUF_SIZE_MASK) >> 6;
|
||||
buf_size = min(buf_size, local->hw.max_tx_aggregation_subframes);
|
||||
|
||||
mutex_lock(&sta->ampdu_mlme.mtx);
|
||||
|
||||
|
|
Loading…
Reference in New Issue