xref: /dflybsd-src/share/man/man9/ieee80211_proto.9 (revision 05ac2d0d30be792e7f2f4ef6d7bd5c57f08ffc8d)
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_proto.9,v 1.5 2009/09/18 00:33:47 brueffer Exp $
27ff66a890SHiten Pandya.\"
28*05ac2d0dSSascha Wildner.Dd April 28, 2010
29ff66a890SHiten Pandya.Dt IEEE80211_PROTO 9
30ff66a890SHiten Pandya.Os
31ff66a890SHiten Pandya.Sh NAME
32*05ac2d0dSSascha Wildner.Nm ieee80211_proto
33*05ac2d0dSSascha Wildner.Nd 802.11 state machine support
34ff66a890SHiten Pandya.Sh SYNOPSIS
35*05ac2d0dSSascha Wildner.In net80211/ieee80211_var.h
36*05ac2d0dSSascha Wildner.Pp
37ff66a890SHiten Pandya.Ft void
38*05ac2d0dSSascha Wildner.Fn ieee80211_start_all "struct ieee80211com *"
39ff66a890SHiten Pandya.Ft void
40*05ac2d0dSSascha Wildner.Fn ieee80211_stop_all "struct ieee80211com *"
41ff66a890SHiten Pandya.Ft void
42*05ac2d0dSSascha Wildner.Fn ieee80211_suspend_all "struct ieee80211com *"
43ff66a890SHiten Pandya.Ft void
44*05ac2d0dSSascha Wildner.Fn ieee80211_resume_all "struct ieee80211com *"
45*05ac2d0dSSascha Wildner.Pp
46*05ac2d0dSSascha Wildner.Dv enum ieee80211_state ;
47ff66a890SHiten Pandya.Ft int
48*05ac2d0dSSascha Wildner.Fn ieee80211_new_state "struct ieee80211vap *" "enum ieee80211_state" "int"
49*05ac2d0dSSascha Wildner.Pp
50*05ac2d0dSSascha Wildner.Ft void
51*05ac2d0dSSascha Wildner.Fn ieee80211_wait_for_parent "struct ieee80211com *"
52ff66a890SHiten Pandya.Sh DESCRIPTION
53ff66a890SHiten PandyaThe
54*05ac2d0dSSascha Wildner.Nm net80211
55*05ac2d0dSSascha Wildnerlayer that supports 802.11 device drivers uses a state machine
56*05ac2d0dSSascha Wildnerto control operation of vaps.
57*05ac2d0dSSascha WildnerThese state machines vary according to the vap operating mode.
58*05ac2d0dSSascha WildnerStation mode state machines follow the 802.11 MLME states
59*05ac2d0dSSascha Wildnerin the protocol specification.
60*05ac2d0dSSascha WildnerOther state machines are simpler and reflect operational work
61*05ac2d0dSSascha Wildnersuch as scanning for a BSS or automatically selecting a channel to
62*05ac2d0dSSascha Wildneroperate on.
63*05ac2d0dSSascha WildnerWhen multiple vaps are operational the state machines are used to
64*05ac2d0dSSascha Wildnercoordinate operation such as choosing a channel.
65*05ac2d0dSSascha WildnerThe state machine mechanism also serves to bind the
66*05ac2d0dSSascha Wildner.Nm net80211
67*05ac2d0dSSascha Wildnerlayer to a driver; this is described more below.
68*05ac2d0dSSascha Wildner.Pp
69*05ac2d0dSSascha WildnerThe following states are defined for state machines:
70*05ac2d0dSSascha Wildner.Bl -tag -width IEEE80211_S_ASSOC
71*05ac2d0dSSascha Wildner.It Dv IEEE80211_S_INIT
72*05ac2d0dSSascha WildnerDefault/initial state.
73*05ac2d0dSSascha WildnerA vap in this state should not hold any dynamic state (e.g. entries
74*05ac2d0dSSascha Wildnerfor associated stations in the node table).
75*05ac2d0dSSascha WildnerThe driver must quiesce the hardware; e.g. there should be no
76*05ac2d0dSSascha Wildnerinterrupts firing.
77*05ac2d0dSSascha Wildner.It Dv IEEE80211_S_SCAN
78*05ac2d0dSSascha WildnerScanning for a BSS or choosing a channel to operate on.
79*05ac2d0dSSascha WildnerNote that scanning can also take place in other states (e.g. when
80*05ac2d0dSSascha Wildnerbackground scanning is active); this state is entered when
81*05ac2d0dSSascha Wildnerinitially bringing a vap to an operational state or after an
82*05ac2d0dSSascha Wildnerevent such as a beacon miss (in station mode).
83*05ac2d0dSSascha Wildner.It Dv IEEE80211_S_AUTH
84*05ac2d0dSSascha WildnerAuthenticating to an access point (in station mode).
85*05ac2d0dSSascha WildnerThis state is normally reached from
86*05ac2d0dSSascha Wildner.Dv IEEE80211_S_SCAN
87*05ac2d0dSSascha Wildnerafter selecting a BSS, but may also be reached from
88*05ac2d0dSSascha Wildner.Dv IEEE80211_S_ASSOC
89*05ac2d0dSSascha Wildneror
90*05ac2d0dSSascha Wildner.Dv IEEE80211_S_RUN
91*05ac2d0dSSascha Wildnerif the authentication handshake fails.
92*05ac2d0dSSascha Wildner.It Dv IEEE80211_S_ASSOC
93*05ac2d0dSSascha WildnerAssociating to an access point (in station mode).
94*05ac2d0dSSascha WildnerThis state is reached from
95*05ac2d0dSSascha Wildner.Dv IEEE80211_S_AUTH
96*05ac2d0dSSascha Wildnerafter successfully authenticating or from
97*05ac2d0dSSascha Wildner.Dv IEEE80211_S_RUN
98*05ac2d0dSSascha Wildnerif a DisAssoc frame is received.
99*05ac2d0dSSascha Wildner.It Dv IEEE80211_S_CAC
100*05ac2d0dSSascha WildnerDoing Channel Availability Check (CAC).
101*05ac2d0dSSascha WildnerThis state is entered only when DFS is enabled and the channel selected
102*05ac2d0dSSascha Wildnerfor operation requires CAC.
103*05ac2d0dSSascha Wildner.It Dv IEEE80211_S_RUN
104*05ac2d0dSSascha WildnerOperational.
105*05ac2d0dSSascha WildnerIn this state a vap can transmit data frames, accept requests for
106*05ac2d0dSSascha Wildnerstations associating, etc.
107*05ac2d0dSSascha WildnerBeware that data traffic is also gated by whether the associated
108*05ac2d0dSSascha Wildner.Dq port
109*05ac2d0dSSascha Wildneris authorized.
110*05ac2d0dSSascha WildnerWhen WPA/802.11i/802.1x is operational authorization may happen separately;
111*05ac2d0dSSascha Wildnere.g. in station mode
112*05ac2d0dSSascha Wildner.Xr wpa_supplicant 8
113*05ac2d0dSSascha Wildnermust complete the handshakes and plumb the necessary keys before a port
114*05ac2d0dSSascha Wildneris authorized.
115*05ac2d0dSSascha WildnerIn this state a BSS is operational and associated state is valid and may
116*05ac2d0dSSascha Wildnerbe used; e.g.
117*05ac2d0dSSascha Wildner.Vt ic_bss
118ff66a890SHiten Pandyaand
119*05ac2d0dSSascha Wildner.Vt ic_bsschan
120*05ac2d0dSSascha Wildnerare guaranteed to be usable.
121*05ac2d0dSSascha Wildner.It Dv IEEE80211_S_CSA
122*05ac2d0dSSascha WildnerChannel Switch Announcement (CSA) is pending.
123*05ac2d0dSSascha WildnerThis state is reached only from
124*05ac2d0dSSascha Wildner.Dv IEEE80211_S_RUN
125*05ac2d0dSSascha Wildnerwhen either a CSA is received from an access point (in station mode)
126*05ac2d0dSSascha Wildneror the local station is preparing to change channel.
127*05ac2d0dSSascha WildnerIn this state traffic may be muted depending on the Mute setting in the CSA.
128*05ac2d0dSSascha Wildner.It Dv IEEE80211_S_SLEEP
129*05ac2d0dSSascha WildnerAsleep to save power (in station mode).
130*05ac2d0dSSascha WildnerThis state is reached only from
131*05ac2d0dSSascha Wildner.Dv IEEE80211_S_RUN
132*05ac2d0dSSascha Wildnerwhen power save operation is enabled and the local station is deemed
133*05ac2d0dSSascha Wildnersufficiently idle to enter low power mode.
134*05ac2d0dSSascha Wildner.El
135*05ac2d0dSSascha Wildner.Pp
136*05ac2d0dSSascha WildnerNote that states are ordered (as shown above);
137*05ac2d0dSSascha Wildnere.g. a vap must be in the
138*05ac2d0dSSascha Wildner.Dv IEEE80211_S_RUN
139*05ac2d0dSSascha Wildneror
140*05ac2d0dSSascha Wildner.Dq greater
141*05ac2d0dSSascha Wildnerbefore it can transmit frames.
142*05ac2d0dSSascha WildnerCertain
143*05ac2d0dSSascha Wildner.Nm net80211
144*05ac2d0dSSascha Wildnerdata are valid only in certain states; e.g. the
145*05ac2d0dSSascha Wildner.Vt iv_bsschan
146*05ac2d0dSSascha Wildnerthat specifies the channel for the operating BSS should never be used
147*05ac2d0dSSascha Wildnerexcept in
148*05ac2d0dSSascha Wildner.Dv IEEE80211_S_RUN
149*05ac2d0dSSascha Wildneror greater.
150*05ac2d0dSSascha Wildner.Sh STATE CHANGES
151*05ac2d0dSSascha WildnerState machine changes are typically handled internal to the
152*05ac2d0dSSascha Wildner.Nm net80211
153*05ac2d0dSSascha Wildnerlayer in response to
154*05ac2d0dSSascha Wildner.Xr ioctl 2
155*05ac2d0dSSascha Wildnerrequests, received frames, or external events such as a beacon miss.
156*05ac2d0dSSascha WildnerThe
157*05ac2d0dSSascha Wildner.Fn ieee80211_new_state
158*05ac2d0dSSascha Wildnerfunction is used to initiate a state machine change on a vap.
159*05ac2d0dSSascha WildnerThe new state and an optional argument are supplied.
160*05ac2d0dSSascha WildnerThe request is initially processed to handle coordination of multiple vaps.
161*05ac2d0dSSascha WildnerFor example, only one vap at a time can be scanning, if multiple vaps
162*05ac2d0dSSascha Wildnerrequest a change to
163*05ac2d0dSSascha Wildner.Dv IEEE80211_S_SCAN
164*05ac2d0dSSascha Wildnerthe first will be permitted to run and the others will be
165*05ac2d0dSSascha Wildner.Em deferred
166*05ac2d0dSSascha Wildneruntil the scan operation completes at which time the selected channel
167*05ac2d0dSSascha Wildnerwill be adopted.
168*05ac2d0dSSascha WildnerSimilarly
169*05ac2d0dSSascha Wildner.Nm net80211
170*05ac2d0dSSascha Wildnerhandles coordination of combinations of vaps such as an AP and station vap
171*05ac2d0dSSascha Wildnerwhere the station may need to roam to follow the AP it is associated to
172*05ac2d0dSSascha Wildner(dragging along the AP vap to the new channel).
173*05ac2d0dSSascha WildnerAnother important coordination is the handling of
174*05ac2d0dSSascha Wildner.Dv IEEE80211_S_CAC
175*05ac2d0dSSascha Wildnerand
176*05ac2d0dSSascha Wildner.Dv IEEE80211_S_CSA .
177*05ac2d0dSSascha WildnerNo more than one vap can ever be actively changing state at a time.
178*05ac2d0dSSascha WildnerIn fact
179*05ac2d0dSSascha Wildner.Nm net80211
180*05ac2d0dSSascha Wildnersingle-threads the state machine logic in a dedicated
181*05ac2d0dSSascha Wildner.Xr taskqueue 9
182*05ac2d0dSSascha Wildnerthread that is also used to synchronize work such as scanning and
183*05ac2d0dSSascha Wildnerbeacon miss handling.
184*05ac2d0dSSascha Wildner.Pp
185*05ac2d0dSSascha WildnerAfter multi-vap scheduling/coordination is done the per-vap
186*05ac2d0dSSascha Wildner.Vt iv_newstate
187*05ac2d0dSSascha Wildnermethod is called to carry out the state change work.
188*05ac2d0dSSascha WildnerDrivers use this entry to setup private state and then dispatch
189*05ac2d0dSSascha Wildnerthe call to the
190*05ac2d0dSSascha Wildner.Nm net80211
191*05ac2d0dSSascha Wildnerlayer using the previously defined method pointer (in OOP-parlance they
192*05ac2d0dSSascha Wildnercall the
193*05ac2d0dSSascha Wildner.Dq super method
194*05ac2d0dSSascha Wildner).
195*05ac2d0dSSascha Wildner.Pp
196*05ac2d0dSSascha Wildner.Nm net80211
197*05ac2d0dSSascha Wildnerhandles two state changes specially.
198*05ac2d0dSSascha WildnerOn transition to
199*05ac2d0dSSascha Wildner.Dv IEEE80211_S_RUN
200*05ac2d0dSSascha Wildnerthe
201*05ac2d0dSSascha Wildner.Dv IFF_DRV_OACTIVE
202*05ac2d0dSSascha Wildnerbit on the vap's transmit queue is cleared so traffic can flow.
203*05ac2d0dSSascha WildnerOn transition to
204*05ac2d0dSSascha Wildner.Dv IEEE80211_S_INIT
205*05ac2d0dSSascha Wildnerany state in the scan cache associated with the vap is flushed
206*05ac2d0dSSascha Wildnerand any frames pending on the transmit queue are flushed.
207*05ac2d0dSSascha Wildner.Sh DRIVER INTEGRATION
208*05ac2d0dSSascha WildnerDrivers are expected to override the
209*05ac2d0dSSascha Wildner.Vt iv_newstate
210*05ac2d0dSSascha Wildnermethod to interpose their own code and handle setup work required
211*05ac2d0dSSascha Wildnerby state changes.
212*05ac2d0dSSascha WildnerOtherwise drivers must call
213*05ac2d0dSSascha Wildner.Fn ieee80211_start_all
214*05ac2d0dSSascha Wildnerin response to being marked up through an
215*05ac2d0dSSascha Wildner.Dv SIOCSIFFLAGS
216*05ac2d0dSSascha Wildnerioctl request and they should use
217*05ac2d0dSSascha Wildner.Fn ieee80211_suspend_all
218*05ac2d0dSSascha Wildnerand
219*05ac2d0dSSascha Wildner.Fn ieee80211_resume_all
220*05ac2d0dSSascha Wildnerto implement suspend/resume support.
221*05ac2d0dSSascha Wildner.Pp
222*05ac2d0dSSascha WildnerThere is also an
223*05ac2d0dSSascha Wildner.Fn ieee80211_stop_all
224*05ac2d0dSSascha Wildnercall to force all vaps to an
225*05ac2d0dSSascha Wildner.Dv IEEE80211_S_INIT
226*05ac2d0dSSascha Wildnerstate but this should not be needed by a driver; control is usually
227*05ac2d0dSSascha Wildnerhandled by
228*05ac2d0dSSascha Wildner.Nm net80211
229*05ac2d0dSSascha Wildneror, in the case of card eject or vap destroy,
230*05ac2d0dSSascha Wildnerwork will be initiated outside the driver.
231*05ac2d0dSSascha Wildner.Sh SEE ALSO
232*05ac2d0dSSascha Wildner.Xr ioctl 2 ,
233*05ac2d0dSSascha Wildner.Xr wpa_supplicant 8 ,
234*05ac2d0dSSascha Wildner.Xr ieee80211 9 ,
235*05ac2d0dSSascha Wildner.Xr ifnet 9 ,
236*05ac2d0dSSascha Wildner.Xr taskqueue 9
237*05ac2d0dSSascha Wildner.Sh HISTORY
238*05ac2d0dSSascha WildnerThe state machine concept was part of the original
239*05ac2d0dSSascha Wildner.Nm ieee80211
240*05ac2d0dSSascha Wildnercode base that first appeared in
241*05ac2d0dSSascha Wildner.Nx 1.5 ,
242