Date: Wed, 23 May 2007 02:40:37 GMT From: Sam Leffler <sam@FreeBSD.org> To: Perforce Change Reviews <perforce@freebsd.org> Subject: PERFORCE change 120231 for review Message-ID: <200705230240.l4N2ebp4017635@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=120231 Change 120231 by sam@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.
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200705230240.l4N2ebp4017635>