#
272461 |
|
02-Oct-2014 |
gjb |
Copy stable/10@r272459 to releng/10.1 as part of the 10.1-RELEASE process.
Approved by: re (implicit) Sponsored by: The FreeBSD Foundation |
#
256281 |
|
10-Oct-2013 |
gjb |
Copy head (r256279) to stable/10 as part of the 10.0-RELEASE cycle.
Approved by: re (implicit) Sponsored by: The FreeBSD Foundation
|
#
254315 |
|
14-Aug-2013 |
rpaulo |
Replace the homegrown implementation of nitems() with calls to nitems() (param.h).
Operating systems that don't have nitems() can easily define it on their own net80211 OS-specific header file.
Discussed with: adrian
|
#
254082 |
|
08-Aug-2013 |
adrian |
Convert net80211 over to using if_transmit for the dispatch from the upper layer(s).
This eliminates the if_snd queue from net80211. Yay!
This unfortunately has a few side effects:
* It breaks ALTQ to net80211 for now - sorry everyone, but fixing parallelism and eliminating the if_snd queue is more important than supporting this broken traffic scheduling model. :-)
* There's no VAP and IC flush methods just yet - I think I'll add some NULL methods for now just as placeholders.
* It reduces throughput a little because now net80211 will drop packets rather than buffer them if the driver doesn't do its own buffering. This will be addressed in the future as I implement per-node software queues.
Tested:
* ath(4) and iwn(4) in STA operation
|
#
254076 |
|
07-Aug-2013 |
adrian |
Allow net80211 to compile on stable/9 and stable/8.
|
#
249925 |
|
26-Apr-2013 |
glebius |
Add const qualifier to the dst parameter of the ifnet if_output method.
|
#
248069 |
|
08-Mar-2013 |
adrian |
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.
|
#
242149 |
|
26-Oct-2012 |
adrian |
Fix up some initial issues with creation and deletion of hotplugged net80211 devices and vaps.
* vnet sets vnet0 during kldload and device probe/attach, but not for the hotplug event. Thus, plugging in a NIC causes things to panic. So, add a CURVNET_SET(vnet0) for now during the attach phase, until the hotplug code is taught to set CURVNET_SET(vnet0).
* there's also no implied detach vnet context - so teach the detach path about ifp->if_vnet.
* When creating/deleting vaps, also set the vnet context appropriately. These can be done at any time.
Now, the problems!
* ieee80211.c is supposed to be OS-portable code, with no OS-specific stuff like vnet. That should be fixed.
* When the device hotplug code gets taught about CURVNET_SET(vnet0), the device vnet set can go away; but the VAP vnet set still needs to be there.
* .. and there still is the question about potentially adding an implied CURVNET_SET(ifp->if_vnet) on if_free(), since any/all devices may end up being detached by a hotplug event in today's world. That's going to be a topic of a subsequent commit.
|
#
233452 |
|
25-Mar-2012 |
adrian |
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
|
#
230447 |
|
22-Jan-2012 |
adrian |
Mark the taskqueue as the _net80211_ taskqueue.
This makes it much easier to determine whether an event occurs in the net80211 taskqueue (which was called "ath0 taskq") or the ath driver taskqueue (which is also called "ath0 taskq".)
|
#
228621 |
|
17-Dec-2011 |
bschmidt |
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@
|
#
219599 |
|
13-Mar-2011 |
bschmidt |
While determining the maxrate for ieee80211_media_setup() honor the device capabilities.
|
#
219596 |
|
13-Mar-2011 |
bschmidt |
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.
|
#
219456 |
|
10-Mar-2011 |
bschmidt |
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.
|
#
214894 |
|
06-Nov-2010 |
bschmidt |
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
|
#
211314 |
|
14-Aug-2010 |
bschmidt |
Introduce IEEE80211_C_RATECTL, drivers which use the ratectl framework should set this capability.
MFC after: 2 weeks
|
#
207554 |
|
03-May-2010 |
sobomax |
Add new tunable 'net.link.ifqmaxlen' to set default send interface queue length. The default value for this parameter is 50, which is quite low for many of today's uses and the only way to modify this parameter right now is to edit if_var.h file. Also add read-only sysctl with the same name, so that it's possible to retrieve the current value.
MFC after: 1 month
|
#
206358 |
|
07-Apr-2010 |
rpaulo |
net80211 rate control framework (net80211 ratectl).
This framework allows drivers to abstract the rate control algorithm and just feed the framework with the usable parameters. The rate control framework will now deal with passing the parameters to the selected algorithm. Right now we have AMRR (the default) and RSSADAPT but there's no way to select one with ifconfig, yet. The objective is to have more rate control algorithms in the net80211 stack so all drivers[0] can use it. Ideally, we'll have the well-known sample rate control algorithm in the net80211 at some point so all drivers can use it (not just ath).
[0] all drivers that do rate control in software, that is.
Reviewed by: bschmidt, thompsa, weyongo MFC after: 1 months
|
#
205513 |
|
23-Mar-2010 |
rpaulo |
Add a new field for extended HT capabilities.
Submitted by: Alexander Egorenkov <egorenar at gmail.com> MFC after: 2 weeks Sponsored by: iXsystems, inc.
|
#
202612 |
|
19-Jan-2010 |
thompsa |
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.
|
#
198988 |
|
06-Nov-2009 |
jhb |
Take a step towards removing if_watchdog/if_timer. Don't explicitly set if_watchdog/if_timer to NULL/0 when initializing an ifnet. if_alloc() sets those members to NULL/0 already.
|
#
196159 |
|
12-Aug-2009 |
sam |
Drain link state event changes posted during vap destroy. This is a band-aid for the general problem that if_link_state_change can be called between if_detach and if_free leaving a task queued that has been free'd.
Spotted by: thompsa Reviewed by: rwatson Approved by: re (rwatson)
|
#
196004 |
|
31-Jul-2009 |
sam |
Filter setting IFF_PROMISC on tdma vaps; we don't want the underyling device to be in promiscuous mode as we have a h/w bssid.
Approved by: re (kib)
|
#
195847 |
|
24-Jul-2009 |
sam |
correct handling of IFF_PROMISC; this should not be pushed to the parent device except for monitor and ahdemo mode vaps
Reviewed by: rpaulo Approved by: re (kensmith)
|
#
195846 |
|
24-Jul-2009 |
sam |
monitor mode vaps are meant to be read-only so they can operate on any frequency w/o regulatory issues, do this by hooking if_transmit and if_output with routines that discard all transmits
Reviewed by: thompsa, cbzimmer (intent) Approved by: re (kensmith)
|
#
195618 |
|
11-Jul-2009 |
rpaulo |
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
|
#
195379 |
|
05-Jul-2009 |
sam |
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)
|
#
194760 |
|
23-Jun-2009 |
rwatson |
Modify most routines returning 'struct ifaddr *' to return references rather than pointers, requiring callers to properly dispose of those references. The following routines now return references:
ifaddr_byindex ifa_ifwithaddr ifa_ifwithbroadaddr ifa_ifwithdstaddr ifa_ifwithnet ifaof_ifpforaddr ifa_ifwithroute ifa_ifwithroute_fib rt_getifa rt_getifa_fib IFP_TO_IA ip_rtaddr in6_ifawithifp in6ifa_ifpforlinklocal in6ifa_ifpwithaddr in6_ifadd carp_iamatch6 ip6_getdstifaddr
Remove unused macro which didn't have required referencing:
IFP_TO_IA6
This closes many small races in which changes to interface or address lists while an ifaddr was in use could lead to use of freed memory (etc). In a few cases, add missing if_addr_list locking required to safely acquire references.
Because of a lack of deep copying support, we accept a race in which an in6_ifaddr pointed to by mbuf tags and extracted with ip6_getdstifaddr() doesn't hold a reference while in transmit. Once we have mbuf tag deep copy support, this can be fixed.
Reviewed by: bz Obtained from: Apple, Inc. (portions) MFC after: 6 weeks (portions)
|
#
193843 |
|
09-Jun-2009 |
sam |
add missing calls to ieee80211_dfs_attach/detach
|
#
193655 |
|
07-Jun-2009 |
sam |
iv_flags_ext is full, make room by moving HT-related flags to a new iv_flags_ht word
|
#
193340 |
|
02-Jun-2009 |
sam |
partially fix mode setting; this no longer returns an error but still needs to handle the case where the vap is up+running
Noticed by: "Paul B. Mahol" <onemda@gmail.com>
|
#
193337 |
|
02-Jun-2009 |
sam |
move if_detach to the top of ieee80211_ifdetach to close various races
Reviewed by: jhb
|
#
193312 |
|
02-Jun-2009 |
sam |
Remove hack used to deal with ifnet teardown now that if_detach and the bridge do a better job. o move ether_ifdetach to the top of ieee80211_detach o do not clear if_softc at the top of ieee80211_detach; we no longer need this because we are safeguarded against calls coming back through if_ioctl o simplify the bpf tracker now that we don't null if_softc
This also fixes an issue where having a bpf consumer active when a vap is destroyed would cause a crash because bpf referenced free'd memory.
Reviewed by: imp
|
#
193292 |
|
01-Jun-2009 |
sam |
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
|
#
192468 |
|
20-May-2009 |
sam |
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
|
#
191746 |
|
02-May-2009 |
thompsa |
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
|
#
191148 |
|
16-Apr-2009 |
kmacy |
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
|
#
190532 |
|
29-Mar-2009 |
sam |
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
|
#
190526 |
|
29-Mar-2009 |
sam |
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
|
#
190391 |
|
24-Mar-2009 |
sam |
split Atheros SuperG support out into it's own file that's included only with a new IEEE80211_SUPPORT_SUPERG option
|
#
188782 |
|
19-Feb-2009 |
sam |
Add modes for 1/2 and 1/4-width channels so we have separate roaming and xmit parameters. This makes it possible to use tdma on fractional channels. o add IEEE80211_MODE_HALF and IEEE80211_MODE_QUARTER; note these are band-agnostic (may need revisiting) o setup all default rates in ic_sup_rates instead of doing it only for active modes; we need these to calculate the default tx parameters which are not recalculated after a regulatory update (can't just recalculate after installing a new channel list because we might clobber user settings) o remove special case code in ieee80211_get_suprates; this is now a candidate for an inline or removal o add various entries for new modes (roaming+tx params, wme, rate mapping, scan set setup, country ie construction, tdma, basic rates)
Note these modes are intentionally not visible through if_media.
|
#
188775 |
|
19-Feb-2009 |
sam |
check ptr against NULL
|
#
188774 |
|
19-Feb-2009 |
sam |
instead of special casing lookups for the 11na/g legacy rate set, just install the rates once when creating the com structure
|
#
188556 |
|
13-Feb-2009 |
sam |
remove ic_stats; it was intended to accumulate stats from vaps as they were reaped but was never used and is inaccessible
|
#
188533 |
|
12-Feb-2009 |
thompsa |
Add a ieee80211_waitfor_parent() function that will wait for all deferred parent interface tasks to complete. This had been added to the ioctl path but it is also need elsewhere like detach so its safe to teardown.
Reported by: Hans Petter Selasky Submitted by: sam
|
#
188106 |
|
03-Feb-2009 |
sam |
When crafting a media setting w/ an auto (non-fixed) rate mask out the turbo option in addition to the mode bits; otherwise if the current channel is a turbo mode channel we'll form an invalid media setting and the ifmedia_set operation in vap_attach will panic.
While here use C99-style initialization for an array indexed by mode; this makes it consistent w/ other usage and avoids breakage if we should ever change the set of modes.
|
#
187897 |
|
29-Jan-2009 |
sam |
setup default rate set for static turbo mode
|
#
187796 |
|
27-Jan-2009 |
sam |
fill in ieee channel #'s and max tx power for drivers that work exclusively with frequencies; this mimics how ieee80211_setregdomain works
|
#
186904 |
|
08-Jan-2009 |
sam |
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
|
#
186107 |
|
14-Dec-2008 |
sam |
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
|
#
184278 |
|
25-Oct-2008 |
sam |
honor IEEE80211_CLONE_NOBEACONS for type of vap, not just a sta mode vap
|
#
184273 |
|
25-Oct-2008 |
sam |
o add support for ifconfig wlanX mode foo o yank useless code for setting fixed rate through media opts: this mechanism didn't scale to HT rates and couldn't handle multiple bands; fixed tx rates are set with the IEEE80211_IOC_TXPARAMS ioctl
|
#
182742 |
|
03-Sep-2008 |
brooks |
Replace a line matching /^ $/ with one matching /^$/.
Obtained from: //depot/projects/vimage-commit2/...
|
#
182674 |
|
02-Sep-2008 |
weongyo |
free ifp allocated at ieee80211_vap_setup.
Reviewed by: sam, thompsa
|
#
179388 |
|
28-May-2008 |
sam |
Revise lock name handling: o construct a name for the com lock as done for other locks o pass the device name to IEEE80211_LOCK_INIT so the mtx name is constructed as foo_com_lock o introduce *_LOCK_OBJ macro's to hide the lock contents and minimize redundant code
|
#
178957 |
|
11-May-2008 |
sam |
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
|
#
178955 |
|
11-May-2008 |
sam |
use c99-style initialization for ieee80211_phymode_name
|
#
178954 |
|
11-May-2008 |
sam |
add DFS capability bit and use it to auto-enable DFS support
|
#
178703 |
|
01-May-2008 |
sam |
re-enable WME by default; after a full day of testing on iwi I see no issues and the only way we'll identify them is for people to use it
|
#
178694 |
|
30-Apr-2008 |
sam |
disable default enabling of WME until we resolve driver regressions
|
#
178521 |
|
25-Apr-2008 |
sam |
hookup the parent device's if_input and if_output to stub routines to catch unintended use (one might argue about if_output but it's behaviour is ill-defined without vap context)
Noticed by: Paul B. Mahol
|
#
178354 |
|
20-Apr-2008 |
sam |
Multi-bss (aka vap) support for 802.11 devices.
Note this includes changes to all drivers and moves some device firmware loading to use firmware(9) and a separate module (e.g. ral). Also there no longer are separate wlan_scan* modules; this functionality is now bundled into the wlan module.
Supported by: Hobnob and Marvell Reviewed by: many Obtained from: Atheros (some bits)
|
#
174388 |
|
06-Dec-2007 |
kmacy |
Add padding for anticipated functionality - vimage - TOE - multiq - host rtentry caching
Rename spare used by 80211 to if_llsoftc
Reviewed by: rwatson, gnn MFC after: 1 day
|
#
173861 |
|
23-Nov-2007 |
sam |
add ieee80211_find_channel_byieee to lookup a channel by ieee channel #
Reviewed by: thompsa MFC after: 1 week
|
#
172233 |
|
18-Sep-2007 |
sam |
invalidate ic_prevchan when constructing a new channel list
Approved by: re (blanket wireless)
|
#
172227 |
|
18-Sep-2007 |
sam |
skip IEEE80211_MODE_AUTO in announcing supported rates in ieee80211_announce; there won't be any
Approved by: re (blanket wireless)
|
#
172226 |
|
18-Sep-2007 |
sam |
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)
|
#
172223 |
|
18-Sep-2007 |
sam |
remove IFM_IEEE80211_HT40PLUS and IFM_IEEE80211_HT40MINUS; they never got used so nuke 'em before we branch
Approved by: re (blanket wireless)
|
#
170530 |
|
11-Jun-2007 |
sam |
Update 802.11 wireless support: o major overhaul of the way channels are handled: channels are now fully enumerated and uniquely identify the operating characteristics; these changes are visible to user applications which require changes o make scanning support independent of the state machine to enable background scanning and roaming o move scanning support into loadable modules based on the operating mode to enable different policies and reduce the memory footprint on systems w/ constrained resources o add background scanning in station mode (no support for adhoc/ibss mode yet) o significantly speedup sta mode scanning with a variety of techniques o add roaming support when background scanning is supported; for now we use a simple algorithm to trigger a roam: we threshold the rssi and tx rate, if either drops too low we try to roam to a new ap o add tx fragmentation support o add first cut at 802.11n support: this code works with forthcoming drivers but is incomplete; it's included now to establish a baseline for other drivers to be developed and for user applications o adjust max_linkhdr et. al. to reflect 802.11 requirements; this eliminates prepending mbufs for traffic generated locally o add support for Atheros protocol extensions; mainly the fast frames encapsulation (note this can be used with any card that can tx+rx large frames correctly) o add sta support for ap's that beacon both WPA1+2 support o change all data types from bsd-style to posix-style o propagate noise floor data from drivers to net80211 and on to user apps o correct various issues in the sta mode state machine related to handling authentication and association failures o enable the addition of sta mode power save support for drivers that need net80211 support (not in this commit) o remove old WI compatibility ioctls (wicontrol is officially dead) o change the data structures returned for get sta info and get scan results so future additions will not break user apps o fixed tx rate is now maintained internally as an ieee rate and not an index into the rate set; this needs to be extended to deal with multi-mode operation o add extended channel specifications to radiotap to enable 11n sniffing
Drivers: o ath: add support for bg scanning, tx fragmentation, fast frames, dynamic turbo (lightly tested), 11n (sniffing only and needs new hal) o awi: compile tested only o ndis: lightly tested o ipw: lightly tested o iwi: add support for bg scanning (well tested but may have some rough edges) o ral, ural, rum: add suppoort for bg scanning, calibrate rssi data o wi: lightly tested
This work is based on contributions by Atheros, kmacy, sephe, thompsa, mlaier, kevlo, and others. Much of the scanning work was supported by Atheros. The 11n work was supported by Marvell.
|
#
170360 |
|
06-Jun-2007 |
sam |
copyright updates: o update to include 2007 o switch back to a 2-clause bsd-only license
Reviewed by: onoe
|
#
167468 |
|
11-Mar-2007 |
sam |
change ic_modecaps to a bit vector and use setbit, et. al.
|
#
167430 |
|
11-Mar-2007 |
sam |
change ieee80211_mhz2ieee to use the PSB mapping when the frequency falls in the proper place, not when we're handed a 1/2 or 1/4-rate channel
MFC after: 2 weeks
|
#
166012 |
|
14-Jan-2007 |
sam |
Add initial support for 900MHz cards like the Ubiquiti SR9: o add channel flag to enable freq <-> ieee channel # mapping (can go away in the future when ieee number is precomputed) o add mapping between 900mhz freq's and channel #'s that gives a unique channel # for each half/quarter/full width channel o remove assumptions that half/quarter rate channels on happen in 11a o remove assumptions that all 11g channels are full width o ensure ic_curchan is reset on mode change so changing the channel list (e.g. on countrycode change) doesn't leave curchan set to an invalid channel
There is still an issue with switching rate sets; to be fixed separately.
MFC after: 1 month
|
#
165825 |
|
06-Jan-2007 |
mjacob |
Fix compile error.
|
#
165574 |
|
27-Dec-2006 |
sam |
o unbreak rate set defaulting o mark 11g mode support on finding 11g or pure 11g (OFDM-only) channels; was requiring pure 11g which caused some contortions in drivers that manually setup their channel lists
|
#
165569 |
|
27-Dec-2006 |
sam |
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
|
#
164645 |
|
26-Nov-2006 |
sam |
Default the rate sets for 802.11 operating modes so drivers aren't required to. Note this only happens when drivers don't set them up before calling ieee80211_ifattach so this change is backwards compatible.
MFC after: 1 month
|
#
160690 |
|
26-Jul-2006 |
sam |
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
|
#
158044 |
|
26-Apr-2006 |
sam |
back out public safety-specific channel number mapping; we can't do it until we know it should be applied as otherwise we can map 11a channels into the 2.4G range and choose the wrong item from the chanenl array
|
#
155688 |
|
14-Feb-2006 |
sam |
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
|
#
154734 |
|
23-Jan-2006 |
sam |
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
|
#
153863 |
|
29-Dec-2005 |
sam |
correct checking for turbo channels: rev 1.24 fixed static turbo channels but broke handling of the turboG channel; since we aren't ready to revamp the channel list just check for turboA channels for now so channel 6 is considered in auto mode
Noticed by: gibbs
|
#
153421 |
|
14-Dec-2005 |
sam |
make packet bursting configurable (default to on if device is capable)
|
#
153350 |
|
12-Dec-2005 |
sam |
o correct auto mode logic for avoiding turbo channels o correct assumption that a static turbo channel is also usable in 11a; the opposite is true
MFC after: 1 week
|
#
152450 |
|
15-Nov-2005 |
sam |
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
|
#
148936 |
|
10-Aug-2005 |
sam |
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
|
#
148843 |
|
08-Aug-2005 |
sam |
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
|
#
148290 |
|
22-Jul-2005 |
sam |
diff reduction against p4: define IEEE80211_FIXED_RATE_NONE and use it instead of -1
|
#
140915 |
|
27-Jan-2005 |
sam |
supply a default ic_reset method for drivers; the ioctl code expect this method to always be setup
Submitted by: Tai-hwa Liang
|
#
140753 |
|
24-Jan-2005 |
sam |
statically allocate the station/neighbor node table; the deferred allocation scheme introduced a race condition during device state transitions
|
#
139530 |
|
31-Dec-2004 |
sam |
bump copyright for 2005
|
#
139526 |
|
31-Dec-2004 |
sam |
disable default use of wme until we can sort out interoperability issues; users that want it can explicitly enable it
|
#
139502 |
|
31-Dec-2004 |
sam |
expose ieee80211_phymode_name for use in debug msgs
|
#
138568 |
|
08-Dec-2004 |
sam |
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.
|
#
129876 |
|
30-May-2004 |
phk |
Add some missing <sys/module.h> includes which are masked by the one on death-row in <sys/kernel.h>
|
#
128966 |
|
05-May-2004 |
andre |
Link state change notification of ethernet media to the routing socket.
o The ieee80211_media_status() function updates the ifi_link_state field and calls rt_ifmsg() to notify listeners on the routing socket.
Approved by: sam
|
#
127760 |
|
02-Apr-2004 |
sam |
diff reduction against madwifi/p4
|
#
127087 |
|
16-Mar-2004 |
mux |
Add explicit dependency on "ether", since we use ether_ifattach().
|
#
124543 |
|
15-Jan-2004 |
onoe |
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.
|
#
120067 |
|
14-Sep-2003 |
sam |
short preamble capability is not just for 11g; mark IEEE80211_F_SHPREAMBLE regardless of the operating mode
Obtained from: MADWIFI
|
#
118887 |
|
13-Aug-2003 |
sam |
Delay creating ic_bss until after the super-class has a chance to override the method pointers for manipulating nodes; this fixes a problem where the ic_bss node was not being created properly for the ath driver causing the driver to scribble on random memory.
Noticed by: David Young <dyoung@pobox.com>
|
#
117817 |
|
21-Jul-2003 |
sam |
add monitor mode
|
#
117811 |
|
20-Jul-2003 |
sam |
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
|
#
117039 |
|
29-Jun-2003 |
sam |
add safeguard against (bogus) null channel parameter
|
#
116904 |
|
27-Jun-2003 |
sam |
revise copyright notices per discussion with Atsushi Onoe <onoe@sm.sony.co.jp>
|
#
116899 |
|
27-Jun-2003 |
sam |
fix typo
Submitted by: "Norman Diamond \(ITS\)" <n_diamond@its.jp>
|
#
116742 |
|
23-Jun-2003 |
sam |
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...
|