---
name: "ieee80211_attach"
section: "9"
platform: "linux"
package: "freebsd-manpages"
version: "6.0-5"
release: "Debian 4.0 (Etch)"
platforms: ["linux"]
url: "https://new.carta.tech/ieee80211_attach"
---

# ieee80211\_attach(9)

core 802.11 network stack functions

## NAME

**ieee80211\_ifattach**, **ieee80211\_ifdetach**, **ieee80211\_mhz2ieee**, **ieee80211\_chan2ieee**, **ieee80211\_ieee2mhz**, **ieee80211\_media\_init**, **ieee80211\_media\_change**, **ieee80211\_media\_status**, **ieee80211\_watchdog**, **ieee80211\_setmode**, **ieee80211\_chan2mode**, **ieee80211\_rate2media**, **ieee80211\_media2rate** – core 802.11 network stack functions

## SYNOPSIS

**#include \<net80211/ieee80211\_var.h\>**

**#include \<net80211/ieee80211\_proto.h\>**

*void*\

**ieee80211\_ifattach**(*struct ifnet \*ifp*);

*void*\

**ieee80211\_ifdetach**(*struct ifnet \*ifp*);

*u\_int*\

**ieee80211\_mhz2ieee**(*u\_int freq*, *u\_int flags*);

*u\_int*\

**ieee80211\_chan2ieee**(*struct ieee80211com \*ic*, *struct ieee80211\_channel \*c*);

*u\_int*\

**ieee80211\_ieee2mhz**(*u\_int chan*, *u\_int flags*);

*void*\

**ieee80211\_media\_init**(*struct ifnet \*ifp*, *ifm\_change\_cb\_t media\_change*, *ifm\_stat\_cb\_t media\_stat*);

*int*

**ieee80211\_media\_change**(*struct ifnet \*ifp*); *void*

**ieee80211\_media\_status**(*struct ifnet \*ifp*, *struct ifmediareq \*imr*);

*void*\

**ieee80211\_watchdog**(*struct ifnet \*ifp*);

*int*\

**ieee80211\_setmode**(*struct ieee80211com \*ic*, *enum ieee80211\_phymode mode*);

*enum* *ieee80211\_phymode*\

**ieee80211\_chan2mode**(*struct ieee80211com \*ic*, *struct ieee80211\_channel \*chan*);

*int*\

**ieee80211\_rate2media**(*struct ieee80211com \*ic*, *int rate*, *enum ieee80211\_phymode mode*);

*int*\

**ieee80211\_media2rate**(*int mword*);

## DESCRIPTION

The **ieee80211** collection of functions are used to manage wireless network interfaces in the system which use the system's software 802.11 network stack. Most of these functions require that attachment to the stack is performed before calling. Several utility functions are also provided; these are safe to call from any driver without prior initialization.

The **ieee80211\_ifattach**() function attaches the network interface *ifp* to the 802.11 network stack layer. This function must be called before using any of the **ieee80211** functions which need to store driver state across invocations; The *struct* *ifnet* instance pointed to by *ifp* MUST be an instance of *struct* *ieee80211com*, with various fields initialized to tell **ieee80211** about its capabilities. This function performs Ethernet and BPF attachment (by calling **ether\_ifattach**() and **bpfattach2**()) on behalf of the caller. It also implements the *ifmedia* interface.

The **ieee80211\_ifdetach**() function frees any **ieee80211** structures associated with the driver, and performs Ethernet and BPF detachment on behalf of the caller.

The **ieee80211\_mhz2ieee**() utility function converts the frequency *freq* (specified in MHz) to an IEEE 802.11 channel number. The *flags* argument is a hint which specifies whether the frequency is in the 2GHz ISM band (*IEEE80211\_CHAN\_2GHZ*) or the 5GHz band (*IEEE80211\_CHAN\_5GHZ*); appropriate clipping of the result is then performed.

The **ieee80211\_chan2ieee**() function converts the channel specified in *\*c* to an IEEE channel number for the driver *ic*. If the conversion would be invalid, an error message is printed to the system console. This function REQUIRES that the driver is hooked up to the **ieee80211** subsystem.

The **ieee80211\_ieee2mhz**() utility function converts the IEEE channel number *chan* to a frequency (in MHz). The *flags* argument is a hint which specifies whether the frequency is in the 2GHz ISM band (*IEEE80211\_CHAN\_2GHZ*) or the 5GHz band (*IEEE80211\_CHAN\_5GHZ*); appropriate clipping of the result is then performed.

The **ieee80211\_media\_init**() function initializes media data structures used by the *ifmedia* interface, for the driver *ifp*. It must be called by the driver after calling **ieee80211\_attach**() and before calling most **ieee80211** functions. The *media\_change* and *media\_stat* arguments specify helper functions which will be invoked by the *ifmedia* framework when the user changes or queries media options, using a command such as [ifconfig(8)](/ifconfig/8.md).

The **ieee80211\_media\_status**() and **ieee80211\_media\_change**() functions are device-independent handlers for *ifmedia* commands and are not intended to be called directly.

The **ieee80211\_watchdog**() function is intended to be called from a driver's *if\_watchdog* routine. It is used to perform periodic cleanup of state within the software 802.11 stack, as well as timing out scans.

The **ieee80211\_setmode**() function is called from within the 802.11 stack to change the mode of the driver's PHY; it is not intended to be called directly.

The **ieee80211\_chan2mode**() function returns the PHY mode required for use with the channel *chan* on the device *ic*. This is typically used when selecting a rate set, to be advertised in beacons, for example.

The **ieee80211\_rate2media**() function converts the bit rate *rate* (measured in units of 0.5Mbps) to an *ifmedia* sub-type, for the device *ic* running in PHY mode *mode*. The **ieee80211\_media2rate**() performs the reverse of this conversion, returning the bit rate (in 0.5Mbps units) corresponding to an *ifmedia* sub-type.

## SEE ALSO

[ieee80211\_crypto(9)](/ieee80211_crypto/9.md), [ieee80211\_input(9)](/ieee80211_input/9.md), [ieee80211\_ioctl(9)](/ieee80211_ioctl/9.md), [ieee80211\_node(9)](/ieee80211_node/9.md), [ieee80211\_output(9)](/ieee80211_output/9.md), [ieee80211\_proto(9)](/ieee80211_proto/9.md), [ieee80211\_radiotap(9)](/ieee80211_radiotap/9.md), [ifnet(9)](/ifnet/9.md)

## HISTORY

The **ieee80211** series of functions first appeared in NetBSD 1.5, and were later ported to FreeBSD 4.6.

## AUTHORS

This manual page was written by Bruce M. Simpson ⟨bms@FreeBSD.org⟩ and Darron Broad ⟨darron@kewl.org⟩.
