PERFORCE change 120231 for review
Sam Leffler
sam at FreeBSD.org
Wed May 23 02:40:38 UTC 2007
http://perforce.freebsd.org/chv.cgi?CH=120231
Change 120231 by sam at sam_laptop on 2007/05/23 02:40:30
Fix some BAR recv issues:
o discard retransmits
o discard frames w/ seq# in front of the window (as can
happen when the peer misses a BA and retransmits)
Noticed by: Foo Tang
Affected files ...
.. //depot/projects/wifi/sys/net80211/ieee80211_ht.c#3 edit
Differences ...
==== //depot/projects/wifi/sys/net80211/ieee80211_ht.c#3 (text+ko) ====
@@ -547,13 +547,20 @@
off = IEEE80211_SEQ_SUB(rxseq, rap->rxa_start);
if (off >= rap->rxa_wnd) {
/*
- * Outside the window, flush the reorder q.
+ * Outside the window, flush the reorder q if
+ * not pulling the sequence # backward. The
+ * latter is typically caused by a dropped BA.
*/
IEEE80211_NOTE(ic, IEEE80211_MSG_INPUT | IEEE80211_MSG_11N, ni,
"recv BAR outside BA win <%u:%u> rxseq %u tid %u",
rap->rxa_start,
IEEE80211_SEQ_ADD(rap->rxa_start, rap->rxa_wnd),
rxseq, tid);
+ ic->ic_stats.is_ampdu_bar_oow++;
+ if (rxseq < rap->rxa_start) {
+ /* XXX stat? */
+ return;
+ }
if (rap->rxa_qframes != 0) {
ic->ic_stats.is_ampdu_rx_oor += rap->rxa_qframes;
ampdu_rx_flush(ni, rap, rap->rxa_wnd);
@@ -561,10 +568,6 @@
("lost %u data, %u frames on ampdu rx q",
rap->rxa_qbytes, rap->rxa_qframes));
}
- ic->ic_stats.is_ampdu_bar_oow++;
- /* XXX need better check for pulling seq# backward */
- if (rxseq < rap->rxa_start)
- return;
} else if (rap->rxa_qframes != 0) {
/*
* Dispatch packets up to rxseq.
More information about the p4-projects
mailing list