aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/net/mac80211/sta_info.h
diff options
context:
space:
mode:
authorSara Sharon <sara.sharon@intel.com>2016-01-28 16:19:25 +0200
committerJohannes Berg <johannes.berg@intel.com>2016-02-24 09:04:31 +0100
commit06470f7468c8b6c95e72ebda803a61a99f4ee446 (patch)
tree3caa5f30aad82c42d12616aa6336ba3279d64bbb /net/mac80211/sta_info.h
parentmac80211: change ieee80211_rx_reorder_ready() arguments (diff)
downloadwireguard-linux-06470f7468c8b6c95e72ebda803a61a99f4ee446.tar.xz
wireguard-linux-06470f7468c8b6c95e72ebda803a61a99f4ee446.zip
mac80211: add API to allow filtering frames in BA sessions
If any frames are dropped that are part of a BA session, the reorder buffer will "indefinitely" (until the timeout) wait for them to come in (or a BAR moving the window) and won't release frames after them. This means it isn't possible to filter frames within a BA session in firmware. Introduce an API function that allows such filtering. Calling this function will move the BA window forward to the new SSN, and allows marking frames after the SSN as having been filtered, so any future reordering activity will release frames while skipping the holes. Signed-off-by: Sara Sharon <sara.sharon@intel.com> Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com> Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Diffstat (limited to 'net/mac80211/sta_info.h')
-rw-r--r--net/mac80211/sta_info.h3
1 files changed, 3 insertions, 0 deletions
diff --git a/net/mac80211/sta_info.h b/net/mac80211/sta_info.h
index f4d38994ecee..053f5c4fa495 100644
--- a/net/mac80211/sta_info.h
+++ b/net/mac80211/sta_info.h
@@ -168,6 +168,8 @@ struct tid_ampdu_tx {
*
* @reorder_buf: buffer to reorder incoming aggregated MPDUs. An MPDU may be an
* A-MSDU with individually reported subframes.
+ * @reorder_buf_filtered: bitmap indicating where there are filtered frames in
+ * the reorder buffer that should be ignored when releasing frames
* @reorder_time: jiffies when skb was added
* @session_timer: check if peer keeps Tx-ing on the TID (by timeout value)
* @reorder_timer: releases expired frames from the reorder buffer.
@@ -195,6 +197,7 @@ struct tid_ampdu_tx {
struct tid_ampdu_rx {
struct rcu_head rcu_head;
spinlock_t reorder_lock;
+ u64 reorder_buf_filtered;
struct sk_buff_head *reorder_buf;
unsigned long *reorder_time;
struct timer_list session_timer;