#
c7f5f140 |
|
23-Apr-2024 |
Adrian Chadd <adrian@FreeBSD.org> |
net80211: add initial key management suites from 802.11-2016, APIs to register them The WPA1/WPA2 driver capabilities aren't really enough in today's world. There are a /lot/ more key management suites to support! So, add initial support for net80211 and drivers to announce what key management suites are supported. These are the list from 802.11-2016 section 9.4.2.25.3 (AKM suites.) The flags are for software supported key management. Drivers may support more key management suites and are welcome to announce more; net80211 will only announce ones that we know net80211 knows "enough" about to support correctly. There /are/ other suites that may be interesting to some people in the future that are not part of this set - eg if anyone ever wants to support the Chinese WAPI standard - so this bitmap is not specifically just the AKM suites in the RSN OUI. This should eventually be communicated up to the wpa_supplicant and hostapd via a replacement driver/vap capabilities call so they know what to enable rather than just IEEE80211_C_WPA1 / IEEE80211_C_WPA2. Differential Revision: https://reviews.freebsd.org/D44919 Reviewed by: bz
|
#
e9961ea1 |
|
17-Apr-2024 |
Adrian Chadd <adrian@FreeBSD.org> |
net80211: add driver / crypto methods to set the hardware / software cipher suites Drivers currently announce hardware crypto cipher support by setting up ic_cryptocaps. This adds two public function calls: * ieee80211_set_software_ciphers() - set the software cipher set; * ieee80211_set_hardware_ciphers() - set the hardware cipher set. For now these just call into the newly crypto routines to set the ciphers. This then adds the two crypto routines, similarly named, to set the hardware/software cipher suite. This is a no-op right now - wep/tkip/ccmp are already set by default so drivers aren't required to call these routines for software encryption, and drivers already set ic_cryptocaps for hardware encryption. Differential Revision: https://reviews.freebsd.org/D44827
|
#
1116e8b9 |
|
16-Apr-2024 |
Adrian Chadd <adrian@FreeBSD.org> |
net80211: add a new field specifically for announcing specific ciphers This dates way, way back with the original net80211 support w/ atheros chips. The earliest chip (AR5210) had limitations supporting software encryption. It only had the four WEP slots, and not any keycache entries. So when trying to do CCMP/TKIP encryption would be enabled and the key slots would have nothing useful in them, resulting in garbage encryption/decryption. I changed this back in 2012 to disable supporting hardware WEP for AR5210 so if_ath(4) / net80211 crypto is all done in software and yes, I could do CCMP/TKIP on AR5210 in software. Fast-forward to newer-ish hardware - the Qualcomm 11ac hardware. Those also don't support pass-through keycache slots! Well, the hardware does at that layer, but then there's a whole offload data path encap/decap layer that's turning the frames from raw wifi into ethernet frames (for "dumb" AP behaviours) or "wifi direct" frames (ie, "windows".) This hides a bunch of header frame contents required for doing the software encryption / decryption path. But then if you enable the raw transmit/receive frame format it ALSO bypasses the hardware encryption/decryption engine! So for those NICs: * If you want to do encryption, you can only use the firmware supported ciphers w/ wifi direct or ethernet; * If you want to use software encrypt/decrypt, you MUST disable all encryption and instead use 100% software encryption. The wpa_supplicant bsd driver code has a specific comment about this and flips on supporting WEP/TKIP/CCMP, which is understandable but it doesn't fix the ACTUAL intention of all of this stuff. So: * create a new field, ic_sw_cryptocaps * populate it with the default supported set of ciphers for net80211 (right now wep, tkip, ccmp) * Communicate the combination of both ic_sw_cryptocaps and ic_cryptocaps to wpa_supplicant via the relevant devcap ioctl. * Update manpage. I'll follow this up with a driver_bsd.c change in wpa_supplicant to trust this again, and then start adding the other cipher support there. Differential Revision: https://reviews.freebsd.org/D44820
|
#
a890a3a5 |
|
18-Feb-2024 |
Bjoern A. Zeeb <bz@FreeBSD.org> |
net80211: increase number of spares in struct ieee80211_vap Turns out MFCing 713db49d06deee90dd358b2e4b9ca05368a5eaf6 does not leave us with enough spares. Given wireless will likely see more changes in the near future add more spares. This is especially necessary given 'struct ieee80211_vap' gets allocated by drivers. Bumps size of struct ieee80211_vap to (7 * 512) on 64bit.
|
#
713db49d |
|
10-Jan-2024 |
Bjoern A. Zeeb <bz@FreeBSD.org> |
net80211: deal with lost state transitions Since 5efea30f039c4 we can possibly lose a state transition which can cause trouble further down the road. The reproducer from 643d6dce6c1e can trigger these for example. Drivers for firmware based wireless cards have worked around some of this (and other) problems in the past. Add an array of tasks rather than a single one as we would simply get npending > 1 and lose order with other tasks. Try to keep state changes updated as queued in case we end up with more than one at a time. While this is not ideal either (call it a hack) it will sort the problem for now. We will queue in ieee80211_new_state_locked() and do checks there and dequeue in ieee80211_newstate_cb(). If we still overrun the (currently) 8 slots we will drop the state change rather than overwrite the last one. When dequeing we will update iv_nstate and keep it around for historic reasons for the moment. The longer term we should make the callers of ieee80211_new_state[_locked]() actually use the returned errors and act appropriately but that will touch a lot more places and drivers (possibly incl. changed behaviour for ioctls). rtwn(4) and rum(4) should probably be revisted and net80211 internals removed (for rum(4) at least the current logic still seems prone to races). PR: 271979, 271988, 275255, 263613, 274003 Sponsored by: The FreeBSD Foundation (in 2023) MFC after: 3 days Reviewed by: cc Differential Revision: https://reviews.freebsd.org/D43389
|
#
562adbe1 |
|
27-Oct-2023 |
Bjoern A. Zeeb <bz@FreeBSD.org> |
net80211: migrate ic_vhtcaps, ic_vht_mcsinfo, ic_flags_vht Like for the VAP rename ic_flags_vht to ic_vht_flags for consistency to keep "VHT" fields together and merge ic_vhtcaps and ic_vht_mcsinfo into struct ieee80211_vht_cap ic_vht_cap. While the structure layout changes no other functional changes intended. Sponsored by: The FreeBSD Foundation MFC after: 3 days Reviewed by: adrian, cc Differential Revision: https://reviews.freebsd.org/D42421
|
#
fbba0d6b |
|
27-Oct-2023 |
Bjoern A. Zeeb <bz@FreeBSD.org> |
net80211: combine iv_vhtcaps and iv_vht_mcsinfo The iv_vhtcaps and iv_vht_mcsinfo fields together form struct ieee80211_vht_cap so combine them into one field in the VAP and keep the information together. While the structure layout changes no other functional changes intended. Sponsored by: The FreeBSD Foundation MFC after: 3 days Reviewed by: adrian, cc Differential Revision: https://reviews.freebsd.org/D42420
|
#
ef48d4fa |
|
27-Oct-2023 |
Bjoern A. Zeeb <bz@FreeBSD.org> |
net80211: rename iv_flags_vht to iv_vht_flags While the flag field is internal start naming it as well as "iv_vht*" so we keep all "VHT" fields together. This breaks with what was done done for HT but with HE, EHT, .. coming one day seems the more logic choice. No functional changes intended. Sponsored by: The FreeBSD Foundation MFC after: 3 days Reviewed by: adrian, cc Differential Revision: https://reviews.freebsd.org/D42419
|
#
95ee2897 |
|
16-Aug-2023 |
Warner Losh <imp@FreeBSD.org> |
sys: Remove $FreeBSD$: two-line .h pattern Remove /^\s*\*\n \*\s+\$FreeBSD\$$\n/
|
#
4d846d26 |
|
10-May-2023 |
Warner Losh <imp@FreeBSD.org> |
spdx: The BSD-2-Clause-FreeBSD identifier is obsolete, drop -FreeBSD The SPDX folks have obsoleted the BSD-2-Clause-FreeBSD identifier. Catch up to that fact and revert to their recommended match of BSD-2-Clause. Discussed with: pfg MFC After: 3 days Sponsored by: Netflix
|
#
19573340 |
|
28-Jul-2022 |
Bjoern A. Zeeb <bz@FreeBSD.org> |
net80211: change order in ieee80211_vhtchanflags() While 80P80 is less likely to be used, VHT160 (a single contiguous width) is harder to acquire but also preferable so return that first. Sponsored by: The FreeBSD Foundation MFC after: 1 week Reviewed by: adrian Differential Revision: https://reviews.freebsd.org/D35977
|
#
463d6125 |
|
28-Jul-2022 |
Bjoern A. Zeeb <bz@FreeBSD.org> |
net80211: correct IEEE80211_FEXT_BITS Correct IEEE80211_FEXT_BITS adding the missed one and move the later one further. This will actually make VHT to show. Sponsored by: The FreeBSD Foundation MFC after: 1 week Reviewed by: adrian Differential Revision: https://reviews.freebsd.org/D35977
|
#
91b4225a |
|
22-Mar-2022 |
Bjoern A. Zeeb <bz@FreeBSD.org> |
net80211: introduce (*iv_update_bss)() Introduce (*iv_update_bss)() with a default implementation to allow drivers to overload/intercept the time when we swap iv_bss. This helps firmware based drivers to synchronize state with firmware. Otherwise, for some state changes, we begin with one ni (and in LinuxKPI lsta) and try to finish with another ni (and a new lsta in different state) and may no longer have access to the previous state. This also saves us from constantly checking for ni changes complicating code. No functional changes intended. Sponsored by: The FreeBSD Foundation MFC after: 3 days X-MFC: move (*iv_update_bss) to spare area
|
#
cb5c0764 |
|
04-Sep-2021 |
Bjoern A. Zeeb <bz@FreeBSD.org> |
net80211: add func/line information to IEEE80211_DISCARD* macros While debugging is very good in net80211, some log messages are repeated in multiple places 1:1. In order to distinguish where the discard happened and to speed up analysis, add __func__:__LINE__ information to all these messages. Sponsored by: The FreeBSD Foundation MFC after: 1 week
|
#
04e7bb08 |
|
17-Oct-2020 |
Bjoern A. Zeeb <bz@FreeBSD.org> |
net80211: update for (more) VHT160 support Implement two macros IEEE80211_VHTCAP_SUPP_CHAN_WIDTH_IS_160MHZ() and its 80+80 counter part to check in vhtcaps for appropriate levels of support and use the macros throughout the code. Add vht160_chan_ranges/is_vht160_valid_freq and handle analogue to vht80 in various parts of the code. Add ieee80211_add_channel_cbw() which also takes the CBW flag fields and make the former ieee80211_add_channel() a wrapper to it. With the CBW flags we can add HT/VHT channels passing them to getflags() for the 2/5ghz functions. In ifconfig(8) add the regdomain_addchans() support for VHT160 and VHT80P80. With this (+ regdoain.xml updates) VHT160 channels can be configured, listed, and pass regdomain where appropriate. Tested with: iwlwifi Reviewed by: adrian MFC after: 10 days Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D26712
|
#
fe5ebb23 |
|
24-Sep-2020 |
Bjoern A. Zeeb <bz@FreeBSD.org> |
Provide MS() and SM() macros for 80211 and wireless drivers. We have (two versions) of MS() and SM() macros which we use throughout the wireless code. Change all but three places (ath_hal, rtwn, and rsu) to the newly provided _IEEE80211_MASKSHIFT() and _IEEE80211_SHIFTMASK() macros. Also change one internal case using both _S and _M instead of just _S away from _M (one of the reasons rtwn and rsu were not changed). This was done semi-mechanically. No functional changes intended. Requested by: gnn (D26091) Reviewed by: adrian (pre line wrap) MFC after: 2 weeks Sponsored by: Rubicon Communications, LLC (d/b/a "Netgate") Differential Revision: https://reviews.freebsd.org/D26539
|
#
2b9f12f6 |
|
24-Aug-2020 |
Bjoern A. Zeeb <bz@FreeBSD.org> |
net80211: enhance getflags*() and ieee80211_add_channel*() For ieee80211_add_channel+*() we are passing in an int flag for ht40 and in some cases another int flag for vht80 where we'd only need two bits really. Convert these variables to a bitflag and fold them together into one. This also allows for VHT160 and VHT80P80 and whatever may come to be considered. Define the various options currently needed. Change the drivers (rtwn and rsu) which actually set this bit to non-0. For convenience the "1" currently used for HT40 is preserved. Enahnce getflags_5ghz() to handle the full set of VHT flags based on the input flags from the the driver. Update the regdomain implementation as well to make use of the new flags and deal with higher [V]HT bandwidths. ieee80211_add_channel() specifically did not take flags so it will not support naything beyond 20Mhz channels. Note: I am not entirely happy with the "cbw_flag[s]" name, but we do use chan_flags elsewhere already. MFC after: 2 weeks Reviewed by: adrian, gnn Sponsored by: Rubicon Communications, LLC (d/b/a "Netgate") Differential revision: https://reviews.freebsd.org/D26091
|
#
fd6eb8fe |
|
16-Aug-2020 |
Bjoern A. Zeeb <bz@FreeBSD.org> |
80211: consistently spell 80P80 The standard uses 80+80 and 80p80 but nowhere 80_80. Switch the latter to 80P80 for all the macros and comments refering to #defined flags which I could find. The only place we leave as 80p80 is the ifconfig command line arguments as we spell them all in lower case. Ideally we would use 80+80 for any interactions with the user and 80P80 for anything internal but let us not confuse parsers and hence avoid the '+' in either case. Reviewed by: adrian, gnn MFC after: 2 weeks Sponsored by: Rubicon Communications, LLC (d/b/a "Netgate") Differential Revision: https://reviews.freebsd.org/D26001
|
#
96811be2 |
|
16-Aug-2020 |
Bjoern A. Zeeb <bz@FreeBSD.org> |
net80211 / ifconfig: cleanup the use of IEEE80211_FVHT_USEVHT* Rather then using magic numbers duplicate IEEE80211_FVHT_VHT* in ifconfig (cleanup of these and other flags used and not exposed by net80211 should happen later) and use those. In the kernel this simplifies one ioctl path (the other one currently relies on individual bit flags being passed in). We also re-order the 80P80 and 160 flag for 160 to come before 80+80 and more clearly leave the flags as TODO in one of the 160/80+80 cases. Reviewed by: adrian MFC after: 2 weeks Sponsored by: Rubicon Communications, LLC (d/b/a "Netgate") Differential Revision: https://reviews.freebsd.org/D26000
|
#
f1481c8d |
|
30-Jun-2020 |
Adrian Chadd <adrian@FreeBSD.org> |
[net80211] Migrate HT/legacy protection mode and preamble calculation to per-VAP flags The later firmware devices (including iwn!) support multiple configuration contexts for a lot of things, leaving it up to the firmware to decide which channel and vap is active. This allows for things like off-channel p2p sta/ap operation and other weird things. However, net80211 is still focused on a "net80211 drives all" when it comes to driving the NIC, and as part of this history a lot of these options are global and not per-VAP. This is fine when net80211 drives things and all VAPs share a single channel - these parameters importantly really reflect the state of the channel! - but it will increasingly be not fine when we start supporting more weird configurations and more recent NICs. Yeah, recent like iwn/iwm. Anyway - so, migrate all of the HT protection, legacy protection and preamble stuff to be per-VAP. The global flags are still there; they're now calculated in a deferred taskqueue that mirrors the old behaviour. Firmware based drivers which have per-VAP configuration of these parameters can now just listen to the per-VAP options. What do I mean by per-channel? Well, the above configuration parameters really are about interoperation with other devices on the same channel. Eg, HT protection mode will flip to legacy/mixed if it hears ANY BSS that supports non-HT stations or indicates it has non-HT stations associated. So, these flags really should be per-channel rather than per-VAP, and then for things like "do i need short preamble or long preamble?" turn into a "do I need it for this current operating channel". Then any VAP using it can query the channel that it's on, reflecting the real required state. This patch does none of the above paragraph just yet. I'm also cheating a bit - I'm currently not using separate taskqueues for the beacon updates and the per-VAP configuration updates. I can always further split it later if I need to but I didn't think it was SUPER important here. So: * Create vap taskqueue entries for ERP/protection, HT protection and short/long preamble; * Migrate the HT station count, short/long slot station count, etc - into per-VAP variables rather than global; * Fix a bug with my WME work from a while ago which made it per-VAP - do the WME beacon update /after/ the WME update taskqueue runs, not before; * Any time the HT protmode configuration changes or the ERP protection mode config changes - schedule the task, which will call the driver without the net80211 lock held and all correctly serialised; * Use the global flags for beacon IEs and VAP flags for probe responses and other IE situations. The primary consumer of this is ath10k. iwn could use it when sending RXON, but we don't support IBSS or AP modes on it yet, and I'm not yet sure whether it's required in STA mode (ie whether the firmware parses beacons to change protection mode or whether we need to.) Tested: * AR9280, STA/AP * AR9380, DWDS STA+STA/AP * ath10k work, STA/AP * Intel 6235, STA * Various rtwn / run NICs, DWDS STA and STA configurations
|
#
8379e8db |
|
15-Jun-2020 |
Adrian Chadd <adrian@FreeBSD.org> |
[net80211] Add initial U-APSD negotiation support. U-APSD (unscheduled automatic power save delivery) is a power save method that's a bit better than legacy PS-POLL - stations can mark frames with an extra flag that tells the AP to leak out more frames after it sends its own frames rather than needing to send a PS-POLL to get another frame from the AP. Now, this code just handles the negotiation bits; it doesn't actually implement U-APSD. That's up to drivers, and nothing in the tree yet implements this. I /may/ implement this for ath(4) if I eventually care enough but right now I plan on just implementing it for firmware offload based NICs that handle this in the NIC. I'll commit the ifconfig bit after this and I may have some follow-up commits as this gets used more by me in local testing. This should be a glorious no-op for everyone else. If things change for anyone that isn't fixed by a complete recompile then please reach out to me.
|
#
ea3d5fd9 |
|
13-Jun-2020 |
Adrian Chadd <adrian@FreeBSD.org> |
[net80211] separate out node allocation and node initialisation. This is a new, optional (for now!) method that drivers can use to separate node allocation and node initialisation. Right now they're the same, and drivers that need to do node allocation via firmware commands need to sleep and thus they need to defer node allocation into an internal taskqueue. Right now they're just separate but not deferred. Later on if I get the time we'll start deferring the node and key related operations but that requires making a bunch of other stuff (notably things that generate frames!) also async/deferred. Tested: * RT3593, STA/DWDS mode * AR9380, STA/AP modes * QCA9880 (athp) - STA/AP modes
|
#
479ab044 |
|
12-Jun-2020 |
Conrad Meyer <cem@FreeBSD.org> |
net80211: Add framework for debugnet(4) support Allow net80211 drivers to register a small vtable of debugnet-related methods. This is not a functional change. Driver support is needed, similar to debugnet(4) for wired NICs. Reviewed by: adrian, markj (earlier version both) Differential Revision: https://reviews.freebsd.org/D17308
|
#
d20ff6e6 |
|
05-Jun-2020 |
Adrian Chadd <adrian@FreeBSD.org> |
[net80211] Migrate short slot time configuration into per-vap and deferred taskqueue updates. The 11b/11g ERP and slot time update handling are two things which weren't migrated into the per-VAP state when Sam did the initial VAP work. That makes sense for a lot of setups where net80211 is driving radio state and the radio only cares about the shared state. However, as noted by a now deleted comment, the ERP and slot time updates aren't EXACTLY correct/accurate - they only take into account the most RECENTLY created VAP, and the state updates when one creates/destroys VAPs isn't exactly great. So: * track the short slot logic per VAP; * whenever the slot time configuration changes, just push it into a deferred task queue update so drivers don't have to serialise it themselves; * if a driver registers a per-VAP slot time handler then it'll just get the per VAP one; * .. if a driver registers a global one then the legacy behaviour is maintained - a single slot time is calculated and pushed out. Note that the calculated slot time is better than the existing logic - if ANY of the VAPs require long slot then it's disabled for all VAPs rather than whatever the last configured VAP did. Now, this isn't entirely complete - the rest of ERP tracking around short/long slot capable station tracking needs to be converted into per-VAP, as well as the preamble/barker flags. Luckily those also can be done in a similar fashion - keep per-VAP counters/flags and unify them before doing the driver update. I'll defer that work until later. All the existing drivers can keep doing what they're doing with the global slot time flags as that is maintained. One driver (iwi) used the per-VAP flags instead of the ic flags, so now that driver will work properly. This unblocks some ath10k porting work as the firmware takes the slot time configuration per-VAP rather than globally, and some firmware handles STA+AP and STA+STA (on same/different channels) configurations where the firmware will switch slot time as appropriate. Tested: * AR9380, STA/AP mode * AR9880 (ath10k), STA mode
|
#
b84b3638 |
|
26-Jan-2019 |
Andriy Voskoboinyk <avos@FreeBSD.org> |
Remove 2GHz channel list copies from wireless drivers. Wrap ieee80211_add_channel_list_2ghz into another function which supplies default (1-14) channel list to it and drop its copies from drivers. Checked with RTL8188EE, country US / JP / KR / UA. MFC after: 2 weeks
|
#
dab61567 |
|
20-Jan-2019 |
Andriy Voskoboinyk <avos@FreeBSD.org> |
net80211: resolve ioctl <-> detach race for ieee80211com structure Since r287197 ieee80211com is a part of drivers softc; as a result, after detach all pointers to it (iv_ic, ni_ic) are invalid. Most possible users (tasks, interrupt handlers) are blocked / removed when device is stopped; however, ioctl handlers were not tracked and may crash if ieee80211com structure is accessed. Since ieee80211com pointer access from ieee80211vap structure is not protected by lock (constant after interface creation) and used in many other places just use reference counting for ioctl handlers; on detach set 'detached' flag and wait until reference counter goes to 0. For HEAD ieee80211vap size was changed (__FreeBSD_version bumped); however, in stable branches I'm going to split / reuse the last iv_spare field for KBI stability. Tested with: - rsu(4), SIOCSIFCAP (-rxcsum) ioctl; - rtwn_pci(4), SIOCG80211 / IEEE80211_IOC_HTPROTMODE ioctl. MFC after: 1 week
|
#
fe267a55 |
|
27-Nov-2017 |
Pedro F. Giffuni <pfg@FreeBSD.org> |
sys: general adoption of SPDX licensing ID tags. Mainly focus on files that use BSD 2-Clause license, however the tool I was using misidentified many licenses so this was mostly a manual - error prone - task. The Software Package Data Exchange (SPDX) group provides a specification to make it easier for automated tools to detect and summarize well known opensource licenses. We are gradually adopting the specification, noting that the tags are considered only advisory and do not, in any way, superceed or replace the license texts. No functional change intended.
|
#
e3e94c96 |
|
13-Mar-2017 |
Adrian Chadd <adrian@FreeBSD.org> |
[net80211] begin fleshing out per-VAP WME configurations. As part of (eventual) p2p/tdls/multi-STA support, a lot of global configuration parameters (WME, ERP (slot, preamble), channel width, HT protmode, etc are the biggest offenders) should be per-VAP. For multi-BSS VAP operation they may be linked, but for p2p/TDLS operation that can be off-channel they can definitely be different (think: 2GHz STA, 5GHz p2p.) The global configuration view of these is mostly a "configure the current non-smart-firmware NIC" view. This should be split up into per-VAP state, then a global non-smart-firmware-NIC management layer to handle channel changes and such in software. This is step one in a loooong road for this. It should be a big non-functional change for everyone. * create a per-VAP WME update call. * call it if its set, and call the global callback if it isn't This still uses global WME state - it's just preparation for a future change which will make the WME state per-VAP and fall through to a shared WME configuration for hostap operation. Note: this requires a full kernel recompile; the internal net80211 ABI has changed. Reviewed by: avos Differential Revision: https://reviews.freebsd.org/D9986
|
#
dfabbaa0 |
|
02-Mar-2017 |
Andriy Voskoboinyk <avos@FreeBSD.org> |
net80211: fix ieee80211_htrateset setup, return EINVAL for an unsupported ucast/mcast/mgmt HT rate. - Init global ieee80211_htrateset only once; neither ic_htcaps nor ic_txstream is changed when device is attached; - Move global ieee80211_htrateset structure to ieee80211com; there was a possible data race when more than 1 wireless device is used simultaneously; - Discard unsupported rates in ieee80211_ioctl_settxparams(); otherwise, an unsupported value may break connectivity (actually, 'ifconfig wlan0 ucastrate 8' for RTL8188EU results in immediate disconnect + infinite 'device timeout's after it). Tested with: - Intel 6205, STA mode. - RTL8821AU, STA mode. Reviewed by: adrian Differential Revision: https://reviews.freebsd.org/D9871
|
#
4d3dcce5 |
|
08-Feb-2017 |
Adrian Chadd <adrian@FreeBSD.org> |
[net80211] quiet IE handling improvements * on the station side, only call the quiet time IE method if we have a quiet IE - otherwise call the NULL method once, and then don't waste time calling NULL * on the beacon generation side - force a beacon regeneration each time quiet time is enabled/disabled. Without this, enabling/disabling quiet time IE would cause the beacon contents to be corrupted since none of the "move contents around" logic (like for CSA and TIM handling) is implemented. This changes the size of ieee80211_node so it requires a kernel recompile, but no userland recompile. Tested: * AR9380, AP mode, enabling/disabling quiet time IE * AR9380, STA mode, with upcoming driver changes.
|
#
704cd542 |
|
31-Jan-2017 |
Andriy Voskoboinyk <avos@FreeBSD.org> |
net80211: cleanup ic_flags / iv_flags Flags - IEEE80211_F_ASCAN - IEEE80211_F_SIBSS - IEEE80211_F_IBSSON are not used since r170530 (old WI compatibility ioctls removal) and r178354 (removed from other places). IEEE80211_F_TXPOW_FIXED was never utilized; initially added with IEEE80211_F_TXPOW_AUTO / IEEE80211_F_TXPOW_OFF flags, which were replaced with IEEE80211_C_TXPMGT capability check in r138568. Reviewed by: adrian Differential Revision: https://reviews.freebsd.org/D9369
|
#
f551fe46 |
|
26-Jan-2017 |
Adrian Chadd <adrian@FreeBSD.org> |
[net80211] prepare configuration checks for VHT, fragment-offload and seqno-offload. * allocate an ext bit for fragment offload. Some NICs (like the ath10k hardware in native wifi or 802.3 mode) support doing packet fragmentation in firmware/hardware, so we don't have to do it here. * allocate an ext bit for VHT and start using it.
|
#
c5bba9da |
|
21-Jan-2017 |
Andriy Voskoboinyk <avos@FreeBSD.org> |
net80211: allow to configure LDPC support Tested with RTL8821AU, STA mode (Tx support only) Reviewed by: adrian Differential Revision: https://reviews.freebsd.org/D9268
|
#
da6ee937 |
|
13-Jan-2017 |
Adrian Chadd <adrian@FreeBSD.org> |
[net80211] add a macro to check this configuration option.
|
#
321eb9ff |
|
13-Jan-2017 |
Adrian Chadd <adrian@FreeBSD.org> |
[net80211] begin laying the groundwork for drivers to do their own sequence number management. I added IEEE80211_TX_LOCK() a few years ago because there were races between seqno allocation, driver queuing and crypto IV allocation. This meant that they'd appear out of sequence and the receiver would drop them, leading to terrible performance or flat out traffic hangs. This flag should be set by drivers that do their own sequence number allocation for all frames it needs to happen for, including beacon frames. Eventually this should lead to the driver taking care of locking for allocating seqno and other traffic-triggered events (eg addba setup.)
|
#
cb4319e3 |
|
07-Jan-2017 |
Adrian Chadd <adrian@FreeBSD.org> |
[net80211] add a "is VHT available" macro. We have run out of config bits, sigh, so until I expand the ic config bits, just use this macro as a substitute.
|
#
02527029 |
|
06-Jan-2017 |
Adrian Chadd <adrian@FreeBSD.org> |
[net80211] add FVHT flags for channel widths. The 11n code uses these bits for both configuration /and/ controlling the channel width on softmac chips - it uses it to find the widest width for all VAPs (eg a HT20 vap and a HT40 vap) to know what to configure the ic_curchan. For fullmac devices it isn't /as/ important, as each virtual device exposed by the firmware will likely have its own configuration and the firmware figures out what to do to enable it.
|
#
4747f0df |
|
04-Jan-2017 |
Adrian Chadd <adrian@FreeBSD.org> |
[net80211] correct VHT ieee80211com state bits. * rename the ieee80211com field for vht mcsinfo to be ic_, not iv; * add a vht config field, stealing from the spares I left there. This doesn't change the ABI.
|
#
781487cf |
|
26-Dec-2016 |
Adrian Chadd <adrian@FreeBSD.org> |
[net80211] turn the default TX key configuration (for WEP) into a vap callback. The ath10k firmware supports hardware WEP offload, and in native wifi mode (or 802.3 ethernet mode, for that matter) the WEP key isn't actually included in the TX payload from net80211. Instead, a separate firmware command is issued that sets the default TX key to be the specified key. However, net80211 doesn't at all inform the driver layer that this is occuring - it just "expects" to be inserting WEP header information when doing WEP TX, even with hardware encryption. So, to better support the newer world order, turn the default TX key assignment into a VAP method that can be overridden by the driver and ensure its wrapped in a crypto begin/end set. That way it should be correctly atomic from the point of view of keychanges (as long as the driver does the right thing.) It'd be nice if we passed through to the key_set call a flag that says "also make this the default key" - that's captured here by calling the deftxkey method after the key_set method. Maybe I can do that later. Note: this is a net80211 ABI change, and will require a kernel+modules recompile. Happy Holidays, etc. Tested: * ath10k driver port * rtwn_usb, WEP station
|
#
fdbc9e6e |
|
15-Dec-2016 |
Adrian Chadd <adrian@FreeBSD.org> |
[net80211] start laying down the foundation for 11ac support. This is a work in progress and some of this stuff may change; but hopefully I'm laying down enough stuff and space in fields to allow it to grow without another major recompile. We'll see! * Add a net80211 PHY type for VHT 2G and VHT 5G. Note - yes, VHT is supposed to be for 5GHZ, however some vendors (*cough* most of them) support some subset of VHT rate support in 2GHz. No - not 80MHz wide channels, but at least some MCS8-9 support, maybe some beamforming, and maybe some longer A-MPDU aggregates. I don't want to even think about MU-MIMO on 2GHz. * Add an ifmedia placeholder type for VHT rates. * Add channel flags for VHT, VHT20/40U/40D/80/80+80/160 * Add channel macros for the above * Add ieee80211_channel fields for the VHT information and flags, along with some padding (so this struct definitely grows.) * Add a phy type flag for VHT - 'v' * Bump the number of channels to a much higher amount - until we get something like the linux mac80211 chanctx abstraction (where the stack provides a current channel configuration via callbacks, versus the driver ever checking ic->ic_curchan or similar) we'll have to populate VHT+HT combinations. Eg, there'll likely be a full set of duplicate VHT20/40 channels to match HT channels. There will also be a full set of duplicate VHT80 channels - note that for VHT80, its assumed you're doing VHT40 as a base, so we don't need a duplicate of VHT80 + 20MHz only primary channels, only a duplicate of all the VHT40 combinations. I don't want to think about VHT80+80 or VHT160 for now - and I won't, as the current device I'm doing 11ac bringup on (QCA9880) only does VHT80. I'll likely revisit the channel configuration and scanning related stuff after I get VHT20/40 up. * Add vht flags and the basic MCS rate setup to ieee80211com, ieee80211vap and ieee80211_node in preparation for 11ac configuration. There is zero code that uses this right now. * Whilst here, add some more placeholders in case I need to extend out things by some uint32_t flag sized fields. Hopefully I won't! What I haven't yet done: * any of the code that uses this * any of the beamforming related fields * any of the MU-MIMO fields required for STA/AP operation * any of the IE fields in beacon frame / probe request/response handling and the calculations required for shifting beacon contents around when the TIM grows/shrinks This will require a full rebuild of net80211 related programs - ifconfig, hostapd, wpa_supplicant.
|
#
4774b999 |
|
02-Dec-2016 |
Adrian Chadd <adrian@FreeBSD.org> |
[net80211] prepare for 11ac aware NICs that want to know per-vdev channel and centre frequencies. * ic_freq is the centre of the primary channel, not the centre of the HT40/HT80/etc channel. Add a method to access that. * Add a method to access the centre of the primary channel, including knowing the centre of the 5/10/20/40/80, versus the primary channel. Ie, it's the centre of the 40, 80, 160MHz channel. * Add a method to access the centre frequency of the secondary 80MHz channel - we don't support VHT yet, but when we do. * Add methods to access the current channel and the per-dev desired channel. Ideally drivers that do full offload with a per-vap channel configuration should use the vap channel, NOT ic_curchan. Non-offload drivers that require net80211 to change the channel should be accessing ic_curchan.
|
#
e4ce50a4 |
|
18-Nov-2016 |
Adrian Chadd <adrian@FreeBSD.org> |
[net80211] shuffle IEEE80211_C and HTC bits over to _ieee80211.h so userland can use this. Reviewed by: avos Differential Revision: https://reviews.freebsd.org/D8553
|
#
84c7170e |
|
18-Oct-2016 |
Adrian Chadd <adrian@FreeBSD.org> |
[net80211] Initial full-offload scan support. This is a very simple addition to the net80211 scan support. It doesn't implement a replacement scan interface - it just disables the pieces that we should disable to make this lifecycle a bit more managable. There's more work to come before full scan offload support is available but it should be good enough for driver work. * add a flag to say "full offload" * don't do probe requests when scanning full-offload - firmware can do that * don't do powersave transitions and buffering - firmware can do that tested: * iwm(4) - STA mode * ath10k port (local, not in freebsd-head yet) Reviewed by: avos Differential Revision: https://reviews.freebsd.org/D8262
|
#
cdc0cf21 |
|
29-Jun-2016 |
Andriy Voskoboinyk <avos@FreeBSD.org> |
net80211: fix LOR/deadlock in ieee80211_ff_node_cleanup(). Add new lock for stageq (part of ieee80211_superg structure) and ni_tx_superg (part of ieee80211_node structure); drop com_lock protection where it is used to protect them. While here, drop duplicate OPACKETS counter incrementation. ni_tx_ampdu is not protected with it (however, it is also used without locking in other places; probably, it requires some other solution to be thread-safe). Tested with RTL8188CUS (AP) and RTL8188EU (STA). NOTE: Since this change breaks KBI, all wireless drivers need to be recompiled. Reviewed by: adrian Approved by: re (gjb) Differential Revision: https://reviews.freebsd.org/D6958
|
#
7cde0202 |
|
17-May-2016 |
Andriy Voskoboinyk <avos@FreeBSD.org> |
net80211: unbreak 'show all vaps(/a)' ddb command Replace ifnet list lookup (which is broken since r287197, because IFT_IEEE80211 type is not used anymore) with iteration on ieee80211com list. Reviewed by: adrian Differential Revision: https://reviews.freebsd.org/D6419
|
#
b134c582 |
|
04-May-2016 |
Andriy Voskoboinyk <avos@FreeBSD.org> |
net80211: do not hardcode size of ic_modecaps field.
|
#
355fec48 |
|
29-Apr-2016 |
Andriy Voskoboinyk <avos@FreeBSD.org> |
net80211: provide a set of ieee80211_add_channel*() functions This change adds few methods for net80211 channel table setup: - ieee80211_add_channel() - ieee80211_add_channel_ht40() (primarily for drivers, that parse EEPROM to get channel list - they will allow to hide implementation details). - ieee80211_add_channel_list_2ghz() - ieee80211_add_channel_list_5ghz() (mostly as a replacement for ieee80211_init_channels() - they will allow to specify non-default channel list; may be used in ic_getradiocaps()). Tested with wpi(4) (add_channel) and rum(4) (add_channel_list_2ghz). Reviewed by: adrian Differential Revision: https://reviews.freebsd.org/D6124
|
#
1b866afd |
|
05-Apr-2016 |
Adrian Chadd <adrian@FreeBSD.org> |
[net80211] Add a new capability flag to indicate that the stack should do software A-MSDU encapsulation. Right now there's AMSDU TX/RX capability bits and they're mostly unused, however I'd like to maintain those as the general configuration, not also "please software encap AMSDU." For platforms that can do A-MSDU in firmware (iwn, iwm, etc) then their init paths can read this flag to configure A-MSDU.
|
#
1d47c76c |
|
05-Apr-2016 |
Andriy Voskoboinyk <avos@FreeBSD.org> |
net80211: copy MAC address into iv_myaddr[] instead of aliasing it. Since IF_LLADDR() returns a non-constant pointer to the MAC address preserve a copy of it in iv_myaddr. PR: 208505
|
#
5a6b5f3c |
|
04-Mar-2016 |
Andriy Voskoboinyk <avos@FreeBSD.org> |
net80211: fix possible overflow in IEEE80211_TU_TO_TICKS() For hz=1000 any number, greater than 4194 causes integer overflow; this change casts the number to uint64_t before operating with it. Approved by: adrian (mentor) Differential Revision: https://reviews.freebsd.org/D5268
|
#
80d65398 |
|
31-Dec-2015 |
Adrian Chadd <adrian@FreeBSD.org> |
[net80211] document the (not completely complete) set of places where we're assuming hz=1000 and not gracefully handling when it isn't. The math involved will return 0 for hz < 1000, which it is on some platforms and on DragonflyBSD. This doesn't fix it, it: * converts one manual use over to use the macro, and * comments where it needs some thought/fixing. I'll think about this a bit more before fixing it. Submitted by: imre@vdsz.com
|
#
4061c639 |
|
27-Oct-2015 |
Andriy Voskoboinyk <avos@FreeBSD.org> |
net80211: add ieee80211_restart_all() call. This call may be used when device cannot continue to operate normally (e.g., throws firmware error, watchdog timer expires) and need to be restarted. Approved by: adrian (mentor) Differential Revision: https://reviews.freebsd.org/D3998
|
#
bc813c40 |
|
03-Oct-2015 |
Adrian Chadd <adrian@FreeBSD.org> |
net80211: drop redundant 3rd parameter from iv_key_set(). The MAC can be fetched from the key struct. I added the ndis updates to make it compile. Submitted by: <s3erios@gmail.com> Differential Revision: https://reviews.freebsd.org/D3657
|
#
dd2fb488 |
|
28-Sep-2015 |
Adrian Chadd <adrian@FreeBSD.org> |
Defer calling into the driver to update the QOS (WME) configuration. This gets called from the driver RX path which leads to driver re-entry.
|
#
0cf00015 |
|
22-Sep-2015 |
Adrian Chadd <adrian@FreeBSD.org> |
net80211: include one copy of struct ieee80211_beacon_offsets into ieee80211vap Submitted by: Andriy Voskoboinyk <s3erios@gmail.com> Differential Revision: https://reviews.freebsd.org/D3658
|
#
7a79cebf |
|
27-Aug-2015 |
Gleb Smirnoff <glebius@FreeBSD.org> |
Replay r286410. Change KPI of how device drivers that provide wireless connectivity interact with the net80211 stack. Historical background: originally wireless devices created an interface, just like Ethernet devices do. Name of an interface matched the name of the driver that created. Later, wlan(4) layer was introduced, and the wlanX interfaces become the actual interface, leaving original ones as "a parent interface" of wlanX. Kernelwise, the KPI between net80211 layer and a driver became a mix of methods that pass a pointer to struct ifnet as identifier and methods that pass pointer to struct ieee80211com. From user point of view, the parent interface just hangs on in the ifconfig list, and user can't do anything useful with it. Now, the struct ifnet goes away. The struct ieee80211com is the only KPI between a device driver and net80211. Details: - The struct ieee80211com is embedded into drivers softc. - Packets are sent via new ic_transmit method, which is very much like the previous if_transmit. - Bringing parent up/down is done via new ic_parent method, which notifies driver about any changes: number of wlan(4) interfaces, number of them in promisc or allmulti state. - Device specific ioctls (if any) are received on new ic_ioctl method. - Packets/errors accounting are done by the stack. In certain cases, when driver experiences errors and can not attribute them to any specific interface, driver updates ic_oerrors or ic_ierrors counters. Details on interface configuration with new world order: - A sequence of commands needed to bring up wireless DOESN"T change. - /etc/rc.conf parameters DON'T change. - List of devices that can be used to create wlan(4) interfaces is now provided by net.wlan.devices sysctl. Most drivers in this change were converted by me, except of wpi(4), that was done by Andriy Voskoboinyk. Big thanks to Kevin Lo for testing changes to at least 8 drivers. Thanks to pluknet@, Oliver Hartmann, Olivier Cochard, gjb@, mmoll@, op@ and lev@, who also participated in testing. Reviewed by: adrian Sponsored by: Netflix Sponsored by: Nginx, Inc.
|
#
ba2c1fbc |
|
07-Aug-2015 |
Adrian Chadd <adrian@FreeBSD.org> |
Revert the wifi ifnet changes until things are more baked and tested. * 286410 * 286413 * 286416 The initial commit broke a variety of debug and features that aren't in the GENERIC kernels but are enabled in other platforms.
|
#
79d2c5e8 |
|
07-Aug-2015 |
Gleb Smirnoff <glebius@FreeBSD.org> |
Change KPI of how device drivers that provide wireless connectivity interact with the net80211 stack. Historical background: originally wireless devices created an interface, just like Ethernet devices do. Name of an interface matched the name of the driver that created. Later, wlan(4) layer was introduced, and the wlanX interfaces become the actual interface, leaving original ones as "a parent interface" of wlanX. Kernelwise, the KPI between net80211 layer and a driver became a mix of methods that pass a pointer to struct ifnet as identifier and methods that pass pointer to struct ieee80211com. From user point of view, the parent interface just hangs on in the ifconfig list, and user can't do anything useful with it. Now, the struct ifnet goes away. The struct ieee80211com is the only KPI between a device driver and net80211. Details: - The struct ieee80211com is embedded into drivers softc. - Packets are sent via new ic_transmit method, which is very much like the previous if_transmit. - Bringing parent up/down is done via new ic_parent method, which notifies driver about any changes: number of wlan(4) interfaces, number of them in promisc or allmulti state. - Device specific ioctls (if any) are received on new ic_ioctl method. - Packets/errors accounting are done by the stack. In certain cases, when driver experiences errors and can not attribute them to any specific interface, driver updates ic_oerrors or ic_ierrors counters. Details on interface configuration with new world order: - A sequence of commands needed to bring up wireless DOESN"T change. - /etc/rc.conf parameters DON'T change. - List of devices that can be used to create wlan(4) interfaces is now provided by net.wlan.devices sysctl. Most drivers in this change were converted by me, except of wpi(4), that was done by Andriy Voskoboinyk. Big thanks to Kevin Lo for testing changes to at least 8 drivers. Thanks to Olivier Cochard, gjb@, mmoll@, op@ and lev@, who also participated in testing. Details here: https://wiki.freebsd.org/projects/ifnet/net80211 Still, drivers: ndis, wtap, mwl, ipw, bwn, wi, upgt, uath were not tested. Changes to mwl, ipw, bwn, wi, upgt are trivial and chances of problems are low. The wtap wasn't compilable even before this change. But the ndis driver is complex, and it is likely to be broken with this commit. Help with testing and debugging it is appreciated. Differential Revision: D2655, D2740 Sponsored by: Nginx, Inc. Sponsored by: Netflix
|
#
f7f155fa |
|
07-Jun-2015 |
Adrian Chadd <adrian@FreeBSD.org> |
Break out the current 802.11 software scan methods into an indirect table. In order for drivers to provide an alternate set of scan methods, these have to finally use an indirection table and all of the calls in ieee80211_scan.c need to use said table. For all existing drivers - this is basically a glorified, KBI-breaking functional no-op. This is also not the final form - too much functionality is currently hiding in ieee80211_scan_sw.c that should be in ieee80211_scan.c. That'll be the target of some follow-up commits. Note: * You have to recompile your kernel/drivers after this - the net80211 KBI has changed. * I'm not yet planning on bumping any versioning - I have a few more things to shuffle around. Tested: * urtwn(4) - STA mode * Intel 7260 in local repo - overriding the methods and table at attach time has the desired effect (ie, all the methods are called, but nothing is ever performed.)
|
#
81c04d11 |
|
25-May-2015 |
Gleb Smirnoff <glebius@FreeBSD.org> |
Add two counters to ieee80211com, that will be used to count transmission or receive errors that can't be associated with any vap. Sponsored by: Netflix Sponsored by: Nginx, Inc.
|
#
e14a2a4c |
|
25-May-2015 |
Gleb Smirnoff <glebius@FreeBSD.org> |
Cleanup compat shims for FreeBSD versions that predate 10.0-RELEASE. There are no plans to merge anything save a trivial bugfix to stable/9. Discussed with: adrian
|
#
272f6ade |
|
25-May-2015 |
Gleb Smirnoff <glebius@FreeBSD.org> |
Change three methods in struct ieee80211com, namely ic_updateslot, ic_update_mcast and ic_update_promisc, to pass pointer to the ieee80211com, not to the ifnet. Sponsored by: Netflix Sponsored by: Nginx, Inc.
|
#
c79f192c |
|
25-May-2015 |
Adrian Chadd <adrian@FreeBSD.org> |
Begin plumbing ieee80211_rx_stats through the receive path. Smart NICs with firmware (eg wpi, iwn, the new atheros parts, the intel 7260 series, etc) support doing a lot of things in firmware. This includes but isn't limited to things like scanning, sending probe requests and receiving probe responses. However, net80211 doesn't know about any of this - it still drives the whole scan/probe infrastructure itself. In order to move towards suppoting smart NICs, the receive path needs to know about the channel/details for each received packet. In at least the iwn and 7260 firmware (and I believe wpi, but I haven't tried it yet) it will do the scanning, power-save and off-channel buffering for you - all you need to do is handle receiving beacons and probe responses on channels that aren't what you're currently on. However the whole receive path is peppered with ic->ic_curchan and manual scan/powersave handling. The beacon parsing code also checks ic->ic_curchan to determine if the received beacon is on the correct channel or not.[1] So: * add freq/ieee values to ieee80211_rx_stats; * change ieee80211_parse_beacon() to accept the 'current' channel as an argument; * modify the iv_input() and iv_recv_mgmt() methods to include the rx_stats; * add a new method - ieee80211_lookup_channel_rxstats() - that looks up a channel based on the contents of ieee80211_rx_stats; * if it exists, use it in the mgmt path to switch the current channel (which still defaults to ic->ic_curchan) over to something determined by rx_stats. This is enough to kick-start scan offload support in the Intel 7260 driver that Rui/I are working on. It also is a good start for scan offload support for a handful of existing NICs (wpi, iwn, some USB parts) and it'll very likely dramatically improve stability/performance there. It's not the whole thing - notably, we don't need to do powersave, we should not scan all channels, and we should leave probe request sending to the firmware and not do it ourselves. But, this allows for continued development on the above features whilst actually having a somewhat working NIC. TODO: * Finish tidying up how the net80211 input path works. Right now ieee80211_input / ieee80211_input_all act as the top-level that everything feeds into; it should change so the MIMO input routines are those and the legacy routines are phased out. * The band selection should be done by the driver, not by the net80211 layer. * ieee80211_lookup_channel_rxstats() only determines 11b or 11g channels for now - this is enough for scanning, but not 100% true in all cases. If we ever need to handle off-channel scan support for things like static-40MHz or static-80MHz, or turbo-G, or half/quarter rates, then we should extend this. [1] This is a side effect of frequency-hopping and CCK modes - you can receive beacons when you think you're on a different channel. In particular, CCK (which is used by the low 11b rates, eg beacons!) is decodable from adjacent channels - just at a low SNR. FH is a side effect of having the hardware/firmware do the frequency hopping - it may pick up beacons transmitted from other FH networks that are in a different phase of hopping frequencies.
|
#
151cc3ad |
|
25-May-2015 |
Gleb Smirnoff <glebius@FreeBSD.org> |
Add void * member to struct ieee80211com, so that drivers can obtain their softc without going through the struct ifnet. Sponsored by: Netflix Sponsored by: Nginx, Inc.
|
#
c8f5794e |
|
25-May-2015 |
Gleb Smirnoff <glebius@FreeBSD.org> |
Use name from ieee80211com instead of parent ifnet, in debugging printfs. Sponsored by: Netflix Sponsored by: Nginx, Inc.
|
#
c8550c02 |
|
25-May-2015 |
Gleb Smirnoff <glebius@FreeBSD.org> |
Make net80211 drivers supply their device name to the net80211 layer, so that the latter doesn't need to go through struct ifnet to get their name. Sponsored by: Netflix Sponsored by: Nginx, Inc.
|
#
a1cbd043 |
|
06-Jan-2015 |
Adrian Chadd <adrian@FreeBSD.org> |
Global-ify channel_type() - this fixes non-debug net80211 builds.
|
#
033074c4 |
|
09-Nov-2014 |
Alexander V. Chernikov <melifaro@FreeBSD.org> |
Replace 'struct route *' if_output() argument with 'struct nhop_info *'. Leave 'struct route' as is for legacy routing api users. Remove most of rtalloc_ign*-derived functions.
|
#
3914f088 |
|
23-Apr-2014 |
Adrian Chadd <adrian@FreeBSD.org> |
Add a capability to indicate that the net80211 stack should be doing RUN->SLEEP->RUN transitions for station mode sleep management.
|
#
cc80eae5 |
|
07-Aug-2013 |
Adrian Chadd <adrian@FreeBSD.org> |
Allow net80211 to compile on stable/9 and stable/8.
|
#
eadc444a |
|
14-Jun-2013 |
Eitan Adler <eadler@FreeBSD.org> |
Fix typo (dbM -> dBm) Submitted by: Daan@vitsch.nl Reviewed by: adrian
|
#
47e8d432 |
|
25-Apr-2013 |
Gleb Smirnoff <glebius@FreeBSD.org> |
Add const qualifier to the dst parameter of the ifnet if_output method.
|
#
ebe15a7b |
|
16-Apr-2013 |
Adrian Chadd <adrian@FreeBSD.org> |
Implement a utility function to return the current TX power cap for the given node. This takes into account the per-node cap, the ic cap and the per-channel regulatory caps. This is designed to replace references to ni_txpower in various net80211 drivers - ni_txpower doesn't necessarily reflect the actual cap for the given node (eg if the node has the default value of 50dBm (100) and the administrator has manually configured a lower TX power.)
|
#
5cda6006 |
|
08-Mar-2013 |
Adrian Chadd <adrian@FreeBSD.org> |
Bring over my initial work from the net80211 TX locking branch. This patchset implements a new TX lock, covering both the per-VAP (and thus per-node) TX locking and the serialisation through to the underlying physical device. This implements the hard requirement that frames to the underlying physical device are scheduled to the underlying device in the same order that they are processed at the VAP layer. This includes adding extra encapsulation state (such as sequence numbers and CCMP IV numbers.) Any order mismatch here will result in dropped packets at the receiver. There are multiple transmit contexts from the upper protocol layers as well as the "raw" interface via the management and BPF transmit paths. All of these need to be correctly serialised or bad behaviour will result under load. The specifics: * add a new TX IC lock - it will eventually just be used for serialisation to the underlying physical device but for now it's used for both the VAP encapsulation/serialisation and the physical device dispatch. This lock is specifically non-recursive. * Methodize the parent transmit, vap transmit and ic_raw_xmit function pointers; use lock assertions in the parent/vap transmit routines. * Add a lock assertion in ieee80211_encap() - the TX lock must be held here to guarantee sensible behaviour. * Refactor out the packet sending code from ieee80211_start() - now ieee80211_start() is just a loop over the ifnet queue and it dispatches each VAP packet send through ieee80211_start_pkt(). Yes, I will likely rename ieee80211_start_pkt() to something that better reflects its status as a VAP packet transmit path. More on that later. * Add locking around the management and BAR TX sending - to ensure that encapsulation and TX are done hand-in-hand. * Add locking in the mesh code - again, to ensure that encapsulation and mesh transmit are done hand-in-hand. * Add locking around the power save queue and ageq handling, when dispatching to the parent interface. * Add locking around the WDS handoff. * Add a note in the mesh dispatch code that the TX path needs to be re-thought-out - right now it's doing a direct parent device transmit rather than going via the vap layer. It may "work", but it's likely incorrect (as it bypasses any possible per-node power save and aggregation handling.) Why not a per-VAP or per-node lock? Because in order to ensure per-VAP ordering, we'd have to hold the VAP lock across parent->if_transmit(). There are a few problems with this: * There's some state being setup during each driver transmit - specifically, the encryption encap / CCMP IV setup. That should eventually be dragged back into the encapsulation phase but for now it lives in the driver TX path. This should be locked. * Two drivers (ath, iwn) re-use the node->ni_txseqs array in order to allocate sequence numbers when doing transmit aggregation. This should also be locked. * Drivers may have multiple frames queued already - so when one calls if_transmit(), it may end up dispatching multiple frames for different VAPs/nodes, each needing a different lock when handling that particular end destination. So to be "correct" locking-wise, we'd end up needing to grab a VAP or node lock inside the driver TX path when setting up crypto / AMPDU sequence numbers, and we may already _have_ a TX lock held - mostly for the same destination vap/node, but sometimes it'll be for others. That could lead to LORs and thus deadlocks. So for now, I'm sticking with an IC TX lock. It has the advantage of papering over the above and it also has the added advantage that I can assert that it's being held when doing a parent device transmit. I'll look at splitting the locks out a bit more later on. General outstanding net80211 TX path issues / TODO: * Look into separating out the VAP serialisation and the IC handoff. It's going to be tricky as parent->if_transmit() doesn't give me the opportunity to split queuing from driver dispatch. See above. * Work with monthadar to fix up the mesh transmit path so it doesn't go via the parent interface when retransmitting frames. * Push the encryption handling back into the driver, if it's at all architectually sane to do so. I know it's possible - it's what mac80211 in Linux does. * Make ieee80211_raw_xmit() queue a frame into VAP or parent queue rather than doing a short-cut direct into the driver. There are QoS issues here - you do want your management frames to be encapsulated and pushed onto the stack sooner than the (large, bursty) amount of data frames that are queued. But there has to be a saner way to do this. * Fragments are still broken - drivers need to be upgraded to an if_transmit() implementation and then fragmentation handling needs to be properly fixed. Tested: * STA - AR5416, AR9280, Intel 5300 abgn wifi * Hostap - AR5416, AR9160, AR9280 * Mesh - some testing by monthadar@, more to come.
|
#
e7f0d7cf |
|
02-Oct-2012 |
Adrian Chadd <adrian@FreeBSD.org> |
Migrate the power-save functions to be overridable VAP methods. This turns ieee80211_node_pwrsave(), ieee80211_sta_pwrsave() and ieee80211_recv_pspoll() into methods. The intent is to let drivers override these and tie into the power save management pathway. For ath(4), this is the beginning of forcing a node software queue to stop and start as needed, as well as supporting "leaking" single frames from the software queue to the hardware. Right now, ieee80211_recv_pspoll() will attempt to transmit a single frame to the hardware (whether it be a data frame on the power-save queue or a NULL data frame) but the driver may have hardware/software queued frames queued up. This initial work is an attempt at providing the hooks required to implement correct behaviour. Allowing ieee80211_node_pwrsave() to be overridden allows the ath(4) driver to pause and unpause the entire software queue for a given node. It doesn't make sense to transmit anything whilst the node is asleep. Please note that there are other corner cases to correctly handle - specifically, setting the MORE data bit correctly on frames to a station, as well as keeping the TIM updated. Those particular issues can be addressed later.
|
#
8a3860d5 |
|
17-Jun-2012 |
Adrian Chadd <adrian@FreeBSD.org> |
Extend the radiotap code to be aware of the size of any extra vendor bitmaps that may occur. The way this works is: * the beginning of the radiotap frame has a 32 bit "radiotap" namespace bitmap; * if the vendor bitmap bit is set, then the next bitmap will be interpreted as a vendor bitmap; * this can keep going on and on (ie, more vendor and radiotap namespace bitmaps can be added) until the last bitmap with no "more bitmaps" set. Now, the radiotap code gets its grubby fingers into the supplied radiotap rx/tx buffer and replaces the channel configuration for each frame. I don't know why it's not up to the drivers themselves to do this, but I digress. So, if a vendor bitmap (or two, etc) exists, the offset calculations will be all completely wrong. This particular patch introduces ieee80211_radiotap_attachv(), which includes the number of vendor bitmaps (well, any other bitmaps, vendor or otherwise) between the end of the bitmap/header and the start of the actual radiotap field entries. This makes the radiotap calculations "right", so it correctly calculates where to overwrite the channel configuration. The long term fix is to go through and make each driver update the channel configuration, as some of the fields are already being updated. That, however, is a longer term fix that will need each driver fixed. I leave that as an exercise to someone in the future.
|
#
b94299c4 |
|
24-Mar-2012 |
Adrian Chadd <adrian@FreeBSD.org> |
Create a new task to handle 802.11n channel width changes. Currently, a channel width change updates the 802.11n HT info data in net80211 but it doesn't trigger any device changes. So the device driver may decide that HT40 frames can be transmitted but the last device channel set only had HT20 set. Now, a task is scheduled so a hardware reset or change isn't done during any active ongoing RX. It also means that it's serialised with the other task operations (eg channel change.) This isn't the final incantation of this work, see below. For now, any unmodified drivers will simply receive a channel change log entry. A subsequent patch to ath(4) will introduce some basic channel change handling (by resetting the NIC.) Other NICs may need to update their rate control information. TODO: * There's still a small window at the present moment where the channel width has been updated but the task hasn't been fired. The final version of this should likely pass in a channel width field to the driver and let the driver atomically do whatever it needs to before changing the channel. PR: kern/166286
|
#
fcd9500f |
|
17-Dec-2011 |
Bernhard Schmidt <bschmidt@FreeBSD.org> |
Fix some net80211 enum nits: - ic_vap_create() uses an ieee80211_opmode argument - ieee80211_rate2media() takes an ieee80211_phymode argument - ieee80211_plcp2rate() takes an ieee80211_phytype argument - cast to enum ieee80211_protmode and ieee80211_roamingmode to silence compiler warnings Submitted by: arundel@
|
#
32b0e64b |
|
07-Nov-2011 |
Adrian Chadd <adrian@FreeBSD.org> |
Add 802.11h quiet time element support into net80211. This supports both station and hostap modes: * Station mode quiet time element support listens to quiet time IE's and modifies the local quiet time configuration as appropriate; * Hostap mode both obeys the locally configured quiet time period and includes it in beacon frames so stations also can obey as needed. Submitted by: Himali Patel <himali.patel@sibridgetech.com> Sponsored by: Sibridge Technologies
|
#
a834836d |
|
20-Jun-2011 |
Adrian Chadd <adrian@FreeBSD.org> |
Add a callback for ADDBA response timeouts. TX for the given TID needs to be paused during ADDBA requests (and unpaused once the session is established.) Since net80211 currently doesn't implement software aggregation, if this pause/unpause is done in the driver (as it is in my development branch) then it will need to be unpaused both on ADDBA response and on ADDBA timeout. This callback allows the driver to unpause TX for the relevant TID. Reviewed by: bschmidt
|
#
ddea9b62 |
|
21-May-2011 |
Bernhard Schmidt <bschmidt@FreeBSD.org> |
Fix typo, it is MPDU not MDPU.
|
#
fbbe47a9 |
|
13-Mar-2011 |
Bernhard Schmidt <bschmidt@FreeBSD.org> |
First step on removing the harcoded RX/TX stream and MCS0-15 assumptions. Initialize ic_rxstream/ic_txstream with 2, for compatibility reasons. Introduce 4 new HTC flags, which are used in addition to ic_rxstream and ic_txstream to compute the hc_mcsset content and also for initializing ni_htrates. The number of spatial streams is enough to determine support for MCS0-31 but not for MCS32-76 as well as some TX parameters in the hc_mcsset field.
|
#
a7c6aabd |
|
06-Nov-2010 |
Bernhard Schmidt <bschmidt@FreeBSD.org> |
Instead of using the AMRR ratectl algo as default for drivers which have the IEEE80211_C_RATECTL flag set, default to NONE for all drivers. Only if a driver calls ieee80211_ratectl_init() check if the NONE algo is still selected and try to use AMRR in that case. Drivers are still free to use any other algo by calling ieee80211_ratectl_set() prior to the ieee80211_ratectl_init() call. After this change it is now safe to assume that a ratectl algo is always available and selected, which renders the IEEE80211_C_RATECTL flag pretty much useless. Therefore revert r211314 and 211546. Reviewed by: rpaulo MFC after: 2 weeks
|
#
a7d5f7eb |
|
19-Oct-2010 |
Jamie Gritton <jamie@FreeBSD.org> |
A new jail(8) with a configuration file, to replace the work currently done by /etc/rc.d/jail.
|
#
ad8e331b |
|
14-Aug-2010 |
Bernhard Schmidt <bschmidt@FreeBSD.org> |
Introduce IEEE80211_C_RATECTL, drivers which use the ratectl framework should set this capability. MFC after: 2 weeks
|
#
494793d6 |
|
24-May-2010 |
Andrew Thompson <thompsa@FreeBSD.org> |
MFC r202612 Use the iflladdr_event event to keep the mac address on the vap in sync with the parent wirless interface. If the user passed in a mac address or it was autogenerated then flag this to avoid trashing it on update. This will fix wlan+lagg in a post vap world.
|
#
82878b11 |
|
11-May-2010 |
Rui Paulo <rpaulo@FreeBSD.org> |
MFC r206367, r206358, r206370, r206371, r206372, r206398, r206415, r206416, r206417, r206418, r206418: net80211 ratectl framework.
|
#
dfe4a64b |
|
28-Apr-2010 |
Rui Paulo <rpaulo@FreeBSD.org> |
Add ic_rxstream and ic_txstream. These variables hold the number of RX streams and the number of TX streams respectively. Obtained from: //depot/user/rpaulo/80211n/... Sponsored by: iXsystems, inc.
|
#
b6108616 |
|
07-Apr-2010 |
Rui Paulo <rpaulo@FreeBSD.org> |
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
|
#
0a628155 |
|
07-Apr-2010 |
Rui Paulo <rpaulo@FreeBSD.org> |
MFC r205986: Constify vap argument of ieee80211_{note,discard}* functions.
|
#
d2bc4bf6 |
|
31-Mar-2010 |
Rui Paulo <rpaulo@FreeBSD.org> |
Constify vap argument of ieee80211_{note,discard}* functions. MFC after: 1 week
|
#
e1d36f83 |
|
22-Mar-2010 |
Rui Paulo <rpaulo@FreeBSD.org> |
Add a new field for extended HT capabilities. Submitted by: Alexander Egorenkov <egorenar at gmail.com> MFC after: 2 weeks Sponsored by: iXsystems, inc.
|
#
83fcb812 |
|
18-Jan-2010 |
Andrew Thompson <thompsa@FreeBSD.org> |
Use the iflladdr_event event to keep the mac address on the vap in sync with the parent wirless interface. If the user passed in a mac address or it was autogenerated then flag this to avoid trashing it on update. This will fix wlan+lagg in a post vap world.
|
#
73330dab |
|
08-Jan-2010 |
Edward Tomasz Napierala <trasz@FreeBSD.org> |
Fix #ifdefs so that GCC 4.4 doesn't complain about it. Reviewed by: rpaulo
|
#
59aa14a9 |
|
11-Jul-2009 |
Rui Paulo <rpaulo@FreeBSD.org> |
Implementation of the upcoming Wireless Mesh standard, 802.11s, on the net80211 wireless stack. This work is based on the March 2009 D3.0 draft standard. This standard is expected to become final next year. This includes two main net80211 modules, ieee80211_mesh.c which deals with peer link management, link metric calculation, routing table control and mesh configuration and ieee80211_hwmp.c which deals with the actually routing process on the mesh network. HWMP is the mandatory routing protocol on by the mesh standard, but others, such as RA-OLSR, can be implemented. Authentication and encryption are not implemented. There are several scripts under tools/tools/net80211/scripts that can be used to test different mesh network topologies and they also teach you how to setup a mesh vap (for the impatient: ifconfig wlan0 create wlandev ... wlanmode mesh). A new build option is available: IEEE80211_SUPPORT_MESH and it's enabled by default on GENERIC kernels for i386, amd64, sparc64 and pc98. Drivers that support mesh networks right now are: ath, ral and mwl. More information at: http://wiki.freebsd.org/WifiMesh Please note that this work is experimental. Also, please note that bridging a mesh vap with another network interface is not yet supported. Many thanks to the FreeBSD Foundation for sponsoring this project and to Sam Leffler for his support. Also, I would like to thank Gateworks Corporation for sending me a Cambria board which was used during the development of this project. Reviewed by: sam Approved by: re (kensmith) Obtained from: projects/mesh11s
|
#
5b16c28c |
|
05-Jul-2009 |
Sam Leffler <sam@FreeBSD.org> |
Add ieee80211_ageq; a facility for staging packets that require long-term work before they can be serviced. Packets are tagged and assigned an age (in seconds) at the point they are added to the queue. If a packet is not retrieved before it's age expires it is reclaimed. Tagging can take two forms: a reference to an ieee80211_node (as happens in the tx path) or an opaque token in cases where there is no reference or the node structure is not stable (i.e. it's going to be destroyed). o add ic_stageq to replace the per-node wds staging queue used for dynamic wds o add ieee80211_mac_hash for building ageq tokens; this computes a 32-bit hash from an 802.11 mac address (copied from the bridge) o while here fix a stray ';' noticed in IEEE80211_PSQ_INIT Reviewed by: rpaulo Approved by: re (kensmith)
|
#
76340123 |
|
05-Jul-2009 |
Sam Leffler <sam@FreeBSD.org> |
Revamp 802.11 action frame handling: o add a new facility for components to register send+recv handlers o ieee80211_send_action and ieee80211_recv_action now use the registered handlers to dispatch operations o rev ieee80211_send_action api to enable passing arbitrary data o rev ieee80211_recv_action api to pass the 802.11 frame header as it may be difficult to locate o update existing IEEE80211_ACTION_CAT_BA and IEEE80211_ACTION_CAT_HT handling o update mwl for api rev Reviewed by: rpaulo Approved by: re (kensmith)
|
#
2bfc8a91 |
|
07-Jun-2009 |
Sam Leffler <sam@FreeBSD.org> |
iv_flags_ext is full, make room by moving HT-related flags to a new iv_flags_ht word
|
#
5c0aa618 |
|
05-Jun-2009 |
Sam Leffler <sam@FreeBSD.org> |
o add bits for STBC and Greenfield o fix some comments
|
#
c70761e6 |
|
04-Jun-2009 |
Sam Leffler <sam@FreeBSD.org> |
o station mode channel switch support o IEEE80211_IOC_CHANSWITCH fixups: - restrict to hostap vaps - return EOPNOTSUPP instead of EINVAL when applied to !hostap vap or to a vap w/o 11h enabled - interpret count of 0 to mean cancel the current CSA Reviewed by: rpaulo, avatar
|
#
e1cfcbcb |
|
01-Jun-2009 |
Sam Leffler <sam@FreeBSD.org> |
Fix monitor mode vaps to work as intended: o track # bpf taps on monitor mode vaps instead of # monitor mode vaps o spam monitor mode taps on tx/rx o fix ieee80211_radiotap_rx_all to dispatch frames only if the vap is up o while here print radiotap (and superg) state in show com
|
#
a43cee70 |
|
01-Jun-2009 |
Sam Leffler <sam@FreeBSD.org> |
pad data structures to enable integration of future features w/o abi breakage
|
#
5463c4a4 |
|
20-May-2009 |
Sam Leffler <sam@FreeBSD.org> |
Overhaul monitor mode handling: o replace DLT_IEEE802_11 support in net80211 with DLT_IEEE802_11_RADIO and remove explicit bpf support from wireless drivers; drivers now use ieee80211_radiotap_attach to setup shared data structures that hold the radiotap header for each packet tx/rx o remove rx timestamp from the rx path; it was used only by the tdma support for debugging and was mostly useless due to it being 32-bits and mostly unavailable o track DLT_IEEE80211_RADIO bpf attachments and maintain per-vap and per-com state when there are active taps o track the number of monitor mode vaps o use bpf tap and monitor mode vap state to decide when to collect radiotap state and dispatch frames; drivers no longer explicitly directly check bpf state or use bpf calls to tap frames o handle radiotap state updates on channel change in net80211; drivers should not do this (unless they bypass net80211 which is almost always a mistake) o update various drivers to be more consistent/correct in handling radiotap o update ral to include TSF in radiotap'd frames o add promisc mode callback to wi Reviewed by: cbzimmer, rpaulo, thompsa
|
#
04f19fd6 |
|
02-May-2009 |
Sam Leffler <sam@FreeBSD.org> |
make superg/fast-frames state dynamically-allocated (and indirect off the com structure instead of embedded); this reduces the overhead when not configured and reduces visibility of the contents
|
#
5efea30f |
|
02-May-2009 |
Andrew Thompson <thompsa@FreeBSD.org> |
Create a taskqueue for each wireless interface which provides a serialised sleepable context for net80211 driver callbacks. This removes the need for USB and firmware based drivers to roll their own code to defer the chip programming for state changes, scan requests, channel changes and mcast/promisc updates. When a driver callback completes the hardware state is now guaranteed to have been updated and is in sync with net80211 layer. This nukes around 1300 lines of code from the wireless device drivers making them more readable and less race prone. The net80211 layer has been updated as follows - all state/channel changes are serialised on the taskqueue. - ieee80211_new_state() always queues and can now be called from any context - scanning runs from a single taskq function and executes to completion. driver callbacks are synchronous so the channel, phy mode and rx filters are guaranteed to be set in hardware before probe request frames are transmitted. Help and contributions from Sam Leffler. Reviewed by: sam
|
#
f2a6a13c |
|
26-Apr-2009 |
Sam Leffler <sam@FreeBSD.org> |
add IEEE80211_FEXT_4ADDR to indicate ieee80211_encap should do 4-address encapsulation when relaying frames; this reduces the cost of the test and enables use for situations other than "sta vap + dwds"
|
#
0510acbd |
|
26-Apr-2009 |
Sam Leffler <sam@FreeBSD.org> |
don't depend on includes to get definitions of struct ieee80211_tx_ampdu and ieee80211_rx_ampdu; these should've been part of r191552
|
#
51b5aba2 |
|
26-Apr-2009 |
Sam Leffler <sam@FreeBSD.org> |
allow drivers to hook ampdu rx start/stop
|
#
49eae5f7 |
|
26-Apr-2009 |
Sam Leffler <sam@FreeBSD.org> |
add iv_recv_ctl method to allow hooking rx ctl frame handling
|
#
279aa3d4 |
|
16-Apr-2009 |
Kip Macy <kmacy@FreeBSD.org> |
Change if_output to take a struct route as its fourth argument in order to allow passing a cached struct llentry * down to L2 Reviewed by: rwatson
|
#
9fb0fccb |
|
08-Apr-2009 |
Sam Leffler <sam@FreeBSD.org> |
o add a capability for drivers that require 802.3 encapsulation of frames passed down through the transmit path o mark ndis requiring 802.3 encap'd frames Reviewed by: "Paul B. Mahol" <onemda@gmail.com>, thompsa
|
#
339ccfb3 |
|
30-Mar-2009 |
Sam Leffler <sam@FreeBSD.org> |
Hoist 802.11 encapsulation up into net80211: o call ieee80211_encap in ieee80211_start so frames passed down to drivers are already encapsulated o remove ieee80211_encap calls in drivers o fixup wi so it recreates the 802.3 head it requires from the 802.11 header contents o move fast-frame aggregation from ath to net80211 (conditional on IEEE80211_SUPPORT_SUPERG): - aggregation is now done in ieee80211_start; it is enabled when the packets/sec exceeds ieee80211_ffppsmin (net.wlan.ffppsmin) and frames are held on a staging queue according to ieee80211_ffagemax (net.wlan.ffagemax) to wait for a frame to combine with - drivers must call back to age/flush the staging queue (ath does this on tx done, at swba, and on rx according to the state of the tx queues and/or the contents of the staging queue) - remove fast-frame-related data structures from ath - add ieee80211_ff_node_init and ieee80211_ff_node_cleanup to handle per-node fast-frames state (we reuse 11n tx ampdu state) o change ieee80211_encap calling convention to include an explicit vap so frames coming through a WDS vap are recognized w/o setting M_WDS With these changes any device able to tx/rx 3Kbyte+ frames can use fast-frames. Reviewed by: thompsa, rpaulo, avatar, imp, sephe
|
#
8407aa14 |
|
30-Mar-2009 |
Rui Paulo <rpaulo@FreeBSD.org> |
MFP mesh11s: Add mesh debugging bit replacing the now deprecated RADKEYS.
|
#
26d39e2c |
|
29-Mar-2009 |
Sam Leffler <sam@FreeBSD.org> |
o add ic_rt to track the rate table for the current channel; this enables calculation of packet transmit times to do things like check txop limits o remove equivalent driver code and convert to use net80211 state
|
#
29aca940 |
|
29-Mar-2009 |
Sam Leffler <sam@FreeBSD.org> |
Eliminate ic_myaddr so changing the mac address of a device works correctly: o remove ic_myaddr from ieee80211com o change ieee80211_ifattach to take the mac address of the physical device and use that to setup the lladdr. o replace all references to ic_myaddr in drivers by IF_LLADDR o related cleanups (e.g. kill dead code) PR: kern/133178 Reviewed by: thompsa, rpaulo
|
#
2bc3ce77 |
|
18-Mar-2009 |
Sam Leffler <sam@FreeBSD.org> |
Minor cleanups of tdma protocol handling: o break out version-related code to simplify rev'ing the protocol o add parameter validation macros so checks that appear multiple places are consistent (and easy to change) o add protocol version check when looking for a scan candidate o improve scan debug output format o rewrite beacon update handling to calculate a bitmask of changed values and pass that down through the driver callback so drivers can optimize work o do slot bounds check before use when parsing received beacons
|
#
d3f5f855 |
|
12-Feb-2009 |
Sam Leffler <sam@FreeBSD.org> |
remove ic_stats; it was intended to accumulate stats from vaps as they were reaped but was never used and is inaccessible
|
#
965c2303 |
|
11-Feb-2009 |
Sam Leffler <sam@FreeBSD.org> |
oops, fix octal escape sequence
|
#
5b610573 |
|
11-Feb-2009 |
Sam Leffler <sam@FreeBSD.org> |
fix mis-numbering of IEEE80211_MSG_BITS
|
#
5fe9f044 |
|
27-Jan-2009 |
Sam Leffler <sam@FreeBSD.org> |
change ic_getradiocaps driver callback to include the max # channels so callers know the size of the array passed down
|
#
3d13a955 |
|
27-Jan-2009 |
Sam Leffler <sam@FreeBSD.org> |
o make %b msg bit defines public (to user apps too) o rename IEEE80211_C_CRYPTO_BITS to IEEE80211_CRYPTO_BITS
|
#
10ad9a77 |
|
08-Jan-2009 |
Sam Leffler <sam@FreeBSD.org> |
TDMA support for long distance point-to-point links using ath devices: o add net80211 support for a tdma vap that is built on top of the existing adhoc-demo support o add tdma scheduling of frame transmission to the ath driver; it's conceivable other devices might be capable of this too in which case they can make use of the 802.11 protocol additions etc. o add minor bits to user tools that need to know: ifconfig to setup and configure, new statistics in athstats, and new debug mask bits While the architecture can support >2 slots in a TDMA BSS the current design is intended (and tested) for only 2 slots. Sponsored by: Intel
|
#
31378b1c |
|
14-Dec-2008 |
Sam Leffler <sam@FreeBSD.org> |
Fix definition of IEEE80211_CHAN_MAX; it was defined as 255 but really was meant to be 256. Adjust usage accordingly and replace bogus usage of this value in checking IEEE channel #'s. NB: this causes an ABI change; ifconfig must be recompiled
|
#
f7eb979a |
|
22-Nov-2008 |
Sam Leffler <sam@FreeBSD.org> |
correct sorting
|
#
63092fce |
|
25-Oct-2008 |
Sam Leffler <sam@FreeBSD.org> |
New ap-side power save implementation; the main change is to allow drivers to queue frames previously encapsulated on a separate high priority list that is dispatched before the unencapsulated frames (to preserve order).
|
#
cc71a422 |
|
25-Oct-2008 |
Sam Leffler <sam@FreeBSD.org> |
Sync BAR frame handling with out of tree work: o correct BAR frame construction for AMPDU o retransmit BAR frames until ACK'd or timeout (use tunables to control behaviour, default is very aggressive) o defer seq# update until BAR frame is ACK'd o add BAR response handling callback for driver to interpose and push new state to device or push pending aggregates While here also: o add backpointer to node in the per-tid tx aggregation data structure o move ampdu tx state setup/teardown work to separate functions
|
#
d7f03759 |
|
19-Oct-2008 |
Ulf Lilleengen <lulf@FreeBSD.org> |
- Import the HEAD csup code which is the basis for the cvsmode work.
|
#
44f7a6ed |
|
21-Sep-2008 |
Sam Leffler <sam@FreeBSD.org> |
RIFS support; needs driver callback for dynamic state change
|
#
8c070d69 |
|
21-Sep-2008 |
Sam Leffler <sam@FreeBSD.org> |
MIMO power save support; still needs callbacks for notifying drivers of dynamic state change in station mode.
|
#
e6e547d5 |
|
21-Sep-2008 |
Sam Leffler <sam@FreeBSD.org> |
Crypto api changes: o don't use the key index to identify when the driver has been asked to allocate a key slot, use an explicit flag; allows drivers to force s/w fallback for entries in the global table o change callback api to allocate driver resources for a crypto key: - de-const the key parameter so drivers can muck with the flags - on callback failure don't automatically try to setup s/w crypto; instead the driver must now mark the key entry for s/w crypto and the caller will re-attach the cipher module NB: api change permits drivers more control over fallback to s/w crypto (e.g. based on a limited number of h/w key slots)
|
#
38c208f8 |
|
07-Jun-2008 |
Sam Leffler <sam@FreeBSD.org> |
Change the calling convention for ic_node_alloc to deal with some longstanding issues: o pass the vap since it's now the "coin of the realm" and required to do things like set initial tx parameters in private node state for use prior to association o pass the mac address as cards that maintain outboard station tables require this to create an entry (e.g. in ibss mode) o remove the node table reference, we only have one node table and it's unlikely this will change so this is not needed to find the com structure
|
#
6076cbac |
|
28-May-2008 |
Sam Leffler <sam@FreeBSD.org> |
Add ieee80211_suspend_all and ieee80211_resume_all for brute force suspend/resume handling of vaps.
|
#
c43feede |
|
11-May-2008 |
Sam Leffler <sam@FreeBSD.org> |
Minor cleanup of vap create work: o add IEEE80211_C_STA capability to indicate sta mode is supported (was previously assumed) and mark drivers as capable o add ieee80211_opcap array to map an opmode to the equivalent capability bit o move IEEE80211_C_OPMODE definition to where capabilities are defined so it's clear it should be kept in sync (on future additions) o check device capabilities in clone create before trying to create a vap; this makes driver checks unneeded o make error codes return on failed clone request unique o temporarily add console printfs on clone request failures to aid in debugging; these will move under DIAGNOSTIC or similar before release
|
#
82fd2577 |
|
11-May-2008 |
Sam Leffler <sam@FreeBSD.org> |
add DFS capability bit and use it to auto-enable DFS support
|
#
b032f27c |
|
20-Apr-2008 |
Sam Leffler <sam@FreeBSD.org> |
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)
|
#
a557c018 |
|
22-Nov-2007 |
Sam Leffler <sam@FreeBSD.org> |
add ieee80211_find_channel_byieee to lookup a channel by ieee channel # Reviewed by: thompsa MFC after: 1 week
|
#
1b6167d2 |
|
01-Nov-2007 |
Sam Leffler <sam@FreeBSD.org> |
sync 11n support with vap code base; many changes based on interop testing with all major vendors MFC after: 1 week
|
#
b105a069 |
|
17-Sep-2007 |
Sam Leffler <sam@FreeBSD.org> |
Update beacon handling to sync w/ vap code base: o add driver callback to handle notification of beacon changes; this is required for devices that manage beacon frames themselves (devices must override the default handler which does nothing) o move beacon update-related flags from ieee80211com to the beacon offsets storage (or handle however a driver wants) o expand beacon offsets structure with members needed for 11h/dfs and appie's o change calling convention for ieee80211_beacon_alloc and ieee80211_beacon_update o add overlapping bss support for 11g; requires driver to pass beacon frames from overlapping bss up to net80211 which is not presently done by any driver o move HT beacon contents update to a routine in the HT code area Reviewed by: avatar, thompsa, sephe Approved by: re (blanket wireless)
|
#
c066143c |
|
05-Sep-2007 |
Sam Leffler <sam@FreeBSD.org> |
Fixup sta inactivity handling: o reset ni_inact when ni_inact_reload is changed so we're assured a valid setting o never let ni_inact go negative o add a knob to disable hostap sta idle handling (e.g. so it can be done by a user application) o remove bogus reload on associate Reviewed by: avatar Approved by: re (blanket wireless)
|
#
68e8e04e |
|
10-Jun-2007 |
Sam Leffler <sam@FreeBSD.org> |
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.
|
#
ae8b7333 |
|
05-Jun-2007 |
Sam Leffler <sam@FreeBSD.org> |
copyright updates: o update to include 2007 o switch back to a 2-clause bsd-only license Reviewed by: onoe
|
#
6dbd16f1 |
|
11-Mar-2007 |
Sam Leffler <sam@FreeBSD.org> |
change ic_modecaps to a bit vector and use setbit, et. al.
|
#
a000d7c2 |
|
11-Mar-2007 |
Sam Leffler <sam@FreeBSD.org> |
expose IEEE80211_DISCARD, IEEE80211_DISCARD_IE, and IEEE80211_DISCARD_MAC so they can be used within net80211 but outside ieee80211_input.c MFC after: 2 weeks
|
#
f48ad55e |
|
05-Mar-2007 |
Sam Leffler <sam@FreeBSD.org> |
correct conversions between TU and ms/ticks; these are not used by any code in the tree[1] and are close enough for common values that this change is a noop [1] ath uses one macro to calculate a value that is not used Submitted by: sephe MFC after: 1 week
|
#
fe1903bc |
|
05-Jan-2007 |
Kip Macy <kmacy@FreeBSD.org> |
fix declaration / definition mismatch with ieee80211_chan2ieee
|
#
41b3c790 |
|
27-Dec-2006 |
Sam Leffler <sam@FreeBSD.org> |
First cut at half/quarter-rate 11a channel support (e.g. for use in the Public Safety Band): o add channel flags to identify half/quarter-rate operation o add rate sets (need to check spec on 4Mb/s in 1/4 rate) o add if_media definitions for new rates o split net80211 channel setup out into ieee80211_chan_init o fixup ieee80211_mhz2ieee and ieee80211_ieee2mhz to understand half/quarter rate channels: note we temporarily use a nonstandard/hack numbering that avoids overlap with 2.4G channels because we don't (yet) have enough state to identify and/or map overlapping channel sets o fixup ieee80211_ifmedia_init so it can be called post attach and will recalculate the channel list and associated state; this enables changing channel-related state like the regulatory domain after attach (will be needed for 802.11d support too) o add ieee80211_get_suprates to return a reference to the supported rate set for a given channel o add 3, 4.5, and 27 MB/s tx rates to rate <-> media conversion routines o const-poison channel arg to ieee80211_chan2mode
|
#
344a9e8c |
|
26-Nov-2006 |
Sam Leffler <sam@FreeBSD.org> |
add rate control debug msg bit MFC after: 1 month
|
#
246b5467 |
|
25-Jul-2006 |
Sam Leffler <sam@FreeBSD.org> |
add support for 802.11 packet injection via bpf Together with: Andrea Bittau <a.bittau@cs.ucl.ac.uk> Reviewed by: arch@ MFC after: 1 month
|
#
202b0d11 |
|
25-Jul-2006 |
Sam Leffler <sam@FreeBSD.org> |
o move min/max beacon interval and dtim period to public location o add min/max beacon miss threshold settings o delete IEEE80211_SWBMISS_THRESHOLD, it was never used MFC after: 2 weeks
|
#
097131ff |
|
06-Mar-2006 |
Sam Leffler <sam@FreeBSD.org> |
when scanning channels marked passive defer probe request until 802.11 traffic is seen; fixes problems with ap's hiding their ssid Obtained from: atheros MFC after: 1 week
|
#
97bcffbd |
|
14-Feb-2006 |
Sam Leffler <sam@FreeBSD.org> |
o make driver override of net80211 parameter state consistent with methods: instead of honoring non-zero values expect drivers to write their own values on return from ieee80211_ifattach o add a define for the default h/w bmiss count MFC after: 2 weeks
|
#
e99662a6 |
|
23-Jan-2006 |
Sam Leffler <sam@FreeBSD.org> |
s/w beacon miss facility; need to add knobs to fiddle with the settings MFC after: 2 weeks
|
#
233e0021 |
|
23-Jan-2006 |
Sam Leffler <sam@FreeBSD.org> |
switch beacon miss threshold from a time to the number of beacon frames; the time value was implicitly based on the beacon interval but never being updated so wrong when the negotiated beacon interval was not 100 TU
|
#
0912bac9 |
|
02-Jan-2006 |
Sam Leffler <sam@FreeBSD.org> |
update erp information element in the beacon frame to reflect changes in the bss Reviewed by: avatar Obtained from: atheros MFC after: 2 weeks
|
#
9a9162de |
|
29-Dec-2005 |
Sam Leffler <sam@FreeBSD.org> |
correct (reversed) ms<->tu macros Reviewed by: apatti, kcyu
|
#
c27e4e31 |
|
14-Dec-2005 |
Sam Leffler <sam@FreeBSD.org> |
make packet bursting configurable (default to on if device is capable)
|
#
e701e041 |
|
12-Dec-2005 |
Sam Leffler <sam@FreeBSD.org> |
Add ieee80211_beacon_miss for processing sta mode beacon miss events in the 802.11 layer: we send a directed probe request frame to the current ap bmiss_max times (w/o answer) before scanning for a new ap. MFC after: 2 weeks
|
#
64353cb0 |
|
12-Dec-2005 |
Sam Leffler <sam@FreeBSD.org> |
add fixed rate for sending multicast frames Obtained from: atheros MFC after: 1 week
|
#
6f322b78 |
|
14-Nov-2005 |
Sam Leffler <sam@FreeBSD.org> |
Update ieee80211_mhz2ieee to understand public safety bands and spectrum that can potentially be mapped to negative ieee #'s. NB: before operation on the latter can be supported we need to cleanup various code that assumes ieee channel #'s are >= 0
|
#
b5c99415 |
|
10-Aug-2005 |
Sam Leffler <sam@FreeBSD.org> |
Clarify/fix handling of the current channel: o add ic_curchan and use it uniformly for specifying the current channel instead of overloading ic->ic_bss->ni_chan (or in some drivers ic_ibss_chan) o add ieee80211_scanparams structure to encapsulate scanning-related state captured for rx frames o move rx beacon+probe response frame handling into separate routines o change beacon+probe response handling to treat the scan table more like a scan cache--look for an existing entry before adding a new one; this combined with ic_curchan use corrects handling of stations that were previously found at a different channel o move adhoc neighbor discovery by beacon+probe response frames to a new ieee80211_add_neighbor routine Reviewed by: avatar Tested by: avatar, Michal Mertl MFC after: 2 weeks
|
#
d365f9c7 |
|
07-Aug-2005 |
Sam Leffler <sam@FreeBSD.org> |
Cleanup beacon/listen interval handling: o separate configured beacon interval from listen interval; this avoids potential use of one value for the other (e.g. setting powersavesleep to 0 clobbers the beacon interval used in hostap or ibss mode) o bounds check the beacon interval received in probe response and beacon frames and drop frames with bogus settings; not clear if we should instead clamp the value as any alteration would result in mismatched sta+ap configuration and probably be more confusing (don't want to log to the console but perhaps ok with rate limiting) o while here up max beacon interval to reflect WiFi standard Noticed by: Martin <nakal@nurfuerspam.de> MFC after: 1 week
|
#
e9962332 |
|
22-Jul-2005 |
Sam Leffler <sam@FreeBSD.org> |
simplify ic_newassoc callback MFC after: 3 days
|
#
edfa57d0 |
|
22-Jul-2005 |
Sam Leffler <sam@FreeBSD.org> |
simplify tim callback api MFC after: 3 days
|
#
33acb1ce |
|
22-Jul-2005 |
Sam Leffler <sam@FreeBSD.org> |
o add IEEE80211_FRAG_DEFAULT o move default settings for RTS and frag thresholds to ieee80211_var.h
|
#
2c39b32c |
|
22-Jul-2005 |
Sam Leffler <sam@FreeBSD.org> |
diff reduction against p4: define IEEE80211_FIXED_RATE_NONE and use it instead of -1
|
#
af8d224e |
|
22-Jul-2005 |
Sam Leffler <sam@FreeBSD.org> |
add flags missed in last merge
|
#
f6df3191 |
|
22-Jul-2005 |
Sam Leffler <sam@FreeBSD.org> |
Diff reduction against p4: o add ic_flags_ext for eventual extention of ic_flags o define/reserve flag+capabilities bits for superg, bg scan, and roaming support o refactor debug msg macros MFC after: 3 days
|
#
c4f040c3 |
|
06-Jul-2005 |
Sam Leffler <sam@FreeBSD.org> |
add "pureg" mode for ap operation: reject association requests from 11b-only stations when operating in 11g Reviewed by: avatar Approved by: re (scottl)
|
#
a634d6a7 |
|
08-Jun-2005 |
Sam Leffler <sam@FreeBSD.org> |
o collect dtim period+count from beacons in station mode so drivers can better program beacon timers o leave placeholder in com structure for future ap/adhoc mode tim support Reviewed by: avatar
|
#
2ffc548f |
|
24-Jan-2005 |
Sam Leffler <sam@FreeBSD.org> |
o clarify that beacon interval settings are in TU's, not ms o add macros to convert between TU's and ms
|
#
acc4f7f5 |
|
24-Jan-2005 |
Sam Leffler <sam@FreeBSD.org> |
statically allocate the station/neighbor node table; the deferred allocation scheme introduced a race condition during device state transitions
|
#
1f1d7810 |
|
31-Dec-2004 |
Sam Leffler <sam@FreeBSD.org> |
bump copyright for 2005
|
#
dfefa312 |
|
31-Dec-2004 |
Sam Leffler <sam@FreeBSD.org> |
add ieee80211_hdrspace and ieee80211_anyhdrspace to calculate the space for an ieee80211 header taking into account padding requirements
|
#
8a1b9b6a |
|
08-Dec-2004 |
Sam Leffler <sam@FreeBSD.org> |
Update 802.11 support; too much new functionality to fully describe here but it includes completed 802.11g, WPA, 802.11i, 802.1x, WME/WMM, AP-side power-save, crypto plugin framework, authenticator plugin framework, and access control plugin frameowrk.
|
#
3055cc14 |
|
05-Apr-2004 |
Sam Leffler <sam@FreeBSD.org> |
eliminate nested include by making MALLOC_DECLARE conditional on the inclusion of <sys/malloc.h> Submitted by: bde
|
#
566a6538 |
|
04-Apr-2004 |
Sam Leffler <sam@FreeBSD.org> |
export the malloc type M_80211_NODE for drivers that override the node allocation routines
|
#
750d6d0c |
|
02-Apr-2004 |
Sam Leffler <sam@FreeBSD.org> |
fix adhoc/ibss operation for drivers that require host support (e.g. ath): o remove IEEE80211_C_RCVMGT capability o on transmit craft new nodes as needed using new ieee80211_find_txnode routine o add ieee80211_find_txnode routine to lookup a node by mac address and if not present create one when operating in ibss/ahdemo mode; new nodes are dup'd from bss and the driver is told to treat the node as if a new association has been created so driver-private state (e.g. rate control handling) is setup Obtained from: netbsd (basic idea)
|
#
2e79ca97 |
|
30-Mar-2004 |
Sam Leffler <sam@FreeBSD.org> |
o add support for controlling the power of transmitted frames o add support for controlling the 11g protection mechanism used to protect OFDM frames in a mixed 11b/g network Reviewed by: imp
|
#
4844aa7d |
|
15-Jan-2004 |
Atsushi Onoe <onoe@FreeBSD.org> |
Add support for FH phy, which will be used by awi driver. Also some if_media constants to indicate operational mode are changed to bitmasks to reduce diffs from NetBSD.
|
#
1be50176 |
|
17-Oct-2003 |
Sam Leffler <sam@FreeBSD.org> |
add statistics for all failures and/or abnormal events; still need to add per-node statistics
|
#
8b92bf47 |
|
17-Oct-2003 |
Sam Leffler <sam@FreeBSD.org> |
correct comment
|
#
7f7ecba4 |
|
17-Oct-2003 |
Sam Leffler <sam@FreeBSD.org> |
o add capability to indicate if device receives all management frames o use recv mgmt capability to decide if outbound frames should be discarded if no node table entry is present
|
#
303ebc3c |
|
26-Sep-2003 |
Sam Leffler <sam@FreeBSD.org> |
Try yet again to deal with timing out nodes. We cannot hold the node lock while sending a management frame as this will potentially result in a LOR with a driver lock. This doesn't happen for the Atheros driver but does for the wi driver. Use a generation number to help process each node once when scanning the node table and drop the node lock if we need to timeout a node and send a frame.
|
#
d1e61976 |
|
15-Sep-2003 |
Sam Leffler <sam@FreeBSD.org> |
Generalize the per-node RSSI data so drivers can do more interesting things than record a single value. o add a per-node method for returning the "current RSSI" for a node o create a default method that returns ni_rssi which is the rssi for the last received frame o use the per-node "get rssi" method to return data for the RID's submitted by wicontrol, et. al. Loosely based on work by Tom Marshall <tommy@home.tig-grr.com> for MADWIFI.
|
#
0a915fad |
|
19-Aug-2003 |
Sam Leffler <sam@FreeBSD.org> |
MFp4 changes to fix locking issues and correct reference count handling of station entries in hostap mode: Input path: o driver is now expected to find the node associated with the sender of a received frame; use ic_bss if none is located o driver passes the (referenced) node into ieee80211_input for use within the wlan module and is responsible for cleaning up on return o the antenna state is no longer passed up with each frame; this is now considered driver-private state and drivers are responsible for keeping it in the driver-private part of a node Output path: Revamp output path for management frames to eliminate redundant locking that causes problems and to correct reference counting bogosity that occurs when stations are timed out due to inactivity (in AP mode). On output the refcnt'd node is stashed in the pkthdr's recvif field (yech) and retrieved by the driver. This eliminates an unref/ref scenario and related node table unlock/lock due to the driver looking up the node. This is particularly important when stations are timed out as this causes a lock order reversal that can result in a deadlock. As a byproduct we also reduce the overhead for sending management frames (minimal). Additional fallout from this is a change to ieee80211_encap to return a refcn't node for tieing to the outbound frame. Node refcnts are not reclaimed until after a frame is completely processed (e.g. in the tx interrupt handler). This is especially important for timed out stations as this deref will be the final one causing the node entry to be reclaimed. Additional semi-related changes: o replace m_copym use with m_copypacket (optimization) o add assert to verify ic_bss is never free'd during normal operation o add comments explaining calling conventions by drivers for frames going in each direction o remove extraneous code that "cannot be executed" (e.g. because pointers may never be null)
|
#
2bbe529d |
|
20-Jul-2003 |
Sam Leffler <sam@FreeBSD.org> |
add monitor mode
|
#
a11c9a5c |
|
20-Jul-2003 |
Sam Leffler <sam@FreeBSD.org> |
o change ieee80211_new_state handling to use a proper method that drivers override in their sub-class; this eliminates the hack of interpreting the EINPROGRESS return value to mean "don't do any of the normal work" o correct active scanning so the first channel is only scanned once and so per-channel passive mode is properly honored o expose 802.11 FSM state names so every driver doesn't keep a private copy o eliminate node parameter to ieee80211_begin_scan; it was not being used
|
#
7535e66a |
|
26-Jun-2003 |
Sam Leffler <sam@FreeBSD.org> |
revise copyright notices per discussion with Atsushi Onoe <onoe@sm.sony.co.jp>
|
#
1a1e1d21 |
|
23-Jun-2003 |
Sam Leffler <sam@FreeBSD.org> |
new 802.11 layer: o code reorg (relative to old netbsd-derived code) for future growth o drivers now specify available channels and rates and 802.11 layer handles almost all ifmedia actions o multi-mode support for 11a/b/g devices o 11g protocol additions (incomplete) o new element id additions (for other than 11g) o node/station table redone for proper locking and to eliminate driver incestuousness o split device flags and capabilities to reduce confusion and provide room for expansion o incomplete power management infrastructure (need to revisit) o incomplete hooks for software retry o more...
|