xref: /dflybsd-src/share/man/man9/ieee80211_output.9 (revision a42bad2dd166ad946800e2379892153f2e5a70c7)
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.\"
27e4c06619SSascha Wildner.\" $FreeBSD: head/share/man/man9/ieee80211_output.9 233648 2012-03-29 05:02:12Z eadler $
2805ac2d0dSSascha Wildner.\" $Id: ieee80211_output.9,v 1.5 2004/03/04 12:31:18 bruce Exp $
29ff66a890SHiten Pandya.\"
30e4c06619SSascha Wildner.Dd May 25, 2016
31ff66a890SHiten Pandya.Dt IEEE80211_OUTPUT 9
32ff66a890SHiten Pandya.Os
33ff66a890SHiten Pandya.Sh NAME
3405ac2d0dSSascha Wildner.Nm ieee80211_output
35ff66a890SHiten Pandya.Nd software 802.11 stack output functions
36ff66a890SHiten Pandya.Sh SYNOPSIS
377d9c9280SSascha Wildner.In net/if.h
387d9c9280SSascha Wildner.In net/if_media.h
39737edb20SSascha Wildner.In netproto/802_11/ieee80211_var.h
4005ac2d0dSSascha Wildner.\"
41ff66a890SHiten Pandya.Ft int
4205ac2d0dSSascha Wildner.Fn M_WME_GETAC "struct mbuf *"
4305ac2d0dSSascha Wildner.\"
4405ac2d0dSSascha Wildner.Ft int
4505ac2d0dSSascha Wildner.Fn M_SEQNO_GET "struct mbuf *"
4605ac2d0dSSascha Wildner.\"
4705ac2d0dSSascha Wildner.Ft void
4805ac2d0dSSascha Wildner.Fo ieee80211_process_callback
4905ac2d0dSSascha Wildner.Fa "struct ieee80211_node *"
5005ac2d0dSSascha Wildner.Fa "struct mbuf *"
5105ac2d0dSSascha Wildner.Fa "int"
52ff66a890SHiten Pandya.Fc
53ff66a890SHiten Pandya.Sh DESCRIPTION
54ff66a890SHiten PandyaThe
5505ac2d0dSSascha Wildner.Nm net80211
5605ac2d0dSSascha Wildnerlayer that supports 802.11 device drivers handles most of the
5705ac2d0dSSascha Wildnerwork required to transmit frames.
5805ac2d0dSSascha WildnerDrivers usually receive fully-encapsulated 802.11 frames that
5905ac2d0dSSascha Wildnerhave been classified and assigned a transmit priority;
6005ac2d0dSSascha Wildnerall that is left is to do
6105ac2d0dSSascha Wildnercrypto encapsulation,
6205ac2d0dSSascha Wildnerprepare any hardware-specific state,
631102a27eSSascha Wildnerand
6405ac2d0dSSascha Wildnerpush the packet out to the device.
6505ac2d0dSSascha WildnerOutbound frames are either generated by the
6605ac2d0dSSascha Wildner.Nm net80211
6705ac2d0dSSascha Wildnerlayer (e.g. management frames) or are passed down
6805ac2d0dSSascha Wildnerfrom upper layers through the
6905ac2d0dSSascha Wildner.Xr ifnet 9
7005ac2d0dSSascha Wildnertransmit queue.
7105ac2d0dSSascha WildnerData frames passed down for transmit flow through
7205ac2d0dSSascha Wildner.Nm net80211
7305ac2d0dSSascha Wildnerwhich handles aggregation, 802.11 encapsulation, and then
74*a42bad2dSSascha Wildnerdispatches the frames to the driver through its transmit queue.
751102a27eSSascha Wildner.Pp
7605ac2d0dSSascha WildnerThere are two control paths by which frames reach a driver for transmit.
7705ac2d0dSSascha WildnerData packets are queued to the device's
7805ac2d0dSSascha Wildner.Vt if_snd
7905ac2d0dSSascha Wildnerqueue and the driver's
8005ac2d0dSSascha Wildner.Vt if_start
8105ac2d0dSSascha Wildnermethod is called.
8205ac2d0dSSascha WildnerOther frames are passed down using the
8305ac2d0dSSascha Wildner.Vt ic_raw_xmit
8405ac2d0dSSascha Wildnermethod without queueing (unless done by the driver).
8505ac2d0dSSascha WildnerThe raw transmit path may include data frames from user applications
8605ac2d0dSSascha Wildnerthat inject them through
8705ac2d0dSSascha Wildner.Xr bpf 4
8805ac2d0dSSascha Wildnerand NullData frames generated by
8905ac2d0dSSascha Wildner.Nm net80211
9005ac2d0dSSascha Wildnerto probe for idle stations (when operating as an access point).
911102a27eSSascha Wildner.Pp
9205ac2d0dSSascha Wildner.Nm net80211
9305ac2d0dSSascha Wildnerhandles all state-related bookkeeping and management for the handling
9405ac2d0dSSascha Wildnerof data frames.
9505ac2d0dSSascha WildnerData frames are only transmit for a vap in the
9605ac2d0dSSascha Wildner.Dv IEEE80211_S_RUN
9705ac2d0dSSascha Wildnerstate; there is no need, for example, to check for frames sent down
9805ac2d0dSSascha Wildnerwhen CAC or CSA is active.
9905ac2d0dSSascha WildnerSimilarly,
10005ac2d0dSSascha Wildner.Nm net80211
10105ac2d0dSSascha Wildnerhandles activities such as background scanning and power save mode,
10205ac2d0dSSascha Wildnerframes will not be sent to a driver unless it is operating on the
10305ac2d0dSSascha WildnerBSS channel with
10405ac2d0dSSascha Wildner.Dq full power .
10505ac2d0dSSascha Wildner.Pp
10605ac2d0dSSascha WildnerAll frames passed to a driver for transmit hold a reference to a
10705ac2d0dSSascha Wildnernode table entry in the
10805ac2d0dSSascha Wildner.Vt m_pkthdr.rcvif
10905ac2d0dSSascha Wildnerfield.
11005ac2d0dSSascha WildnerThe node is associated with the frame destination.
11105ac2d0dSSascha WildnerTypically it is the receiver's entry but in some situations it may be
11205ac2d0dSSascha Wildnera placeholder entry or the
11305ac2d0dSSascha Wildner.Dq next hop station
11405ac2d0dSSascha Wildner(such as in a mesh network).
11505ac2d0dSSascha WildnerIn all cases the reference must be reclaimed with
11605ac2d0dSSascha Wildner.Fn ieee80211_free_node
11705ac2d0dSSascha Wildnerwhen the transmit work is completed.
11805ac2d0dSSascha WildnerThe rule to remember is:
11905ac2d0dSSascha Wildner.Nm net80211
12005ac2d0dSSascha Wildnerpasses responsibility for the
12105ac2d0dSSascha Wildner.Vt mbuf
1221102a27eSSascha Wildnerand
12305ac2d0dSSascha Wildner.Dq node reference
12405ac2d0dSSascha Wildnerto the driver with each frame it hands off for transmit.
12505ac2d0dSSascha Wildner.Sh PACKET CLASSIFICATION
12605ac2d0dSSascha WildnerAll frames passed by
12705ac2d0dSSascha Wildner.Nm net80211
12805ac2d0dSSascha Wildnerfor transmit are assigned a priority based on any vlan tag
12905ac2d0dSSascha Wildnerassigned to the receiving station and/or any Diffserv setting
13005ac2d0dSSascha Wildnerin an IP or IPv6 header.
13105ac2d0dSSascha WildnerIf both vlan and Diffserv priority are present the higher of the
13205ac2d0dSSascha Wildnertwo is used.
13305ac2d0dSSascha WildnerIf WME/WMM is being used then any ACM policy (in station mode) is
13405ac2d0dSSascha Wildneralso enforced.
13505ac2d0dSSascha WildnerThe resulting AC is attached to the mbuf and may be read back using the
13605ac2d0dSSascha Wildner.Fn M_WME_GETAC
13705ac2d0dSSascha Wildnermacro.
13805ac2d0dSSascha Wildner.Pp
13905ac2d0dSSascha WildnerPAE/EAPOL frames are tagged with an
14005ac2d0dSSascha Wildner.Dv M_EAPOL
14105ac2d0dSSascha Wildnermbuf flag; drivers should transmit them with care, usually by
14205ac2d0dSSascha Wildnerusing the transmit rate for management frames.
14305ac2d0dSSascha WildnerMulticast/broadcast frames are marked with the
14405ac2d0dSSascha Wildner.Dv M_MCAST
14505ac2d0dSSascha Wildnermbuf flag.
14605ac2d0dSSascha WildnerFrames coming out of a station's power save queue and that have
14705ac2d0dSSascha Wildnermore frames immediately following are marked with the
14805ac2d0dSSascha Wildner.Dv M_MORE_DATA
14905ac2d0dSSascha Wildnermbuf flag.
15005ac2d0dSSascha WildnerSuch frames will be queued consecutively in the driver's
15105ac2d0dSSascha Wildner.Vt if_snd
15205ac2d0dSSascha Wildnerqueue and drivers should preserve the ordering when passing
15305ac2d0dSSascha Wildnerthem to the device.
15405ac2d0dSSascha Wildner.Sh FRAGMENTED FRAMES
15505ac2d0dSSascha WildnerThe
15605ac2d0dSSascha Wildner.Nm net80211
15705ac2d0dSSascha Wildnerlayer will fragment data frames according to the setting of
15805ac2d0dSSascha Wildner.Vt iv_fragthreshold
15905ac2d0dSSascha Wildnerif a driver marks the
16005ac2d0dSSascha Wildner.Dv IEEE80211_C_TXFRAG
16105ac2d0dSSascha Wildnercapability.
16205ac2d0dSSascha WildnerFragmented frames are placed
16305ac2d0dSSascha Wildnerin the devices transmit queue with the fragments chained together with
16405ac2d0dSSascha Wildner.Vt m_nextpkt .
16505ac2d0dSSascha WildnerEach frame is marked with the
16605ac2d0dSSascha Wildner.Dv M_FRAG
16705ac2d0dSSascha Wildnermbuf flag, and the first and last are marked with
16805ac2d0dSSascha Wildner.Dv M_FIRSTFRAG
16905ac2d0dSSascha Wildnerand
17005ac2d0dSSascha Wildner.Dv M_LASTFRAG ,
17105ac2d0dSSascha Wildnerrespectively.
17205ac2d0dSSascha WildnerDrivers are expected to process all fragments or none.
17305ac2d0dSSascha Wildner.Sh TRANSMIT CALLBACKS
17405ac2d0dSSascha WildnerFrames sent by
17505ac2d0dSSascha Wildner.Nm net80211
17605ac2d0dSSascha Wildnermay be tagged with the
17705ac2d0dSSascha Wildner.Dv M_TXCB
17805ac2d0dSSascha Wildnermbuf flag to indicate a callback should be done
17905ac2d0dSSascha Wildnerwhen their transmission completes.
18005ac2d0dSSascha WildnerThe callback is done using
18105ac2d0dSSascha Wildner.Fn ieee80211_process_callback
18205ac2d0dSSascha Wildnerwith the last parameter set to a non-zero value if an error occurred
18305ac2d0dSSascha Wildnerand zero otherwise.
18405ac2d0dSSascha WildnerNote
18505ac2d0dSSascha Wildner.Nm net80211
18605ac2d0dSSascha Wildnerunderstands that drivers may be incapable of determining status;
18705ac2d0dSSascha Wildnera device may not report if an ACK frame is received and/or a device may queue
18805ac2d0dSSascha Wildnertransmit requests in its hardware and only report status on whether
18905ac2d0dSSascha Wildnerthe frame was successfully queued.
190ff66a890SHiten Pandya.Sh SEE ALSO
19105ac2d0dSSascha Wildner.Xr bpf 4 ,
192ff66a890SHiten Pandya.Xr ieee80211 9 ,
193e4c06619SSascha Wildner.Xr ieee80211_crypto_encap 9 ,
194ff66a890SHiten Pandya.Xr ifnet 9
195