a17d6f61615693c64389306f2c452f386e2ed18e
[openwrt/openwrt.git] / package / kernel / mac80211 / patches / subsys / 800-mac80211-mask-nested-A-MSDU-support-for-mesh.patch
1 From 313d8c18385f10957402b475f9b0c209ceab6c5a Mon Sep 17 00:00:00 2001
2 From: David Bauer <mail@david-bauer.net>
3 Date: Fri, 8 Oct 2021 00:25:19 +0200
4 Subject: [PATCH] mac80211: mask nested A-MSDU support for mesh
5
6 mac80211 incorrectly processes A-MSDUs contained in A-MPDU frames. This
7 results in dropped packets and severely impacted throughput.
8
9 As a workaround, don't indicate support for A-MSDUs contained in
10 A-MPDUs. This improves throughput over mesh links by factor 10.
11
12 Ref: https://github.com/openwrt/mt76/issues/450
13
14 Signed-off-by: David Bauer <mail@david-bauer.net>
15 ---
16 net/mac80211/agg-rx.c | 4 +++-
17 1 file changed, 3 insertions(+), 1 deletion(-)
18
19 --- a/net/mac80211/agg-rx.c
20 +++ b/net/mac80211/agg-rx.c
21 @@ -251,7 +251,11 @@ static void ieee80211_send_addba_resp(st
22 mgmt->u.action.u.addba_resp.action_code = WLAN_ACTION_ADDBA_RESP;
23 mgmt->u.action.u.addba_resp.dialog_token = dialog_token;
24
25 - capab = u16_encode_bits(amsdu, IEEE80211_ADDBA_PARAM_AMSDU_MASK);
26 + capab = 0;
27 +#ifdef CPTCFG_MAC80211_MESH
28 + if (!sta->mesh)
29 +#endif
30 + capab = u16_encode_bits(amsdu, IEEE80211_ADDBA_PARAM_AMSDU_MASK);
31 capab |= u16_encode_bits(policy, IEEE80211_ADDBA_PARAM_POLICY_MASK);
32 capab |= u16_encode_bits(tid, IEEE80211_ADDBA_PARAM_TID_MASK);
33 capab |= u16_encode_bits(buf_size, IEEE80211_ADDBA_PARAM_BUF_SIZE_MASK);