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