openwrt: mask nested A-MSDU support for mesh
This disables A-MSDU support on mesh-links. This restores throughput on mesh-links established between broken (ath10k) and correct (mt76) implementations of mesh A-MSDU. This patch can be dropped when switching to the next OpenWrt release, as proper fixes have been applied. Link: https://www.spinics.net/lists/linux-wireless/msg232410.html Link: https://github.com/openwrt/mt76/issues/450 Signed-off-by: David Bauer <mail@david-bauer.net>
This commit is contained in:
parent
979dd354fa
commit
ecf74db1e7
@ -0,0 +1,52 @@
|
|||||||
|
From: David Bauer <mail@david-bauer.net>
|
||||||
|
Date: Fri, 8 Oct 2021 00:30:23 +0200
|
||||||
|
Subject: 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>
|
||||||
|
(cherry picked from commit f96744ba6b2fd444f4f7575d234c7579bd3030cd)
|
||||||
|
|
||||||
|
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 0000000000000000000000000000000000000000..415c6dfb803639cd726ee3f9b35359712b3e075d
|
||||||
|
--- /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);
|
Loading…
Reference in New Issue
Block a user