IEEE80211_GET_BUFFER(9) Advanced driver interface IEEE80211_GET_BUFFER(9)NAME
ieee80211_get_buffered_bc - accessing buffered broadcast and multicast frames
SYNOPSIS
struct sk_buff * ieee80211_get_buffered_bc(struct ieee80211_hw * hw, struct ieee80211_vif * vif);
ARGUMENTS
hw
pointer as obtained from ieee80211_alloc_hw.
vif
struct ieee80211_vif pointer from the add_interface callback.
DESCRIPTION
Function for accessing buffered broadcast and multicast frames. If hardware/firmware does not implement buffering of broadcast/multicast
frames when power saving is used, 802.11 code buffers them in the host memory. The low-level driver uses this function to fetch next
buffered frame. In most cases, this is used when generating beacon frame.
RETURN
A pointer to the next buffered skb or NULL if no more buffered frames are available.
NOTE
buffered frames are returned only after DTIM beacon frame was generated with ieee80211_beacon_get and the low-level driver must thus call
ieee80211_beacon_get first. ieee80211_get_buffered_bc returns NULL if the previous generated beacon was not DTIM, so the low-level driver
does not need to check for DTIM beacons separately and should be able to use common code for all beacons.
AUTHOR
Johannes Berg <johannes@sipsolutions.net>
Author.
COPYRIGHT Kernel Hackers Manual 3.10 June 2014 IEEE80211_GET_BUFFER(9)
Check Out this Related Man Page
IEEE80211_BEACON(9) BSD Kernel Developer's Manual IEEE80211_BEACON(9)NAME
ieee80211_beacon -- 802.11 beacon support
SYNOPSIS
#include <net80211/ieee80211_var.h>
struct mbuf *
ieee80211_beacon_alloc(struct ieee80211_node *, struct ieee80211_beacon_offsets *);
int
ieee80211_beacon_update(struct ieee80211_node *, struct ieee80211_beacon_offsets *, struct mbuf *, int mcast);
void
ieee80211_beacon_notify(struct ieee80211vap *, int what);
DESCRIPTION
The net80211 software layer provides a support framework for drivers that includes a template-based mechanism for dynamic update of beacon
frames transmit in hostap, adhoc, and mesh operating modes. Drivers should use ieee80211_beacon_alloc() to create an initial beacon frame.
The ieee80211_beacon_offsets structure holds information about the beacon contents that is used to optimize updates done with
ieee80211_beacon_update().
Update calls should only be done when something changes that affects the contents of the beacon frame. When this happens the
iv_update_beacon method is invoked and a driver-supplied routine must do the right thing. For devices that involve the host to transmit each
beacon frame this work may be as simple as marking a bit in the ieee80211_beacon_offsets structure:
static void
ath_beacon_update(struct ieee80211vap *vap, int item)
{
struct ieee80211_beacon_offsets *bo = &ATH_VAP(vap)->av_boff;
setbit(bo->bo_flags, item);
}
with the ieee80211_beacon_update() call done before the next beacon is to be sent.
Devices that off-load beacon generation may instead choose to use this callback to push updates immediately to the device. Exactly how that
is accomplished is unspecified. One possibility is to update the beacon frame contents and extract the appropriate information element, but
other scenarios are possible.
MULTI-VAP BEACON SCHEDULING
Drivers that support multiple vaps that can each beacon need to consider how to schedule beacon frames. There are two possibilities at the
moment: burst all beacons at TBTT or stagger beacons over the beacon interval. Bursting beacon frames may result in aperiodic delivery that
can affect power save operation of associated stations. Applying some jitter (e.g. by randomly ordering burst frames) may be sufficient to
combat this and typically this is not an issue unless stations are using aggressive power save techniques such as U-APSD (sometimes employed
by VoIP phones). Staggering frames requires more interrupts and device support that may not be available. Staggering beacon frames is usu-
ally superior to bursting frames, up to about eight vaps, at which point the overhead becomes significant and the channel becomes noticeably
busy anyway.
SEE ALSO ieee80211(9)BSD August 4, 2009 BSD