1ff66a890SHiten Pandya.\" 2*05ac2d0dSSascha Wildner.\" Copyright (c) 2009 Sam Leffler, Errno Consulting 3ff66a890SHiten Pandya.\" All rights reserved. 4ff66a890SHiten Pandya.\" 5ff66a890SHiten Pandya.\" Redistribution and use in source and binary forms, with or without 6ff66a890SHiten Pandya.\" modification, are permitted provided that the following conditions 7ff66a890SHiten Pandya.\" are met: 8ff66a890SHiten Pandya.\" 1. Redistributions of source code must retain the above copyright 9ff66a890SHiten Pandya.\" notice, this list of conditions and the following disclaimer. 10ff66a890SHiten Pandya.\" 2. Redistributions in binary form must reproduce the above copyright 11ff66a890SHiten Pandya.\" notice, this list of conditions and the following disclaimer in the 12ff66a890SHiten Pandya.\" documentation and/or other materials provided with the distribution. 13ff66a890SHiten Pandya.\" 14ff66a890SHiten Pandya.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 15ff66a890SHiten Pandya.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 16ff66a890SHiten Pandya.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 17ff66a890SHiten Pandya.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 18ff66a890SHiten Pandya.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19ff66a890SHiten Pandya.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 20ff66a890SHiten Pandya.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21ff66a890SHiten Pandya.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22ff66a890SHiten Pandya.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23ff66a890SHiten Pandya.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24ff66a890SHiten Pandya.\" SUCH DAMAGE. 25ff66a890SHiten Pandya.\" 26*05ac2d0dSSascha Wildner.\" $FreeBSD: src/share/man/man9/ieee80211.9,v 1.7 2010/03/29 17:39:38 trasz Exp $ 27ff66a890SHiten Pandya.\" 28*05ac2d0dSSascha Wildner.Dd April 28, 2010 29*05ac2d0dSSascha Wildner.Dt NET80211 9 30ff66a890SHiten Pandya.Os 31ff66a890SHiten Pandya.Sh NAME 32*05ac2d0dSSascha Wildner.Nm net80211 33*05ac2d0dSSascha Wildner.Nd 802.11 network layer 34ff66a890SHiten Pandya.Sh SYNOPSIS 3544cb301eSSascha Wildner.In netproto/802_11/ieee80211_var.h 36ff66a890SHiten Pandya.Ft void 37*05ac2d0dSSascha Wildner.Fn ieee80211_ifattach "struct ieee80211com *ic" "const uint8_t macaddr[IEEE80211_ADDR_LEN]" 38ff66a890SHiten Pandya.Ft void 391102a27eSSascha Wildner.Fn ieee80211_ifdetach "struct ieee80211com *ic" 40ff66a890SHiten Pandya.Sh DESCRIPTION 41*05ac2d0dSSascha WildnerIEEE 802.11 device drivers are written to use the infrastructure provided 42*05ac2d0dSSascha Wildnerby the 43*05ac2d0dSSascha Wildner.Nm 44*05ac2d0dSSascha Wildnersoftware layer. 45*05ac2d0dSSascha WildnerThis software provides a support framework for drivers that includes 46*05ac2d0dSSascha Wildnerifnet cloning, state management, and a user management API by which 47*05ac2d0dSSascha Wildnerapplications interact with 802.11 devices. 48*05ac2d0dSSascha WildnerMost drivers depend on the 49*05ac2d0dSSascha Wildner.Nm 50*05ac2d0dSSascha Wildnerlayer for protocol services but devices that off-load functionality 51*05ac2d0dSSascha Wildnermay bypass the layer to connect directly to the device 52*05ac2d0dSSascha Wildner(e.g. the 53*05ac2d0dSSascha Wildner.Xr ndis 4 54*05ac2d0dSSascha Wildneremulation support does this). 55ff66a890SHiten Pandya.Pp 56*05ac2d0dSSascha WildnerA 57*05ac2d0dSSascha Wildner.Nm 58*05ac2d0dSSascha Wildnerdevice driver implements a virtual radio API that is exported to 59*05ac2d0dSSascha Wildnerusers through network interfaces (aka vaps) that are cloned from the 60*05ac2d0dSSascha Wildnerunderlying device. 61*05ac2d0dSSascha WildnerThese interfaces have an operating mode 62*05ac2d0dSSascha Wildner(station, adhoc, hostap, wds, monitor, etc.) 63*05ac2d0dSSascha Wildnerthat is fixed for the lifetime of the interface. 64*05ac2d0dSSascha WildnerDevices that can support multiple concurrent interfaces allow 65*05ac2d0dSSascha Wildnermultiple vaps to be cloned. 66*05ac2d0dSSascha WildnerThis enables construction of interesting applications such as 67*05ac2d0dSSascha Wildneran AP vap and one or more WDS vaps 68*05ac2d0dSSascha Wildneror multiple AP vaps, each with a different security model. 69ff66a890SHiten PandyaThe 70*05ac2d0dSSascha Wildner.Nm 71*05ac2d0dSSascha Wildnerlayer virtualizes most 802.11 state 72*05ac2d0dSSascha Wildnerand coordinates vap state changes including scheduling multiple vaps. 73*05ac2d0dSSascha WildnerState that is not virtualized includes the current channel and 74*05ac2d0dSSascha WildnerWME/WMM parameters. 75*05ac2d0dSSascha WildnerProtocol processing is typically handled entirely in the 76*05ac2d0dSSascha Wildner.Nm 77*05ac2d0dSSascha Wildnerlayer with drivers responsible purely for moving data between the host 78*05ac2d0dSSascha Wildnerand device. 79*05ac2d0dSSascha WildnerSimilarly, 80*05ac2d0dSSascha Wildner.Nm 81*05ac2d0dSSascha Wildnerhandles most 82*05ac2d0dSSascha Wildner.Xr ioctl 2 83*05ac2d0dSSascha Wildnerrequests without entering the driver; 84*05ac2d0dSSascha Wildnerinstead drivers are notified of state changes that 85*05ac2d0dSSascha Wildnerrequire their involvement. 86*05ac2d0dSSascha Wildner.Pp 87*05ac2d0dSSascha WildnerThe virtual radio interface defined by the 88*05ac2d0dSSascha Wildner.Nm 89*05ac2d0dSSascha Wildnerlayer means that drivers must be structured to follow specific rules. 90*05ac2d0dSSascha WildnerDrivers that support only a single interface at any time must still 91*05ac2d0dSSascha Wildnerfollow these rules. 92*05ac2d0dSSascha Wildner.Sh DATA STRUCTURES 93*05ac2d0dSSascha WildnerThe virtual radio architecture splits state between a single per-device 94*05ac2d0dSSascha Wildner.Vt ieee80211com 95*05ac2d0dSSascha Wildnerstructure and one or more 96*05ac2d0dSSascha Wildner.Vt ieee80211vap 97*05ac2d0dSSascha Wildnerstructures. 98*05ac2d0dSSascha WildnerDrivers are expected to setup various shared state in these structures 99*05ac2d0dSSascha Wildnerat device attach and during vap creation but otherwise should treat them 100*05ac2d0dSSascha Wildneras read-only. 101*05ac2d0dSSascha WildnerThe 102*05ac2d0dSSascha Wildner.Vt ieee80211com 103*05ac2d0dSSascha Wildnerstructure is allocated by the 104*05ac2d0dSSascha Wildner.Nm 105*05ac2d0dSSascha Wildnerlayer as adjunct data to a device's 106*05ac2d0dSSascha Wildner.Vt ifnet ; 107*05ac2d0dSSascha Wildnerit is accessed through the 108*05ac2d0dSSascha Wildner.Vt if_l2com 109*05ac2d0dSSascha Wildnerstructure member. 110*05ac2d0dSSascha WildnerThe 111*05ac2d0dSSascha Wildner.Vt ieee80211vap 112*05ac2d0dSSascha Wildnerstructure is allocated by the driver in the 113*05ac2d0dSSascha Wildner.Dq vap create 114*05ac2d0dSSascha Wildnermethod 115*05ac2d0dSSascha Wildnerand should be extended with any driver-private state. 116*05ac2d0dSSascha WildnerThis technique of giving the driver control to allocate data structures 117*05ac2d0dSSascha Wildneris used for other 118*05ac2d0dSSascha Wildner.Nm 119*05ac2d0dSSascha Wildnerdata structures and should be exploited to maintain driver-private state 120*05ac2d0dSSascha Wildnertogether with public 121*05ac2d0dSSascha Wildner.Nm 122*05ac2d0dSSascha Wildnerstate. 123*05ac2d0dSSascha Wildner.Pp 124*05ac2d0dSSascha WildnerThe other main data structures are the station, or node, table 125*05ac2d0dSSascha Wildnerthat tracks peers in the local BSS, and the channel table that defines 126*05ac2d0dSSascha Wildnerthe current set of available radio channels. 127*05ac2d0dSSascha WildnerBoth tables are bound to the 128*05ac2d0dSSascha Wildner.Vt ieee80211com 129*05ac2d0dSSascha Wildnerstructure and shared by all vaps. 130*05ac2d0dSSascha WildnerLong-lasting references to a node are counted to guard against 131*05ac2d0dSSascha Wildnerpremature reclamation. 132*05ac2d0dSSascha WildnerIn particular every packet sent/received holds a node reference 133*05ac2d0dSSascha Wildner(either explicitly for transmit or implicitly on receive). 134*05ac2d0dSSascha Wildner.Pp 135*05ac2d0dSSascha WildnerThe 136*05ac2d0dSSascha Wildner.Vt ieee80211com 137ff66a890SHiten Pandyaand 138*05ac2d0dSSascha Wildner.Vt ieee80211vap 139*05ac2d0dSSascha Wildnerstructures also hold a collection of method pointers that drivers 140*05ac2d0dSSascha Wildnerfill-in and/or override to take control of certain operations. 141*05ac2d0dSSascha WildnerThese methods are the primary way drivers are bound to the 142*05ac2d0dSSascha Wildner.Nm 143*05ac2d0dSSascha Wildnerlayer and are described below. 144*05ac2d0dSSascha Wildner.Sh DRIVER ATTACH/DETACH 145*05ac2d0dSSascha WildnerDrivers attach to the 146*05ac2d0dSSascha Wildner.Nm 147*05ac2d0dSSascha Wildnerlayer with the 148*05ac2d0dSSascha Wildner.Fn ieee80211_ifattach 149*05ac2d0dSSascha Wildnerfunction. 150*05ac2d0dSSascha WildnerThe driver is expected to allocate and setup any device-private 151*05ac2d0dSSascha Wildnerdata structures before passing control. 152ff66a890SHiten PandyaThe 153*05ac2d0dSSascha Wildner.Vt ieee80211com 154*05ac2d0dSSascha Wildnerstructure must be pre-initialized with state required to setup the 155*05ac2d0dSSascha Wildner.Nm 156*05ac2d0dSSascha Wildnerlayer: 157*05ac2d0dSSascha Wildner.Bl -tag -width ic_channels 158*05ac2d0dSSascha Wildner.It Dv ic_ifp 159*05ac2d0dSSascha WildnerBackpointer to the physical device's ifnet. 160*05ac2d0dSSascha Wildner.It Dv ic_caps 161*05ac2d0dSSascha WildnerDevice/driver capabilities; see below for a complete description. 162*05ac2d0dSSascha Wildner.It Dv ic_channels 163*05ac2d0dSSascha WildnerTable of channels the device is capable of operating on. 164*05ac2d0dSSascha WildnerThis is initially provided by the driver but may be changed 165*05ac2d0dSSascha Wildnerthrough calls that change the regulatory state. 166*05ac2d0dSSascha Wildner.It Dv ic_nchan 167*05ac2d0dSSascha WildnerNumber of entries in 168*05ac2d0dSSascha Wildner.Dv ic_channels . 169*05ac2d0dSSascha Wildner.El 170*05ac2d0dSSascha Wildner.Pp 171*05ac2d0dSSascha WildnerOn return from 172*05ac2d0dSSascha Wildner.Fn ieee80211_ifattach 173*05ac2d0dSSascha Wildnerthe driver is expected to override default callback functions in the 174*05ac2d0dSSascha Wildner.Vt ieee80211com 175*05ac2d0dSSascha Wildnerstructure to register it's private routines. 176*05ac2d0dSSascha WildnerMethods marked with a 177*05ac2d0dSSascha Wildner.Dq * 178*05ac2d0dSSascha Wildnermust be provided by the driver. 179*05ac2d0dSSascha Wildner.Bl -tag -width ic_channels 180*05ac2d0dSSascha Wildner.It Dv ic_vap_create* 181*05ac2d0dSSascha WildnerCreate a vap instance of the specified type (operating mode). 182*05ac2d0dSSascha WildnerAny fixed BSSID and/or MAC address is provided. 183*05ac2d0dSSascha WildnerDrivers that support multi-bssid operation may honor the requested BSSID 184*05ac2d0dSSascha Wildneror assign their own. 185*05ac2d0dSSascha Wildner.It Dv ic_vap_delete* 186*05ac2d0dSSascha WildnerDestroy a vap instance created with 187*05ac2d0dSSascha Wildner.Dv ic_vap_create . 188*05ac2d0dSSascha Wildner.It Dv ic_getradiocaps 189*05ac2d0dSSascha WildnerReturn the list of calibrated channels for the radio. 190*05ac2d0dSSascha WildnerThe default method returns the current list of channels 191*05ac2d0dSSascha Wildner(space permitting). 192*05ac2d0dSSascha Wildner.It Dv ic_setregdomain 193*05ac2d0dSSascha WildnerProcess a request to change regulatory state. 194*05ac2d0dSSascha WildnerThe routine may reject a request or constrain changes (e.g. reduce 195*05ac2d0dSSascha Wildnertransmit power caps). 196*05ac2d0dSSascha WildnerThe default method accepts all proposed changes. 197*05ac2d0dSSascha Wildner.It Dv ic_send_mgmt 198*05ac2d0dSSascha WildnerSend an 802.11 management frame. 199*05ac2d0dSSascha WildnerThe default method fabricates the frame using 200*05ac2d0dSSascha Wildner.Nm 201*05ac2d0dSSascha Wildnerstate and passes it to the driver through the 202*05ac2d0dSSascha Wildner.Dv ic_raw_xmit 203*05ac2d0dSSascha Wildnermethod. 204*05ac2d0dSSascha Wildner.It Dv ic_raw_xmit 205*05ac2d0dSSascha WildnerTransmit a raw 802.11 frame. 206*05ac2d0dSSascha WildnerThe default method drops the frame and generates a message on the console. 207*05ac2d0dSSascha Wildner.It Dv ic_updateslot 208*05ac2d0dSSascha WildnerUpdate hardware state after an 802.11 IFS slot time change, 209*05ac2d0dSSascha WildnerThere is no default method; the pointer may be NULL in which case 210*05ac2d0dSSascha Wildnerit will not be used. 211*05ac2d0dSSascha Wildner.It Dv ic_update_mcast 212*05ac2d0dSSascha WildnerUpdate hardware for a change in the multicast packet filter, 213*05ac2d0dSSascha WildnerThe default method prints a console message. 214*05ac2d0dSSascha Wildner.It Dv ic_update_promisc 215*05ac2d0dSSascha WildnerUpdate hardware for a change in the promiscuous mode setting. 216*05ac2d0dSSascha WildnerThe default method prints a console message. 217*05ac2d0dSSascha Wildner.It Dv ic_newassoc 218*05ac2d0dSSascha WildnerUpdate driver/device state for association to a new AP (in station mode) 219*05ac2d0dSSascha Wildneror when a new station associates (e.g. in AP mode). 220*05ac2d0dSSascha WildnerThere is no default method; the pointer may be NULL in which case 221*05ac2d0dSSascha Wildnerit will not be used. 222*05ac2d0dSSascha Wildner.It Dv ic_node_alloc 223*05ac2d0dSSascha WildnerAllocate and initialize a 224*05ac2d0dSSascha Wildner.Vt ieee80211_node 225*05ac2d0dSSascha Wildnerstructure. 226*05ac2d0dSSascha WildnerThis method cannot sleep. 227*05ac2d0dSSascha WildnerThe default method allocates zero'd memory using 228*05ac2d0dSSascha Wildner.Xr malloc 9 . 229*05ac2d0dSSascha WildnerDrivers should override this method to allocate extended storage 230*05ac2d0dSSascha Wildnerfor their own needs. 231*05ac2d0dSSascha WildnerMemory allocated by the driver must be tagged with 232*05ac2d0dSSascha Wildner.Dv M_80211_NODE 233*05ac2d0dSSascha Wildnerto balance the memory allocation statistics. 234*05ac2d0dSSascha Wildner.It Dv ic_node_free 235*05ac2d0dSSascha WildnerReclaim storage of a node allocated by 236*05ac2d0dSSascha Wildner.Dv ic_node_alloc . 237*05ac2d0dSSascha WildnerDrivers are expected to 238*05ac2d0dSSascha Wildner.Em interpose 239*05ac2d0dSSascha Wildnertheir own method to cleanup private state but must call through 240*05ac2d0dSSascha Wildnerthis method to allow 241*05ac2d0dSSascha Wildner.Nm 242*05ac2d0dSSascha Wildnerto reclaim it's private state. 243*05ac2d0dSSascha Wildner.It Dv ic_node_cleanup 244*05ac2d0dSSascha WildnerCleanup state in a 245*05ac2d0dSSascha Wildner.Vt ieee80211_node 246*05ac2d0dSSascha Wildnercreated by 247*05ac2d0dSSascha Wildner.Dv ic_node_alloc . 248*05ac2d0dSSascha WildnerThis operation is distinguished from 249*05ac2d0dSSascha Wildner.Dv ic_node_free 250*05ac2d0dSSascha Wildnerin that it may be called long before the node is actually reclaimed 251*05ac2d0dSSascha Wildnerto cleanup adjunct state. 252*05ac2d0dSSascha WildnerThis can happen, for example, when a node must not be reclaimed 253*05ac2d0dSSascha Wildnerdue to references held by packets in the transmit queue. 254*05ac2d0dSSascha WildnerDrivers typically interpose 255*05ac2d0dSSascha Wildner.Dv ic_node_cleanup 256*05ac2d0dSSascha Wildnerinstead of 257*05ac2d0dSSascha Wildner.Dv ic_node_free . 258*05ac2d0dSSascha Wildner.It Dv ic_node_age 259*05ac2d0dSSascha WildnerAge, and potentially reclaim, resources associated with a node. 260*05ac2d0dSSascha WildnerThe default method ages frames on the power-save queue (in AP mode) 261*05ac2d0dSSascha Wildnerand pending frames in the receive reorder queues (for stations using A-MPDU). 262*05ac2d0dSSascha Wildner.It Dv ic_node_drain 263*05ac2d0dSSascha WildnerReclaim all optional resources associated with a node. 264*05ac2d0dSSascha WildnerThis call is used to free up resources when they are in short supply, 265*05ac2d0dSSascha Wildner.It Dv ic_node_getrssi 266*05ac2d0dSSascha WildnerReturn the Receive Signal Strength Indication (RSSI) in .5 dBm units for 267*05ac2d0dSSascha Wildnerthe specified node. 268*05ac2d0dSSascha WildnerThis interface returns a subset of the information 269*05ac2d0dSSascha Wildnerreturned by 270*05ac2d0dSSascha Wildner.Dv ic_node_getsignal , 271*05ac2d0dSSascha WildnerThe default method calculates a filtered average over the last ten 272*05ac2d0dSSascha Wildnersamples passed in to 273*05ac2d0dSSascha Wildner.Xr ieee80211_input 9 274*05ac2d0dSSascha Wildneror 275*05ac2d0dSSascha Wildner.Xr ieee80211_input_all 9 . 276*05ac2d0dSSascha Wildner.It Dv ic_node_getsignal 277*05ac2d0dSSascha WildnerReturn the RSSI and noise floor (in .5 dBm units) for a station. 278*05ac2d0dSSascha WildnerThe default method calculates RSSI as described above; 279*05ac2d0dSSascha Wildnerthe noise floor returned is the last value supplied to 280*05ac2d0dSSascha Wildner.Xr ieee80211_input 9 281*05ac2d0dSSascha Wildneror 282*05ac2d0dSSascha Wildner.Xr ieee80211_input_all 9 . 283*05ac2d0dSSascha Wildner.It Dv ic_node_getmimoinfo 284*05ac2d0dSSascha WildnerReturn MIMO radio state for a station in support of the 285*05ac2d0dSSascha Wildner.Dv IEEE80211_IOC_STA_INFO 286*05ac2d0dSSascha Wildnerioctl request. 287*05ac2d0dSSascha WildnerThe default method returns nothing. 288*05ac2d0dSSascha Wildner.It Dv ic_scan_start* 289*05ac2d0dSSascha WildnerPrepare driver/hardware state for scanning. 290*05ac2d0dSSascha WildnerThis callback is done in a sleepable context. 291*05ac2d0dSSascha Wildner.It Dv ic_scan_end* 292*05ac2d0dSSascha WildnerRestore driver/hardware state after scanning completes. 293*05ac2d0dSSascha WildnerThis callback is done in a sleepable context. 294*05ac2d0dSSascha Wildner.It Dv ic_set_channel* 295*05ac2d0dSSascha WildnerSet the current radio channel using 296*05ac2d0dSSascha Wildner.Vt ic_curchan . 297*05ac2d0dSSascha WildnerThis callback is done in a sleepable context. 298*05ac2d0dSSascha Wildner.It Dv ic_scan_curchan 299*05ac2d0dSSascha WildnerStart scanning on a channel. 300*05ac2d0dSSascha WildnerThis method is called immediately after each channel change 301*05ac2d0dSSascha Wildnerand must initiate the work to scan a channel and schedule a timer 302*05ac2d0dSSascha Wildnerto advance to the next channel in the scan list. 303*05ac2d0dSSascha WildnerThis callback is done in a sleepable context. 304*05ac2d0dSSascha WildnerThe default method handles active scan work (e.g. sending ProbeRequest 305*05ac2d0dSSascha Wildnerframes), and schedules a call to 306*05ac2d0dSSascha Wildner.Xr ieee80211_scan_next 9 307*05ac2d0dSSascha Wildneraccording to the maximum dwell time for the channel. 308*05ac2d0dSSascha WildnerDrivers that off-load scan work to firmware typically use this method 309*05ac2d0dSSascha Wildnerto trigger per-channel scan activity. 310*05ac2d0dSSascha Wildner.It Dv ic_scan_mindwell 311*05ac2d0dSSascha WildnerHandle reaching the minimum dwell time on a channel when scanning. 312*05ac2d0dSSascha WildnerThis event is triggered when one or more stations have been found on 313*05ac2d0dSSascha Wildnera channel and the minimum dwell time has been reached. 314*05ac2d0dSSascha WildnerThis callback is done in a sleepable context. 315*05ac2d0dSSascha WildnerThe default method signals the scan machinery to advance 316*05ac2d0dSSascha Wildnerto the next channel as soon as possible. 317*05ac2d0dSSascha WildnerDrivers can use this method to preempt further work (e.g. if scanning 318*05ac2d0dSSascha Wildneris handled by firmware) or ignore the request to force maximum dwell time 319*05ac2d0dSSascha Wildneron a channel. 320*05ac2d0dSSascha Wildner.It Dv ic_recv_action 321*05ac2d0dSSascha WildnerProcess a received Action frame. 322*05ac2d0dSSascha WildnerThe default method points to 323*05ac2d0dSSascha Wildner.Xr ieee80211_recv_action 9 324*05ac2d0dSSascha Wildnerwhich provides a mechanism for setting up handlers for each Action frame class. 325*05ac2d0dSSascha Wildner.It Dv ic_send_action 326*05ac2d0dSSascha WildnerTransmit an Action frame. 327*05ac2d0dSSascha WildnerThe default method points to 328*05ac2d0dSSascha Wildner.Xr ieee80211_send_action 9 329*05ac2d0dSSascha Wildnerwhich provides a mechanism for setting up handlers for each Action frame class. 330*05ac2d0dSSascha Wildner.It Dv ic_ampdu_enable 331*05ac2d0dSSascha WildnerCheck if transmit A-MPDU should be enabled for the specified station and AC. 332*05ac2d0dSSascha WildnerThe default method checks a per-AC traffic rate against a per-vap 333*05ac2d0dSSascha Wildnerthreshold to decide if A-MPDU should be enabled. 334*05ac2d0dSSascha WildnerThis method also rate-limits ADDBA requests so that requests are not 335*05ac2d0dSSascha Wildnermade too frequently when a receiver has limited resources. 336*05ac2d0dSSascha Wildner.It Dv ic_addba_request 337*05ac2d0dSSascha WildnerRequest A-MPDU transmit aggregation. 338*05ac2d0dSSascha WildnerThe default method sets up local state and issues an 339*05ac2d0dSSascha WildnerADDBA Request Action frame. 340*05ac2d0dSSascha WildnerDrivers may interpose this method if they need to setup private state 341*05ac2d0dSSascha Wildnerfor handling transmit A-MPDU. 342*05ac2d0dSSascha Wildner.It Dv ic_addb_response 343*05ac2d0dSSascha WildnerProcess a received ADDBA Response Action frame and setup resources as 344*05ac2d0dSSascha Wildnerneeded for doing transmit A-MPDU, 345*05ac2d0dSSascha Wildner.It Dv ic_addb_stop 346*05ac2d0dSSascha WildnerShutdown an A-MPDU transmit stream for the specified station and AC. 347*05ac2d0dSSascha WildnerThe default method reclaims local state after sending a DelBA Action frame. 348*05ac2d0dSSascha Wildner.It Dv ic_bar_response 349*05ac2d0dSSascha WildnerProcess a response to a transmitted BAR control frame. 350*05ac2d0dSSascha Wildner.It Dv ic_ampdu_rx_start 351*05ac2d0dSSascha WildnerPrepare to receive A-MPDU data from the specified station for the TID. 352*05ac2d0dSSascha Wildner.It Dv ic_ampdu_rx_stop 353*05ac2d0dSSascha WildnerTerminate receipt of A-MPDU data from the specified station for the TID. 354*05ac2d0dSSascha Wildner.El 355*05ac2d0dSSascha Wildner.Pp 356*05ac2d0dSSascha WildnerOnce the 357*05ac2d0dSSascha Wildner.Nm 358*05ac2d0dSSascha Wildnerlayer is attached to a driver there are two more steps typically done 359*05ac2d0dSSascha Wildnerto complete the work: 360*05ac2d0dSSascha Wildner.Bl -enum 361*05ac2d0dSSascha Wildner.It 362*05ac2d0dSSascha WildnerSetup 363*05ac2d0dSSascha Wildner.Dq radiotap support 364*05ac2d0dSSascha Wildnerfor capturing raw 802.11 packets that pass through the device. 365*05ac2d0dSSascha WildnerThis is done with a call to 366*05ac2d0dSSascha Wildner.Xr ieee80211_radiotap_attach 9 . 367*05ac2d0dSSascha Wildner.It 368*05ac2d0dSSascha WildnerDo any final device setup like enabling interrupts. 369*05ac2d0dSSascha Wildner.El 370*05ac2d0dSSascha Wildner.Pp 371*05ac2d0dSSascha WildnerState is torn down and reclaimed with a call to 372*05ac2d0dSSascha Wildner.Fn ieee80211_ifdetach . 373*05ac2d0dSSascha WildnerNote this call may result in multiple callbacks into the driver 374*05ac2d0dSSascha Wildnerso it should be done before any critical driver state is reclaimed. 375*05ac2d0dSSascha WildnerOn return from 376ff66a890SHiten Pandya.Fn ieee80211_ifdetach 377*05ac2d0dSSascha Wildnerall associated vaps and ifnet structures are reclaimed or inaccessible 378*05ac2d0dSSascha Wildnerto user applications so it is safe to teardown driver state without 379*05ac2d0dSSascha Wildnerworry about being re-entered. 380*05ac2d0dSSascha WildnerThe driver is responsible for calling 381*05ac2d0dSSascha Wildner.Xr if_free 9 382*05ac2d0dSSascha Wildneron the ifnet it allocated for the physical device. 383*05ac2d0dSSascha Wildner.Sh DRIVER CAPABILITIES 384*05ac2d0dSSascha WildnerDriver/device capabilities are specified using several sets of flags 385*05ac2d0dSSascha Wildnerin the 386*05ac2d0dSSascha Wildner.Vt ieee80211com 387*05ac2d0dSSascha Wildnerstructure. 388*05ac2d0dSSascha WildnerGeneral capabilities are specified by 389*05ac2d0dSSascha Wildner.Vt ic_caps . 390*05ac2d0dSSascha WildnerHardware cryptographic capabilities are specified by 391*05ac2d0dSSascha Wildner.Vt ic_cryptocaps . 392*05ac2d0dSSascha Wildner802.11n capabilities, if any, are specified by 393*05ac2d0dSSascha Wildner.Vt ic_htcaps . 394ff66a890SHiten PandyaThe 395*05ac2d0dSSascha Wildner.Nm 396*05ac2d0dSSascha Wildnerlayer propagates a subset of these capabilities to each vap through 397*05ac2d0dSSascha Wildnerthe equivalent fields: 398*05ac2d0dSSascha Wildner.Vt iv_caps , 399*05ac2d0dSSascha Wildner.Vt iv_cryptocaps , 400ff66a890SHiten Pandyaand 401*05ac2d0dSSascha Wildner.Vt iv_htcaps . 402*05ac2d0dSSascha WildnerThe following general capabilities are defined: 403*05ac2d0dSSascha Wildner.Bl -tag -width IEEE80211_C_8023ENCAP 404*05ac2d0dSSascha Wildner.It Dv IEEE80211_C_STA 405*05ac2d0dSSascha WildnerDevice is capable of operating in station (aka Infrastructure) mode. 406*05ac2d0dSSascha Wildner.It Dv IEEE80211_C_8023ENCAP 407*05ac2d0dSSascha WildnerDevice requires 802.3-encapsulated frames be passed for transmit. 408*05ac2d0dSSascha WildnerBy default 409*05ac2d0dSSascha Wildner.Nm 410*05ac2d0dSSascha Wildnerwill encapsulate all outbound frames as 802.11 frames (without a PLCP header). 411*05ac2d0dSSascha Wildner.It Dv IEEE80211_C_FF 412*05ac2d0dSSascha WildnerDevice supports Atheros Fast-Frames. 413*05ac2d0dSSascha Wildner.It Dv IEEE80211_C_TURBOP 414*05ac2d0dSSascha WildnerDevice supports Atheros Dynamic Turbo mode. 415*05ac2d0dSSascha Wildner.It Dv IEEE80211_C_IBSS 416*05ac2d0dSSascha WildnerDevice is capable of operating in adhoc/IBSS mode. 417*05ac2d0dSSascha Wildner.It Dv IEEE80211_C_PMGT 418*05ac2d0dSSascha WildnerDevice supports dynamic power-management (aka power save) in station mode. 419*05ac2d0dSSascha Wildner.It Dv IEEE80211_C_HOSTAP 420*05ac2d0dSSascha WildnerDevice is capable of operating as an Access Point in Infrastructure mode. 421*05ac2d0dSSascha Wildner.It Dv IEEE80211_C_AHDEMO 422*05ac2d0dSSascha WildnerDevice is capable of operating in Adhoc Demo mode. 423*05ac2d0dSSascha WildnerIn this mode the device is used purely to send/receive raw 802.11 frames. 424*05ac2d0dSSascha Wildner.It Dv IEEE80211_C_SWRETRY 425*05ac2d0dSSascha WildnerDevice supports software retry of transmitted frames. 426*05ac2d0dSSascha Wildner.It Dv IEEE80211_C_TXPMGT 427*05ac2d0dSSascha WildnerDevice support dynamic transmit power changes on transmitted frames; 428*05ac2d0dSSascha Wildneralso known as Transmit Power Control (TPC). 429*05ac2d0dSSascha Wildner.It Dv IEEE80211_C_SHSLOT 430*05ac2d0dSSascha WildnerDevice supports short slot time operation (for 802.11g). 431*05ac2d0dSSascha Wildner.It Dv IEEE80211_C_SHPREAMBLE 432*05ac2d0dSSascha WildnerDevice supports short preamble operation (for 802.11g). 433*05ac2d0dSSascha Wildner.It Dv IEEE80211_C_MONITOR 434*05ac2d0dSSascha WildnerDevice is capable of operating in monitor mode. 435*05ac2d0dSSascha Wildner.It Dv IEEE80211_C_DFS 436*05ac2d0dSSascha WildnerDevice supports radar detection and/or DFS. 437*05ac2d0dSSascha WildnerDFS protocol support can be handled by 438*05ac2d0dSSascha Wildner.Nm 439*05ac2d0dSSascha Wildnerbut the device must be capable of detecting radar events. 440*05ac2d0dSSascha Wildner.It Dv IEEE80211_C_MBSS 441*05ac2d0dSSascha WildnerDevice is capable of operating in MeshBSS (MBSS) mode 442*05ac2d0dSSascha Wildner(as defined by 802.11s Draft 3.0). 443*05ac2d0dSSascha Wildner.It Dv IEEE80211_C_WPA1 444*05ac2d0dSSascha WildnerDevice supports WPA1 operation. 445*05ac2d0dSSascha Wildner.It Dv IEEE80211_C_WPA2 446*05ac2d0dSSascha WildnerDevice supports WPA2/802.11i operation. 447*05ac2d0dSSascha Wildner.It Dv IEEE80211_C_BURST 448*05ac2d0dSSascha WildnerDevice supports frame bursting. 449*05ac2d0dSSascha Wildner.It Dv IEEE80211_C_WME 450*05ac2d0dSSascha WildnerDevice supports WME/WMM operation 451*05ac2d0dSSascha Wildner(at the moment this is mostly support for sending and receiving 452*05ac2d0dSSascha WildnerQoS frames with EDCF). 453*05ac2d0dSSascha Wildner.It Dv IEEE80211_C_WDS 454*05ac2d0dSSascha WildnerDevice supports transmit/receive of 4-address frames. 455*05ac2d0dSSascha Wildner.It Dv IEEE80211_C_BGSCAN 456*05ac2d0dSSascha WildnerDevice supports background scanning. 457*05ac2d0dSSascha Wildner.It Dv IEEE80211_C_TXFRAG 458*05ac2d0dSSascha WildnerDevice supports transmit of fragmented 802.11 frames. 459*05ac2d0dSSascha Wildner.It Dv IEEE80211_C_TDMA 460*05ac2d0dSSascha WildnerDevice is capable of operating in TDMA mode. 461*05ac2d0dSSascha Wildner.El 462ff66a890SHiten Pandya.Pp 463*05ac2d0dSSascha WildnerThe follow general crypto capabilities are defined. 464*05ac2d0dSSascha WildnerIn general 465*05ac2d0dSSascha Wildner.Nm 466*05ac2d0dSSascha Wildnerwill fall-back to software support when a device is not capable 467*05ac2d0dSSascha Wildnerof hardware acceleration of a cipher. 468*05ac2d0dSSascha WildnerThis can be done on a per-key basis. 469*05ac2d0dSSascha Wildner.Nm 470*05ac2d0dSSascha Wildnercan also handle software 471*05ac2d0dSSascha Wildner.Dv Michael 472*05ac2d0dSSascha Wildnercalculation combined with hardware 473*05ac2d0dSSascha Wildner.Dv AES 474*05ac2d0dSSascha Wildneracceleration. 475*05ac2d0dSSascha Wildner.Bl -tag -width IEEE80211_C_8023ENCAP 476*05ac2d0dSSascha Wildner.It Dv IEEE80211_CRYPTO_WEP 477*05ac2d0dSSascha WildnerDevice supports hardware WEP cipher. 478*05ac2d0dSSascha Wildner.It Dv IEEE80211_CRYPTO_TKIP 479*05ac2d0dSSascha WildnerDevice supports hardware TKIP cipher. 480*05ac2d0dSSascha Wildner.It Dv IEEE80211_CRYPTO_AES_OCB 481*05ac2d0dSSascha WildnerDevice supports hardware AES-OCB cipher. 482*05ac2d0dSSascha Wildner.It Dv IEEE80211_CRYPTO_AES_CCM 483*05ac2d0dSSascha WildnerDevice supports hardware AES-CCM cipher. 484*05ac2d0dSSascha Wildner.It Dv IEEE80211_CRYPTO_TKIPMIC 485*05ac2d0dSSascha WildnerDevice supports hardware Michael for use with TKIP. 486*05ac2d0dSSascha Wildner.It Dv IEEE80211_CRYPTO_CKIP 487*05ac2d0dSSascha WildnerDevices supports hardware CKIP cipher. 488*05ac2d0dSSascha Wildner.El 489ff66a890SHiten Pandya.Pp 490*05ac2d0dSSascha WildnerThe follow general 802.11n capabilities are defined. 491*05ac2d0dSSascha WildnerThe first capabilities are defined exactly as they appear in the 492*05ac2d0dSSascha Wildner802.11n specification. 493*05ac2d0dSSascha WildnerCapabilities beginning with IEEE80211_HTC_AMPDU are used soley by the 494*05ac2d0dSSascha Wildner.Nm 495*05ac2d0dSSascha Wildnerlayer. 496*05ac2d0dSSascha Wildner.Bl -tag -width IEEE80211_C_8023ENCAP 497*05ac2d0dSSascha Wildner.It Dv IEEE80211_HTCAP_CHWIDTH40 498*05ac2d0dSSascha WildnerDevice supports 20/40 channel width operation. 499*05ac2d0dSSascha Wildner.It Dv IEEE80211_HTCAP_SMPS_DYNAMIC 500*05ac2d0dSSascha WildnerDevice supports dynamic SM power save operation. 501*05ac2d0dSSascha Wildner.It Dv IEEE80211_HTCAP_SMPS_ENA 502*05ac2d0dSSascha WildnerDevice supports static SM power save operation. 503*05ac2d0dSSascha Wildner.It Dv IEEE80211_HTCAP_GREENFIELD 504*05ac2d0dSSascha WildnerDevice supports Greenfield preamble. 505*05ac2d0dSSascha Wildner.It Dv IEEE80211_HTCAP_SHORTGI20 506*05ac2d0dSSascha WildnerDevice supports Short Guard Interval on 20MHz channels. 507*05ac2d0dSSascha Wildner.It Dv IEEE80211_HTCAP_SHORTGI40 508*05ac2d0dSSascha WildnerDevice supports Short Guard Interval on 40MHz channels. 509*05ac2d0dSSascha Wildner.It Dv IEEE80211_HTCAP_TXSTBC 510*05ac2d0dSSascha WildnerDevice supports Space Time Block Convolution (STBC) for transmit. 511*05ac2d0dSSascha Wildner.It Dv IEEE80211_HTCAP_RXSTBC_1STREAM 512*05ac2d0dSSascha WildnerDevice supports 1 spatial stream for STBC receive. 513*05ac2d0dSSascha Wildner.It Dv IEEE80211_HTCAP_RXSTBC_2STREAM 514*05ac2d0dSSascha WildnerDevice supports 1-2 spatial streams for STBC receive. 515*05ac2d0dSSascha Wildner.It Dv IEEE80211_HTCAP_RXSTBC_3STREAM 516*05ac2d0dSSascha WildnerDevice supports 1-3 spatial streams for STBC receive. 517*05ac2d0dSSascha Wildner.It Dv IEEE80211_HTCAP_MAXAMSDU_7935 518*05ac2d0dSSascha WildnerDevice supports A-MSDU frames up to 7935 octets. 519*05ac2d0dSSascha Wildner.It Dv IEEE80211_HTCAP_MAXAMSDU_3839 520*05ac2d0dSSascha WildnerDevice supports A-MSDU frames up to 3839 octets. 521*05ac2d0dSSascha Wildner.It Dv IEEE80211_HTCAP_DSSSCCK40 522*05ac2d0dSSascha WildnerDevice supports use of DSSS/CCK on 40MHz channels. 523*05ac2d0dSSascha Wildner.It Dv IEEE80211_HTCAP_PSMP 524*05ac2d0dSSascha WildnerDevice supports PSMP. 525*05ac2d0dSSascha Wildner.It Dv IEEE80211_HTCAP_40INTOLERANT 526*05ac2d0dSSascha WildnerDevice is intolerant of 40MHz wide channel use. 527*05ac2d0dSSascha Wildner.It Dv IEEE80211_HTCAP_LSIGTXOPPROT 528*05ac2d0dSSascha WildnerDevice supports L-SIG TXOP protection. 529*05ac2d0dSSascha Wildner.It Dv IEEE80211_HTC_AMPDU 530*05ac2d0dSSascha WildnerDevice supports A-MPDU aggregation. 531*05ac2d0dSSascha WildnerNote that any 802.11n compliant device must support A-MPDU receive 532*05ac2d0dSSascha Wildnerso this implicitly means support for 533*05ac2d0dSSascha Wildner.Em transmit 534*05ac2d0dSSascha Wildnerof A-MPDU frames. 535*05ac2d0dSSascha Wildner.It Dv IEEE80211_HTC_AMSDU 536*05ac2d0dSSascha WildnerDevice supports A-MSDU aggregation. 537*05ac2d0dSSascha WildnerNote that any 802.11n compliant device must support A-MSDU receive 538*05ac2d0dSSascha Wildnerso this implicitly means support for 539*05ac2d0dSSascha Wildner.Em transmit 540*05ac2d0dSSascha Wildnerof A-MSDU frames. 541*05ac2d0dSSascha Wildner.It Dv IEEE80211_HTC_HT 542*05ac2d0dSSascha WildnerDevice supports High Throughput (HT) operation. 543*05ac2d0dSSascha WildnerThis capability must be set to enable 802.11n functionality 544*05ac2d0dSSascha Wildnerin 545*05ac2d0dSSascha Wildner.Nm . 546*05ac2d0dSSascha Wildner.It Dv IEEE80211_HTC_SMPS 547*05ac2d0dSSascha WildnerDevice supports MIMO Power Save operation. 548*05ac2d0dSSascha Wildner.It Dv IEEE80211_HTC_RIFS 549*05ac2d0dSSascha WildnerDevice supports Reduced Inter Frame Spacing (RIFS). 550*05ac2d0dSSascha Wildner.El 551ff66a890SHiten Pandya.Sh SEE ALSO 552*05ac2d0dSSascha Wildner.Xr ioctl 2 , 553*05ac2d0dSSascha Wildner.\".Xr ndis 4 , 554*05ac2d0dSSascha Wildner.Xr ieee80211_amrr 9 , 555*05ac2d0dSSascha Wildner.Xr ieee80211_beacon 9 , 556*05ac2d0dSSascha Wildner.Xr ieee80211_bmiss 9 , 557ff66a890SHiten Pandya.Xr ieee80211_crypto 9 , 558*05ac2d0dSSascha Wildner.Xr ieee80211_ddb 9 , 559ff66a890SHiten Pandya.Xr ieee80211_input 9 , 560ff66a890SHiten Pandya.Xr ieee80211_node 9 , 561ff66a890SHiten Pandya.Xr ieee80211_output 9 , 562ff66a890SHiten Pandya.Xr ieee80211_proto 9 , 563ff66a890SHiten Pandya.Xr ieee80211_radiotap 9 , 564*05ac2d0dSSascha Wildner.Xr ieee80211_regdomain 9 , 565*05ac2d0dSSascha Wildner.Xr ieee80211_scan 9 , 566*05ac2d0dSSascha Wildner.Xr ieee80211_vap 9 , 567*05ac2d0dSSascha Wildner.Xr ifnet 9 , 568*05ac2d0dSSascha Wildner.Xr malloc 9 569