176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#ifndef _GPXE_IEEE80211_H 276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define _GPXE_IEEE80211_H 376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#include <gpxe/if_ether.h> /* for ETH_ALEN */ 576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#include <endian.h> 676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** @file 876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * Constants and data structures defined in IEEE 802.11, subsetted 976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * according to what gPXE knows how to use. 1076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman */ 1176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 1276d05dc695b06c4e987bb8078f78032441e1430cGreg HartmanFILE_LICENCE(GPL2_OR_LATER); 1376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 1476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* ---------- Maximum lengths of things ---------- */ 1576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 1676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** 1776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * @defgroup ieee80211_maxlen Maximum lengths in the 802.11 protocol 1876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * @{ 1976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman */ 2076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 2176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** Maximum length of frame payload 2276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * 2376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * This does not include cryptographic overhead, which can be up to 20 2476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * bytes, but it DOES include the 802.2 LLC/SNAP headers that are used 2576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * on data frames (but not management frames). 2676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman */ 2776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_MAX_DATA_LEN 2304 2876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 2976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** Length of LLC/SNAP headers on data frames */ 3076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_LLC_HEADER_LEN 8 3176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 3276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** Maximum cryptographic overhead before encrypted data */ 3376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_MAX_CRYPTO_HEADER 8 3476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 3576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** Maximum cryptographic overhead after encrypted data 3676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * 3776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * This does not count the MIC in TKIP frames, since that is 3876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * considered to be part of the MSDU and thus contributes to the size 3976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * of the data field. 4076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * 4176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * It @e does count the MIC in CCMP frames, which is considered part 4276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * of the MPDU (outside the data field). 4376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman */ 4476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_MAX_CRYPTO_TRAILER 8 4576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 4676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** Total maximum cryptographic overhead */ 4776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_MAX_CRYPTO_OVERHEAD 16 4876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 4976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** Bytes of network-layer data that can go into a regular data frame */ 5076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_MAX_FRAME_DATA 2296 5176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 5276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** Frame header length for frames we might work with 5376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * 5476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * QoS adds a two-byte field on top of this, and APs communicating 5576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * with each other in Wireless Distribution System (WDS) mode add an 5676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * extra 6-byte MAC address field, but we do not work with such 5776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * frames. 5876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman */ 5976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_TYP_FRAME_HEADER_LEN 24 6076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 6176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** Theoretical maximum frame header length 6276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * 6376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * This includes the QoS and WDS Addr4 fields that we should never 6476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * see. 6576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman */ 6676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_MAX_FRAME_HEADER_LEN 32 6776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 6876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** Maximum combined frame length 6976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * 7076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * The biggest frame will include 32 frame header bytes, 16 bytes of 7176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * crypto overhead, and 2304 data bytes. 7276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman */ 7376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_MAX_FRAME_LEN 2352 7476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 7576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** Maximum length of an ESSID */ 7676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_MAX_SSID_LEN 32 7776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 7876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** @} */ 7976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 8076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 8176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* ---------- Frame Control defines ---------- */ 8276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 8376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** 8476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * @defgroup ieee80211_fc 802.11 Frame Control field bits 8576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * @{ 8676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman */ 8776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 8876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** 802.11 Frame Control field, Version bitmask */ 8976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_FC_VERSION 0x0003 9076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 9176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** Expected value of Version bits in Frame Control */ 9276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_THIS_VERSION 0x0000 9376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 9476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 9576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** 802.11 Frame Control field, Frame Type bitmask */ 9676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_FC_TYPE 0x000C 9776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 9876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** Type value for management (layer-2) frames */ 9976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_TYPE_MGMT 0x0000 10076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 10176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** Type value for control (layer-1, hardware-managed) frames */ 10276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_TYPE_CTRL 0x0004 10376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 10476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** Type value for data frames */ 10576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_TYPE_DATA 0x0008 10676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 10776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 10876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** 802.11 Frame Control field, Frame Subtype bitmask */ 10976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_FC_SUBTYPE 0x00F0 11076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 11176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** Subtype value for association-request management frames 11276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * 11376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * Association request frames are sent after authentication from the 11476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * client to the Access Point to establish the client as part of the 11576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * Access Point's network. 11676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman */ 11776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_STYPE_ASSOC_REQ 0x0000 11876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 11976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** Subtype value for association-response management frames 12076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * 12176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * Association response frames are sent by the Access Point to confirm 12276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * or deny the association requested in an association request frame. 12376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman */ 12476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_STYPE_ASSOC_RESP 0x0010 12576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 12676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** Subtype value for reassociation-request management frames 12776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * 12876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * Reassociation request frames are sent by clients wishing to change 12976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * from one Access Point to another while roaming within the same 13076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * extended network (same ESSID). 13176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman */ 13276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_STYPE_REASSOC_REQ 0x0020 13376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 13476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** Subtype value for reassociation-response management frames 13576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * 13676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * Reassociation response frames are sent by the Access Point to 13776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * confirm or deny the swap requested in a reassociation request 13876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * frame. 13976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman */ 14076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_STYPE_REASSOC_RESP 0x0030 14176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 14276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** Subtype value for probe-request management frames 14376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * 14476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * Probe request frames are sent by clients to request that all Access 14576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * Points on the sending channel, or all belonging to a particular 14676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * ESSID, identify themselves by BSSID, supported transfer rates, RF 14776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * configuration, and other capabilities. 14876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman */ 14976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_STYPE_PROBE_REQ 0x0040 15076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 15176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** Subtype value for probe-response management frames 15276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * 15376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * Probe response frames are sent by Access Points in response to 15476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * probe request frames, providing the requested information. 15576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman */ 15676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_STYPE_PROBE_RESP 0x0050 15776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 15876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** Subtype value for beacon management frames 15976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * 16076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * Beacon frames are sent by Access Points at regular intervals, 16176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * usually ten per second, on the channel on which they communicate. 16276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * They can be used to probe passively for access points on a channel 16376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * where local regulatory restrictions prohibit active scanning, or 16476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * due to their regularity as a mechanism to determine the fraction of 16576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * packets that are being dropped. 16676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman */ 16776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_STYPE_BEACON 0x0080 16876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 16976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** Subtype value for disassociation management frames 17076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * 17176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * Disassociation frames are sent by either a client or an Access 17276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * Point to unequivocally terminate the association between the two. 17376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * They may be sent by clients upon leaving the network, or by an 17476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * Access Point upon reconfiguration, among other reasons; they are 17576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * usually more "polite" than deauthentication frames. 17676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman */ 17776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_STYPE_DISASSOC 0x00A0 17876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 17976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** Subtype value for authentication management frames 18076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * 18176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * Authentication frames are exchanged between a client and an Access 18276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * Point before association may be performed. Confusingly, in the most 18376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * common authentication method (Open System) no security tokens are 18476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * exchanged at all. Modern 802.11 security handshaking takes place 18576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * after association. 18676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman */ 18776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_STYPE_AUTH 0x00B0 18876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 18976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** Subtype value for deauthentication management frames 19076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * 19176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * Deauthentication frames are sent by either a client or an Access 19276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * Point to terminate the authentication (and therefore also the 19376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * association) between the two. They are generally more forceful than 19476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * disassociation frames, sent for such reasons as a failure to 19576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * set up security properly after associating. 19676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman */ 19776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_STYPE_DEAUTH 0x00C0 19876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 19976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** Subtype value for action management frames 20076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * 20176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * Action frames are used to implement spectrum management and QoS 20276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * features that gPXE currently does not support. 20376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman */ 20476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_STYPE_ACTION 0x00D0 20576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 20676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 20776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** Subtype value for RTS (request to send) control frames */ 20876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_STYPE_RTS 0x00B0 20976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 21076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** Subtype value for CTS (clear to send) control frames */ 21176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_STYPE_CTS 0x00C0 21276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 21376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** Subtype value for ACK (acknowledgement) control frames */ 21476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_STYPE_ACK 0x00D0 21576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 21676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 21776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** Subtype value for ordinary data frames, with no QoS or CF add-ons */ 21876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_STYPE_DATA 0x0000 21976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 22076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** Subtype value for data frames containing no data */ 22176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_STYPE_NODATA 0x0040 22276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 22376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 22476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** 802.11 Frame Control field: To Data System flag 22576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * 22676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * This is set on data frames sent to an Access Point. 22776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman */ 22876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_FC_TODS 0x0100 22976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 23076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** 802.11 Frame Control field: From Data System flag 23176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * 23276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * This is set on data frames sent from an Access Point. If both TODS 23376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * and FROMDS are set, the frame header is a 4-address format used for 23476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * inter-Access Point communication. 23576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman */ 23676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_FC_FROMDS 0x0200 23776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 23876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** 802.11 Frame Control field: More Fragments flag */ 23976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_FC_MORE_FRAG 0x0400 24076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 24176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** 802.11 Frame Control field: Retransmission flag */ 24276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_FC_RETRY 0x0800 24376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 24476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** 802.11 Frame Control field: Power Managed flag 24576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * 24676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * This is set on any frame sent by a low-power station that will go 24776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * into a power-saving mode immediately after this frame. Access 24876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * Points are not allowed to act as low-power stations. 24976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman */ 25076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_FC_PWR_MGMT 0x1000 25176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 25276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** 802.11 Frame Control field: More Data flag 25376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * 25476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * This is set on any frame sent by a station that has more data 25576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * queued to be sent than is in the frame. 25676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman */ 25776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_FC_MORE_DATA 0x2000 25876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 25976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** 802.11 Frame Control field: Protected flag 26076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * 26176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * This is set on frames in which data is encrypted (by any method). 26276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman */ 26376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_FC_PROTECTED 0x4000 26476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 26576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** 802.11 Frame Control field: Ordered flag [?] */ 26676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_FC_ORDER 0x8000 26776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 26876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** @} */ 26976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 27076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 27176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* ---------- Sequence Control defines ---------- */ 27276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 27376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** 27476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * @defgroup ieee80211_seq 802.11 Sequence Control field handling 27576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * @{ 27676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman */ 27776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 27876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** Extract sequence number from 802.11 Sequence Control field */ 27976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_SEQNR( seq ) ( ( seq ) >> 4 ) 28076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 28176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** Extract fragment number from 802.11 Sequence Control field */ 28276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_FRAG( seq ) ( ( seq ) & 0x000F ) 28376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 28476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** Make 802.11 Sequence Control field from sequence and fragment numbers */ 28576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_MAKESEQ( seqnr, frag ) \ 28676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman ( ( ( ( seqnr ) & 0xFFF ) << 4 ) | ( ( frag ) & 0xF ) ) 28776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 28876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** @} */ 28976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 29076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 29176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* ---------- Frame header formats ---------- */ 29276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 29376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** 29476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * @defgroup ieee80211_hdr 802.11 frame header formats 29576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * @{ 29676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman */ 29776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 29876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** An 802.11 data or management frame without QoS or WDS header fields */ 29976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanstruct ieee80211_frame 30076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman{ 30176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman u16 fc; /**< 802.11 Frame Control field */ 30276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman u16 duration; /**< Microseconds to reserve link */ 30376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman u8 addr1[ETH_ALEN]; /**< Address 1 (immediate receiver) */ 30476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman u8 addr2[ETH_ALEN]; /**< Address 2 (immediate sender) */ 30576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman u8 addr3[ETH_ALEN]; /**< Address 3 (often "forward to") */ 30676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman u16 seq; /**< 802.11 Sequence Control field */ 30776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman u8 data[0]; /**< Beginning of frame data */ 30876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} __attribute__((packed)); 30976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 31076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** The 802.2 LLC/SNAP header sent before actual data in a data frame 31176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * 31276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * This header is not acknowledged in the 802.11 standard at all; it 31376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * is treated just like data for MAC-layer purposes, including 31476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * fragmentation and encryption. It is actually two headers 31576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * concatenated: a three-byte 802.2 LLC header indicating Subnetwork 31676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * Accesss Protocol (SNAP) in both source and destination Service 31776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * Access Point (SAP) fields, and a five-byte SNAP header indicating a 31876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * zero OUI and two-byte Ethernet protocol type field. 31976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * 32076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * Thus, an eight-byte header in which six of the bytes are redundant. 32176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * Lovely, isn't it? 32276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman */ 32376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanstruct ieee80211_llc_snap_header 32476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman{ 32576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman /* LLC part: */ 32676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman u8 dsap; /**< Destination SAP ID */ 32776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman u8 ssap; /**< Source SAP ID */ 32876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman u8 ctrl; /**< Control information */ 32976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 33076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman /* SNAP part: */ 33176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman u8 oui[3]; /**< Organization code, usually 0 */ 33276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman u16 ethertype; /**< Ethernet Type field */ 33376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} __attribute__((packed)); 33476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 33576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** Value for DSAP field in 802.2 LLC header for 802.11 frames: SNAP */ 33676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_LLC_DSAP 0xAA 33776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 33876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** Value for SSAP field in 802.2 LLC header for 802.11 frames: SNAP */ 33976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_LLC_SSAP 0xAA 34076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 34176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** Value for control field in 802.2 LLC header for 802.11 frames 34276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * 34376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * "Unnumbered Information". 34476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman */ 34576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_LLC_CTRL 0x03 34676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 34776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 34876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** 16-byte RTS frame format, with abbreviated header */ 34976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanstruct ieee80211_rts 35076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman{ 35176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman u16 fc; /**< 802.11 Frame Control field */ 35276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman u16 duration; /**< Microseconds to reserve link */ 35376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman u8 addr1[ETH_ALEN]; /**< Address 1 (immediate receiver) */ 35476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman u8 addr2[ETH_ALEN]; /**< Address 2 (immediate sender) */ 35576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} __attribute__((packed)); 35676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 35776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** Length of 802.11 RTS control frame */ 35876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_RTS_LEN 16 35976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 36076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** 10-byte CTS or ACK frame format, with abbreviated header */ 36176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanstruct ieee80211_cts_or_ack 36276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman{ 36376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman u16 fc; /**< 802.11 Frame Control field */ 36476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman u16 duration; /**< Microseconds to reserve link */ 36576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman u8 addr1[ETH_ALEN]; /**< Address 1 (immediate receiver) */ 36676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} __attribute__((packed)); 36776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 36876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define ieee80211_cts ieee80211_cts_or_ack 36976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define ieee80211_ack ieee80211_cts_or_ack 37076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 37176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** Length of 802.11 CTS control frame */ 37276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_CTS_LEN 10 37376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 37476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** Length of 802.11 ACK control frame */ 37576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_ACK_LEN 10 37676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 37776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** @} */ 37876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 37976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 38076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* ---------- Capability bits, status and reason codes ---------- */ 38176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 38276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** 38376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * @defgroup ieee80211_capab 802.11 management frame capability field bits 38476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * @{ 38576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman */ 38676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 38776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** Set if using an Access Point (managed mode) */ 38876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_CAPAB_MANAGED 0x0001 38976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 39076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** Set if operating in IBSS (no-AP, "Ad-Hoc") mode */ 39176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_CAPAB_ADHOC 0x0002 39276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 39376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** Set if we support Contention-Free Period operation */ 39476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_CAPAB_CFPOLL 0x0004 39576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 39676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** Set if we wish to be polled for Contention-Free operation */ 39776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_CAPAB_CFPR 0x0008 39876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 39976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** Set if the network is encrypted (by any method) */ 40076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_CAPAB_PRIVACY 0x0010 40176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 40276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** Set if PHY supports short preambles on 802.11b */ 40376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_CAPAB_SHORT_PMBL 0x0020 40476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 40576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** Set if PHY supports PBCC modulation */ 40676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_CAPAB_PBCC 0x0040 40776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 40876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** Set if we support Channel Agility */ 40976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_CAPAB_CHAN_AGILITY 0x0080 41076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 41176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** Set if we support spectrum management (DFS and TPC) on the 5GHz band */ 41276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_CAPAB_SPECTRUM_MGMT 0x0100 41376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 41476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** Set if we support Quality of Service enhancements */ 41576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_CAPAB_QOS 0x0200 41676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 41776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** Set if PHY supports short slot time on 802.11g */ 41876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_CAPAB_SHORT_SLOT 0x0400 41976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 42076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** Set if PHY supports APSD option */ 42176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_CAPAB_APSD 0x0800 42276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 42376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** Set if PHY supports DSSS/OFDM modulation (one way of 802.11 b/g mixing) */ 42476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_CAPAB_DSSS_OFDM 0x2000 42576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 42676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** Set if we support delayed block ACK */ 42776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_CAPAB_DELAYED_BACK 0x4000 42876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 42976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** Set if we support immediate block ACK */ 43076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_CAPAB_IMMED_BACK 0x8000 43176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 43276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** @} */ 43376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 43476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 43576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** 43676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * @defgroup ieee80211_status 802.11 status codes 43776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * 43876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * These are returned to indicate an immediate denial of 43976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * authentication or association. In gPXE, the lower 5 bits of the 44076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * status code are encoded into the file-unique portion of an error 44176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * code, the ERRFILE portion is always @c ERRFILE_net80211, and the 44276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * POSIX error code is @c ECONNREFUSED for status 0-31 or @c 44376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * EHOSTUNREACH for status 32-63. 44476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * 44576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * For a complete table with non-abbreviated error messages, see IEEE 44676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * Std 802.11-2007, Table 7-23, p.94. 44776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * 44876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * @{ 44976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman */ 45076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 45176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_STATUS_SUCCESS 0 45276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_STATUS_FAILURE 1 45376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_STATUS_CAPAB_UNSUPP 10 45476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_STATUS_REASSOC_INVALID 11 45576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_STATUS_ASSOC_DENIED 12 45676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_STATUS_AUTH_ALGO_UNSUPP 13 45776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_STATUS_AUTH_SEQ_INVALID 14 45876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_STATUS_AUTH_CHALL_INVALID 15 45976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_STATUS_AUTH_TIMEOUT 16 46076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_STATUS_ASSOC_NO_ROOM 17 46176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_STATUS_ASSOC_NEED_RATE 18 46276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_STATUS_ASSOC_NEED_SHORT_PMBL 19 46376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_STATUS_ASSOC_NEED_PBCC 20 46476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_STATUS_ASSOC_NEED_CHAN_AGILITY 21 46576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_STATUS_ASSOC_NEED_SPECTRUM_MGMT 22 46676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_STATUS_ASSOC_BAD_POWER 23 46776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_STATUS_ASSOC_BAD_CHANNELS 24 46876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_STATUS_ASSOC_NEED_SHORT_SLOT 25 46976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_STATUS_ASSOC_NEED_DSSS_OFDM 26 47076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_STATUS_QOS_FAILURE 32 47176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_STATUS_QOS_NO_ROOM 33 47276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_STATUS_LINK_IS_HORRIBLE 34 47376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_STATUS_ASSOC_NEED_QOS 35 47476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_STATUS_REQUEST_DECLINED 37 47576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_STATUS_REQUEST_INVALID 38 47676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_STATUS_TS_NOT_CREATED_AGAIN 39 47776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_STATUS_INVALID_IE 40 47876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_STATUS_GROUP_CIPHER_INVALID 41 47976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_STATUS_PAIR_CIPHER_INVALID 42 48076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_STATUS_AKMP_INVALID 43 48176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_STATUS_RSN_VERSION_UNSUPP 44 48276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_STATUS_RSN_CAPAB_INVALID 45 48376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_STATUS_CIPHER_REJECTED 46 48476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_STATUS_TS_NOT_CREATED_WAIT 47 48576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_STATUS_DIRECT_LINK_FORBIDDEN 48 48676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_STATUS_DEST_NOT_PRESENT 49 48776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_STATUS_DEST_NOT_QOS 50 48876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_STATUS_ASSOC_LISTEN_TOO_HIGH 51 48976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 49076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** @} */ 49176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 49276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 49376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 49476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** 49576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * @defgroup ieee80211_reason 802.11 reason codes 49676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * 49776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * These are returned to indicate the reason for a deauthentication or 49876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * disassociation sent (usually) after authentication or association 49976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * had succeeded. In gPXE, the lower 5 bits of the reason code are 50076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * encoded into the file-unique portion of an error code, the ERRFILE 50176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * portion is always @c ERRFILE_net80211, and the POSIX error code is 50276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * @c ECONNRESET for reason 0-31 or @c ENETRESET for reason 32-63. 50376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * 50476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * For a complete table with non-abbreviated error messages, see IEEE 50576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * Std 802.11-2007, Table 7-22, p.92. 50676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * 50776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * @{ 50876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman */ 50976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 51076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_REASON_NONE 0 51176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_REASON_UNSPECIFIED 1 51276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_REASON_AUTH_NO_LONGER_VALID 2 51376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_REASON_LEAVING 3 51476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_REASON_INACTIVITY 4 51576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_REASON_OUT_OF_RESOURCES 5 51676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_REASON_NEED_AUTH 6 51776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_REASON_NEED_ASSOC 7 51876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_REASON_LEAVING_TO_ROAM 8 51976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_REASON_REASSOC_INVALID 9 52076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_REASON_BAD_POWER 10 52176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_REASON_BAD_CHANNELS 11 52276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_REASON_INVALID_IE 13 52376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_REASON_MIC_FAILURE 14 52476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_REASON_4WAY_TIMEOUT 15 52576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_REASON_GROUPKEY_TIMEOUT 16 52676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_REASON_4WAY_INVALID 17 52776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_REASON_GROUP_CIPHER_INVALID 18 52876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_REASON_PAIR_CIPHER_INVALID 19 52976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_REASON_AKMP_INVALID 20 53076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_REASON_RSN_VERSION_INVALID 21 53176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_REASON_RSN_CAPAB_INVALID 22 53276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_REASON_8021X_FAILURE 23 53376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_REASON_CIPHER_REJECTED 24 53476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_REASON_QOS_UNSPECIFIED 32 53576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_REASON_QOS_OUT_OF_RESOURCES 33 53676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_REASON_LINK_IS_HORRIBLE 34 53776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_REASON_INVALID_TXOP 35 53876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_REASON_REQUESTED_LEAVING 36 53976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_REASON_REQUESTED_NO_USE 37 54076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_REASON_REQUESTED_NEED_SETUP 38 54176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_REASON_REQUESTED_TIMEOUT 39 54276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_REASON_CIPHER_UNSUPPORTED 45 54376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 54476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** @} */ 54576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 54676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* ---------- Information element declarations ---------- */ 54776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 54876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** 54976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * @defgroup ieee80211_ie 802.11 information elements 55076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * 55176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * Many management frames include a section that amounts to a 55276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * concatenation of these information elements, so that the sender can 55376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * choose which information to send and the receiver can ignore the 55476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * parts it doesn't understand. Each IE contains a two-byte header, 55576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * one byte ID and one byte length, followed by IE-specific data. The 55676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * length does not include the two-byte header. Information elements 55776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * are required to be sorted by ID, but gPXE does not require that in 55876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * those it receives. 55976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * 56076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * This group also includes a few inline functions to simplify common 56176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * tasks in IE processing. 56276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * 56376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * @{ 56476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman */ 56576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 56676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** Generic 802.11 information element header */ 56776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanstruct ieee80211_ie_header { 56876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman u8 id; /**< Information element ID */ 56976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman u8 len; /**< Information element length */ 57076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} __attribute__ ((packed)); 57176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 57276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 57376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** 802.11 SSID information element */ 57476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanstruct ieee80211_ie_ssid { 57576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman u8 id; /**< SSID ID: 0 */ 57676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman u8 len; /**< SSID length */ 57776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman char ssid[0]; /**< SSID data, not NUL-terminated */ 57876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} __attribute__ ((packed)); 57976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 58076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** Information element ID for SSID information element */ 58176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_IE_SSID 0 58276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 58376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 58476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** 802.11 rates information element 58576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * 58676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * The first 8 rates go in an IE of type RATES (1), and any more rates 58776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * go in one of type EXT_RATES (50). Each rate is a byte with the low 58876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * 7 bits equal to the rate in units of 500 kbps, and the high bit set 58976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * if and only if the rate is "basic" (must be supported by all 59076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * connected stations). 59176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman */ 59276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanstruct ieee80211_ie_rates { 59376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman u8 id; /**< Rates ID: 1 or 50 */ 59476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman u8 len; /**< Number of rates */ 59576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman u8 rates[0]; /**< Rates data, one rate per byte */ 59676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} __attribute__ ((packed)); 59776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 59876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** Information element ID for rates information element */ 59976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_IE_RATES 1 60076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 60176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** Information element ID for extended rates information element */ 60276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_IE_EXT_RATES 50 60376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 60476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 60576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** 802.11 Direct Spectrum parameter information element 60676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * 60776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * This just contains the channel number. It has the fancy name 60876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * because IEEE 802.11 also defines a frequency-hopping PHY that 60976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * changes channels at regular intervals following a predetermined 61076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * pattern; in practice nobody uses the FH PHY. 61176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman */ 61276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanstruct ieee80211_ie_ds_param { 61376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman u8 id; /**< DS parameter ID: 3 */ 61476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman u8 len; /**< DS parameter length: 1 */ 61576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman u8 current_channel; /**< Current channel number, 1-14 */ 61676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} __attribute__ ((packed)); 61776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 61876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** Information element ID for Direct Spectrum parameter information element */ 61976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_IE_DS_PARAM 3 62076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 62176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 62276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** 802.11 Country information element regulatory extension triplet */ 62376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanstruct ieee80211_ie_country_ext_triplet { 62476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman u8 reg_ext_id; /**< Regulatory extension ID */ 62576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman u8 reg_class_id; /**< Regulatory class ID */ 62676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman u8 coverage_class; /**< Coverage class */ 62776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} __attribute__ ((packed)); 62876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 62976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** 802.11 Country information element regulatory band triplet */ 63076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanstruct ieee80211_ie_country_band_triplet { 63176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman u8 first_channel; /**< Channel number for first channel in band */ 63276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman u8 nr_channels; /**< Number of contiguous channels in band */ 63376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman u8 max_txpower; /**< Maximum TX power in dBm */ 63476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} __attribute__ ((packed)); 63576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 63676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** 802.11 Country information element regulatory triplet 63776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * 63876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * It is a band triplet if the first byte is 200 or less, and a 63976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * regulatory extension triplet otherwise. 64076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman */ 64176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanunion ieee80211_ie_country_triplet { 64276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman /** Differentiator between band and ext triplets */ 64376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman u8 first; 64476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 64576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman /** Information about a band of channels */ 64676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman struct ieee80211_ie_country_band_triplet band; 64776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 64876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman /** Regulatory extension information */ 64976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman struct ieee80211_ie_country_ext_triplet ext; 65076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman}; 65176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 65276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** 802.11 Country information element 65376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * 65476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * This contains some data about RF regulations. 65576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman */ 65676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanstruct ieee80211_ie_country { 65776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman u8 id; /**< Country information ID: 7 */ 65876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman u8 len; /**< Country information length: varies */ 65976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman char name[2]; /**< ISO Alpha2 country code */ 66076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman char in_out; /**< 'I' for indoor, 'O' for outdoor */ 66176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 66276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman /** List of regulatory triplets */ 66376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman union ieee80211_ie_country_triplet triplet[0]; 66476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} __attribute__ ((packed)); 66576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 66676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** Information element ID for Country information element */ 66776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_IE_COUNTRY 7 66876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 66976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 67076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** 802.11 Request information element 67176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * 67276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * This contains a list of information element types we would like to 67376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * be included in probe response frames. 67476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman */ 67576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanstruct ieee80211_ie_request { 67676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman u8 id; /**< Request ID: 10 */ 67776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman u8 len; /**< Number of IEs requested */ 67876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman u8 request[0]; /**< List of IEs requested */ 67976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} __attribute__ ((packed)); 68076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 68176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** Information element ID for Request information element */ 68276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_IE_REQUEST 10 68376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 68476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 68576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** 802.11 Challenge Text information element 68676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * 68776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * This is used in authentication frames under Shared Key 68876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * authentication. 68976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman */ 69076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanstruct ieee80211_ie_challenge_text { 69176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman u8 id; /**< Challenge Text ID: 16 */ 69276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman u8 len; /**< Challenge Text length: usually 128 */ 69376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman u8 challenge_text[0]; /**< Challenge Text data */ 69476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} __attribute__ ((packed)); 69576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 69676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** Information element ID for Challenge Text information element */ 69776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_IE_CHALLENGE_TEXT 16 69876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 69976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 70076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** 802.11 Power Constraint information element 70176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * 70276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * This is used to specify an additional power limitation on top of 70376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * the Country requirements. 70476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman */ 70576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanstruct ieee80211_ie_power_constraint { 70676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman u8 id; /**< Power Constraint ID: 52 */ 70776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman u8 len; /**< Power Constraint length: 1 */ 70876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman u8 power_constraint; /**< Decrease in allowed TX power, dBm */ 70976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} __attribute__ ((packed)); 71076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 71176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** Information element ID for Power Constraint information element */ 71276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_IE_POWER_CONSTRAINT 52 71376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 71476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 71576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** 802.11 Power Capability information element 71676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * 71776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * This is used in association request frames to indicate the extremes 71876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * of our TX power abilities. It is required only if we indicate 71976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * support for spectrum management. 72076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman */ 72176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanstruct ieee80211_ie_power_capab { 72276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman u8 id; /**< Power Capability ID: 33 */ 72376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman u8 len; /**< Power Capability length: 2 */ 72476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman u8 min_txpower; /**< Minimum possible TX power, dBm */ 72576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman u8 max_txpower; /**< Maximum possible TX power, dBm */ 72676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} __attribute__ ((packed)); 72776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 72876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** Information element ID for Power Capability information element */ 72976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_IE_POWER_CAPAB 33 73076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 73176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 73276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** 802.11 Channels information element channel band tuple */ 73376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanstruct ieee80211_ie_channels_channel_band { 73476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman u8 first_channel; /**< Channel number of first channel in band */ 73576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman u8 nr_channels; /**< Number of channels in band */ 73676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} __attribute__ ((packed)); 73776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 73876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** 802.11 Channels information element 73976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * 74076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * This is used in association frames to indicate the channels we can 74176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * use. It is required only if we indicate support for spectrum 74276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * management. 74376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman */ 74476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanstruct ieee80211_ie_channels { 74576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman u8 id; /**< Channels ID: 36 */ 74676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman u8 len; /**< Channels length: 2 */ 74776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 74876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman /** List of (start, length) channel bands we can use */ 74976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman struct ieee80211_ie_channels_channel_band channels[0]; 75076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} __attribute__ ((packed)); 75176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 75276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** Information element ID for Channels information element */ 75376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_IE_CHANNELS 36 75476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 75576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 75676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** 802.11 ERP Information information element 75776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * 75876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * This is used to communicate some PHY-level flags. 75976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman */ 76076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanstruct ieee80211_ie_erp_info { 76176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman u8 id; /**< ERP Information ID: 42 */ 76276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman u8 len; /**< ERP Information length: 1 */ 76376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman u8 erp_info; /**< ERP flags */ 76476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} __attribute__ ((packed)); 76576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 76676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** Information element ID for ERP Information information element */ 76776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_IE_ERP_INFO 42 76876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 76976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** ERP information element: Flag set if 802.11b stations are present */ 77076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_ERP_NONERP_PRESENT 0x01 77176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 77276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** ERP information element: Flag set if CTS protection must be used */ 77376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_ERP_USE_PROTECTION 0x02 77476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 77576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** ERP information element: Flag set if long preambles must be used */ 77676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_ERP_BARKER_LONG 0x04 77776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 77876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 77976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** 802.11 Robust Security Network ("WPA") information element 78076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * 78176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * Showing once again a striking clarity of design, the IEEE folks put 78276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * dynamically-sized data in the middle of this structure. As such, 78376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * the below structure definition only works for IEs we create 78476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * ourselves, which always have one pairwise cipher and one AKM; 78576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * received IEs should be parsed piecemeal. 78676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * 78776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * Also inspired was IEEE's choice of 16-bit fields to count the 78876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * number of 4-byte elements in a structure with a maximum length of 78976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * 255 bytes. 79076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * 79176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * Many fields reference a cipher or authentication-type ID; this is a 79276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * three-byte OUI followed by one byte identifying the cipher with 79376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * respect to that OUI. For all standard ciphers the OUI is 00:0F:AC, 79476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * except in old-style WPA IEs encapsulated in vendor-specific IEs, 79576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * where it's 00:50:F2. 79676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman */ 79776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanstruct ieee80211_ie_rsn { 79876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman /** Information element ID */ 79976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman u8 id; 80076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 80176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman /** Information element length */ 80276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman u8 len; 80376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 80476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman /** RSN information element version */ 80576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman u16 version; 80676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 80776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman /** Cipher ID for the cipher used in multicast/broadcast frames */ 80876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman u32 group_cipher; 80976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 81076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman /** Number of unicast ciphers supported */ 81176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman u16 pairwise_count; 81276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 81376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman /** List of cipher IDs for supported unicast frame ciphers */ 81476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman u32 pairwise_cipher[1]; 81576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 81676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman /** Number of authentication types supported */ 81776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman u16 akm_count; 81876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 81976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman /** List of authentication type IDs for supported types */ 82076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman u32 akm_list[1]; 82176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 82276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman /** Security capabilities field (RSN only) */ 82376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman u16 rsn_capab; 82476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 82576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman /** Number of PMKIDs included (present only in association frames) */ 82676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman u16 pmkid_count; 82776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 82876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman /** List of PMKIDs included, each a 16-byte SHA1 hash */ 82976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman u8 pmkid_list[0]; 83076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} __attribute__((packed)); 83176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 83276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** Information element ID for Robust Security Network information element */ 83376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_IE_RSN 48 83476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 83576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** Calculate necessary size of RSN information element 83676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * 83776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * @v npair Number of pairwise ciphers supported 83876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * @v nauth Number of authentication types supported 83976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * @v npmkid Number of PMKIDs to include 84076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * @v is_rsn If TRUE, calculate RSN IE size; if FALSE, calculate WPA IE size 84176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * @ret size Necessary size of IE, including header bytes 84276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman */ 84376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanstatic inline size_t ieee80211_rsn_size ( int npair, int nauth, int npmkid, 84476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman int rsn_ie ) { 84576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman return 16 + 4 * ( npair + nauth ) + 16 * npmkid - 4 * ! rsn_ie; 84676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} 84776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 84876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** Make OUI plus type byte into 32-bit integer for easy comparison */ 84976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#if __BYTE_ORDER == __BIG_ENDIAN 85076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define _MKOUI( a, b, c, t ) \ 85176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman ( ( ( a ) << 24 ) | ( ( b ) << 16 ) | ( ( c ) << 8 ) | ( d ) ) 85276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define OUI_ORG_MASK 0xFFFFFF00 85376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define OUI_TYPE_MASK 0x000000FF 85476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#else 85576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define _MKOUI( a, b, c, t ) \ 85676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman ( ( ( t ) << 24 ) | ( ( c ) << 16 ) | ( ( b ) << 8 ) | ( a ) ) 85776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define OUI_ORG_MASK 0x00FFFFFF 85876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define OUI_TYPE_MASK 0xFF000000 85976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#endif 86076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 86176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** Organization part for OUIs in standard RSN IE */ 86276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_RSN_OUI _MKOUI ( 0x00, 0x0F, 0xAC, 0 ) 86376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 86476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** Organization part for OUIs in old WPA IE */ 86576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_WPA_OUI _MKOUI ( 0x00, 0x50, 0xF2, 0 ) 86676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 86776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** Old vendor-type WPA IE OUI type + subtype */ 86876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_WPA_OUI_VEN _MKOUI ( 0x00, 0x50, 0xF2, 0x01 ) 86976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 87076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 87176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** 802.11 RSN IE: expected version number */ 87276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_RSN_VERSION 1 87376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 87476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** 802.11 RSN IE: cipher type for 40-bit WEP */ 87576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_RSN_CTYPE_WEP40 _MKOUI ( 0, 0, 0, 0x01 ) 87676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 87776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** 802.11 RSN IE: cipher type for 104-bit WEP */ 87876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_RSN_CTYPE_WEP104 _MKOUI ( 0, 0, 0, 0x05 ) 87976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 88076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** 802.11 RSN IE: cipher type for TKIP ("WPA") */ 88176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_RSN_CTYPE_TKIP _MKOUI ( 0, 0, 0, 0x02 ) 88276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 88376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** 802.11 RSN IE: cipher type for CCMP ("WPA2") */ 88476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_RSN_CTYPE_CCMP _MKOUI ( 0, 0, 0, 0x04 ) 88576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 88676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** 802.11 RSN IE: cipher type for "use group" 88776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * 88876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * This can only appear as a pairwise cipher, and means unicast frames 88976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * should be encrypted in the same way as broadcast/multicast frames. 89076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman */ 89176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_RSN_CTYPE_USEGROUP _MKOUI ( 0, 0, 0, 0x00 ) 89276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 89376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** 802.11 RSN IE: auth method type for using an 802.1X server */ 89476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_RSN_ATYPE_8021X _MKOUI ( 0, 0, 0, 0x01 ) 89576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 89676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** 802.11 RSN IE: auth method type for using a pre-shared key */ 89776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_RSN_ATYPE_PSK _MKOUI ( 0, 0, 0, 0x02 ) 89876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 89976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** 802.11 RSN IE capabilities: AP supports pre-authentication */ 90076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_RSN_CAPAB_PREAUTH 0x001 90176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 90276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** 802.11 RSN IE capabilities: Node has conflict between TKIP and WEP 90376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * 90476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * This is a legacy issue; APs always set it to 0, and gPXE sets it to 90576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * 0. 90676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman */ 90776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_RSN_CAPAB_NO_PAIRWISE 0x002 90876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 90976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** 802.11 RSN IE capabilities: Number of PTKSA replay counters 91076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * 91176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * A value of 0 means one replay counter, 1 means two, 2 means four, 91276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * and 3 means sixteen. 91376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman */ 91476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_RSN_CAPAB_PTKSA_REPLAY 0x00C 91576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 91676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** 802.11 RSN IE capabilities: Number of GTKSA replay counters 91776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * 91876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * A value of 0 means one replay counter, 1 means two, 2 means four, 91976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * and 3 means sixteen. 92076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman */ 92176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_RSN_CAPAB_GTKSA_REPLAY 0x030 92276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 92376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** 802.11 RSN IE capabilities: PeerKey Handshaking is suported */ 92476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_RSN_CAPAB_PEERKEY 0x200 92576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 92676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 92776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** 802.11 RSN IE capabilities: One replay counter 92876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * 92976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * This should be AND'ed with @c IEEE80211_RSN_CAPAB_PTKSA_REPLAY or 93076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * @c IEEE80211_RSN_CAPAB_GTKSA_REPLAY (or both) to produce a value 93176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * which can be OR'ed into the capabilities field. 93276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman */ 93376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_RSN_1_CTR 0x000 93476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 93576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** 802.11 RSN IE capabilities: Two replay counters */ 93676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_RSN_2_CTR 0x014 93776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 93876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** 802.11 RSN IE capabilities: Four replay counters */ 93976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_RSN_4_CTR 0x028 94076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 94176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** 802.11 RSN IE capabilities: 16 replay counters */ 94276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_RSN_16_CTR 0x03C 94376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 94476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 94576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** 802.11 Vendor Specific information element 94676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * 94776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * One often sees the RSN IE masquerading as vendor-specific on 94876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * devices that were produced prior to 802.11i (the WPA amendment) 94976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * being finalized. 95076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman */ 95176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanstruct ieee80211_ie_vendor { 95276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman u8 id; /**< Vendor-specific ID: 221 */ 95376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman u8 len; /**< Vendor-specific length: variable */ 95476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman u32 oui; /**< OUI and vendor-specific type byte */ 95576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman u8 data[0]; /**< Vendor-specific data */ 95676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} __attribute__ ((packed)); 95776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 95876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** Information element ID for Vendor Specific information element */ 95976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_IE_VENDOR 221 96076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 96176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 96276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 96376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 96476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** Any 802.11 information element 96576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * 96676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * This is formatted for ease of use, so IEs with complex structures 96776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * get referenced in full, while those with only one byte of data or a 96876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * simple array are pulled in to avoid a layer of indirection like 96976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * ie->channels.channels[0]. 97076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman */ 97176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanunion ieee80211_ie 97276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman{ 97376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman /** Generic and simple information element info */ 97476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman struct { 97576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman u8 id; /**< Information element ID */ 97676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman u8 len; /**< Information element data length */ 97776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman union { 97876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman char ssid[0]; /**< SSID text */ 97976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman u8 rates[0]; /**< Rates data */ 98076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman u8 request[0]; /**< Request list */ 98176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman u8 challenge_text[0]; /**< Challenge text data */ 98276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman u8 power_constraint; /**< Power constraint, dBm */ 98376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman u8 erp_info; /**< ERP information flags */ 98476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman /** List of channels */ 98576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman struct ieee80211_ie_channels_channel_band channels[0]; 98676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman }; 98776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman }; 98876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 98976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman /** DS parameter set */ 99076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman struct ieee80211_ie_ds_param ds_param; 99176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 99276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman /** Country information */ 99376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman struct ieee80211_ie_country country; 99476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 99576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman /** Power capability */ 99676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman struct ieee80211_ie_power_capab power_capab; 99776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 99876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman /** Security information */ 99976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman struct ieee80211_ie_rsn rsn; 100076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 100176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman /** Vendor-specific */ 100276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman struct ieee80211_ie_vendor vendor; 100376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman}; 100476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 100576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** Check that 802.11 information element is bounded by buffer 100676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * 100776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * @v ie Information element 100876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * @v end End of buffer in which information element is stored 100976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * @ret ok TRUE if the IE is completely contained within the buffer 101076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman */ 101176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanstatic inline int ieee80211_ie_bound ( union ieee80211_ie *ie, void *end ) 101276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman{ 101376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman void *iep = ie; 101476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman return ( iep + 2 <= end && iep + 2 + ie->len <= end ); 101576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} 101676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 101776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** Advance to next 802.11 information element 101876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * 101976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * @v ie Current information element pointer 102076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * @v end Pointer to first byte not in information element space 102176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * @ret next Pointer to next information element, or NULL if no more 102276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * 102376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * When processing received IEs, @a end should be set to the I/O 102476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * buffer tail pointer; when marshalling IEs for sending, @a end 102576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * should be NULL. 102676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman */ 102776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanstatic inline union ieee80211_ie * ieee80211_next_ie ( union ieee80211_ie *ie, 102876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman void *end ) 102976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman{ 103076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman void *next_ie_byte = ( void * ) ie + ie->len + 2; 103176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman union ieee80211_ie *next_ie = next_ie_byte; 103276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 103376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman if ( ! end ) 103476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman return next_ie; 103576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 103676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman if ( ieee80211_ie_bound ( next_ie, end ) ) 103776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman return next_ie; 103876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 103976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman return NULL; 104076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} 104176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 104276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** @} */ 104376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 104476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 104576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* ---------- Management frame data formats ---------- */ 104676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 104776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** 104876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * @defgroup ieee80211_mgmt_data Management frame data payloads 104976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * @{ 105076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman */ 105176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 105276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** Beacon or probe response frame data */ 105376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanstruct ieee80211_beacon_or_probe_resp 105476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman{ 105576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman /** 802.11 TSFT value at frame send */ 105676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman u64 timestamp; 105776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 105876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman /** Interval at which beacons are sent, in units of 1024 us */ 105976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman u16 beacon_interval; 106076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 106176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman /** Capability flags */ 106276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman u16 capability; 106376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 106476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman /** List of information elements */ 106576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman union ieee80211_ie info_element[0]; 106676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} __attribute__((packed)); 106776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 106876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define ieee80211_beacon ieee80211_beacon_or_probe_resp 106976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define ieee80211_probe_resp ieee80211_beacon_or_probe_resp 107076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 107176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** Disassociation or deauthentication frame data */ 107276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanstruct ieee80211_disassoc_or_deauth 107376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman{ 107476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman /** Reason code */ 107576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman u16 reason; 107676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} __attribute__((packed)); 107776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 107876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define ieee80211_disassoc ieee80211_disassoc_or_deauth 107976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define ieee80211_deauth ieee80211_disassoc_or_deauth 108076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 108176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** Association request frame data */ 108276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanstruct ieee80211_assoc_req 108376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman{ 108476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman /** Capability flags */ 108576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman u16 capability; 108676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 108776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman /** Interval at which we wake up, in units of the beacon interval */ 108876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman u16 listen_interval; 108976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 109076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman /** List of information elements */ 109176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman union ieee80211_ie info_element[0]; 109276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} __attribute__((packed)); 109376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 109476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** Association or reassociation response frame data */ 109576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanstruct ieee80211_assoc_or_reassoc_resp 109676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman{ 109776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman /** Capability flags */ 109876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman u16 capability; 109976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 110076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman /** Status code */ 110176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman u16 status; 110276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 110376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman /** Association ID */ 110476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman u16 aid; 110576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 110676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman /** List of information elements */ 110776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman union ieee80211_ie info_element[0]; 110876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} __attribute__((packed)); 110976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 111076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define ieee80211_assoc_resp ieee80211_assoc_or_reassoc_resp 111176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define ieee80211_reassoc_resp ieee80211_assoc_or_reassoc_resp 111276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 111376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** Reassociation request frame data */ 111476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanstruct ieee80211_reassoc_req 111576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman{ 111676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman /** Capability flags */ 111776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman u16 capability; 111876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 111976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman /** Interval at which we wake up, in units of the beacon interval */ 112076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman u16 listen_interval; 112176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 112276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman /** MAC address of current Access Point */ 112376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman u8 current_addr[ETH_ALEN]; 112476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 112576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman /** List of information elements */ 112676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman union ieee80211_ie info_element[0]; 112776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} __attribute__((packed)); 112876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 112976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** Probe request frame data */ 113076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanstruct ieee80211_probe_req 113176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman{ 113276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman /** List of information elements */ 113376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman union ieee80211_ie info_element[0]; 113476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} __attribute__((packed)); 113576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 113676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** Authentication frame data */ 113776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanstruct ieee80211_auth 113876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman{ 113976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman /** Authentication algorithm (Open System or Shared Key) */ 114076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman u16 algorithm; 114176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 114276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman /** Sequence number of this frame; first from client to AP is 1 */ 114376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman u16 tx_seq; 114476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 114576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman /** Status code */ 114676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman u16 status; 114776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 114876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman /** List of information elements */ 114976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman union ieee80211_ie info_element[0]; 115076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} __attribute__((packed)); 115176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 115276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** Open System authentication algorithm */ 115376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_AUTH_OPEN_SYSTEM 0 115476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 115576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** Shared Key authentication algorithm */ 115676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IEEE80211_AUTH_SHARED_KEY 1 115776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 115876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** @} */ 115976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 116076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#endif 1161