diff options
author | David Bauer <mail@david-bauer.net> | 2021-10-08 00:30:23 +0200 |
---|---|---|
committer | David Bauer <mail@david-bauer.net> | 2022-10-02 23:04:38 +0200 |
commit | f96744ba6b2fd444f4f7575d234c7579bd3030cd (patch) | |
tree | 6f2cd67c3ecebfb14f72a12a38146cb7173a2dc9 | |
parent | 185541f50ff59c0a5e0663ad612f0f5eb31926cf (diff) | |
download | upstream-f96744ba6b2fd444f4f7575d234c7579bd3030cd.tar.gz upstream-f96744ba6b2fd444f4f7575d234c7579bd3030cd.tar.bz2 upstream-f96744ba6b2fd444f4f7575d234c7579bd3030cd.zip |
mac80211: mask nested A-MSDU support for mesh
mac80211 incorrectly processes A-MSDUs contained in A-MPDU frames. This
results in dropped packets and severely impacted throughput.
As a workaround, don't indicate support for A-MSDUs contained in
A-MPDUs. This improves throughput over mesh links by factor 10.
Ref: https://github.com/openwrt/mt76/issues/450
Signed-off-by: David Bauer <mail@david-bauer.net>
-rw-r--r-- | package/kernel/mac80211/patches/subsys/800-mac80211-mask-nested-A-MSDU-support-for-mesh.patch | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/package/kernel/mac80211/patches/subsys/800-mac80211-mask-nested-A-MSDU-support-for-mesh.patch b/package/kernel/mac80211/patches/subsys/800-mac80211-mask-nested-A-MSDU-support-for-mesh.patch new file mode 100644 index 0000000000..415c6dfb80 --- /dev/null +++ b/package/kernel/mac80211/patches/subsys/800-mac80211-mask-nested-A-MSDU-support-for-mesh.patch @@ -0,0 +1,31 @@ +From 313d8c18385f10957402b475f9b0c209ceab6c5a Mon Sep 17 00:00:00 2001 +From: David Bauer <mail@david-bauer.net> +Date: Fri, 8 Oct 2021 00:25:19 +0200 +Subject: [PATCH] mac80211: mask nested A-MSDU support for mesh + +mac80211 incorrectly processes A-MSDUs contained in A-MPDU frames. This +results in dropped packets and severely impacted throughput. + +As a workaround, don't indicate support for A-MSDUs contained in +A-MPDUs. This improves throughput over mesh links by factor 10. + +Ref: https://github.com/openwrt/mt76/issues/450 + +Signed-off-by: David Bauer <mail@david-bauer.net> +--- + net/mac80211/agg-rx.c | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +--- a/net/mac80211/agg-rx.c ++++ b/net/mac80211/agg-rx.c +@@ -251,7 +251,9 @@ static void ieee80211_send_addba_resp(st + mgmt->u.action.u.addba_resp.action_code = WLAN_ACTION_ADDBA_RESP; + mgmt->u.action.u.addba_resp.dialog_token = dialog_token; + +- capab = u16_encode_bits(amsdu, IEEE80211_ADDBA_PARAM_AMSDU_MASK); ++ capab = 0; ++ if (!sta->mesh) ++ capab = u16_encode_bits(amsdu, IEEE80211_ADDBA_PARAM_AMSDU_MASK); + capab |= u16_encode_bits(policy, IEEE80211_ADDBA_PARAM_POLICY_MASK); + capab |= u16_encode_bits(tid, IEEE80211_ADDBA_PARAM_TID_MASK); + capab |= u16_encode_bits(buf_size, IEEE80211_ADDBA_PARAM_BUF_SIZE_MASK); |