summaryrefslogtreecommitdiffstats
path: root/sys/net80211/ieee80211_scan_sta.c
Commit message (Collapse)AuthorAgeFilesLines
* Replace the homegrown implementation of nitems() with calls to nitems()rpaulo2013-08-141-3/+1
| | | | | | | | | (param.h). Operating systems that don't have nitems() can easily define it on their own net80211 OS-specific header file. Discussed with: adrian
* Initial cut at making IBSS support 802.11n aware.adrian2013-01-261-5/+19
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * Add HTINFO field decoding to ieee80211_ies_expand() - it's likely not 100% correct as it's not looking at the draft 11n HTINFO location, but I don't think anyone will care. * When doing an IBSS join make sure the 11n channel configuration is used - otherwise the 11a/11bg channel will be used and there won't be any chance for an upgrade to 11n. * When creating an IBSS network, ensure the channel is updated to an 11n channel so other 11n nodes can see it and speak to it with MCS rates. * Add a bit of code that's disabled for now which handles the HT field updating. This won't work out very well with lots of adhoc nodes as we'd end up ping-ponging between the HT configuration for each node. Instead, we should likely only pay attention to the "master" node we initially associated against and then ensure we propagate that information forward in our subsequent beacons. However, due to the nature of IBSS (ie, there's no specific "master" node in the specification) it's unclear which node we should lift the HT parameters from. So for now this assumes the HT parameters are squirreled away in the initial beacon/probe response. So there's some trickiness here. With ap/sta pairing, the probe response just populates a legacy node and the association request/response is what is used for negotiation 11n-ness (and upgrading things as needed.) With ibss networks, the pairing is done with probe request/response, with discovery being done by creating nodes when new beacons in the IBSS / BSSID are heard. There's no assoc request/response frames going on. So the trick here has been to figure out where to upgrade things. I don't like how I just taught ieee80211_sta_join() to "speak" HT - I'd rather there be an upgrade path when an IBSS node joins and there are HT parameters present. Once I've done that, I'll kill this HT special casing that's going on in ieee80211_sta_join(). Tested: * AR9280, AR5416, AR5212 - basic iperf and ping interoperability tests whilst in a non-encrypted adhoc network. TODO: * Fix up the HT upgrade path for IBSS nodes rather than adding code in ieee80211_sta_join(), then remove my code from there. * When associating, there's a concept of a "master" node in the IBSS which is the node you first joined the network through. It's possible the correct thing to do is to listen to HT updates and configure WME parameters from that node. However, once that node goes away, which node(s) should be listened to for configuration changes? For things like HT channel width, it's likely going to be ok to just associate as HT40 and then use the per-neighbor rate control and HTINFO/HTCAP fields to figure out which rates and configuration to speak. Ie, for a 20MHz 11n node, just speak 20MHz rates to it. It shouldn't "change", like what goes on in AP/STA configurations.
* When setting a fixed channel on adapters with 11n support the scanbschmidt2011-08-081-1/+9
| | | | | | | | | | | | | | | | | channel list ends up with 2 entries, the HT and the legacy channel. The scan itself is currently always done at legacy rates so we end up receiving scan results for legacy networks on the HT channel and erroneously assigning the BSS to the 11n channel. As the channel's capabilities are used to setup the adapter we might end up with non-working settings and/or firmware crashes. Fix this by ensuring that scan results received on a HT channel are only assigned to that channel if the htcap IE is available, else use the legacy channel equivalent. Tested by: Pawel Worach, Raoul Megelas, Maciej Milewski, Andrei <az at azsupport dot com> Approved by: re (kib)
* Fix rmax calculation during BSS selection.bschmidt2011-03-131-9/+21
| | | | | | | | | | | | | | | | | | If multiple networks are available the max bandwidth is one condition used for selecting the "best" BSS. To achieve that we should consider all parameters which affect the max RX rate. This includes 20/40MHz, SGI and the of course the MCS set. If the TX MCS parameters are available we should use those, because an AP announcing support for receiving frames at 450Mbps might only be able to transmit at 150Mbps (1T3R). I haven't seen devices with support for transmitting at higher rates then receiving, so prefering TX over RX information should be safe. While here, remove the hardcoded assumption that MCS15 is the max possible MCS rate, use MCS31 instead which really is the highest rate (according to the 802.11n std). Also, fix a mismatch of an 40MHz/SGI check.
* The meshid element is memcpy()'ed into se_meshid if included in eitherbschmidt2010-11-221-1/+1
| | | | | | | | beacon or probe-response frames. Fix the condition by checking for the the array's content instead of the always existing array itself. Reviewed by: rpaulo, stefanf MFC after: 3 days
* Fix background roaming to actually work in AUTO roaming mode.adrian2010-10-011-1/+1
| | | | | IEEE80211_F_BGSCAN is a vap flag, not a channel flag. So although bgscan occured, sta_roam_check() would never be called.
* Compare the address of the array, not the array.rpaulo2010-06-011-1/+1
| | | | | | Found with: Coverity Prevent(tm) CID: 3690 MFC after: 3 days
* Make this code a little more portable by wrapping the mtx calls intorpaulo2010-04-141-23/+23
| | | | | | macros. MFC after: 1 week
* fix misplaced #endif that caused tdma handling to be merged with ESS handlingsam2009-07-311-1/+1
| | | | | | (causing tdma scanning to break) Approved by: re (kib)
* Implementation of the upcoming Wireless Mesh standard, 802.11s, on therpaulo2009-07-111-25/+159
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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
* iv_flags_ext is full, make room by moving HT-related flags to a newsam2009-06-071-2/+2
| | | | iv_flags_ht word
* Overhaul monitor mode handling:sam2009-05-201-2/+1
| | | | | | | | | | | | | | | | | | | | | | | | 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
* Create a taskqueue for each wireless interface which provides a serialisedthompsa2009-05-021-3/+3
| | | | | | | | | | | | | | | | | | | | | | | 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
* Minor cleanups of tdma protocol handling:sam2009-03-181-5/+9
| | | | | | | | | | | o break out version-related code to simplify rev'ing the protocol o add parameter validation macros so checks that appear multiple places are consistent (and easy to change) o add protocol version check when looking for a scan candidate o improve scan debug output format o rewrite beacon update handling to calculate a bitmask of changed values and pass that down through the driver callback so drivers can optimize work o do slot bounds check before use when parsing received beacons
* add the desired channel to the scan list if not already present andsam2009-03-041-0/+27
| | | | compatible with other scan controls
* Add modes for 1/2 and 1/4-width channels so we have separate roamingsam2009-02-191-0/+2
| | | | | | | | | | | | | | | | | | 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.
* use c99 initializersam2009-02-191-10/+13
|
* when promoting an 11b channel to 11g do not accept a ``pure G'' (OFDM only)sam2009-02-011-2/+2
| | | | | | channel, only accept a real 11g channel; this fixes a problem where we were wrongly promoting 11b to a Dynamic Turbo G channel which broke scanning on channel 6
* TDMA support for long distance point-to-point links using ath devices:sam2009-01-081-1/+65
| | | | | | | | | | | | | | | 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
* convert MALLOC/FREE to malloc/freesam2008-12-181-5/+5
|
* Fix definition of IEEE80211_CHAN_MAX; it was defined as 255 butsam2008-12-151-1/+6
| | | | | | | 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
* Fix joining an 11b BSS: scanning is normally done using 11g channelssam2008-10-261-17/+72
| | | | | | | | | | | | | | (unless explicitly locked to mode 11b) so when we join the bss the channel attached to the scan cache entry may need to be demoted. o demote to 11b if the ap is advertising 11b rates o skip the ap if it's 11b but we're locked to 11g (could consider this advisory but for now treat it as mandatory) o handle an odd edge case, if there is a fixed transmit rate for 11g then the rate check against the 11b ap will fail, try to demote to 11b and retry the rate check Reviewed by: sephe, thompsa
* expand captured ie's before calling match_bss so they can potentiallysam2008-10-251-1/+1
| | | | be used in the process
* change ieee80211_sta_join to take an explicit channel instead ofsam2008-10-251-3/+14
| | | | | using the value in the scan parameters; this will be used to fix issues with 11b operation
* Revert the removal of the MALLOC and FREE macros from the net80211 code.des2008-10-231-5/+5
| | | | Requested by: sam
* Retire the MALLOC and FREE macros. They are an abomination unto style(9).des2008-10-231-5/+5
| | | | MFC after: 3 months
* guard against adhoc_pick_channel returning a NULL channel; this cansam2008-09-271-3/+6
| | | | happen after a scan cache flush (e.g. in response to ifconfig wlan bssid -)
* Multi-bss (aka vap) support for 802.11 devices.sam2008-04-201-359/+478
| | | | | | | | | | | 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)
* Fix adhoc mode to scan all available channels for a bss to joinsam2008-02-291-42/+63
| | | | | | | | | | while still restricting auto-channel select to only those channels permitted by regulatory constraints (sorta, we're still missing the checks to honor radar and noadhoc status on channels). This somehow got lost in the initial merge of the revised scanning code. Reviewed by: jhay MFC after: 2 weeks
* Be more careful handling off-channel frames: if the driver (wrongly)sam2007-11-261-3/+4
| | | | | | | | | | | sends frames up the stack after changing the current channel then the lookup by ieee channel number may fail leaving a null ptr in se_chan; if this happens fallback to the channel recorded when the frame is processed (curchan). Since the frame doesn't contribute to scan results for the sta this is acceptable. Reviewed by: thompsa MFC after: 3 days
* use the DSPARMS ie to find the home channel for off-channel framessam2007-11-231-11/+12
| | | | | Reviewed by: thompsa MFC after: 1 week
* Correct handling of off-channel frames:sam2007-11-051-12/+37
| | | | | | | | | | | | | | | o do not override the home channel recorded for the sta when the frame is received off-channel; this fixes a problem where we might think the sta was operating on the channel the frame was received on causing association requests to be ignored/rejected (likely cause of kern/99036) o don't include rssi of off-channel frames in the avg rssi used to select a bss; this gives us a better estimate of the signal we will see for the station when on-channel PR: kern/99036 Found by: Yubin Gong Reviewed by: sephe MFC after: 1 week
* sync 11n support with vap code base; many changes based on interopsam2007-11-021-1/+2
| | | | | | testing with all major vendors MFC after: 1 week
* In add_channel(), search 11g channels if mode is AUTO and correspondingsephe2007-07-201-5/+11
| | | | | | | | | | 11b channel is not found, e.g. Atheros 5211. Reported by: matteo Problem outlined by: thompsa Reviewed by: sam, thompsa Approved by: re (kensmith), sam (mentor) Tested by: matteo (an early version)
* revert handling of ssid and bssid to be manadatory instead of advisorysam2007-07-121-33/+40
| | | | | | Prodded by: Kevin Gerry Reviewed by: thompsa, sephe Approved by: re (kensmith)
* Change the channel number in the scan results struct to be a pointer to thethompsa2007-06-301-1/+1
| | | | | | | | | | | | operating channel and use this in the scan cache rather than directly using ic_curchan. Some firmware cards can only do a full scan and so ic_curchan does not have the correct value. Also add IEEE80211_CHAN2IEEE to directly dereference ic_ieee from the channel to be used in the fast path. Reviewed by: sam, sephe Approved by: re (kensmith)
* Update 802.11 wireless support:sam2007-06-111-0/+1438
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.
OpenPOWER on IntegriCloud