The mac80211 subsystem for kernel developers

This documentation is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation.

This documentation is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this documentation; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA

For more details see the file COPYING in the source distribution of Linux.


mac80211 is the Linux stack for 802.11 hardware that implements only partial functionality in hard- or firmware. This document defines the interface between mac80211 and low-level hardware drivers.

If you're reading this document and not the header file itself, it will be incomplete because not all documentation has been converted yet.

Table of Contents

I. The basic mac80211 driver interface
1. Basic hardware handling
struct ieee80211_hw — hardware information and state
enum ieee80211_hw_flags — hardware flags
SET_IEEE80211_DEV — set device for 802.11 hardware
SET_IEEE80211_PERM_ADDR — set the permanenet MAC address for 802.11 hardware
struct ieee80211_ops — callbacks from mac80211 to the driver
ieee80211_alloc_hw — Allocate a new hardware device
ieee80211_register_hw — Register hardware device
ieee80211_get_tx_led_name — get name of TX LED
ieee80211_get_rx_led_name — get name of RX LED
ieee80211_get_assoc_led_name — get name of association LED
ieee80211_get_radio_led_name — get name of radio LED
ieee80211_unregister_hw — Unregister a hardware device
ieee80211_free_hw — free hardware descriptor
2. PHY configuration
struct ieee80211_conf — configuration of the device
enum ieee80211_conf_flags — configuration flags
3. Virtual interfaces
enum ieee80211_if_types — types of 802.11 network interfaces
struct ieee80211_if_init_conf — initial configuration of an interface
struct ieee80211_if_conf — configuration of an interface
4. Receive and transmit processing
what should be here
Frame format
Alignment issues
Calling into mac80211 from interrupts
5. Frame filtering
enum ieee80211_filter_flags — hardware filter flags
II. Advanced driver interface
6. Hardware crypto acceleration
enum set_key_cmd — key command
struct ieee80211_key_conf — key information
enum ieee80211_key_alg — key algorithm
enum ieee80211_key_flags — key flags
7. Multiple queues and QoS support
struct ieee80211_tx_queue_params — transmit queue configuration
struct ieee80211_tx_queue_stats_data — transmit queue statistics
enum ieee80211_tx_queue — transmit queue number
8. Access point mode support
ieee80211_get_buffered_bc — accessing buffered broadcast and multicast frames
ieee80211_beacon_get — beacon generation function
9. Supporting multiple virtual interfaces
10. Hardware scan offload
ieee80211_scan_completed — completed hardware scan
III. Rate control interface
11. dummy chapter
IV. Internals
12. Key handling
Key handling basics
13. Receive processing
14. Transmit processing
15. Station info handling
Programming information
STA information lifetime rules
16. Synchronisation