]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/commit
Fix some corner cases in the net80211 sequence number retransmission
authoradrian <adrian@FreeBSD.org>
Wed, 4 May 2011 02:23:59 +0000 (02:23 +0000)
committeradrian <adrian@FreeBSD.org>
Wed, 4 May 2011 02:23:59 +0000 (02:23 +0000)
commit198275796f7dffd23dcf54481b3b8fb395cf877b
tree2c10c692ad321ba67c135201cbef081aa5b6043d
parenta51881ba59b64a8ecc1f846d8b7abcbec1c25a36
Fix some corner cases in the net80211 sequence number retransmission
handling.

The current sequence number code does a few things incorrectly:

* It didn't try eliminating duplications from HT nodes. I guess it's assumed
  that out of order / retransmission handling would be handled by the AMPDU RX
  routines. If a HT node isn't doing AMPDU RX, then retransmissions need to
  be eliminated. Since most of my debugging is based on this (as AMPDU TX
  software packet aggregation isn't yet handled), handle this corner case.

* When a sequence number of 4095 was received, any subsequent sequence number
  is going to be (by definition) less than 4095. So if the following sequence
  number (0) doesn't initially occur and the retransmit is received, it's
  incorrectly eliminated by the IEEE80211_FC1_RETRY && SEQ_LEQ() check.
  Try to handle this better.

This almost completely eliminates out of order TCP statistics showing up during
iperf testing for the 11a, 11g and non-aggregate 11n AMPDU RX case. The only
other packet loss conditions leading to this are due to baseband resets or
heavy interference.
sys/net80211/ieee80211_adhoc.c
sys/net80211/ieee80211_hostap.c
sys/net80211/ieee80211_input.h
sys/net80211/ieee80211_mesh.c
sys/net80211/ieee80211_sta.c
sys/net80211/ieee80211_wds.c