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