[net80211] patch: properly handle sequence checking for HT non-aggregation; refactor out shared code

Adrian Chadd adrian at freebsd.org
Mon May 2 09:01:12 UTC 2011


Hi,

Here's an updated diff. I noticed that with this diff, the number of
TCP out of order complaints dropped dramatically but I was seeing them
when the following occured:

wlan0: [00:23:6c:bf:38:3e] discard duplicate frame, seqno <0,4095>
fragno <0,0> tid 0

This is likely also occuring with non-HT (11a/11bg) QoS operation
chips in -HEAD and -8.

Whenever I saw that above being logged (among lots of other logged
duplicate discards, so I know it wasn't just "serial IO" related) I
saw a burst of out-of-order packets/bytes in the receiving side TCP
stack and a drop in throughput.

The current patch adds the following checks:

* if the last seen seqnum is 4095, then retransmissions of the last
seen fragment is eliminated (like the normal codepath intended to do
but didn't);
* else if the last seen seqnum is 4095, allow any subsequent packet.
This may be wrong for fragments (and I may add a check for rxseq !=
4095)) but any subsequent sequence will have a seqnum of < 4095
because of the 12 bit seqnum wrap.
* else (ie, the last seen seqnum isn't 4095), eliminate retransmits
for seq+frag <= last seen.

This almost entirely eliminates the speed drops I've seen in 11n
non-aggregation mode and almost entirely eliminates the burst of
out-of-order packets/bytes. The only time I'm seeing them now is when
the baseband hangs and the interface is reset.



Adrian
-------------- next part --------------
A non-text attachment was scrubbed...
Name: net80211-rxseq-ht-2.diff
Type: application/octet-stream
Size: 8068 bytes
Desc: not available
Url : http://lists.freebsd.org/pipermail/freebsd-wireless/attachments/20110502/ef045d0d/net80211-rxseq-ht-2.obj


More information about the freebsd-wireless mailing list