September 12, 2006 IEEE80211_NODE 9

### NAME

ieee80211_node_attach, ieee80211_node_lateattach, ieee80211_node_detach, ieee80211_begin_scan, ieee80211_next_scan, ieee80211_end_scan, ieee80211_create_ibss, ieee80211_alloc_node, ieee80211_dup_bss, ieee80211_find_node, ieee80211_free_node, ieee80211_free_allnodes, ieee80211_iterate_nodes - software 802.11 stack node management functions

### SYNOPSIS

```void` ieee80211_node_attach(```struct ieee80211com *ic`)
```void` ieee80211_node_lateattach(```struct ieee80211com *ic`)
```void` ieee80211_node_detach(```struct ieee80211com *ic`)
```void` ieee80211_begin_scan(```struct ieee80211com *ic``, int reset`)
```void` ieee80211_next_scan(```struct ieee80211com *ic`)
```void` ieee80211_end_scan(```struct ieee80211com *ic`)
```void` ieee80211_create_ibss(`` ```struct ieee80211com *ic` `struct ieee80211_channel *chan` )
```struct` `ieee80211_node``*` ieee80211_alloc_node(```struct ieee80211com *ic``, u_int8_t *macaddr`)
```struct` `ieee80211_node``*` ieee80211_dup_bss(`` ```struct ieee80211_node_table *nt` `const u_int8_t *macaddr` )
```struct` `ieee80211_node``*` ieee80211_find_node(`` ```struct ieee80211_node_table *nt` `const u_int8_t *macaddr` )
```void` ieee80211_free_node(```struct ieee80211_node *ni`)
```void` ieee80211_free_allnodes(```struct ieee80211_node_table *nt`)
```void` ieee80211_iterate_nodes(`` ```struct ieee80211_node_table *nt` `ieee80211_iter_func *f` `void *arg` )

### DESCRIPTION

These functions are used to manage node lists within the software 802.11 stack. These lists are typically used for implementing host-mode AP functionality, or providing signal quality information about neighbouring nodes.

The ieee80211_node_attach(``) function is called from ieee80211_ifattach(9) to initialize node database management callbacks for the interface ```ic` (specifically for memory allocation, node copying and node signal inspection). These functions may be overridden in special circumstances, as long as this is done after calling ieee80211_ifattach(9) and prior to any other call which may allocate a node.

The ieee80211_node_lateattach(``) function initialises the ic_bss node element of the interface ```ic` during ieee80211_media_init(9). This late attachment is to account for certain special cases described under ieee80211_node_attach(``).

The ieee80211_node_detach(``) function destroys all node database state associated with the interface ```ic`, and is usually called during device detach.

The ieee80211_begin_scan(``) function initialises the node database in preparation of a scan for an access point on the interface ```ic` and begins the scan. The parameter ```reset` controls if a previously built node list should be cleared. The actual scanning for an access point is not fully automated: the device driver itself controls stepping through the channels, usually by a periodical callback.

The ieee80211_next_scan(``) function is used to inform the ieee80211(9) layer that the next channel for interface ```ic` should be scanned.

The ieee80211_create_ibss(``) function sets up the net80211-specific portion of an interface's softc, ```ic`, for use in IBSS mode.

The ieee80211_end_scan(``) function is called by ieee80211_next_scan(``) when the state machine has peformed a full cycle of scanning on all available radio channels. Internally, ieee80211_end_scan(``) will inspect the node cache associated with the interface ```ic` for suitable access points found during scanning, and associate with one, should the parameters of the node match those of the configuration requested.

The ieee80211_alloc_node(``) function allocates an instance of for a node having the MAC address ```macaddr`, and associates it with the node table ```nt`. If the allocation is successful, the node structure is initialised by ieee80211_setup_node(``); otherwise, ```NULL` is returned.

The ieee80211_dup_bss(``) function is similar to ieee80211_alloc_node(``), but is instead used to create a node database entry for the BSSID ```macaddr` associated with the note table ```nt`. If the allocation is successful, the node structure is initialised by ieee80211_setup_node(``); otherwise, ```NULL` is returned.

The ieee80211_find_node(``) function will iterate through the node table ```nt`, searching for a node entry which matches ```macaddr`. If the entry is found, its reference count is incremented, and a pointer to the node is returned; otherwise, ```NULL` is returned.

The ieee80211_free_allnodes(``) function will iterate through the node list calling ieee80211_free_node(``) for all the nodes in table ```nt`.

The ieee80211_iterate_nodes(``) function will call the user-defined callback function ```f` for all nodes in the table ```nt`. The callback is invoked with the with the user-supplied value ```arg` and a pointer to the current node.

### SEE ALSO

ieee80211(9)

### HISTORY

The ieee80211 series of functions first appeared in NetBSD1.5, and were later ported to FreeBSD4.6.

### AUTHORS

This man page was written by Bruce M. Simpson <bms@FreeBSD.org> and Darron Broad <darron@kewl.org>.