xref: /dflybsd-src/share/man/man9/ieee80211_output.9 (revision 05ac2d0d30be792e7f2f4ef6d7bd5c57f08ffc8d)
1ff66a890SHiten Pandya.\"
2ff66a890SHiten Pandya.\" Copyright (c) 2004 Bruce M. Simpson <bms@spc.org>
3ff66a890SHiten Pandya.\" Copyright (c) 2004 Darron Broad <darron@kewl.org>
4ff66a890SHiten Pandya.\" All rights reserved.
5ff66a890SHiten Pandya.\"
6ff66a890SHiten Pandya.\" Redistribution and use in source and binary forms, with or without
7ff66a890SHiten Pandya.\" modification, are permitted provided that the following conditions
8ff66a890SHiten Pandya.\" are met:
9ff66a890SHiten Pandya.\" 1. Redistributions of source code must retain the above copyright
10ff66a890SHiten Pandya.\"    notice, this list of conditions and the following disclaimer.
11ff66a890SHiten Pandya.\" 2. Redistributions in binary form must reproduce the above copyright
12ff66a890SHiten Pandya.\"    notice, this list of conditions and the following disclaimer in the
13ff66a890SHiten Pandya.\"    documentation and/or other materials provided with the distribution.
14ff66a890SHiten Pandya.\"
15ff66a890SHiten Pandya.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
16ff66a890SHiten Pandya.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17ff66a890SHiten Pandya.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18ff66a890SHiten Pandya.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
19ff66a890SHiten Pandya.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
20ff66a890SHiten Pandya.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
21ff66a890SHiten Pandya.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
22ff66a890SHiten Pandya.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
23ff66a890SHiten Pandya.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
24ff66a890SHiten Pandya.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
25ff66a890SHiten Pandya.\" SUCH DAMAGE.
26ff66a890SHiten Pandya.\"
27*05ac2d0dSSascha Wildner.\" $FreeBSD: src/share/man/man9/ieee80211_output.9,v 1.6 2010/03/29 17:39:38 trasz Exp $
28*05ac2d0dSSascha Wildner.\" $Id: ieee80211_output.9,v 1.5 2004/03/04 12:31:18 bruce Exp $
29ff66a890SHiten Pandya.\"
30*05ac2d0dSSascha Wildner.Dd April 28, 2010
31ff66a890SHiten Pandya.Dt IEEE80211_OUTPUT 9
32ff66a890SHiten Pandya.Os
33ff66a890SHiten Pandya.Sh NAME
34*05ac2d0dSSascha Wildner.Nm ieee80211_output
35ff66a890SHiten Pandya.Nd software 802.11 stack output functions
36ff66a890SHiten Pandya.Sh SYNOPSIS
37*05ac2d0dSSascha Wildner.In net80211/ieee80211_var.h
38*05ac2d0dSSascha Wildner.\"
39ff66a890SHiten Pandya.Ft int
40*05ac2d0dSSascha Wildner.Fn M_WME_GETAC "struct mbuf *"
41*05ac2d0dSSascha Wildner.\"
42*05ac2d0dSSascha Wildner.Ft int
43*05ac2d0dSSascha Wildner.Fn M_SEQNO_GET "struct mbuf *"
44*05ac2d0dSSascha Wildner.\"
45*05ac2d0dSSascha Wildner.Ft struct ieee80211_key *
46*05ac2d0dSSascha Wildner.Fn ieee80211_crypto_encap "struct ieee80211_node *" "struct mbuf *"
47*05ac2d0dSSascha Wildner.\"
48*05ac2d0dSSascha Wildner.Ft void
49*05ac2d0dSSascha Wildner.Fo ieee80211_process_callback
50*05ac2d0dSSascha Wildner.Fa "struct ieee80211_node *"
51*05ac2d0dSSascha Wildner.Fa "struct mbuf *"
52*05ac2d0dSSascha Wildner.Fa "int"
53ff66a890SHiten Pandya.Fc
54ff66a890SHiten Pandya.Sh DESCRIPTION
55ff66a890SHiten PandyaThe
56*05ac2d0dSSascha Wildner.Nm net80211
57*05ac2d0dSSascha Wildnerlayer that supports 802.11 device drivers handles most of the
58*05ac2d0dSSascha Wildnerwork required to transmit frames.
59*05ac2d0dSSascha WildnerDrivers usually receive fully-encapsulated 802.11 frames that
60*05ac2d0dSSascha Wildnerhave been classified and assigned a transmit priority;
61*05ac2d0dSSascha Wildnerall that is left is to do
62*05ac2d0dSSascha Wildnercrypto encapsulation,
63*05ac2d0dSSascha Wildnerprepare any hardware-specific state,
641102a27eSSascha Wildnerand
65*05ac2d0dSSascha Wildnerpush the packet out to the device.
66*05ac2d0dSSascha WildnerOutbound frames are either generated by the
67*05ac2d0dSSascha Wildner.Nm net80211
68*05ac2d0dSSascha Wildnerlayer (e.g. management frames) or are passed down
69*05ac2d0dSSascha Wildnerfrom upper layers through the
70*05ac2d0dSSascha Wildner.Xr ifnet 9
71*05ac2d0dSSascha Wildnertransmit queue.
72*05ac2d0dSSascha WildnerData frames passed down for transmit flow through
73*05ac2d0dSSascha Wildner.Nm net80211
74*05ac2d0dSSascha Wildnerwhich handles aggregation, 802.11 encapsulation, and then
75*05ac2d0dSSascha Wildnerdispatches the frames to the driver through it's transmit queue.
761102a27eSSascha Wildner.Pp
77*05ac2d0dSSascha WildnerThere are two control paths by which frames reach a driver for transmit.
78*05ac2d0dSSascha WildnerData packets are queued to the device's
79*05ac2d0dSSascha Wildner.Vt if_snd
80*05ac2d0dSSascha Wildnerqueue and the driver's
81*05ac2d0dSSascha Wildner.Vt if_start
82*05ac2d0dSSascha Wildnermethod is called.
83*05ac2d0dSSascha WildnerOther frames are passed down using the
84*05ac2d0dSSascha Wildner.Vt ic_raw_xmit
85*05ac2d0dSSascha Wildnermethod without queueing (unless done by the driver).
86*05ac2d0dSSascha WildnerThe raw transmit path may include data frames from user applications
87*05ac2d0dSSascha Wildnerthat inject them through
88*05ac2d0dSSascha Wildner.Xr bpf 4
89*05ac2d0dSSascha Wildnerand NullData frames generated by
90*05ac2d0dSSascha Wildner.Nm net80211
91*05ac2d0dSSascha Wildnerto probe for idle stations (when operating as an access point).
921102a27eSSascha Wildner.Pp
93*05ac2d0dSSascha Wildner.Nm net80211
94*05ac2d0dSSascha Wildnerhandles all state-related bookkeeping and management for the handling
95*05ac2d0dSSascha Wildnerof data frames.
96*05ac2d0dSSascha WildnerData frames are only transmit for a vap in the
97*05ac2d0dSSascha Wildner.Dv IEEE80211_S_RUN
98*05ac2d0dSSascha Wildnerstate; there is no need, for example, to check for frames sent down
99*05ac2d0dSSascha Wildnerwhen CAC or CSA is active.
100*05ac2d0dSSascha WildnerSimilarly,
101*05ac2d0dSSascha Wildner.Nm net80211
102*05ac2d0dSSascha Wildnerhandles activities such as background scanning and power save mode,
103*05ac2d0dSSascha Wildnerframes will not be sent to a driver unless it is operating on the
104*05ac2d0dSSascha WildnerBSS channel with
105*05ac2d0dSSascha Wildner.Dq full power .
106*05ac2d0dSSascha Wildner.Pp
107*05ac2d0dSSascha WildnerAll frames passed to a driver for transmit hold a reference to a
108*05ac2d0dSSascha Wildnernode table entry in the
109*05ac2d0dSSascha Wildner.Vt m_pkthdr.rcvif
110*05ac2d0dSSascha Wildnerfield.
111*05ac2d0dSSascha WildnerThe node is associated with the frame destination.
112*05ac2d0dSSascha WildnerTypically it is the receiver's entry but in some situations it may be
113*05ac2d0dSSascha Wildnera placeholder entry or the
114*05ac2d0dSSascha Wildner.Dq next hop station
115*05ac2d0dSSascha Wildner(such as in a mesh network).
116*05ac2d0dSSascha WildnerIn all cases the reference must be reclaimed with
117*05ac2d0dSSascha Wildner.Fn ieee80211_free_node
118*05ac2d0dSSascha Wildnerwhen the transmit work is completed.
119*05ac2d0dSSascha WildnerThe rule to remember is:
120*05ac2d0dSSascha Wildner.Nm net80211
121*05ac2d0dSSascha Wildnerpasses responsibility for the
122*05ac2d0dSSascha Wildner.Vt mbuf
1231102a27eSSascha Wildnerand
124*05ac2d0dSSascha Wildner.Dq node reference
125*05ac2d0dSSascha Wildnerto the driver with each frame it hands off for transmit.
126*05ac2d0dSSascha Wildner.Sh PACKET CLASSIFICATION
127*05ac2d0dSSascha WildnerAll frames passed by
128*05ac2d0dSSascha Wildner.Nm net80211
129*05ac2d0dSSascha Wildnerfor transmit are assigned a priority based on any vlan tag
130*05ac2d0dSSascha Wildnerassigned to the receiving station and/or any Diffserv setting
131*05ac2d0dSSascha Wildnerin an IP or IPv6 header.
132*05ac2d0dSSascha WildnerIf both vlan and Diffserv priority are present the higher of the
133*05ac2d0dSSascha Wildnertwo is used.
134*05ac2d0dSSascha WildnerIf WME/WMM is being used then any ACM policy (in station mode) is
135*05ac2d0dSSascha Wildneralso enforced.
136*05ac2d0dSSascha WildnerThe resulting AC is attached to the mbuf and may be read back using the
137*05ac2d0dSSascha Wildner.Fn M_WME_GETAC
138*05ac2d0dSSascha Wildnermacro.
139*05ac2d0dSSascha Wildner.Pp
140*05ac2d0dSSascha WildnerPAE/EAPOL frames are tagged with an
141*05ac2d0dSSascha Wildner.Dv M_EAPOL
142*05ac2d0dSSascha Wildnermbuf flag; drivers should transmit them with care, usually by
143*05ac2d0dSSascha Wildnerusing the transmit rate for management frames.
144*05ac2d0dSSascha WildnerMulticast/broadcast frames are marked with the
145*05ac2d0dSSascha Wildner.Dv M_MCAST
146*05ac2d0dSSascha Wildnermbuf flag.
147*05ac2d0dSSascha WildnerFrames coming out of a station's power save queue and that have
148*05ac2d0dSSascha Wildnermore frames immediately following are marked with the
149*05ac2d0dSSascha Wildner.Dv M_MORE_DATA
150*05ac2d0dSSascha Wildnermbuf flag.
151*05ac2d0dSSascha WildnerSuch frames will be queued consecutively in the driver's
152*05ac2d0dSSascha Wildner.Vt if_snd
153*05ac2d0dSSascha Wildnerqueue and drivers should preserve the ordering when passing
154*05ac2d0dSSascha Wildnerthem to the device.
155*05ac2d0dSSascha Wildner.Sh FRAGMENTED FRAMES
156*05ac2d0dSSascha WildnerThe
157*05ac2d0dSSascha Wildner.Nm net80211
158*05ac2d0dSSascha Wildnerlayer will fragment data frames according to the setting of
159*05ac2d0dSSascha Wildner.Vt iv_fragthreshold
160*05ac2d0dSSascha Wildnerif a driver marks the
161*05ac2d0dSSascha Wildner.Dv IEEE80211_C_TXFRAG
162*05ac2d0dSSascha Wildnercapability.
163*05ac2d0dSSascha WildnerFragmented frames are placed
164*05ac2d0dSSascha Wildnerin the devices transmit queue with the fragments chained together with
165*05ac2d0dSSascha Wildner.Vt m_nextpkt .
166*05ac2d0dSSascha WildnerEach frame is marked with the
167*05ac2d0dSSascha Wildner.Dv M_FRAG
168*05ac2d0dSSascha Wildnermbuf flag, and the first and last are marked with
169*05ac2d0dSSascha Wildner.Dv M_FIRSTFRAG
170*05ac2d0dSSascha Wildnerand
171*05ac2d0dSSascha Wildner.Dv M_LASTFRAG ,
172*05ac2d0dSSascha Wildnerrespectively.
173*05ac2d0dSSascha WildnerDrivers are expected to process all fragments or none.
174*05ac2d0dSSascha Wildner.Sh TRANSMIT CALLBACKS
175*05ac2d0dSSascha WildnerFrames sent by
176*05ac2d0dSSascha Wildner.Nm net80211
177*05ac2d0dSSascha Wildnermay be tagged with the
178*05ac2d0dSSascha Wildner.Dv M_TXCB
179*05ac2d0dSSascha Wildnermbuf flag to indicate a callback should be done
180*05ac2d0dSSascha Wildnerwhen their transmission completes.
181*05ac2d0dSSascha WildnerThe callback is done using
182*05ac2d0dSSascha Wildner.Fn ieee80211_process_callback
183*05ac2d0dSSascha Wildnerwith the last parameter set to a non-zero value if an error occurred
184*05ac2d0dSSascha Wildnerand zero otherwise.
185*05ac2d0dSSascha WildnerNote
186*05ac2d0dSSascha Wildner.Nm net80211
187*05ac2d0dSSascha Wildnerunderstands that drivers may be incapable of determining status;
188*05ac2d0dSSascha Wildnera device may not report if an ACK frame is received and/or a device may queue
189*05ac2d0dSSascha Wildnertransmit requests in its hardware and only report status on whether
190*05ac2d0dSSascha Wildnerthe frame was successfully queued.
191ff66a890SHiten Pandya.Sh SEE ALSO
192*05ac2d0dSSascha Wildner.Xr bpf 4 ,
193ff66a890SHiten Pandya.Xr ieee80211 9 ,
194ff66a890SHiten Pandya.Xr ifnet 9
195