summaryrefslogtreecommitdiffstats
path: root/sys/net80211/ieee80211_sta.c
diff options
context:
space:
mode:
authorsam <sam@FreeBSD.org>2008-09-21 23:00:19 +0000
committersam <sam@FreeBSD.org>2008-09-21 23:00:19 +0000
commit7a8139bec34979455320162a624d9f5762a864d0 (patch)
tree24722386b7e72f294b811c4f1cbee461b32b26ae /sys/net80211/ieee80211_sta.c
parent50dd888a5f6605eebf5956acf6ab3c87e4e8a81e (diff)
downloadFreeBSD-src-7a8139bec34979455320162a624d9f5762a864d0.zip
FreeBSD-src-7a8139bec34979455320162a624d9f5762a864d0.tar.gz
Cleanup AMPDU handling:
For receive: o explicitly tag rx frames w/ M_AMPDU instead of passing frames through the reorder processing according to the node having HT and the frame being QoS data o relax ieee80211_ampdu_reorder asserts to allow any frame to be passed in, unsuitable frames are returned to the caller for normal processing; this permits drivers that cannot inspect the PLCP to mark all data frames as potential ampdu candidates with only a small penalty o add M_AMPDU_MPDU to identify frames resubmitted from the reorder q For transmit: o tag aggregation candidates with M_AMPDU_MPDU o fix the QoS ack policy set in ampdu subframes; we only support immediate BA streams which should be marked for "normal ack" to get implicit block ack behaviour; interestingly certain vendor parts BA'd frames with the 11e BA ack policy set o do not assign a sequence # to aggregation candidates; this must be done when frames are submitted for transmit (NB: this can/will be handled better when aggregation is pulled up to net80211)
Diffstat (limited to 'sys/net80211/ieee80211_sta.c')
-rw-r--r--sys/net80211/ieee80211_sta.c22
1 files changed, 9 insertions, 13 deletions
diff --git a/sys/net80211/ieee80211_sta.c b/sys/net80211/ieee80211_sta.c
index af25bb6..d98c6dd 100644
--- a/sys/net80211/ieee80211_sta.c
+++ b/sys/net80211/ieee80211_sta.c
@@ -494,14 +494,14 @@ sta_input(struct ieee80211_node *ni, struct mbuf *m,
uint8_t *bssid;
uint16_t rxseq;
- if (m->m_flags & M_AMPDU) {
+ if (m->m_flags & M_AMPDU_MPDU) {
/*
* Fastpath for A-MPDU reorder q resubmission. Frames
- * w/ M_AMPDU marked have already passed through here
- * but were received out of order and been held on the
- * reorder queue. When resubmitted they are marked
- * with the M_AMPDU flag and we can bypass most of the
- * normal processing.
+ * w/ M_AMPDU_MPDU marked have already passed through
+ * here but were received out of order and been held on
+ * the reorder queue. When resubmitted they are marked
+ * with the M_AMPDU_MPDU flag and we can bypass most of
+ * the normal processing.
*/
wh = mtod(m, struct ieee80211_frame *);
type = IEEE80211_FC0_TYPE_DATA;
@@ -595,16 +595,12 @@ sta_input(struct ieee80211_node *ni, struct mbuf *m,
goto out; /* XXX */
}
/*
- * Handle A-MPDU re-ordering. The station must be
- * associated and negotiated HT. The frame must be
- * a QoS frame (not QoS null data) and not previously
- * processed for A-MPDU re-ordering. If the frame is
- * to be processed directly then ieee80211_ampdu_reorder
+ * Handle A-MPDU re-ordering. If the frame is to be
+ * processed directly then ieee80211_ampdu_reorder
* will return 0; otherwise it has consumed the mbuf
* and we should do nothing more with it.
*/
- if ((ni->ni_flags & IEEE80211_NODE_HT) &&
- subtype == IEEE80211_FC0_SUBTYPE_QOS &&
+ if ((m->m_flags & M_AMPDU) &&
(dir == IEEE80211_FC1_DIR_FROMDS ||
dir == IEEE80211_FC1_DIR_DSTODS) &&
ieee80211_ampdu_reorder(ni, m) != 0) {
OpenPOWER on IntegriCloud