mirror of
https://github.com/breeze303/openwrt-ipq.git
synced 2025-12-17 00:11:05 +00:00
NSS patches should always get applied last as to avoid fuzzing issues with upstream patches. Also cleanup patches that introduced spaces as indents vs. tabs Signed-off-by: Sean Khan <datapronix@protonmail.com> ath11k_nss: drop upstreamed patch A variation of this patch 'wifi: mac80211: Use flexible array in struct ieee80211_tim_ie' was upstreamed in commit 'e6e4d90b69027d74ba7e9a0a586b95a5714e10c0'. Remove it to avoid compilation issues. Signed-off-by: Sean Khan <datapronix@protonmail.com> ath11k_nss: Fix patch conflict Signed-off-by: Sean Khan <datapronix@protonmail.com>
113 lines
3.5 KiB
Diff
113 lines
3.5 KiB
Diff
From a76238143218ea348cec4b5d26fe9411338ae09e Mon Sep 17 00:00:00 2001
|
|
From: Aaradhana Sahu <quic_aarasahu@quicinc.com>
|
|
Date: Fri, 6 Oct 2023 18:19:53 +0530
|
|
Subject: [PATCH] mac80211: fix mesh ping issue
|
|
|
|
Signed-off-by: Aaradhana Sahu <quic_aarasahu@quicinc.com>
|
|
---
|
|
net/mac80211/rx.c | 68 +++--------------------------------------------
|
|
1 file changed, 4 insertions(+), 64 deletions(-)
|
|
|
|
--- a/net/mac80211/rx.c
|
|
+++ b/net/mac80211/rx.c
|
|
@@ -4651,16 +4651,14 @@ void ieee80211_check_fast_rx(struct sta_
|
|
|
|
break;
|
|
case NL80211_IFTYPE_MESH_POINT:
|
|
- /* Not required for NSS mode */
|
|
- if (ieee80211_hw_check(&local->hw, SUPPORTS_NSS_OFFLOAD))
|
|
- goto clear;
|
|
/* Note: da and sa offs are not static, determine in fast rx path */
|
|
|
|
fastrx.expected_ds_bits = cpu_to_le16(IEEE80211_FCTL_FROMDS |
|
|
IEEE80211_FCTL_TODS);
|
|
-
|
|
- fastrx.internal_forward = 0;
|
|
+ fastrx.da_offs = offsetof(struct ieee80211_hdr, addr3);
|
|
+ fastrx.sa_offs = offsetof(struct ieee80211_hdr, addr4);
|
|
break;
|
|
+
|
|
default:
|
|
goto clear;
|
|
}
|
|
@@ -4882,10 +4880,7 @@ static bool ieee80211_invoke_fast_rx(str
|
|
u8 sa[ETH_ALEN];
|
|
} addrs __aligned(2);
|
|
struct ieee80211_sta_rx_stats *stats;
|
|
- struct ieee80211s_hdr *mesh_hdr;
|
|
- struct mesh_path *mppath;
|
|
u8 da_offs = fast_rx->da_offs, sa_offs = fast_rx->sa_offs;
|
|
- struct ieee80211_sub_if_data *sdata = rx->sdata;
|
|
|
|
/* for parallel-rx, we need to have DUP_VALIDATED, otherwise we write
|
|
* to a common data structure; drivers can implement that per queue
|
|
@@ -4935,37 +4930,6 @@ static bool ieee80211_invoke_fast_rx(str
|
|
snap_offs += IEEE80211_CCMP_HDR_LEN;
|
|
}
|
|
|
|
- /* Find corresponding offsets for mesh hdr */
|
|
- if (ieee80211_vif_is_mesh(&sdata->vif)) {
|
|
- if (status->rx_flags & IEEE80211_RX_AMSDU)
|
|
- return false;
|
|
-
|
|
- /* All mesh data frames needs to be QoS Data */
|
|
- if (unlikely(!ieee80211_is_data_qos(hdr->frame_control)))
|
|
- return false;
|
|
-
|
|
- /* TODO forwarding not handled yet in fast rx */
|
|
- if (!ether_addr_equal(fast_rx->vif_addr, hdr->addr3))
|
|
- return false;
|
|
-
|
|
- /* Check if Min Mesh hdr is present */
|
|
- if (!pskb_may_pull(skb, hdrlen + 6))
|
|
- goto drop;
|
|
-
|
|
- /* Goto mesh hdr, located at snap offs compared to AP/STA */
|
|
- mesh_hdr = (struct ieee80211s_hdr *) (skb->data + snap_offs);
|
|
-
|
|
- /* Only Ext Mesh hdr supported in this path now */
|
|
- if ((mesh_hdr->flags & MESH_FLAGS_AE) != MESH_FLAGS_AE_A5_A6)
|
|
- return false;
|
|
-
|
|
- /* Point to eaddr1 and eaddr2 */
|
|
- da_offs = snap_offs + ETH_ALEN;
|
|
- sa_offs = da_offs + ETH_ALEN;
|
|
-
|
|
- snap_offs += sizeof(struct ieee80211s_hdr);
|
|
- }
|
|
-
|
|
if (!ieee80211_vif_is_mesh(&rx->sdata->vif) &&
|
|
!(status->rx_flags & IEEE80211_RX_AMSDU)) {
|
|
if (!pskb_may_pull(skb, snap_offs + sizeof(*payload)))
|
|
@@ -5003,30 +4967,6 @@ static bool ieee80211_invoke_fast_rx(str
|
|
return true;
|
|
}
|
|
|
|
- /* Update MPP table for the received packet */
|
|
- if (ieee80211_vif_is_mesh(&sdata->vif)) {
|
|
- char *proxied_addr, *mpp_addr;
|
|
-
|
|
- mpp_addr = hdr->addr4;
|
|
- proxied_addr = mesh_hdr->eaddr2;
|
|
-
|
|
- /* Update mpp for the SA */
|
|
- rcu_read_lock();
|
|
- mppath = mpp_path_lookup(sdata, proxied_addr);
|
|
- if (!mppath) {
|
|
- mpp_path_add(sdata, proxied_addr, mpp_addr);
|
|
- } else {
|
|
- spin_lock_bh(&mppath->state_lock);
|
|
-
|
|
- if (!ether_addr_equal(mppath->mpp, mpp_addr))
|
|
- ether_addr_copy(mppath->mpp, mpp_addr);
|
|
-
|
|
- mppath->exp_time = jiffies;
|
|
- spin_unlock_bh(&mppath->state_lock);
|
|
- }
|
|
- rcu_read_unlock();
|
|
- }
|
|
-
|
|
/* do the header conversion - first grab the addresses */
|
|
ether_addr_copy(addrs.da, skb->data + da_offs);
|
|
ether_addr_copy(addrs.sa, skb->data + sa_offs);
|