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.
This commit is contained in:
parent
9ab173de82
commit
50cfec0eb3
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=222682
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user