summaryrefslogtreecommitdiff
path: root/static/freebsd/man9/ieee80211_beacon.9 3.html
blob: eff2b10e2744833ce8a2504f1a2626a743b4ba20 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
<table class="head">
  <tr>
    <td class="head-ltitle">IEEE80211_BEACON(9)</td>
    <td class="head-vol">Kernel Developer's Manual</td>
    <td class="head-rtitle">IEEE80211_BEACON(9)</td>
  </tr>
</table>
<div class="manual-text">
<section class="Sh">
<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
<p class="Pp"><code class="Nm">ieee80211_beacon</code> &#x2014;
    <span class="Nd">802.11 beacon support</span></p>
</section>
<section class="Sh">
<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
<p class="Pp"><code class="In">#include
    &lt;<a class="In">net80211/ieee80211_var.h</a>&gt;</code></p>
<p class="Pp">
  <br/>
  <var class="Ft">struct mbuf *</var>
  <br/>
  <code class="Fn">ieee80211_beacon_alloc</code>(<var class="Fa">struct
    ieee80211_node *</var>, <var class="Fa">struct ieee80211_beacon_offsets
    *</var>);</p>
<p class="Pp"><var class="Ft">int</var>
  <br/>
  <code class="Fn">ieee80211_beacon_update</code>(<var class="Fa">struct
    ieee80211_node *</var>, <var class="Fa">struct ieee80211_beacon_offsets
    *</var>, <var class="Fa">struct mbuf *</var>, <var class="Fa">int
    mcast</var>);</p>
<p class="Pp"><var class="Ft">void</var>
  <br/>
  <code class="Fn">ieee80211_beacon_notify</code>(<var class="Fa" style="white-space: nowrap;">struct
    ieee80211vap *</var>, <var class="Fa" style="white-space: nowrap;">int
    what</var>);</p>
</section>
<section class="Sh">
<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
<p class="Pp">The <code class="Nm">net80211</code> 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
    <a class="permalink" href="#ieee80211_beacon_alloc"><code class="Fn" id="ieee80211_beacon_alloc">ieee80211_beacon_alloc</code></a>()
    to create an initial beacon frame. The
    <var class="Vt">ieee80211_beacon_offsets</var> structure holds information
    about the beacon contents that is used to optimize updates done with
    <code class="Fn">ieee80211_beacon_update</code>().</p>
<p class="Pp">Update calls should only be done when something changes that
    affects the contents of the beacon frame. When this happens the
    <code class="Dv">iv_update_beacon</code> 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 <var class="Vt">ieee80211_beacon_offsets</var> structure:</p>
<div class="Bd Pp Li">
<pre>static void
ath_beacon_update(struct ieee80211vap *vap, int item)
{
        struct ieee80211_beacon_offsets *bo = &amp;ATH_VAP(vap)-&gt;av_boff;
	setbit(bo-&gt;bo_flags, item);
}</pre>
</div>
<p class="Pp" id="ieee80211_beacon_update">with the
    <a class="permalink" href="#ieee80211_beacon_update"><code class="Fn">ieee80211_beacon_update</code></a>()
    call done before the next beacon is to be sent.</p>
<p class="Pp">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.</p>
</section>
<section class="Sh">
<h1 class="Sh" id="MULTI-VAP_BEACON_SCHEDULING"><a class="permalink" href="#MULTI-VAP_BEACON_SCHEDULING">MULTI-VAP
  BEACON SCHEDULING</a></h1>
<p class="Pp">Drivers that support multiple vaps that can each beacon need to
    consider how to schedule beacon frames. There are two possibilities at the
    moment:
    <a class="permalink" href="#burst"><i class="Em" id="burst">burst</i></a>
    all beacons at TBTT or
    <a class="permalink" href="#stagger"><i class="Em" id="stagger">stagger
    beacons</i></a> 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 usually superior to bursting frames, up to about eight vaps, at
    which point the overhead becomes significant and the channel becomes
    noticeably busy anyway.</p>
</section>
<section class="Sh">
<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
  ALSO</a></h1>
<p class="Pp"><a class="Xr">ieee80211(9)</a></p>
</section>
</div>
<table class="foot">
  <tr>
    <td class="foot-date">August 4, 2009</td>
    <td class="foot-os">FreeBSD 15.0</td>
  </tr>
</table>