|
NAMEieee80211_output —
software 802.11 stack output functions
SYNOPSIS#include
<net80211/ieee80211_var.h>
int
int
struct ieee80211_key *
void
DESCRIPTIONThenet80211 layer that supports 802.11 device drivers
handles most of the work required to transmit frames. Drivers usually receive
fully-encapsulated 802.11 frames that have been classified and assigned a
transmit priority; all that is left is to do crypto encapsulation, prepare any
hardware-specific state, and push the packet out to the device. Outbound
frames are either generated by the net80211 layer
(e.g. management frames) or are passed down from upper layers through the
ifnet(9)
transmit queue. Data frames passed down for transmit flow through
net80211 which handles aggregation, 802.11
encapsulation, and then dispatches the frames to the driver through it's
transmit queue.
There are two control paths by which frames reach a driver for
transmit. Data packets are queued to the device's
if_snd queue and the driver's
if_start method is called. Other frames are passed
down using the ic_raw_xmit method without queueing
(unless done by the driver). The raw transmit path may include data frames
from user applications that inject them through
bpf(4) and
NullData frames generated by
All frames passed to a driver for transmit hold a reference to a
node table entry in the m_pkthdr.rcvif field. The node
is associated with the frame destination. Typically it is the receiver's
entry but in some situations it may be a placeholder entry or the
“next hop station” (such as in a mesh network). In all cases
the reference must be reclaimed with
PACKET CLASSIFICATIONAll frames passed bynet80211 for transmit are assigned
a priority based on any vlan tag assigned to the receiving station and/or any
Diffserv setting in an IP or IPv6 header. If both vlan and Diffserv priority
are present the higher of the two is used. If WME/WMM is being used then any
ACM policy (in station mode) is also enforced. The resulting AC is attached to
the mbuf and may be read back using the M_WME_GETAC ()
macro.
PAE/EAPOL frames are tagged with an
FRAGMENTED FRAMESThenet80211 layer will fragment data frames according
to the setting of iv_fragthreshold if a driver marks the
IEEE80211_C_TXFRAG capability. Fragmented frames are
placed in the devices transmit queue with the fragments chained together with
m_nextpkt. Each frame is marked with the
M_FRAG mbuf flag, and the first and last are marked
with M_FIRSTFRAG and
M_LASTFRAG , respectively. Drivers are expected to
process all fragments or none.
TRANSMIT CALLBACKSFrames sent bynet80211 may be tagged with the
M_TXCB mbuf flag to indicate a callback should be done
when their transmission completes. The callback is done using
ieee80211_process_callback () with the last parameter
set to a non-zero value if an error occurred and zero otherwise. Note
net80211 understands that drivers may be incapable of
determining status; a device may not report if an ACK frame is received and/or
a device may queue transmit requests in its hardware and only report status on
whether the frame was successfully queued.
SEE ALSObpf(4), ieee80211(9), ifnet(9)
Visit the GSP FreeBSD Man Page Interface. |