diff options
| author | Jacob McDonnell <jacob@jacobmcdonnell.com> | 2026-04-25 19:59:05 -0400 |
|---|---|---|
| committer | Jacob McDonnell <jacob@jacobmcdonnell.com> | 2026-04-25 19:59:05 -0400 |
| commit | 1f19f33e45791ea59aed048796fc68672c6723a5 (patch) | |
| tree | 54625fba89e91d1c2177801ec635e8528bba937f /static/freebsd/man9/ieee80211_node.9 3.html | |
| parent | ac5e55f5f2af5b92794c2aded46c6bae85b5f5ed (diff) | |
docs: Removed Precompiled HTML
Diffstat (limited to 'static/freebsd/man9/ieee80211_node.9 3.html')
| -rw-r--r-- | static/freebsd/man9/ieee80211_node.9 3.html | 190 |
1 files changed, 0 insertions, 190 deletions
diff --git a/static/freebsd/man9/ieee80211_node.9 3.html b/static/freebsd/man9/ieee80211_node.9 3.html deleted file mode 100644 index 5f8c677e..00000000 --- a/static/freebsd/man9/ieee80211_node.9 3.html +++ /dev/null @@ -1,190 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">IEEE80211_NODE(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">IEEE80211_NODE(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_node</code> — - <span class="Nd">software 802.11 stack node management functions</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 - <<a class="In">net80211/ieee80211_var.h</a>></code></p> -<p class="Pp"><var class="Ft">struct ieee80211_node *</var> - <br/> - <code class="Fn">ieee80211_find_rxnode</code>(<var class="Fa">struct - ieee80211com *</var>, <var class="Fa">const struct ieee80211_frame_min - *</var>);</p> -<p class="Pp"><var class="Ft">struct ieee80211_node *</var> - <br/> - <code class="Fn">ieee80211_find_rxnode_withkey</code>(<var class="Fa">struct - ieee80211com *</var>, <var class="Fa">const struct ieee80211_frame_min - *</var>, <var class="Fa">ieee80211_keyix</var>);</p> -<p class="Pp"><var class="Ft">struct ieee80211_node *</var> - <br/> - <code class="Fn">ieee80211_ref_node</code>(<var class="Fa" style="white-space: nowrap;">struct - ieee80211_node *</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">ieee80211_free_node</code>(<var class="Fa" style="white-space: nowrap;">struct - ieee80211_node *</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">ieee80211_iterate_nodes</code>(<var class="Fa">struct - ieee80211_node_table *</var>, <var class="Fa">ieee80211_iter_func *f</var>, - <var class="Fa">void *arg</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">ieee80211_dump_nodes</code>(<var class="Fa">struct - ieee80211_node_table *</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">ieee80211_dump_node</code>(<var class="Fa">struct - ieee80211_node *</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> layer that supports 802.11 - device drivers maintains a database of peer stations called the “node - table” in the <var class="Vt">ic_sta</var> entry of the - <var class="Vt">ieee80211com</var> structure. Station mode vaps create an - entry for the access point the station is associated to. AP mode vaps create - entries for associated stations. Adhoc and mesh mode vaps create entries for - neighbor stations. WDS mode vaps create an entry for the peer station. - Stations for all vaps reside in the same table; each node entry has a - <var class="Vt">ni_vap</var> field that identifies the vap that created it. - In some instances an entry is used by multiple vaps (e.g. for dynamic WDS a - station associated to an ap vap may also be the peer of a WDS vap).</p> -<p class="Pp" id="ieee80211_ref_node">Node table entries are reference counted. - That is, there is a count of all long term references that determines when - an entry may be reclaimed. References are held by every in-flight frame sent - to a station to ensure the entry is not reclaimed while the frame is queued - or otherwise held by a driver. Routines that lookup a table entry return a - “held reference” (i.e. a pointer to a table entry with the - reference count incremented). The - <a class="permalink" href="#ieee80211_ref_node"><code class="Fn">ieee80211_ref_node</code></a>() - call explicitly increments the reference count of a node. - <a class="permalink" href="#ieee80211_free_node"><code class="Fn" id="ieee80211_free_node">ieee80211_free_node</code></a>() - decrements the reference count of a node and if the count goes to zero - reclaims the table entry.</p> -<p class="Pp">The station table and its entries are exposed to drivers in - several ways. Each frame transmitted to a station includes a reference to - the associated node in the <var class="Vt">m_pkthdr.rcvif</var> field. This - reference must be reclaimed by the driver when transmit processing is done. - For each frame received the driver must lookup the table entry to use in - dispatching the frame “up the stack”. This lookup implicitly - obtains a reference to the table entry and the driver must reclaim the - reference when frame processing is completed. Otherwise drivers frequently - inspect the contents of the <var class="Vt">iv_bss</var> node when handling - state machine changes as important information is maintained in the data - structure.</p> -<p class="Pp" id="ieee80211_iterate_nodes">The node table is opaque to drivers. - Entries may be looked up using one of the pre-defined API's or the - <a class="permalink" href="#ieee80211_iterate_nodes"><code class="Fn">ieee80211_iterate_nodes</code></a>() - call may be used to iterate through all entries to do per-node processing or - implement some non-standard search mechanism. Note that - <code class="Fn">ieee80211_iterate_nodes</code>() is single-threaded - per-device and the effort processing involved is fairly substantial so it - should be used carefully.</p> -<p class="Pp" id="ieee80211_dump_node">Two routines are provided to print the - contents of nodes to the console for debugging: - <a class="permalink" href="#ieee80211_dump_node"><code class="Fn">ieee80211_dump_node</code></a>() - displays the contents of a single node while - <a class="permalink" href="#ieee80211_dump_nodes"><code class="Fn" id="ieee80211_dump_nodes">ieee80211_dump_nodes</code></a>() - displays the contents of the specified node table. Nodes may also be - displayed using <a class="Xr">ddb(4)</a> with the “show node” - directive and the station node table can be displayed with “show - statab”.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DRIVER_PRIVATE_STATE"><a class="permalink" href="#DRIVER_PRIVATE_STATE">DRIVER - PRIVATE STATE</a></h1> -<p class="Pp">Node data structures may be extended by the driver to include - driver-private state. This is done by overriding the - <var class="Vt">ic_node_alloc</var> method used to allocate a node table - entry. The driver method must allocate a structure that is an extension of - the <var class="Vt">ieee80211_node</var> structure. For example the - <a class="Xr">iwi(4)</a> driver defines a private node structure as:</p> -<div class="Bd Pp Bd-indent Li"> -<pre>struct iwi_node { - struct ieee80211_node in_node; - int in_station; -};</pre> -</div> -<p class="Pp">and then provides a private allocation routine that does this:</p> -<div class="Bd Pp Bd-indent Li"> -<pre>static struct ieee80211_node * -iwi_node_alloc(struct ieee80211vap *vap, - const uint8_t mac[IEEE80211_ADDR_LEN]) -{ - struct iwi_node *in; - - in = malloc(sizeof(struct iwi_node), M_80211_NODE, - M_NOWAIT | M_ZERO); - if (in == NULL) - return NULL; - in->in_station = -1; - return &in->in_node; -}</pre> -</div> -<p class="Pp">Note that when reclaiming a node allocated by the driver the - “parent method” must be called to ensure - <code class="Nm">net80211</code> state is reclaimed; for example:</p> -<div class="Bd Pp Bd-indent Li"> -<pre>static void -iwi_node_free(struct ieee80211_node *ni) -{ - struct ieee80211com *ic = ni->ni_ic; - struct iwi_softc *sc = ic->ic_ifp->if_softc; - struct iwi_node *in = (struct iwi_node *)ni; - - if (in->in_station != -1) - free_unr(sc->sc_unr, in->in_station); - sc->sc_node_free(ni); /* invoke net80211 free handler */ -}</pre> -</div> -<p class="Pp">Beware that care must be taken to avoid holding references that - might cause nodes from being reclaimed. <code class="Nm">net80211</code> - will reclaim a node when the last reference is reclaimed in its data - structures. However if a driver holds additional references then - <code class="Nm">net80211</code> will not recognize this and table entries - will not be reclaimed. Such references should not be needed if the driver - overrides the <var class="Vt">ic_node_cleanup</var> and/or - <var class="Vt">ic_node_free</var> methods.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="KEY_TABLE_SUPPORT"><a class="permalink" href="#KEY_TABLE_SUPPORT">KEY - TABLE SUPPORT</a></h1> -<p class="Pp">Node table lookups are typically done using a hash of the - stations' mac address. When receiving frames this is sufficient to find the - node table entry for the transmitter. But some devices also identify the - sending station in the device state received with each frame and this data - can be used to optimize lookups on receive using a companion table called - the “keytab”. This table records a separate node table - reference that can be fetched without any locking using the table index. - This logic is handled with the - <a class="permalink" href="#ieee80211_find_rxnode_withkey"><code class="Fn" id="ieee80211_find_rxnode_withkey">ieee80211_find_rxnode_withkey</code></a>() - call: if a keytab entry is found using the specified index then it is - returned directly; otherwise a normal lookup is done and the keytab entry is - written using the specified index. If the specified index is - <code class="Dv">IEEE80211_KEYIX_NONE</code> then a normal lookup is done - without a table update.</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">ddb(4)</a>, <a class="Xr">ieee80211(9)</a>, - <a class="Xr">ieee80211_proto(9)</a></p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">October 2, 2023</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> |
