[802.11] Add rate control support; fix two bugs; remove high rate bits
authorJoshua Oreman <oremanj@xenon.get-linux.org>
Sat, 20 Jun 2009 05:56:21 +0000 (22:56 -0700)
committerJoshua Oreman <oremanj@xenon.get-linux.org>
Sat, 20 Jun 2009 05:56:21 +0000 (22:56 -0700)
commit5ed61a78c6c8e412cf785587bbc7bd5eb46cbaa6
tree29879a89ec693cfb50aeb087594c9a0cc6eab71a
parentfb129f1dcea8a81ec32ebd4c08be7c28716963b3
[802.11] Add rate control support; fix two bugs; remove high rate bits

The idea of using the upper two bits of a bitrate number for future flags
was bad from the start; do away with it, and the ugly NET80211_RATE_VALUE()
macros that resulted from it. 802.11n support is going to require a lot
more than a couple spare bits.

Add a rate-control algorithm, using a lightweight heuristic approach designed
for gPXE's environment that worked quite well in my testing. It aims for as
high a rate as the sending AP is using, higher in cases of very low packet
loss, and degrades gracefully under poorer conditions.

Add a flag in dev->state, NET80211_AUTO_SSID, that tracks whether our
association was based on a specific SSID or a best-signal pick from an
unfiltered probe. The distinction is relevant in the settings applicator,
so that we can know whether an empty netX/ssid setting represents a change
we must act upon. This fixes a bug that made the 802.11 layer attempt to
reassociate during the post-DHCP settings application, sometimes picking
a different network and rendering the DHCP moot.

Fix a bug that made the auto-association task sometimes start in the middle
of its state machine without initializing things as it expected.
src/include/gpxe/net80211.h
src/include/gpxe/rc80211.h [new file with mode: 0644]
src/net/net80211.c
src/net/rc80211.c [new file with mode: 0644]