summaryrefslogtreecommitdiffstats
path: root/sys/net80211/ieee80211_output.c
diff options
context:
space:
mode:
authorbschmidt <bschmidt@FreeBSD.org>2011-06-04 14:28:09 +0000
committerbschmidt <bschmidt@FreeBSD.org>2011-06-04 14:28:09 +0000
commitaaeb38ff0e4c77afa7369e4049ca66f0af06380e (patch)
tree06ddbf4709fab58ae64680b24a8fda6dfa67d0e4 /sys/net80211/ieee80211_output.c
parent9723861d87ecf52c81dcb461b5406eec139e4dc5 (diff)
downloadFreeBSD-src-aaeb38ff0e4c77afa7369e4049ca66f0af06380e.zip
FreeBSD-src-aaeb38ff0e4c77afa7369e4049ca66f0af06380e.tar.gz
Data frames sent over the mgmt path might be part of a TX aggr session
too. In that case don't fiddle with the seqno as drivers are supposed to handle that. Currently only the powersave feature does sent QoS-null-data frames before and after a background scan which must be handled correctly. Due to this being quite rare we don't fiddle around with starting of aggr sessions.
Diffstat (limited to 'sys/net80211/ieee80211_output.c')
-rw-r--r--sys/net80211/ieee80211_output.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/sys/net80211/ieee80211_output.c b/sys/net80211/ieee80211_output.c
index b689310..6020144 100644
--- a/sys/net80211/ieee80211_output.c
+++ b/sys/net80211/ieee80211_output.c
@@ -516,6 +516,7 @@ ieee80211_send_setup(
{
#define WH4(wh) ((struct ieee80211_frame_addr4 *)wh)
struct ieee80211vap *vap = ni->ni_vap;
+ struct ieee80211_tx_ampdu *tap;
struct ieee80211_frame *wh = mtod(m, struct ieee80211_frame *);
ieee80211_seq seqno;
@@ -583,9 +584,15 @@ ieee80211_send_setup(
}
*(uint16_t *)&wh->i_dur[0] = 0;
- seqno = ni->ni_txseqs[tid]++;
- *(uint16_t *)&wh->i_seq[0] = htole16(seqno << IEEE80211_SEQ_SEQ_SHIFT);
- M_SEQNO_SET(m, seqno);
+ tap = &ni->ni_tx_ampdu[TID_TO_WME_AC(tid)];
+ if (tid != IEEE80211_NONQOS_TID && IEEE80211_AMPDU_RUNNING(tap))
+ m->m_flags |= M_AMPDU_MPDU;
+ else {
+ seqno = ni->ni_txseqs[tid]++;
+ *(uint16_t *)&wh->i_seq[0] =
+ htole16(seqno << IEEE80211_SEQ_SEQ_SHIFT);
+ M_SEQNO_SET(m, seqno);
+ }
if (IEEE80211_IS_MULTICAST(wh->i_addr1))
m->m_flags |= M_MCAST;
OpenPOWER on IntegriCloud