Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 8 Nov 2013 23:46:23 -0800
From:      Adrian Chadd <adrian@freebsd.org>
To:        "freebsd-wireless@freebsd.org" <freebsd-wireless@freebsd.org>
Subject:   [iwn] round four - 5100 works, 21xx works, EAPOL fixes, rate selection fixes
Message-ID:  <CAJ-VmonLHcq7dRCv_pkGigWr3yHbbjaVxyyZTpFkELUVDXrKdg@mail.gmail.com>

next in thread | raw e-mail | index | archive | help
Argh, why am I still hacking on the iwn(4) driver.

So, I saw a lot of broken stuff. This patch fixes some.

http://people.freebsd.org/~adrian/iwn/20131108-iwn-update-works-full-5100-11.diff

You have to update sys/net80211 and sys/dev/iwn to the latest version
in HEAD before you apply this diff.

What's committed:

* AMRR wasn't correctly initializing the initial rate, so it thought
it was starting at MCS15 but it was in fact starting at MCS0. This
caused hilarity.

* AMRR should be selecting a "mostly ok" rate, not MCS15. So, this was
also fixed.

What's in this patch:

* EAPOL frames were going out at the normal data rate, rather than
going out at the management rate. Like ath(4), override this.  Once I
fixed AMRR to set the initial rate from MCS0 to the "best initial
rate" it chose MCS15 and this failed. It showed up as the initial
association suceeding but the auth exchange failed, logging a
"pre-shared key may be incorrect" message. Sigh. So, like ath(4),
detect if it's EAPOL and if so override.

* If an AMPDU frame TX failed the firmware doesn't send up a
compressed-BA notification as it doesn't receive one.
iwn_ampdu_tx_done() doesn't do any rate control notification - that is
left up to the compressed BA RX function. So, if an entire A-MPDU
transmit failed, there'd be no notification of such - and the rate
control code never got notified of said failures! Thus it would never
back off the rate. So, if the whole frame transmission failed, just
notify the rate control code so it correctly backs off the rate
selection.

With this, things are .. more stable. The whole A-MPDU handling needs
a lot of work to make as correct as the ath(4) driver, but that is so
not in the scope of what I'm doing here.



-adrian



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAJ-VmonLHcq7dRCv_pkGigWr3yHbbjaVxyyZTpFkELUVDXrKdg>