aboutsummaryrefslogtreecommitdiff
path: root/sys/net80211/ieee80211_wds.c
diff options
context:
space:
mode:
authorAdrian Chadd <adrian@FreeBSD.org>2017-05-20 00:43:52 +0000
committerAdrian Chadd <adrian@FreeBSD.org>2017-05-20 00:43:52 +0000
commit85c4e67075a5e814710497d55fa6b283155f069f (patch)
tree84c4036a7454e0a06ea1ca622bb01dca6d73dbd7 /sys/net80211/ieee80211_wds.c
parent9a1452026ed2efd55c1bbc5a61137cffded86d1c (diff)
downloadsrc-85c4e67075a5e814710497d55fa6b283155f069f.tar.gz
src-85c4e67075a5e814710497d55fa6b283155f069f.zip
[net80211] prepare for A-MSDU/A-MPDU offload crypto / sequence number checking.
When doing AMSDU offload, the driver (for now!) presents 802.11 frames with the same sequence number and crypto sequence number / IV values up to the stack. But, this will trip afoul over the sequence number detection. So drivers now have a way to signify that a frame is part of an offloaded AMSDU group, so we can just ensure that we pass those frames up to the stack. The logic will be a bit messy - the TL;DR will be that if it's part of the previously seen sequence number then it belongs in the same burst. But if we get a repeat of the same sequence number (eg we sent an ACK but the receiver didn't hear it) then we shouldn't be passing those frames up. So, we can't just say "all subframes go up", we need to track whether we've seen the end of a burst of frames for the given sequence number or not, so we know whether to actually pass them up or not. The first part of doing all of this is to ensure the ieee80211_rx_stats struct is available in the RX sequence number check path and the RX ampdu reorder path. So, start by passing the pointer into these functions to avoid doing another lookup. The actual support will come in a subsequent commit once I know the functionality actually works!
Notes
Notes: svn path=/head/; revision=318566
Diffstat (limited to 'sys/net80211/ieee80211_wds.c')
-rw-r--r--sys/net80211/ieee80211_wds.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/sys/net80211/ieee80211_wds.c b/sys/net80211/ieee80211_wds.c
index 038f41292ed2..e445bfed8b94 100644
--- a/sys/net80211/ieee80211_wds.c
+++ b/sys/net80211/ieee80211_wds.c
@@ -504,7 +504,7 @@ wds_input(struct ieee80211_node *ni, struct mbuf *m,
if (IEEE80211_QOS_HAS_SEQ(wh) &&
TID_TO_WME_AC(tid) >= WME_AC_VI)
ic->ic_wme.wme_hipri_traffic++;
- if (! ieee80211_check_rxseq(ni, wh, wh->i_addr1))
+ if (! ieee80211_check_rxseq(ni, wh, wh->i_addr1, rxs))
goto out;
}
switch (type) {
@@ -540,7 +540,7 @@ wds_input(struct ieee80211_node *ni, struct mbuf *m,
* and we should do nothing more with it.
*/
if ((m->m_flags & M_AMPDU) &&
- ieee80211_ampdu_reorder(ni, m) != 0) {
+ ieee80211_ampdu_reorder(ni, m, rxs) != 0) {
m = NULL;
goto out;
}