#
359746 |
|
09-Apr-2020 |
eugen |
net80211: fix another possible panic for some drivers
This change fixes another case for panic missed in r343035 and seen with run(4)-based system. This is direct commit to stable/11 because r306591 could not be merged due to differences in KPI. Note that stable/12 has this problem fixed already.
|
#
343035 |
|
15-Jan-2019 |
avos |
MFC r342966: net80211: fix possible panic for some drivers after r342464
Check if rate control structures were allocated before trying to access them in various places; this was possible before on allocation failure (unlikely), but was revealed after r342211 where allocation was deferred.
In case if driver uses wlan_amrr(4) and it is loaded it is possible to reproduce the panic via
sysctl net.wlan.<number>.rate_stats
(for wlan0 the number will be 0).
The patch was adjusted a bit since file contents are different enough since r306591.
|
#
321724 |
|
30-Jul-2017 |
avos |
MFC r321401: net80211: do not allow to unload rate control module if it is still in use.
Keep 'nrefs' counter up-to-date, so 'kldunload wlan_amrr' with 1+ active wlan(4) interface will not lead to kernel panic.
|
#
302408 |
|
07-Jul-2016 |
gjb |
Copy head@r302406 to stable/11 as part of the 11.0-RELEASE cycle. Prune svn:mergeinfo from the new branch, as nothing has been merged here.
Additional commits post-branch will follow.
Approved by: re (implicit) Sponsored by: The FreeBSD Foundation |
#
302307 |
|
01-Jul-2016 |
adrian |
[net80211] teach AMRR to log the initial MCS rate as "MCS X"
Otheriwse it logs it as the rate value, which is 0x80 (MCS flag) + MCS, which isn't that helpful.
Approved by: re (gjb)
|
#
296925 |
|
16-Mar-2016 |
adrian |
[net80211] Begin implementing rate control module stats.
* Implement a new ratectl method, which defaults to returning nothing; * Add a top level sysctl (net.wlan.X.rate_stats) to extract it; * Add ratectl info for the 'amrr' module.
Tested:
* urtwn(4), STA mode
Differential Revision: https://reviews.freebsd.org/D5630
|
#
295126 |
|
01-Feb-2016 |
glebius |
These files were getting sys/malloc.h and vm/uma.h with header pollution via sys/mbuf.h
|
#
283538 |
|
25-May-2015 |
adrian |
Convert malloc/free back to #define's, as part of OS portability work.
DragonflyBSD uses the FreeBSD wireless stack and drivers. Their malloc() API is named differently, so they don't have userland/kernel symbol clashes like we do (think libuinet.)
So, to make it easier for them and to port to other BSDs/other operating systems, start hiding the malloc specific bits behind defines in ieee80211_freebsd.h.
DragonflyBSD can now put these portability defines in their local ieee80211_dragonflybsd.h.
This should be a great big no-op for everyone running wifi.
TODO:
* kill M_WAITOK - some platforms just don't want you to use it * .. and/or handle it returning NULL rather than waiting forever. * MALLOC_DEFINE() ? * Migrate the well-known malloc names (eg M_TEMP) to net80211 namespace defines.
|
#
270206 |
|
20-Aug-2014 |
adrian |
After much toying around with this AMRR initial rate stuff, I've decided that for 11n rates it's best to start (very) low and work our way up.
So, from now on, the initial rate for AMRR 11n is MCS4. It doesn't try MCS12 or MCS20 - at low signal strengths those don't work very well at all.
AMRR will step the rate control up over time if things work out better.
Tested:
* Intel 5100 * Intel 5300 (using local diffs to test out 3x3 stream support)
|
#
257881 |
|
09-Nov-2013 |
adrian |
Fix AMRR to correctly select the initial rate.
There were two bugs:
* If the initial lowest rate didn't go through the loop at least once, the AMRR rate index would be the highest rate in the table (eg the rix mapping to MCS15) but rate would stay at the default value, namely 0.
This meant that the initial rate selection would be MCS15 _but_ the node ni_txrate value would be MCS0.
* If the node is 11n, then break out of the loop correctly. Beforehand, my initial 11n AMRR commit would immediately exit out as it would fail the 11n check, then it would always fall through to the non-11n rate which would then see if it was < 36mbit (ie, "72"), which would always match. Hence, it'd always return MCS15.
Tested:
* Intel Centrino 2230 STA (local changes), STA mode * Intel Wifi 5100, STA
|
#
257412 |
|
31-Oct-2013 |
adrian |
Don't treat the node as an 11n node if 11n rates are disabled.
For now, the AMRR code only knows about _either_ MCS or non-MCS rates. It doesn't know how to downgrade (ie, doing 11b CCK rates if MCS0 isn't reliable.)
PR: kern/183428
|
#
257241 |
|
28-Oct-2013 |
glebius |
Include necessary headers that now are available due to pollution via if_var.h.
Sponsored by: Netflix Sponsored by: Nginx, Inc.
|
#
257176 |
|
26-Oct-2013 |
glebius |
The r48589 promised to remove implicit inclusion of if_var.h soon. Prepare to this event, adding if_var.h to files that do need it. Also, include all includes that now are included due to implicit pollution via if_var.h
Sponsored by: Netflix Sponsored by: Nginx, Inc.
|
#
252736 |
|
04-Jul-2013 |
adrian |
Document the current 11n rate selection shortcoming in the AMRR code.
|
#
252727 |
|
04-Jul-2013 |
adrian |
Implement basic 802.11n awareness in the PHY and AMRR rate control code.
* Add 802.11n 2ghz and 5ghz tables, including legacy rates and up to MCS23 rates (3x3.)
* Populate the rate code -> rate index lookup table with MCS _and_ normal rates, but _not_ the basic rate flag. Since the basic rate flag is the same as the MCS flag, we can only use one.
* Introduce some accessor inlines that do PLCP and rate table lookup/access and enforce that it doesn't set the basic rate bit. They're not designed for MCS rates, so it will panic.
* Start converting drivers that use the rate table stuff to use the accessor inlines and strip the basic flag.
* Teach AMRR about basic 11n - it's still as crap for MCS as it is being used by iwn, so it's not a step _backwardS_.
* Convert iwn over to accept 11n MCS rates rather than 'translate' legacy to MCS rates. It doesn't use a lookup table any longer; instead it's a function which takes the current node (for HT parameters) and the rate code, and returns the hardware PLCP code to use.
Tested:
* ath - it's a no-op, and it works that way * iwn - both 11n and non-11n
|
#
217322 |
|
12-Jan-2011 |
mdf |
sysctl(9) cleanup checkpoint: amd64 GENERIC builds cleanly.
Commit the net* piece.
|
#
207323 |
|
28-Apr-2010 |
rpaulo |
When in the RUN -> AUTH -> RUN FSM transition happens, we'll call the ratectl_node_init() functions and since ni_rtctls was already malloc'ed() we will panic. Fix this by using the already malloc'ed pointer.
Found by: bschmidt Reviewed by: bschmidt
|
#
206419 |
|
09-Apr-2010 |
rpaulo |
Use M_NOWAIT instead of M_WAITOK to avoid race conditions.
MFC after: 1 month
|
#
206358 |
|
07-Apr-2010 |
rpaulo |
net80211 rate control framework (net80211 ratectl).
This framework allows drivers to abstract the rate control algorithm and just feed the framework with the usable parameters. The rate control framework will now deal with passing the parameters to the selected algorithm. Right now we have AMRR (the default) and RSSADAPT but there's no way to select one with ifconfig, yet. The objective is to have more rate control algorithms in the net80211 stack so all drivers[0] can use it. Ideally, we'll have the well-known sample rate control algorithm in the net80211 at some point so all drivers can use it (not just ath).
[0] all drivers that do rate control in software, that is.
Reviewed by: bschmidt, thompsa, weyongo MFC after: 1 months
|
#
178354 |
|
20-Apr-2008 |
sam |
Multi-bss (aka vap) support for 802.11 devices.
Note this includes changes to all drivers and moves some device firmware loading to use firmware(9) and a separate module (e.g. ral). Also there no longer are separate wlan_scan* modules; this functionality is now bundled into the wlan module.
Supported by: Hobnob and Marvell Reviewed by: many Obtained from: Atheros (some bits)
|
#
170530 |
|
11-Jun-2007 |
sam |
Update 802.11 wireless support: o major overhaul of the way channels are handled: channels are now fully enumerated and uniquely identify the operating characteristics; these changes are visible to user applications which require changes o make scanning support independent of the state machine to enable background scanning and roaming o move scanning support into loadable modules based on the operating mode to enable different policies and reduce the memory footprint on systems w/ constrained resources o add background scanning in station mode (no support for adhoc/ibss mode yet) o significantly speedup sta mode scanning with a variety of techniques o add roaming support when background scanning is supported; for now we use a simple algorithm to trigger a roam: we threshold the rssi and tx rate, if either drops too low we try to roam to a new ap o add tx fragmentation support o add first cut at 802.11n support: this code works with forthcoming drivers but is incomplete; it's included now to establish a baseline for other drivers to be developed and for user applications o adjust max_linkhdr et. al. to reflect 802.11 requirements; this eliminates prepending mbufs for traffic generated locally o add support for Atheros protocol extensions; mainly the fast frames encapsulation (note this can be used with any card that can tx+rx large frames correctly) o add sta support for ap's that beacon both WPA1+2 support o change all data types from bsd-style to posix-style o propagate noise floor data from drivers to net80211 and on to user apps o correct various issues in the sta mode state machine related to handling authentication and association failures o enable the addition of sta mode power save support for drivers that need net80211 support (not in this commit) o remove old WI compatibility ioctls (wicontrol is officially dead) o change the data structures returned for get sta info and get scan results so future additions will not break user apps o fixed tx rate is now maintained internally as an ieee rate and not an index into the rate set; this needs to be extended to deal with multi-mode operation o add extended channel specifications to radiotap to enable 11n sniffing
Drivers: o ath: add support for bg scanning, tx fragmentation, fast frames, dynamic turbo (lightly tested), 11n (sniffing only and needs new hal) o awi: compile tested only o ndis: lightly tested o ipw: lightly tested o iwi: add support for bg scanning (well tested but may have some rough edges) o ral, ural, rum: add suppoort for bg scanning, calibrate rssi data o wi: lightly tested
This work is based on contributions by Atheros, kmacy, sephe, thompsa, mlaier, kevlo, and others. Much of the scanning work was supported by Atheros. The 11n work was supported by Marvell.
|
#
169281 |
|
05-May-2007 |
sephe |
- Nuke unnecessary header. - Make wlan_amrr depend on wlan, so that it can find various symbols in wlan module if wlan is not compiled into kernel.
Approved by: sam (mentor) Tested by: kevlo
|
#
164633 |
|
26-Nov-2006 |
sam |
device-independent implementation of AMRR tx rate control algorithm
Obtained from: openbsd (w/ mods) MFC after: 1 month
|