summaryrefslogtreecommitdiffstats
path: root/sys/net80211/ieee80211_output.c
diff options
context:
space:
mode:
authoradrian <adrian@FreeBSD.org>2011-08-24 08:53:33 +0000
committeradrian <adrian@FreeBSD.org>2011-08-24 08:53:33 +0000
commit8d7a219360c66422861aa7acca3c42cc447d7c7e (patch)
treededa8baaa9ae08e868808011949e5fd65c5f3657 /sys/net80211/ieee80211_output.c
parent27255f3ff70af7978fb31a48fb987132402949eb (diff)
downloadFreeBSD-src-8d7a219360c66422861aa7acca3c42cc447d7c7e.zip
FreeBSD-src-8d7a219360c66422861aa7acca3c42cc447d7c7e.tar.gz
This patch fixes beacon frame sequence number generation. The code
didn't set a sequence number; it didn't show up earlier because the hardware most people use for hostap (ie, AR5212 series stuff) sets the sequence numbers up in hardware. Later hardware (AR5416, etc) which can do 11n and aggregation require sequence numbers to be generated in software. Submitted by: paradyse@gmail.com Approved by: re (kib)
Diffstat (limited to 'sys/net80211/ieee80211_output.c')
-rw-r--r--sys/net80211/ieee80211_output.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/sys/net80211/ieee80211_output.c b/sys/net80211/ieee80211_output.c
index 6020144..bcd3c2b 100644
--- a/sys/net80211/ieee80211_output.c
+++ b/sys/net80211/ieee80211_output.c
@@ -2792,6 +2792,8 @@ ieee80211_beacon_update(struct ieee80211_node *ni,
struct ieee80211com *ic = ni->ni_ic;
int len_changed = 0;
uint16_t capinfo;
+ struct ieee80211_frame *wh;
+ ieee80211_seq seqno;
IEEE80211_LOCK(ic);
/*
@@ -2823,6 +2825,12 @@ ieee80211_beacon_update(struct ieee80211_node *ni,
return 1; /* just assume length changed */
}
+ wh = mtod(m, struct ieee80211_frame *);
+ seqno = ni->ni_txseqs[IEEE80211_NONQOS_TID]++;
+ *(uint16_t *)&wh->i_seq[0] =
+ htole16(seqno << IEEE80211_SEQ_SEQ_SHIFT);
+ M_SEQNO_SET(m, seqno);
+
/* XXX faster to recalculate entirely or just changes? */
capinfo = ieee80211_getcapinfo(vap, ni->ni_chan);
*bo->bo_caps = htole16(capinfo);
OpenPOWER on IntegriCloud