xref: /dflybsd-src/share/man/man9/ieee80211_proto.9 (revision e4c06619483849b6d1d179ae56da763ed720062d)
1ff66a890SHiten Pandya.\"
205ac2d0dSSascha 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*e4c06619SSascha Wildner.\" $FreeBSD: head/share/man/man9/ieee80211_proto.9 235693 2012-05-20 16:43:47Z gjb $
27ff66a890SHiten Pandya.\"
28*e4c06619SSascha Wildner.Dd May 25, 2016
29ff66a890SHiten Pandya.Dt IEEE80211_PROTO 9
30ff66a890SHiten Pandya.Os
31ff66a890SHiten Pandya.Sh NAME
3205ac2d0dSSascha Wildner.Nm ieee80211_proto
3305ac2d0dSSascha Wildner.Nd 802.11 state machine support
34ff66a890SHiten Pandya.Sh SYNOPSIS
357d9c9280SSascha Wildner.In net/if.h
367d9c9280SSascha Wildner.In net/if_media.h
37737edb20SSascha Wildner.In netproto/802_11/ieee80211_var.h
3805ac2d0dSSascha Wildner.Pp
39ff66a890SHiten Pandya.Ft void
4005ac2d0dSSascha Wildner.Fn ieee80211_start_all "struct ieee80211com *"
41ff66a890SHiten Pandya.Ft void
4205ac2d0dSSascha Wildner.Fn ieee80211_stop_all "struct ieee80211com *"
43ff66a890SHiten Pandya.Ft void
4405ac2d0dSSascha Wildner.Fn ieee80211_suspend_all "struct ieee80211com *"
45ff66a890SHiten Pandya.Ft void
4605ac2d0dSSascha Wildner.Fn ieee80211_resume_all "struct ieee80211com *"
4705ac2d0dSSascha Wildner.Pp
4805ac2d0dSSascha Wildner.Dv enum ieee80211_state ;
49ff66a890SHiten Pandya.Ft int
5005ac2d0dSSascha Wildner.Fn ieee80211_new_state "struct ieee80211vap *" "enum ieee80211_state" "int"
5105ac2d0dSSascha Wildner.Pp
5205ac2d0dSSascha Wildner.Ft void
53d3085371SSascha Wildner.Fn ieee80211_waitfor_parent "struct ieee80211com *"
54ff66a890SHiten Pandya.Sh DESCRIPTION
55ff66a890SHiten PandyaThe
5605ac2d0dSSascha Wildner.Nm net80211
5705ac2d0dSSascha Wildnerlayer that supports 802.11 device drivers uses a state machine
5805ac2d0dSSascha Wildnerto control operation of vaps.
5905ac2d0dSSascha WildnerThese state machines vary according to the vap operating mode.
6005ac2d0dSSascha WildnerStation mode state machines follow the 802.11 MLME states
6105ac2d0dSSascha Wildnerin the protocol specification.
6205ac2d0dSSascha WildnerOther state machines are simpler and reflect operational work
6305ac2d0dSSascha Wildnersuch as scanning for a BSS or automatically selecting a channel to
6405ac2d0dSSascha Wildneroperate on.
6505ac2d0dSSascha WildnerWhen multiple vaps are operational the state machines are used to
6605ac2d0dSSascha Wildnercoordinate operation such as choosing a channel.
6705ac2d0dSSascha WildnerThe state machine mechanism also serves to bind the
6805ac2d0dSSascha Wildner.Nm net80211
6905ac2d0dSSascha Wildnerlayer to a driver; this is described more below.
7005ac2d0dSSascha Wildner.Pp
7105ac2d0dSSascha WildnerThe following states are defined for state machines:
7205ac2d0dSSascha Wildner.Bl -tag -width IEEE80211_S_ASSOC
7305ac2d0dSSascha Wildner.It Dv IEEE80211_S_INIT
7405ac2d0dSSascha WildnerDefault/initial state.
7505ac2d0dSSascha WildnerA vap in this state should not hold any dynamic state (e.g. entries
7605ac2d0dSSascha Wildnerfor associated stations in the node table).
7705ac2d0dSSascha WildnerThe driver must quiesce the hardware; e.g. there should be no
7805ac2d0dSSascha Wildnerinterrupts firing.
7905ac2d0dSSascha Wildner.It Dv IEEE80211_S_SCAN
8005ac2d0dSSascha WildnerScanning for a BSS or choosing a channel to operate on.
8105ac2d0dSSascha WildnerNote that scanning can also take place in other states (e.g. when
8205ac2d0dSSascha Wildnerbackground scanning is active); this state is entered when
8305ac2d0dSSascha Wildnerinitially bringing a vap to an operational state or after an
8405ac2d0dSSascha Wildnerevent such as a beacon miss (in station mode).
8505ac2d0dSSascha Wildner.It Dv IEEE80211_S_AUTH
8605ac2d0dSSascha WildnerAuthenticating to an access point (in station mode).
8705ac2d0dSSascha WildnerThis state is normally reached from
8805ac2d0dSSascha Wildner.Dv IEEE80211_S_SCAN
8905ac2d0dSSascha Wildnerafter selecting a BSS, but may also be reached from
9005ac2d0dSSascha Wildner.Dv IEEE80211_S_ASSOC
9105ac2d0dSSascha Wildneror
9205ac2d0dSSascha Wildner.Dv IEEE80211_S_RUN
9305ac2d0dSSascha Wildnerif the authentication handshake fails.
9405ac2d0dSSascha Wildner.It Dv IEEE80211_S_ASSOC
9505ac2d0dSSascha WildnerAssociating to an access point (in station mode).
9605ac2d0dSSascha WildnerThis state is reached from
9705ac2d0dSSascha Wildner.Dv IEEE80211_S_AUTH
9805ac2d0dSSascha Wildnerafter successfully authenticating or from
9905ac2d0dSSascha Wildner.Dv IEEE80211_S_RUN
10005ac2d0dSSascha Wildnerif a DisAssoc frame is received.
10105ac2d0dSSascha Wildner.It Dv IEEE80211_S_CAC
10205ac2d0dSSascha WildnerDoing Channel Availability Check (CAC).
10305ac2d0dSSascha WildnerThis state is entered only when DFS is enabled and the channel selected
10405ac2d0dSSascha Wildnerfor operation requires CAC.
10505ac2d0dSSascha Wildner.It Dv IEEE80211_S_RUN
10605ac2d0dSSascha WildnerOperational.
10705ac2d0dSSascha WildnerIn this state a vap can transmit data frames, accept requests for
10805ac2d0dSSascha Wildnerstations associating, etc.
10905ac2d0dSSascha WildnerBeware that data traffic is also gated by whether the associated
11005ac2d0dSSascha Wildner.Dq port
11105ac2d0dSSascha Wildneris authorized.
11205ac2d0dSSascha WildnerWhen WPA/802.11i/802.1x is operational authorization may happen separately;
11305ac2d0dSSascha Wildnere.g. in station mode
11405ac2d0dSSascha Wildner.Xr wpa_supplicant 8
11505ac2d0dSSascha Wildnermust complete the handshakes and plumb the necessary keys before a port
11605ac2d0dSSascha Wildneris authorized.
11705ac2d0dSSascha WildnerIn this state a BSS is operational and associated state is valid and may
11805ac2d0dSSascha Wildnerbe used; e.g.
11905ac2d0dSSascha Wildner.Vt ic_bss
120ff66a890SHiten Pandyaand
12105ac2d0dSSascha Wildner.Vt ic_bsschan
12205ac2d0dSSascha Wildnerare guaranteed to be usable.
12305ac2d0dSSascha Wildner.It Dv IEEE80211_S_CSA
12405ac2d0dSSascha WildnerChannel Switch Announcement (CSA) is pending.
12505ac2d0dSSascha WildnerThis state is reached only from
12605ac2d0dSSascha Wildner.Dv IEEE80211_S_RUN
12705ac2d0dSSascha Wildnerwhen either a CSA is received from an access point (in station mode)
12805ac2d0dSSascha Wildneror the local station is preparing to change channel.
12905ac2d0dSSascha WildnerIn this state traffic may be muted depending on the Mute setting in the CSA.
13005ac2d0dSSascha Wildner.It Dv IEEE80211_S_SLEEP
13105ac2d0dSSascha WildnerAsleep to save power (in station mode).
13205ac2d0dSSascha WildnerThis state is reached only from
13305ac2d0dSSascha Wildner.Dv IEEE80211_S_RUN
13405ac2d0dSSascha Wildnerwhen power save operation is enabled and the local station is deemed
13505ac2d0dSSascha Wildnersufficiently idle to enter low power mode.
13605ac2d0dSSascha Wildner.El
13705ac2d0dSSascha Wildner.Pp
13805ac2d0dSSascha WildnerNote that states are ordered (as shown above);
13905ac2d0dSSascha Wildnere.g. a vap must be in the
14005ac2d0dSSascha Wildner.Dv IEEE80211_S_RUN
14105ac2d0dSSascha Wildneror
14205ac2d0dSSascha Wildner.Dq greater
14305ac2d0dSSascha Wildnerbefore it can transmit frames.
14405ac2d0dSSascha WildnerCertain
14505ac2d0dSSascha Wildner.Nm net80211
14605ac2d0dSSascha Wildnerdata are valid only in certain states; e.g. the
14705ac2d0dSSascha Wildner.Vt iv_bsschan
14805ac2d0dSSascha Wildnerthat specifies the channel for the operating BSS should never be used
14905ac2d0dSSascha Wildnerexcept in
15005ac2d0dSSascha Wildner.Dv IEEE80211_S_RUN
15105ac2d0dSSascha Wildneror greater.
15205ac2d0dSSascha Wildner.Sh STATE CHANGES
15305ac2d0dSSascha WildnerState machine changes are typically handled internal to the
15405ac2d0dSSascha Wildner.Nm net80211
15505ac2d0dSSascha Wildnerlayer in response to
15605ac2d0dSSascha Wildner.Xr ioctl 2
15705ac2d0dSSascha Wildnerrequests, received frames, or external events such as a beacon miss.
15805ac2d0dSSascha WildnerThe
15905ac2d0dSSascha Wildner.Fn ieee80211_new_state
16005ac2d0dSSascha Wildnerfunction is used to initiate a state machine change on a vap.
16105ac2d0dSSascha WildnerThe new state and an optional argument are supplied.
16205ac2d0dSSascha WildnerThe request is initially processed to handle coordination of multiple vaps.
16305ac2d0dSSascha WildnerFor example, only one vap at a time can be scanning, if multiple vaps
16405ac2d0dSSascha Wildnerrequest a change to
16505ac2d0dSSascha Wildner.Dv IEEE80211_S_SCAN
16605ac2d0dSSascha Wildnerthe first will be permitted to run and the others will be
16705ac2d0dSSascha Wildner.Em deferred
16805ac2d0dSSascha Wildneruntil the scan operation completes at which time the selected channel
16905ac2d0dSSascha Wildnerwill be adopted.
17005ac2d0dSSascha WildnerSimilarly
17105ac2d0dSSascha Wildner.Nm net80211
17205ac2d0dSSascha Wildnerhandles coordination of combinations of vaps such as an AP and station vap
17305ac2d0dSSascha Wildnerwhere the station may need to roam to follow the AP it is associated to
17405ac2d0dSSascha Wildner(dragging along the AP vap to the new channel).
17505ac2d0dSSascha WildnerAnother important coordination is the handling of
17605ac2d0dSSascha Wildner.Dv IEEE80211_S_CAC
17705ac2d0dSSascha Wildnerand
17805ac2d0dSSascha Wildner.Dv IEEE80211_S_CSA .
17905ac2d0dSSascha WildnerNo more than one vap can ever be actively changing state at a time.
18005ac2d0dSSascha WildnerIn fact
18105ac2d0dSSascha Wildner.Nm net80211
18205ac2d0dSSascha Wildnersingle-threads the state machine logic in a dedicated
18305ac2d0dSSascha Wildner.Xr taskqueue 9
18405ac2d0dSSascha Wildnerthread that is also used to synchronize work such as scanning and
18505ac2d0dSSascha Wildnerbeacon miss handling.
18605ac2d0dSSascha Wildner.Pp
18705ac2d0dSSascha WildnerAfter multi-vap scheduling/coordination is done the per-vap
18805ac2d0dSSascha Wildner.Vt iv_newstate
18905ac2d0dSSascha Wildnermethod is called to carry out the state change work.
19005ac2d0dSSascha WildnerDrivers use this entry to setup private state and then dispatch
19105ac2d0dSSascha Wildnerthe call to the
19205ac2d0dSSascha Wildner.Nm net80211
19305ac2d0dSSascha Wildnerlayer using the previously defined method pointer (in OOP-parlance they
19405ac2d0dSSascha Wildnercall the
19505ac2d0dSSascha Wildner.Dq super method
19605ac2d0dSSascha Wildner).
19705ac2d0dSSascha Wildner.Pp
19805ac2d0dSSascha Wildner.Nm net80211
19905ac2d0dSSascha Wildnerhandles two state changes specially.
20005ac2d0dSSascha WildnerOn transition to
20105ac2d0dSSascha Wildner.Dv IEEE80211_S_RUN
20205ac2d0dSSascha Wildnerthe
20305ac2d0dSSascha Wildner.Dv IFF_DRV_OACTIVE
20405ac2d0dSSascha Wildnerbit on the vap's transmit queue is cleared so traffic can flow.
20505ac2d0dSSascha WildnerOn transition to
20605ac2d0dSSascha Wildner.Dv IEEE80211_S_INIT
20705ac2d0dSSascha Wildnerany state in the scan cache associated with the vap is flushed
20805ac2d0dSSascha Wildnerand any frames pending on the transmit queue are flushed.
20905ac2d0dSSascha Wildner.Sh DRIVER INTEGRATION
21005ac2d0dSSascha WildnerDrivers are expected to override the
21105ac2d0dSSascha Wildner.Vt iv_newstate
21205ac2d0dSSascha Wildnermethod to interpose their own code and handle setup work required
21305ac2d0dSSascha Wildnerby state changes.
21405ac2d0dSSascha WildnerOtherwise drivers must call
21505ac2d0dSSascha Wildner.Fn ieee80211_start_all
21605ac2d0dSSascha Wildnerin response to being marked up through an
21705ac2d0dSSascha Wildner.Dv SIOCSIFFLAGS
21805ac2d0dSSascha Wildnerioctl request and they should use
21905ac2d0dSSascha Wildner.Fn ieee80211_suspend_all
22005ac2d0dSSascha Wildnerand
22105ac2d0dSSascha Wildner.Fn ieee80211_resume_all
22205ac2d0dSSascha Wildnerto implement suspend/resume support.
22305ac2d0dSSascha Wildner.Pp
22405ac2d0dSSascha WildnerThere is also an
22505ac2d0dSSascha Wildner.Fn ieee80211_stop_all
22605ac2d0dSSascha Wildnercall to force all vaps to an
22705ac2d0dSSascha Wildner.Dv IEEE80211_S_INIT
22805ac2d0dSSascha Wildnerstate but this should not be needed by a driver; control is usually
22905ac2d0dSSascha Wildnerhandled by
23005ac2d0dSSascha Wildner.Nm net80211
23105ac2d0dSSascha Wildneror, in the case of card eject or vap destroy,
23205ac2d0dSSascha Wildnerwork will be initiated outside the driver.
23305ac2d0dSSascha Wildner.Sh SEE ALSO
23405ac2d0dSSascha Wildner.Xr ioctl 2 ,
23505ac2d0dSSascha Wildner.Xr wpa_supplicant 8 ,
23605ac2d0dSSascha Wildner.Xr ieee80211 9 ,
23705ac2d0dSSascha Wildner.Xr ifnet 9 ,
23805ac2d0dSSascha Wildner.Xr taskqueue 9
23905ac2d0dSSascha Wildner.Sh HISTORY
24005ac2d0dSSascha WildnerThe state machine concept was part of the original
24105ac2d0dSSascha Wildner.Nm ieee80211
24205ac2d0dSSascha Wildnercode base that first appeared in
243*e4c06619SSascha Wildner.Nx 1.5 .
244