#
8cb9b68f |
|
09-Jan-2024 |
John Baldwin <jhb@FreeBSD.org> |
sys: Use mbufq_empty instead of comparing mbufq_len against 0 Reviewed by: bz, emaste Sponsored by: Chelsio Communications Differential Revision: https://reviews.freebsd.org/D43338
|
#
69773116 |
|
09-Jan-2024 |
John Baldwin <jhb@FreeBSD.org> |
net80211 amdpu: Simplify a few loops that drain an mbufq These loops already handled a NULL return from mbufq_dequeue when the queue was empty, so remove a redundant check of mbufq_len before dequeueing. Reviewed by: bz Sponsored by: Chelsio Communications Differential Revision: https://reviews.freebsd.org/D43336
|
#
fdafd315 |
|
24-Nov-2023 |
Warner Losh <imp@FreeBSD.org> |
sys: Automated cleanup of cdefs and other formatting Apply the following automated changes to try to eliminate no-longer-needed sys/cdefs.h includes as well as now-empty blank lines in a row. Remove /^#if.*\n#endif.*\n#include\s+<sys/cdefs.h>.*\n/ Remove /\n+#include\s+<sys/cdefs.h>.*\n+#if.*\n#endif.*\n+/ Remove /\n+#if.*\n#endif.*\n+/ Remove /^#if.*\n#endif.*\n/ Remove /\n+#include\s+<sys/cdefs.h>\n#include\s+<sys/types.h>/ Remove /\n+#include\s+<sys/cdefs.h>\n#include\s+<sys/param.h>/ Remove /\n+#include\s+<sys/cdefs.h>\n#include\s+<sys/capsicum.h>/ Sponsored by: Netflix
|
#
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
|
#
685dc743 |
|
16-Aug-2023 |
Warner Losh <imp@FreeBSD.org> |
sys: Remove $FreeBSD$: one-line .c pattern Remove /^[\s*]*__FBSDID\("\$FreeBSD\$"\);?\s*\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
|
#
2f53b599 |
|
14-Apr-2023 |
Mikhail Pchelin <misha@FreeBSD.org> |
net80211: fix a typo in Rx MCS set for unequal modulation case RX MCS set defines which MCSs are supported for RX, bits 0-31 are for equal modulation of the streams, bits 33-76 are for unequal case. Current code checks txstreams variable instead of rxstreams to set bits from 53 to 76 for 4 spatial streams case. The modulations are defined in tables 19-38 and 19-41 of the IEEE Std 802.11-2020. Spotted by bz in https://reviews.freebsd.org/D39476 Reviewed by: bz Approved by: bz Sponsored by: Serenity Cybersecurity, LLC Differential Revision: https://reviews.freebsd.org/D39568
|
#
ea26545c |
|
14-Apr-2023 |
Mikhail Pchelin <misha@FreeBSD.org> |
net80211: wrong transmit MCS set in HT cap IE Current code checks whether or not txstreams are equal to rxstreams and if it isn't - sets needed bits in "Transmit MCS Set". But if they are equal it sets whole set to zero, which contradicts the standard, if tx and rx streams are equal 'Tx MCS Set Defined' (table 9-186, IEEE Std 802.11-2020) must be set to one. Reviewed by: bz Approved by: bz Sponsored by: Serenity Cybersecurity, LLC Differential Revision: https://reviews.freebsd.org/D39476
|
#
bd29f817 |
|
17-Aug-2022 |
Bjoern A. Zeeb <bz@FreeBSD.org> |
net80211: consistently use the IEEE80211_M_ memory related options Replace a malloc() by IEEE80211_MALLOC(). For malloc flags even in the local ieee80211_freebsd.c there was a mix of both versions M_ and IEEE80211_M_. Consistently use the IEEE80211_M_ malloc options everywhere. If the field is changed for malloc, it'll also be changed for the other accessor functions taking a "how" field to avoid any confusion. Sponsored by: The FreeBSD Foundation MFC after: 1 week Reviewed by: adrian Differential Revision: https://reviews.freebsd.org/D36249
|
#
05ea7a3e |
|
24-Nov-2021 |
Bjoern A. Zeeb <bz@FreeBSD.org> |
net80211: fix -Wunused-but-set-variable warnings Put the offending variables under the appropriate #ifdefs (mostly IEEE80211_DEBUG, in one case IEEE80211_SUPPORT_SUPERG, and in two cases under __notyet__ to revisit why these had been left there but not used). Sponsored by: The FreeBSD Foundation MFC after: 10 days
|
#
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
|
#
662c1305 |
|
01-Sep-2020 |
Mateusz Guzik <mjg@FreeBSD.org> |
net: clean up empty lines in .c and .h files
|
#
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
|
#
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
|
#
e81d9092 |
|
13-Jun-2020 |
Adrian Chadd <adrian@FreeBSD.org> |
[net80211] Handle offloaded AMSDU in AMPDU reordering. In the 11n world, most NICs did A-MPDU receive/transmit offloading but not A-MSDU offloading. So, the net80211 A-MPDU receive path would just receive MPDUs, do the reordering bit, pass it up to the rest of net80211 for crypto decap and then do A-MSDU decap before throwing ethernet frames up to the rest of the system. However 11ac and 11ax NICs are increasingly doing A-MSDU offload (and newer 11ax stuff does socket offload, but hey I don't want to scare people JUST yet) - so although A-MPDU reordering may be done in the OS, A-MSDUs look like a normal MPDU. This means that all the MSDUs are actually faked into a set of MPDUs with matching 802.11 header - the sequence number, QoS header and any encryption verification bits (like IV) are just copied. This shows up as MASSIVE packet loss in net80211, cause after the first MPDU we just toss the rest. (And don't get me started about ethernet decap with A-MPDU host reordering; we'll have to cross that bridge for later 11ac and 11ax bits too.) Anyway, this work changes each A-MPDU reorder slot into an mbufq. The mbufq is treated as a whole set of frames to pass up to the stack and reordered/de-duped as a group. The last frame in the reorder list is checked to see if it's an A-MSDU final frame so any duplicates are correctly tossed rather than double-received. Other than that, the rest of the logic is unchanged. The previous commit did a small subset of this - if there wasn't any reordering going on then it'd accept the A-MSDUs. This is the rest of the needed work. This is a no-op for 11n NICs doing A-MPDU reordering but needing software A-MSDU decap - they aren't tagged as A-MSDU and so any subsequent frames added to the reorder slot are tossed. Tested: * QCA9880 (ath10k/athp) - STA/AP mode; * RT3593 (if_rsu) - 11n STA+DWDS mode (I'm committing through it rn); * QCA9380 (if_ath) - STA/AP mode.
|
#
a67acf11 |
|
11-Jun-2020 |
Adrian Chadd <adrian@FreeBSD.org> |
[net80211] First part of A-MSDU offload handling - don't bump A-MPDU reordering seqno When doing A-MSDU offload handling the driver is required to mark A-MSDUs from the same MPDU with the same sequence number. It then tags them as AMSDU (if it's a decap'ed A-MSDU) and AMSDU_MORE (saying there's more AMSDUs decapped in the same MSDU.) This allows encryption and sequence number offload to work right. In the A-MSDU path the sequence number check looks at the A-MSDU flags in the frame to see whether it's part of the same seqno and will pass them (ie, not increment rx_seq until the last A-MSDU is seen from the driver, or a new seqno shows up.0 However, I did this work in the A-MSDU path but not the A-MSDU in A-MPDU path. For the non A-MDSU offload case the A-MPDU receive reordering will do its thing and then pass up the MPDU up for decap - which then will see it's an A-MSDU and decap each sub-frame. But this isn't done for offloaded A-MSDU frames. This requires two parts: * Don't bump the RX sequence number, same as above; and * If frames go into the reordering buffer, they need to be added into the slot as a set of frames rather than a single frame, so once a new seqno shows up this slot can be marked as "full" and we can move on. This patch does the first. The latter requires that I find and commit work to change rxa_m from an mbuf to an mbufq and the nhandle A-MSDU there. But, the first is enough to allow the normal case (ie, no or not a lot of A-MPDU RX reordering) to work. This allows the athp driver (QCA9880) throughput to go from VERY low (like 5mbit TCP, 1/3-1/4 expected UDP throughput) to ~ 250mbit TCP and > 300mbit UDP on a VHT/40 channel. TCP sucks because, well, it shows up as MASSIVE packet loss when all but one frame in a decap'ed A-MSDU stream is dropped. Le whoops. Now, where'd I put that laptop with the patch for rxa_m mbufq that I wrote like in 2017... Tested: * AR9380, STA/AP mode (a big no-op, no A-MSDU hardware decap); * if_run (RT3593), STA DWDS mode (A-MPDU / A-MSDU receive, but again no A-MSDU hardware decap); * QCA9880, STA/AP mode (which is doing hardware A-MPDU/A-MSDU decap, but no A-MPDU reordering in the firmware.)
|
#
ebb9b256 |
|
05-Jun-2020 |
Adrian Chadd <adrian@FreeBSD.org> |
[net80211] Add initial A-MSDU in A-MPDU negotation support. This is hopefully a big no-op unless you're running some extra patches to flip on A-MSDU options in a driver. 802.11n supports sending A-MSDU in A-MPDU. That lets you do things like pack small frames into an A-MSDU and stuff /those/ into an A-MPDU. It allows for much more efficient airtime because you're not wasting time sending small frames - which is still a problem when doing A-MPDU as there's still per-frame overhead and minimum A-MPDU density requirements. It, however, is optional for 802.11n. A lot of stuff doesn't advertise it (but does it, just wait!); and I know that ath10k does it and my ath(4) driver work supports it. Now, 802.11ac makes A-MSDU in A-MPDU something that can happen more frequently, because even though you can send very large A-MPDUs (like 1 megabyte and larger) you still have the small frame problem. So, 802.11ac NICs like ath10k and iwm will support A-MSDU in A-MPDU out of the box if it's enabled - and you can negotiate it. So, let's lay down the ground work to enable A-MSDU in A-MPDU. This will allow hardware like iwn(4) and ath(4) which supports software A-MSDU but hardware A-MPDU to be more efficient. Drivers that support A-MSDU in A-MPDU will set TX/RX htcap flags. Note this is separate from the software A-MSDU encap path; /that/ dictates whether net80211 is doing A-MSDU encapsulation or not. These HTC flags control negotiation, NOT encapsulation. Once this negotiation and driver bits are done, hardware like rtwn(4), run(4), and others will be able to use A-MSDU even without A-MPDU working; right now FF and A-MSDU aren't even attempted if you're an 11n node. It's a small hold-over from the initial A-MPDU work and I know how to fix it, but to flip it on properly I need to be able to negotiate or ignore A-MSDU in A-MPDU. Oh and the fun part - some 11ac APs I've tested will quite happily decap A-MSDU in A-MPDU even though they don't negotiate it when doing 802.11n. So hey, I know it works - I just want to properly handle things. :-) Tested: * AR9380, STA/AP mode
|
#
7280f374 |
|
05-Jun-2020 |
Adrian Chadd <adrian@FreeBSD.org> |
[net80211] Add some TODOs around A-MSDU in A-MPDU negotiation. net80211 currently doesn't negotiate A-MSDU in A-MPDU during ADDBA. I've added the field in net80211 and this commit: * Prints out the ADDBA field value during ADDBA; * Adds some comments around where I need to follow up with some negotiation logic. Right now we don't have a driver flag anywhere which controls whether A-MSDU in A-MPDU is allowed. I know it works (I have it manually turned on at home on a couple test APs, heh!) but I can't flip it on until we can negotiate it. Tested: * AR9380, STA/AP mode, printing out ADDBA requests
|
#
08f5e6bb |
|
21-Feb-2020 |
Pawel Biernacki <kaktus@FreeBSD.org> |
Mark more nodes as CTLFLAG_MPSAFE or CTLFLAG_NEEDGIANT (7 of many) r357614 added CTLFLAG_NEEDGIANT to make it easier to find nodes that are still not MPSAFE (or already are but aren’t properly marked). Use it in preparation for a general review of all nodes. This is non-functional change that adds annotations to SYSCTL_NODE and SYSCTL_PROC nodes using one of the soon-to-be-required flags. Mark all low hanging fruits as MPSAFE. Reviewed by: markj Approved by: kib (mentor, blanket) Differential Revision: https://reviews.freebsd.org/D23626
|
#
f35b8451 |
|
17-Mar-2019 |
Andriy Voskoboinyk <avos@FreeBSD.org> |
net80211: correct check for SMPS node flags updates Update node flags when driver supports SMPS, not when it is disabled or in dynamic mode ((iv_htcaps & HTCAP_SMPS) != 0). Checked with RTL8188EE (1T1R), STA mode - 'smps' word should disappear from 'ifconfig wlan0' output. MFC after: 2 weeks
|
#
f3f08e16 |
|
10-Feb-2019 |
Andriy Voskoboinyk <avos@FreeBSD.org> |
net80211(4): hide casts for 'i_seq' field offset calculation inside ieee80211_getqos() and reuse it in various places. Checked with RTL8188EE, HOSTAP mode + RTL8188CUS, STA mode. MFC after: 2 weeks
|
#
caa7e52f |
|
26-Dec-2017 |
Eitan Adler <eadler@FreeBSD.org> |
kernel: Fix several typos and minor errors - duplicate words - typos - references to old versions of FreeBSD Reviewed by: imp, benno
|
#
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.
|
#
85c4e670 |
|
19-May-2017 |
Adrian Chadd <adrian@FreeBSD.org> |
[net80211] prepare for A-MSDU/A-MPDU offload crypto / sequence number checking. When doing AMSDU offload, the driver (for now!) presents 802.11 frames with the same sequence number and crypto sequence number / IV values up to the stack. But, this will trip afoul over the sequence number detection. So drivers now have a way to signify that a frame is part of an offloaded AMSDU group, so we can just ensure that we pass those frames up to the stack. The logic will be a bit messy - the TL;DR will be that if it's part of the previously seen sequence number then it belongs in the same burst. But if we get a repeat of the same sequence number (eg we sent an ACK but the receiver didn't hear it) then we shouldn't be passing those frames up. So, we can't just say "all subframes go up", we need to track whether we've seen the end of a burst of frames for the given sequence number or not, so we know whether to actually pass them up or not. The first part of doing all of this is to ensure the ieee80211_rx_stats struct is available in the RX sequence number check path and the RX ampdu reorder path. So, start by passing the pointer into these functions to avoid doing another lookup. The actual support will come in a subsequent commit once I know the functionality actually works!
|
#
82bd08ee |
|
11-Apr-2017 |
Adrian Chadd <adrian@FreeBSD.org> |
[net80211] refactor out "add slot" and "purge slot" for A-MPDU. This is in preparation for A-MSDU decap in A-MPDU support. * refactor out the code to purge a single reorder slot into ampdu_rx_purge_slot(). * refactor out the code to add a frame to the given reorder slot to ampdu_rx_add_slot(). This should be a big no-op as far as current code is concerned. Tested: * QCA9880v2, STA mode (11ac) * iwn(4), STA mode (11n) Reviewed by: avos Differential Revision: https://reviews.freebsd.org/D10328
|
#
2d6ab41d |
|
05-Apr-2017 |
Adrian Chadd <adrian@FreeBSD.org> |
[net80211] refactor out the A-MPDU dispatch routine. The "dispatch a frame from the A-MPDU reorder buffer" code is essentially duplicated in a couple of places. This refactors it out into a single place in preparation for A-MSDU in A-MPDU offload support, where multiple A-MSDUs are decap'ed in hardware to 802.3/802.11 frames, but with the same sequence number. Reviewed by: avos Differential Revision: https://reviews.freebsd.org/D10240
|
#
b06dfd58 |
|
02-Apr-2017 |
Adrian Chadd <adrian@FreeBSD.org> |
[net80211] refactor the A-MPDU RX window code The RX window update code is effectively the same in both locations. Reviewed by: avos Differential Revision: https://reviews.freebsd.org/D10208
|
#
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
|
#
9764ef21 |
|
29-Jan-2017 |
Adrian Chadd <adrian@FreeBSD.org> |
[net80211] address seqno allocation for group addressed frames After some digging and looking at packet traces, it looks like the sequence number allocation being done by net80211 doesn't meet 802.11-2012. Specifically, group addressed frames (broadcast, multicast) have sequence numbers allocated from a separate pool, even if they're QoS frames. This patch starts to try and address this, both on transmit and receive. * When receiving, don't throw away multicast frames for now. It's sub-optimal, but until we correctly track group addressed frames via another TID counter, this is the best we can do. * When doing A-MPDU checks, don't include group addressed frames in the sequence number checks. * When transmitting, don't allocate group frame sequence numbers from the TID, instead use the NONQOS TID for allocation. This may fix iwn(4) 11n because I /think/ this was one of the handful of places where ni_txseqs[] was being assigned /outside/ of the driver itself. This however doesn't completely fix things - notably the way that TID assignment versus WME assignment for driver hardware queues will mess up multicast ordering. For example, if all multicast QoS frames come from one sequence number space but they're expected to obey the QoS value assigned, they'll end up in different queues in the hardware and go out in different orders. I can't fix that right now and indeed fixing it will require some pretty heavy lifting of both the WME<->TID QoS assignment, as well as figuring out what the correct way for drivers to behave. For example, both iwn(4) and ath(4) shouldn't put QoS multicast traffic into the same output queue as aggregate traffic, because the sequence numbers are all wrong. So perhaps the correct thing to do there is ignore the WME/TID for QoS traffic and map it all to the best effort queue or something, and ensure it doesn't muck up the TID/blockack window tracking. However, I'm /pretty/ sure that is still going to happen. .. maybe I should disable multicast QoS frames in general as well, but I don't know what that'll do for whatever the current state of 802.11s mesh support is. Tested: * STA mode, ath10k NIC * AP mode, AR9344/AR9580 AP * iperf tcp/udp tests with concurrent multicast QoS traffic. Before this, iperfs would fail pretty quickly because the sending AP would start sending out QoS multicast frames that would be out of order from the rest of the TID traffic, causing the blockack window to get way, way out of sync. This now doesn't occur. TODO: * verify which QoS frames SHOULD be tagged as M_AMPDU_MPDU. For example, QoS NULL frames shouldn't be tagged! Reviewed by: avos Differential Revision: https://reviews.freebsd.org/D9357
|
#
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
|
#
51172f62 |
|
13-Jan-2017 |
Adrian Chadd <adrian@FreeBSD.org> |
[net80211] Initial VHT node upgrade/downgrade support and initial IE parsing. This is the bulk of the magic to start enabling VHT channel negotiation. It is absolutely, positively not yet even a complete VHT wave-1 implementation. * parse IEs in scan, assoc req/resp, probe req/resp; * break apart the channel upgrade from the HT IE parsing - do it after the VHT IEs are parsed; * (dirty! sigh) add channel width decision making in ieee80211_ht.c htinfo_update_chw(). This is the main bit where negotiated channel promotion through IEs occur. * Shoehorn in VHT node init ,teardown, rate control, etc calls like the HT versions; * Do VHT channel adjustment where appropriate Tested: * monitor mode, ath10k port * STA mode, ath10k port - VHT20, VHT40, VHT80 modes TODO: * IBSS; * hostap; * (ignore mesh, wds for now); * finish 11n state engine - channel width change, opmode notifications, SMPS, etc; * VHT basic rate negotiation and acceptance criteria when scanning, associating, etc; * VHT control/management frame handling (group managment and operating mode being the two big ones); * Verify TX/RX VHT rate negotiation is actually working correctly. Whilst here, add some comments about seqno allocation and locking. To achieve the full VHT rates I need to push seqno allocation into the drivers and finally remove the IEEE80211_TX_LOCK() I added years ago to fix issues. :/
|
#
3d12d1f1 |
|
21-Nov-2016 |
Adrian Chadd <adrian@FreeBSD.org> |
[net80211] Remove extra \n.
|
#
339be86f |
|
10-Nov-2016 |
Adrian Chadd <adrian@FreeBSD.org> |
[net80211] implement "first RX defines the BAW" hack. Unfortunately (sigh) some firmware doesn't provide the RX BA starting point, so we need to cope and set a "close enough" sequence number so we (hopefully!) don't discard frames as duplicates. Tested: * QCA9880v2, athp driver (under development), STA mode
|
#
0cc02885 |
|
06-Nov-2016 |
Adrian Chadd <adrian@FreeBSD.org> |
[net80211] add a method to also explicitly tear down RX A-MPDU. The ath10k firmware API doesn't pass up the ADDBA/DELBA frames, only WMI firmware notifications. Tested: * ath10k (QCA9880), doing actual (ha!) 11n!
|
#
562b9792 |
|
13-Oct-2016 |
Adrian Chadd <adrian@FreeBSD.org> |
[net80211] remove now duplicate copy of the QOSDATA check macro.
|
#
f383e58f |
|
16-Sep-2016 |
Adrian Chadd <adrian@FreeBSD.org> |
[net80211] add a HT method to populate HTCAP based on IBSS requirements. IBSS negotiation is a subset of the STA/AP negotiation. We always have a current channel, so base the HT capabilities on the current channel. This is then put into IBSS probe requests to inform peers of our 11n capabilities.
|
#
6dbbec93 |
|
19-May-2016 |
Andriy Voskoboinyk <avos@FreeBSD.org> |
net80211: fix more compiler warnings. ieee80211.c: add_chanlist(): 'error' variable will be uninitialized if no channels were passed; return '0' instead. ieee80211_action.c: ieee80211_send_action_register(): drop 'break' after 'return'. ieee80211_crypto_none.c: none_encap(): 'keyid' is not used in non-debug builds; hide it behind IEEE80211_DEBUG ifdef. ieee80211_freebsd.c: Staticize global 'ieee80211_debug' variable (used only in this file). ieee80211_hostap.c: Fix a comment (associatio -> association). ieee80211_ht.c: ieee80211_setup_htrates(): initialize 'maxunequalmcs' to 0 to mute compiler warning. ieee80211_hwmp.c: hwmp_recv_preq(): copy 'prep' between conditional blocks to fix -Wshadow warning. ieee80211_mesh.c: mesh_newstate(): remove duplicate 'ni' definition. mesh_recv_group_data(): fix -Wempty-body warning in non-debug builds. ieee80211_phy.c: ieee80211_compute_duration(): remove 'break' after panic() call. ieee80211_scan_sta.c: Hide some TDMA-specific macros under IEEE80211_SUPPORT_TDMA ifdef adhoc_pick_bss(): remove 'ic' pointer redefinition. ieee80211_sta.c: sta_beacon_miss(): remove 'ic' pointer redefinition. ieee80211_superg.c: superg_ioctl_set80211(): drop unreachable return. Tested with clang 3.8.0, gcc 4.6.4 and gcc 5.3.0.
|
#
ced0a895 |
|
04-May-2016 |
Adrian Chadd <adrian@FreeBSD.org> |
[net80211] add extra debugging around negotiated A-MPDU parameters.
|
#
a4641f4e |
|
03-May-2016 |
Pedro F. Giffuni <pfg@FreeBSD.org> |
sys/net*: minor spelling fixes. No functional change.
|
#
5706199d |
|
25-Apr-2016 |
Adrian Chadd <adrian@FreeBSD.org> |
[net80211] add STBC capability flags to iv_flags_ht. This is in preparation for exposing configuring STBC flags up to ifconfig so STBC TX/RX can be configured at runtime. * Set the FHT_STBC flags for TX/RX if the HT capabilitiex exist * Clear the RX STBC HT capability flag when creating a HTCAP IE, so we only announce it if it's configured in the FHT flags. Tested: * AR9331 (carambola2), AP/STA modes
|
#
d72d72d3 |
|
20-Apr-2016 |
Andriy Voskoboinyk <avos@FreeBSD.org> |
net80211: provide descriptions for reason codes Add text description for deauth/disassoc/etc reason codes in addition to 'reason: <number>' string. Reviewed by: adrian Obtained from: IEEE Std 802.11-2012, 8.4.1.7 "Reason Code field" Differential Revision: https://reviews.freebsd.org/D5367
|
#
31021a2b |
|
20-Apr-2016 |
Andriy Voskoboinyk <avos@FreeBSD.org> |
net80211: replace internal LE_READ_*/LE_WRITE_* macro with system le*dec / le*enc functions. Replace net80211 specific macros with system-wide bytestream encoding/decoding functions: - LE_READ_2 -> le16dec - LE_READ_4 -> le32dec - LE_WRITE_2 -> le16enc - LE_WRITE_4 -> le32enc + drop ieee80211_input.h include, where it was included for these operations only. Reviewed by: adrian Differential Revision: https://reviews.freebsd.org/D6030
|
#
b4fb3d6e |
|
09-Apr-2016 |
Adrian Chadd <adrian@FreeBSD.org> |
[net80211] correctly (i hope, wow) do a ticks comparison to limit A-MPDU attempts I was seeing the stack constantly attempt to renegotiate A-MPDU TX even after 3 failures. My hunch is that the direct ticks comparison is failing around the ticks wrap-around point. This failure shouldn't /really/ happen normally, but it turns out being the IBSS master node on FreeBSD doesn't quite setup 11n right, so negotiating A-MPDU TX fails.
|
#
6548c62c |
|
09-Apr-2016 |
Adrian Chadd <adrian@FreeBSD.org> |
[net80211] unconditionally do A-MPDU RX aging. It's 2016 and vendors (including us!) still have 802.11n TX/RX sequence handling bugs. It's suboptimal, but I'd rather see us default to handling things in a sensible way. So, just delete the #ifdef'ed code for now. I'll leave the option in so it doesn't break existing configurations. This all started because I've started getting reports about urtwn not working after I enabled 802.11n support, and it's because the ARM kernel configs don't include A-MPDU RX aging.
|
#
5cf581e2 |
|
09-Apr-2016 |
Adrian Chadd <adrian@FreeBSD.org> |
[net80211] log the node pointer when calling ht node init/cleanup This makes it easier to track which node is having what done do it during normal use. This is likely the eighth time I've done this since I started doing net80211 development, so I think it's about time I just committed it.
|
#
b8e29e06 |
|
29-Mar-2016 |
Adrian Chadd <adrian@FreeBSD.org> |
[net80211] migrate the time_* macros to ieee80211_* namespace. It turns out that these will clash very annoyingly with the linux macros in the linuxkpi layer, so let the wookie^Wlinux win. The only user that I can find is ath(4), so fix it there too.
|
#
8ec07310 |
|
01-Feb-2016 |
Gleb Smirnoff <glebius@FreeBSD.org> |
These files were getting sys/malloc.h and vm/uma.h with header pollution via sys/mbuf.h
|
#
75426752 |
|
25-Nov-2015 |
Adrian Chadd <adrian@FreeBSD.org> |
[net80211] log the A-MPDU setup attempt count as part of debugging. I've seen some cases where we get stuck in a loop constantly trying to negotiate A-MPDU TX which is definitely not supposed to happen. This will let me see if it's something funky with the retry count or not.
|
#
d7621b8c |
|
27-Sep-2015 |
Adrian Chadd <adrian@FreeBSD.org> |
Abstract out the ampdu TX pps initialisation code so it can be reused in the superg fast-frames code. This harks back to an earlier commit (r280349) where I found that initialising the pps code with ticks=0 would cause hilariously bad hz ticks wraparound failures, leading to never actually aggregating traffic. This is still true for the superg path and so I have to do the same thing there. This is a big no-op; a subsequent commit will flip this on so it works with the fast-frames transmit path. Tested: * AR9170, otus(4) - STA mode, 11bg operation * AR9331, AP mode
|
#
163f8705 |
|
21-Sep-2015 |
Adrian Chadd <adrian@FreeBSD.org> |
Add external facing methods to control TX A-MPDU negotiaton. Some fullmac devices may rely on the stack starting it but not doing it. Whilst here, remove a duplicate LE_* macro definition, thanks to Andriy Voskoboinyk <s3erios@gmail.com>.
|
#
1f3a8d11 |
|
17-Sep-2015 |
Adrian Chadd <adrian@FreeBSD.org> |
Add an external facing function to manually set the RX A-MPDU parameters for re-ordering. Devices like if_rsu don't pass through action/management frames but do send firmware commands to inform us of things. One of those notifications is the RX A-MPDU negotiated parameters.
|
#
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.
|
#
fd90e2ed |
|
22-May-2015 |
Jung-uk Kim <jkim@FreeBSD.org> |
CALLOUT_MPSAFE has lost its meaning since r141428, i.e., for more than ten years for head. However, it is continuously misused as the mpsafe argument for callout_init(9). Deprecate the flag and clean up callout_init() calls to make them more consistent. Differential Revision: https://reviews.freebsd.org/D2613 Reviewed by: jhb MFC after: 2 weeks
|
#
3265af35 |
|
10-May-2015 |
Adrian Chadd <adrian@FreeBSD.org> |
Attempt to address Bug #176201 - don't advertise what the AP announced to us. Instead, advertise what we can do based on what the AP says and what we're capped at by the VAP settings. For non-STA modes we still advertise what our VAP settings are. It may be that I've over-complicated this and instead of capping things we can just always announce what we're capable of. But this should at least stop the blatantly wrong handling of A-MPDU parameters. (I'll happily simplify things if someone can dig up a replacement, better compliant behaviour.) PR: kern/176201
|
#
83249cea |
|
22-Mar-2015 |
Adrian Chadd <adrian@FreeBSD.org> |
Initialise the pps / packet tracking timestamp so 11n aggregation works again. There's a bug in the ticks handling where when initialised at '0', once the ticks counter wrapped the comparison math would never trigger. The pps calculation would never happen, and thus aggregation was never enabled. It manifests itself as "oh you only get 11n transmit aggregation for the first 10 minutes of uptime." I'm sure there are other ticks related issues lurking in net80211. Tested: * ath / iwn, both with 'wlandebug +11n' and a little bit of iperf to kick off the transmit A-MPDU negotiation once the pps gets high enough.
|
#
f0188618 |
|
21-Oct-2014 |
Hans Petter Selasky <hselasky@FreeBSD.org> |
Fix multiple incorrect SYSCTL arguments in the kernel: - Wrong integer type was specified. - Wrong or missing "access" specifier. The "access" specifier sometimes included the SYSCTL type, which it should not, except for procedural SYSCTL nodes. - Logical OR where binary OR was expected. - Properly assert the "access" argument passed to all SYSCTL macros, using the CTASSERT macro. This applies to both static- and dynamically created SYSCTLs. - Properly assert the the data type for both static and dynamic SYSCTLs. In the case of static SYSCTLs we only assert that the data pointed to by the SYSCTL data pointer has the correct size, hence there is no easy way to assert types in the C language outside a C-function. - Rewrote some code which doesn't pass a constant "access" specifier when creating dynamic SYSCTL nodes, which is now a requirement. - Updated "EXAMPLES" section in SYSCTL manual page. MFC after: 3 days Sponsored by: Mellanox Technologies
|
#
76039bc8 |
|
26-Oct-2013 |
Gleb Smirnoff <glebius@FreeBSD.org> |
The r48589 promised to remove implicit inclusion of if_var.h soon. Prepare to this event, adding if_var.h to files that do need it. Also, include all includes that now are included due to implicit pollution via if_var.h Sponsored by: Netflix Sponsored by: Nginx, Inc.
|
#
5b58efc6 |
|
10-May-2013 |
Adrian Chadd <adrian@FreeBSD.org> |
Fix a VAP BSS node reference in the HT code to actually take a reference before using said node. The "blessed" way here is to take a node reference before referencing anything inside the node, otherwise the node can be freed between the time the pointer is copied/dereferenced and the time the node contents are used. This mirrors fixes that I've done elsewhere in the net80211/driver stack. PR: kern/178470
|
#
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.
|
#
0ef1bc21 |
|
27-Oct-2012 |
Adrian Chadd <adrian@FreeBSD.org> |
Add some further BAR TX debugging; it was useful when figuring out when BAR TX was actually failing.
|
#
545c8862 |
|
22-May-2012 |
Adrian Chadd <adrian@FreeBSD.org> |
Fix some corner cases in the ieee80211_send_bar() handling. * If the first call succeeded but failed to transmit, a timer would reschedule it via bar_timeout(). Unfortunately bar_timeout() didn't check the return value from the ieee80211_send_bar() reattempt and if that failed (eg the driver ic_raw_xmit() failed), it would never re-arm the timer. * If BARPEND is cleared (which ieee80211_send_bar() will do if it can't TX), then re-arming the timer isn't enough - once bar_timeout() occurs, it'll see BARPEND is 0 and not run through the rest of the routine. So when rearming the timer, also set that flag. * If the TX wasn't occuring, bar_tx_complete() wouldn't be called and the driver callback wouldn't be called either. So the driver had no idea that the BAR TX attempt had failed. In the ath(4) case, TX would stay paused. (There's no callback to indicate that BAR TX had failed or not; only a "BAR TX was attempted". That's a separate, later problem.) So call the driver callback (ic_bar_response()) before the ADDBA session is torn down, so it has a chance of being notified that things didn't quite go to plan. I've verified that yes, this does suspend traffic for ath(4), retry BAR TX even if the driver is failing ic_raw_xmit(), and then eventually giving up and sending a DELBA. I'll address the "out of ath_buf" issue in ath(4) in a subsequent commit - this commit just fixes the edge case where any driver is (way) out of internal buffers/descriptors and fails frame TX. PR: kern/168170 Reviewed by: bschmidt MFC after: 1 month
|
#
2aa563df |
|
15-Apr-2012 |
Adrian Chadd <adrian@FreeBSD.org> |
Migrate the net80211 TX aggregation state to be from per-AC to per-TID. TODO: * Test mwl(4) more thoroughly! Reviewed by: bschmidt (for iwn)
|
#
fcacf931 |
|
07-Apr-2012 |
Adrian Chadd <adrian@FreeBSD.org> |
Add some statistics to track BAR TX.
|
#
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
|
#
65d22fe9 |
|
02-Jan-2012 |
Bernhard Schmidt <bschmidt@FreeBSD.org> |
MCS32 equals 32, not 8*ic_txstream.
|
#
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@
|
#
198af96e |
|
19-Aug-2011 |
Adrian Chadd <adrian@FreeBSD.org> |
Correctly handle BAR TX failures. On a TX failure, ic_raw_xmit will still call ieee80211_node_free(). There's no need to call it here. Submitted by: moonlightakkiy@yahoo.ca Approved by: re (kib)
|
#
6291312c |
|
16-Aug-2011 |
Adrian Chadd <adrian@FreeBSD.org> |
Fix BAR frame TX completion - successful transmission is indicated by a status of 0. Approved by: re (kib)
|
#
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
|
#
bf1f9222 |
|
04-Jun-2011 |
Bernhard Schmidt <bschmidt@FreeBSD.org> |
Certain adapters have HT40 support on some but not all channels. The Intel 4965 devices for example have HT40 on 2GHz completely disabled but it is still supported for 5GHz. To handle that in sta mode we need to check if we can "upgrade" to a HT40 channel after the association, if that is not possible but we are still announcing support to the remote side we are left with a very flabby connection. Reviewed by: adrian
|
#
8dc8c1f7 |
|
13-Mar-2011 |
Bernhard Schmidt <bschmidt@FreeBSD.org> |
Constantly use MHz instead of Mhz. Pointed out by: N.J. Mann <njm at njm.me.uk>
|
#
597029bf |
|
12-Mar-2011 |
Bernhard Schmidt <bschmidt@FreeBSD.org> |
Honor device capabilities while initializing ni_htrates. Instead of hardcoding MCS0-15 generate the table dynamically, also restrict the MCS rates to our own capabilities while parsing a htcap element.
|
#
d8e14b5e |
|
13-Mar-2011 |
Bernhard Schmidt <bschmidt@FreeBSD.org> |
Fill hc_mcsset completely. Contrary to the rateset information in legacy frames the MCS Set field also contains TX capability information in cases where the number of available TX and RX spartial streams differ. Because a rateset doesn't contain that information we have to pull the those directly from the hardware capabilities.
|
#
bffb67e3 |
|
13-Mar-2011 |
Bernhard Schmidt <bschmidt@FreeBSD.org> |
Change the way HT capatibilities are announced. Get rid of the assumption that every device is capable of 40MHz, SGI and 2 spartial streams. Instead of printing, in the worst case, 8 times 76 MCS rates, print logically connect ranges and the support RX/TX streams. A device without 40MHz and SGI support looks like: ath0: 2T2R ath0: 11na MCS 20Mhz ath0: MCS 0-7: 6.5Mbps - 65Mbps ath0: MCS 8-15: 13Mbps - 130Mbps ath0: 11ng MCS 20Mhz ath0: MCS 0-7: 6.5Mbps - 65Mbps ath0: MCS 8-15: 13Mbps - 130Mbps
|
#
f136f45f |
|
10-Mar-2011 |
Bernhard Schmidt <bschmidt@FreeBSD.org> |
Complete the MCS rate table based on the final 802.11n std. While here adjust the IEEE80211_HTRATE_MAXSIZE constant, only MCS0 - 76 are valid the other bits in the mcsset IE (77 - 127) are either reserved or used for TX parameters.
|
#
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.
|
#
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.
|
#
fec0a521 |
|
18-Mar-2010 |
Rui Paulo <rpaulo@FreeBSD.org> |
Unbreak build by removing a code bit that is only related to other code in my branch.
|
#
0917631f |
|
18-Mar-2010 |
Rui Paulo <rpaulo@FreeBSD.org> |
Fix a couple of bugs with 802.11n: o Process the BAR frame on the adhoc, mesh and sta modes o Fix the format of the ADDBA reply frame o Fix references to the spec section numbers Also, print the all the MCS rates in bootverbose. Sponsored by: iXsystems, Inc. Obtained from: //depot/user/rpaulo/80211n/...
|
#
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)
|
#
32bdd57b |
|
09-Jun-2009 |
Sam Leffler <sam@FreeBSD.org> |
Correct ieee80211_gettid: o don't increment extracted tid, this was a vestige of IEEE80211_NONQOS_TID being defined as 0 (w/ real tid's +1) o handle 4-address frames (add IEEE80211_IS_DSTODS to check if an 802.11 header is DSTODS) Submitted by: cbzimmer Reviewed by: avatar
|
#
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
|
#
a77b10b3 |
|
30-May-2009 |
Sam Leffler <sam@FreeBSD.org> |
distribute sysctl decls so global variables can be made static
|
#
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
|
#
51b5aba2 |
|
26-Apr-2009 |
Sam Leffler <sam@FreeBSD.org> |
allow drivers to hook ampdu rx start/stop
|
#
8ac160cd |
|
25-Oct-2008 |
Sam Leffler <sam@FreeBSD.org> |
o change ieee80211_mgmt_output to take a raw xmit parameters block so the net80211 layer has complete control over the handling of mgt frames (in particular, the ac, tx rate, and retry count); this also allows us to purge the M_LINK0 flag that was attached to mbufs to mark them as needing encryption for shared key auth o change ieee80211_send_setup to take a tid parameter so it can be used to setup QoS frames
|
#
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.
|
#
86c55fc4 |
|
21-Sep-2008 |
Sam Leffler <sam@FreeBSD.org> |
cleanup after merge
|
#
49942a97 |
|
21-Sep-2008 |
Sam Leffler <sam@FreeBSD.org> |
Fix handling of shortgi: use the local configuration (and implicitly device capabilities) to decide whether to use short gi. Drivers inspect ni_flags to decide whether to send a frame w/ short sgi.
|
#
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.
|
#
fdabd982 |
|
21-Sep-2008 |
Sam Leffler <sam@FreeBSD.org> |
Revamp ht ie handling: o change ieee80211_parse_htcap and ieee80211_parse_htinfo to save only internal state obtained from the ie's; no dynamic state such as ni_chw is altered o add ieee80211_ht_updateparams to parse ht cap+info ie's and update dynamic node state o change ieee80211_ht_node_init to not take an htcap ie that is parsed; instead have the caller make a separate call as one caller wants to parse the ie while another wants to parse both cap+info ie's and update state so can better do this with ieee80211_ht_updateparams These changes fix sta mode state handling where the node's channel width was shifted to ht20/ht40 prematurely.
|
#
bd985970 |
|
21-Sep-2008 |
Sam Leffler <sam@FreeBSD.org> |
don't propagate ht bss occupancy changes to legacy vaps; they won't have an htinfo ie to update
|
#
3c1a492e |
|
21-Sep-2008 |
Sam Leffler <sam@FreeBSD.org> |
change ieee80211_ampdu_stop to take an explicit reason code
|
#
af4ec66e |
|
21-Sep-2008 |
Sam Leffler <sam@FreeBSD.org> |
simplify debug msg
|
#
45f856e3 |
|
21-Sep-2008 |
Sam Leffler <sam@FreeBSD.org> |
Cleanup AMPDU handling: For receive: o explicitly tag rx frames w/ M_AMPDU instead of passing frames through the reorder processing according to the node having HT and the frame being QoS data o relax ieee80211_ampdu_reorder asserts to allow any frame to be passed in, unsuitable frames are returned to the caller for normal processing; this permits drivers that cannot inspect the PLCP to mark all data frames as potential ampdu candidates with only a small penalty o add M_AMPDU_MPDU to identify frames resubmitted from the reorder q For transmit: o tag aggregation candidates with M_AMPDU_MPDU o fix the QoS ack policy set in ampdu subframes; we only support immediate BA streams which should be marked for "normal ack" to get implicit block ack behaviour; interestingly certain vendor parts BA'd frames with the 11e BA ack policy set o do not assign a sequence # to aggregation candidates; this must be done when frames are submitted for transmit (NB: this can/will be handled better when aggregation is pulled up to net80211)
|
#
b69b7fe7 |
|
21-Sep-2008 |
Sam Leffler <sam@FreeBSD.org> |
Always update ic_lastnonht so we track overlapping legacy bss properly; was doing this only on a change in the protection mode so the advertised protection mode in the beacon would oscillate. Submitted by: Chris Zimmermann
|
#
c5f9511e |
|
21-Sep-2008 |
Sam Leffler <sam@FreeBSD.org> |
Cleanup starting seq# for tx ampdu: o use txa_start to form the addba request and purge txa_seqstart o fill txa_start before calling ic_addba_request to permit drivers to override when they handle seq# generation (e.g. mwl)
|
#
c54fbb33 |
|
06-Sep-2008 |
Sam Leffler <sam@FreeBSD.org> |
o kill IEEE80211_NODE_PSUPDATE; it was never used o kill IEEE80211_NODE_CHWUPDATE; it's use was pointless and it was defined wrong (overlap w/ existing flags)
|
#
c0756f5f |
|
06-Sep-2008 |
Sam Leffler <sam@FreeBSD.org> |
put back placeholder comment
|
#
eaff8e26 |
|
06-Sep-2008 |
Sam Leffler <sam@FreeBSD.org> |
o validate the ba policy in addba response o leave a check for the max ba window disabled; we accept out of range values and just truncate them but may want to act differently in the future
|
#
9c62b7d4 |
|
06-Sep-2008 |
Sam Leffler <sam@FreeBSD.org> |
add IEEE80211_NODE_HT_ALL to collect up all the HT-related node flags
|
#
1582f256 |
|
06-Sep-2008 |
Sam Leffler <sam@FreeBSD.org> |
don't do ampdu reordering of fragments; they should never happen
|
#
33b9a974 |
|
06-Sep-2008 |
Sam Leffler <sam@FreeBSD.org> |
moreve the aggregation q; it's not being used and there's a better way to do this
|
#
d3d6c952 |
|
02-Aug-2008 |
Sam Leffler <sam@FreeBSD.org> |
add missing lock for htinfo update Submitted by: Chris Zimmermann
|
#
4d5ed460 |
|
05-Jul-2008 |
Sam Leffler <sam@FreeBSD.org> |
correct construction of delba action frame; don't shift+mask the initiator argument Submitted by: Marvell
|
#
7f514436 |
|
11-May-2008 |
Sam Leffler <sam@FreeBSD.org> |
use the current left edge of the BA window when forming ADDBA request so an existing session is re-established with the correct seq#
|
#
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)
|
#
ddc53684 |
|
01-Feb-2008 |
Sam Leffler <sam@FreeBSD.org> |
o correct typo that broke check when handling addba response o add a comment about the ht rates being for 20MHz channels w/ long GI; needs a separate fix after more thought MFC after: 3 days
|
#
849b4d99 |
|
22-Nov-2007 |
Sam Leffler <sam@FreeBSD.org> |
correct sta mode setup: adopt ap's ampdu density and max ampdu size instead of using local settings MFC after: 3 days
|
#
0c99c16b |
|
08-Nov-2007 |
Sam Leffler <sam@FreeBSD.org> |
correct termination check doing amsdu de-aggregation MFC after: 3 days
|
#
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
|
#
f0ee92d5 |
|
18-Sep-2007 |
Sam Leffler <sam@FreeBSD.org> |
o add IEEE80211_RATE_MCS to use instead of naked constant (for marking MCS) o correct ieee80211_rate2media handling of MCS o correct rate HT announcements for 11n devices Approved by: re (blanket wireless)
|
#
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)
|
#
eddedabe |
|
05-Sep-2007 |
Sam Leffler <sam@FreeBSD.org> |
Miscellaneous fixups to 802.11 defs: o update 11n definitions to D2.0 spec o add IEEE80211_CAPINFO_SPECTRUM_MGMT for DFS support o add CSA ie definition for DFS support o purge some unused definitions o correct 802.11 reason and status codes o correct reason code returned when a sta tries to associate to an ap operating with WPA/RSN but without a WPA/RSN ie Reviewed by: thompsa, 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.
|