HomeFreeBSD

First cut at attempting to buffer frames until we see a beacon.

Description

First cut at attempting to buffer frames until we see a beacon.

The iwn(4) firmware forgets most of its channel state after an RXON
command. This means that any beacons its seen on passive 5GHz channels
are forgotten upon an association/authorisation request.
This unfortuantely means that 5GHz association almost always fails -
the assoc and/or auth frames are dropped with a status of "passive
channel, haven't seen a beacon yet." (0x90.)

So:

  • add an xmit queue, global, to buffer frames
  • modify the xmit path to use the mbuf tag from net80211 to specify raw frame details
  • buffer xmit frames from both raw and non-raw paths
  • if a beacon is seen in the RX path, schedule a taskqueue to send said frames and un-buffer things.
  • flush frames during state change back to INIT, or NIC down/up/detach.

This isn't the final shape I'd like this to be in but it certainly
is better than 5GHz "not working at all".

Tested:

  • Intel 5100, STA mode (before spilling coffee)
  • Intel 5300, STA mode (after spilling coffee)

Story:

  • This has been bugging me at work for months, which I just worked around by throwing an ath(4) into my Lenovo T400 cardbus slot.
  • Our ops director discovered indeed FreeBSD runs well on the Lenovo T420p, except for that pesky 5GHz thing. So now developers also can have a T420p running FreeBSD to do work with. Their #1 feedback to me - "boy it'd be nice if 5GHz wifi worked."
  • .. then, I was at NANOG but stuck with 5GHz only wifi and no ath(4) NIC to put in a laptop - and I snapped.

Thus, the reason this is actually work related.

MFC after: 2 weeks
Sponsored by: Norse Corp, Inc.

Details

Provenance
adrianAuthored on
Parents
rS284587: Add in library routines not supplied by gcc-4.9 but required by the kernel.
Branches
Unknown
Tags
Unknown