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