blob: d8109c3cc33aa550db13ff7e4ffefd4b0aa770e8 [file] [log] [blame]
/*
* 802_11Defs.h
*
* Copyright(c) 1998 - 2010 Texas Instruments. All rights reserved.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
* * Neither the name Texas Instruments nor the names of its
* contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/****************************************************************************
*
* MODULE: 802_11Defs.h
* PURPOSE: Contains 802.11 defines/structures
*
****************************************************************************/
#ifndef _802_11_INFO_DEFS_H
#define _802_11_INFO_DEFS_H
#include "tidef.h"
#include "osDot11.h"
#ifdef XCC_MODULE_INCLUDED
#include "osDot11XCC.h"
#endif
#define DOT11_OUI_LEN 4
#define DOT11_COUNTRY_STRING_LEN 3
#define DOT11_MAX_SUPPORTED_RATES 32
/* Maximum size of beacon or probe-request information element */
#define DOT11_WSC_PROBE_REQ_MAX_LENGTH 80
typedef enum
{
DOT11_B_MODE = 1,
DOT11_A_MODE = 2,
DOT11_G_MODE = 3,
DOT11_DUAL_MODE = 4,
DOT11_N_MODE = 5,
DOT11_MAX_MODE
} EDot11Mode;
/* FrameControl field of the 802.11 header */
/**/
/* bit 15 14 13 12 11 10 9 8 7-4 3-2 1-0*/
/* +-------+-----+------+-----+-------+------+------+----+---------+------+----------+*/
/* | Order | WEP | More | Pwr | Retry | More | From | To | Subtype | Type | Protocol |*/
/* | | | Data | Mgmt| | Frag | DS | DS | | | Version |*/
/* +-------+-----+------+-----+-------+------+------+----+---------+------+----------+*/
/* 1 1 1 1 1 1 1 1 4 2 2*/
#define DOT11_FC_PROT_VERSION_MASK ( 3 << 0 )
#define DOT11_FC_PROT_VERSION ( 0 << 0 )
#define DOT11_FC_TYPE_MASK ( 3 << 2 )
typedef enum
{
DOT11_FC_TYPE_MGMT = ( 0 << 2 ),
DOT11_FC_TYPE_CTRL = ( 1 << 2 ),
DOT11_FC_TYPE_DATA = ( 2 << 2 )
} dot11_Fc_Type_e;
#define DOT11_FC_SUB_MASK ( 0x0f << 4 )
typedef enum
{
/* Management subtypes */
DOT11_FC_SUB_ASSOC_REQ = ( 0 << 4 ),
DOT11_FC_SUB_ASSOC_RESP = ( 1 << 4 ),
DOT11_FC_SUB_REASSOC_REQ = ( 2 << 4 ),
DOT11_FC_SUB_REASSOC_RESP = ( 3 << 4 ),
DOT11_FC_SUB_PROBE_REQ = ( 4 << 4 ),
DOT11_FC_SUB_PROBE_RESP = ( 5 << 4 ),
DOT11_FC_SUB_BEACON = ( 8 << 4 ),
DOT11_FC_SUB_ATIM = ( 9 << 4 ),
DOT11_FC_SUB_DISASSOC = ( 10 << 4 ),
DOT11_FC_SUB_AUTH = ( 11 << 4 ),
DOT11_FC_SUB_DEAUTH = ( 12 << 4 ),
DOT11_FC_SUB_ACTION = ( 13 << 4 ),
/* Control subtypes */
DOT11_FC_SUB_BAR = ( 8 << 4 ),
DOT11_FC_SUB_BA = ( 9 << 4 ),
DOT11_FC_SUB_PS_POLL = ( 10 << 4 ),
DOT11_FC_SUB_RTS = ( 11 << 4 ),
DOT11_FC_SUB_CTS = ( 12 << 4 ),
DOT11_FC_SUB_ACK = ( 13 << 4 ),
DOT11_FC_SUB_CF_END = ( 14 << 4 ),
DOT11_FC_SUB_CF_END_CF_ACK = ( 15 << 4 ),
/* Data subtypes */
DOT11_FC_SUB_DATA = ( 0 << 4 ),
DOT11_FC_SUB_DATA_CF_ACK = ( 1 << 4 ),
DOT11_FC_SUB_DATA_CF_POLL = ( 2 << 4 ),
DOT11_FC_SUB_DATA_CF_ACK_CF_POLL = ( 3 << 4 ),
DOT11_FC_SUB_NULL_FUNCTION = ( 4 << 4 ),
DOT11_FC_SUB_CF_ACK = ( 5 << 4 ),
DOT11_FC_SUB_CF_POLL = ( 6 << 4 ),
DOT11_FC_SUB_CF_ACK_CF_POLL = ( 7 << 4 ),
DOT11_FC_SUB_DATA_QOS = ( 8 << 4 ),
DOT11_FC_SUB_DATA_NULL_QOS = ( 12 << 4 )
} dot11_Fc_Sub_Type_e;
#define DOT11_FC_TYPESUBTYPE_MASK ( DOT11_FC_TYPE_MASK | DOT11_FC_SUB_MASK )
typedef enum
{
DOT11_FC_ASSOC_REQ = ( DOT11_FC_TYPE_MGMT | DOT11_FC_SUB_ASSOC_REQ ),
DOT11_FC_ASSOC_RESP = ( DOT11_FC_TYPE_MGMT | DOT11_FC_SUB_ASSOC_RESP ),
DOT11_FC_REASSOC_REQ = ( DOT11_FC_TYPE_MGMT | DOT11_FC_SUB_REASSOC_REQ ),
DOT11_FC_REASSOC_RESP = ( DOT11_FC_TYPE_MGMT | DOT11_FC_SUB_REASSOC_RESP ),
DOT11_FC_PROBE_REQ = ( DOT11_FC_TYPE_MGMT | DOT11_FC_SUB_PROBE_REQ ),
DOT11_FC_PROBE_RESP = ( DOT11_FC_TYPE_MGMT | DOT11_FC_SUB_PROBE_RESP ),
DOT11_FC_BEACON = ( DOT11_FC_TYPE_MGMT | DOT11_FC_SUB_BEACON ),
DOT11_FC_ATIM = ( DOT11_FC_TYPE_MGMT | DOT11_FC_SUB_ATIM ),
DOT11_FC_DISASSOC = ( DOT11_FC_TYPE_MGMT | DOT11_FC_SUB_DISASSOC ),
DOT11_FC_AUTH = ( DOT11_FC_TYPE_MGMT | DOT11_FC_SUB_AUTH ),
DOT11_FC_DEAUTH = ( DOT11_FC_TYPE_MGMT | DOT11_FC_SUB_DEAUTH ),
DOT11_FC_ACTION = ( DOT11_FC_TYPE_MGMT | DOT11_FC_SUB_ACTION ),
DOT11_FC_PS_POLL = ( DOT11_FC_TYPE_CTRL | DOT11_FC_SUB_PS_POLL ),
DOT11_FC_RTS = ( DOT11_FC_TYPE_CTRL | DOT11_FC_SUB_RTS ),
DOT11_FC_CTS = ( DOT11_FC_TYPE_CTRL | DOT11_FC_SUB_CTS ),
DOT11_FC_ACK = ( DOT11_FC_TYPE_CTRL | DOT11_FC_SUB_ACK ),
DOT11_FC_CF_END = ( DOT11_FC_TYPE_CTRL | DOT11_FC_SUB_CF_END ),
DOT11_FC_CF_END_CF_ACK = ( DOT11_FC_TYPE_CTRL | DOT11_FC_SUB_CF_END_CF_ACK ),
DOT11_FC_DATA = ( DOT11_FC_TYPE_DATA | DOT11_FC_SUB_DATA ),
DOT11_FC_DATA_CF_ACK = ( DOT11_FC_TYPE_DATA | DOT11_FC_SUB_DATA_CF_ACK ),
DOT11_FC_DATA_CF_POLL = ( DOT11_FC_TYPE_DATA | DOT11_FC_SUB_DATA_CF_POLL ),
DOT11_FC_DATA_CF_ACK_CF_POLL = ( DOT11_FC_TYPE_DATA | DOT11_FC_SUB_DATA_CF_ACK_CF_POLL ),
DOT11_FC_DATA_NULL_FUNCTION = ( DOT11_FC_TYPE_DATA | DOT11_FC_SUB_NULL_FUNCTION ),
DOT11_FC_CF_ACK = ( DOT11_FC_TYPE_DATA | DOT11_FC_SUB_CF_ACK ),
DOT11_FC_CF_POLL = ( DOT11_FC_TYPE_DATA | DOT11_FC_SUB_CF_POLL ),
DOT11_FC_CF_ACK_CF_POLL = ( DOT11_FC_TYPE_DATA | DOT11_FC_SUB_CF_ACK_CF_POLL ),
DOT11_FC_DATA_QOS = ( DOT11_FC_TYPE_DATA | DOT11_FC_SUB_DATA_QOS ),
DOT11_FC_DATA_NULL_QOS = ( DOT11_FC_TYPE_DATA | DOT11_FC_SUB_DATA_NULL_QOS )
} dot11_Fc_Type_Sub_Type_e;
typedef enum
{
DOT11_FC_TO_DS = ( 1 << 8 ),
DOT11_FC_FROM_DS = ( 1 << 9 ),
DOT11_FC_MORE_FRAG = ( 1 << 10 ),
DOT11_FC_RETRY = ( 1 << 11 ),
DOT11_FC_PWR_MGMT = ( 1 << 12 ),
DOT11_FC_MORE_DATA = ( 1 << 13 ),
DOT11_FC_WEP = ( 1 << 14 ),
DOT11_FC_ORDER = ( 1 << 15 )
} dot11_Fc_Other_e;
typedef enum
{
DOT11_CAPABILITY_ESS = ( 1 ),
DOT11_CAPABILITY_IESS = ( 1 << 1 ),
DOT11_CAPABILITY_CF_POLLABE = ( 1 << 2 ),
DOT11_CAPABILITY_CF_POLL_REQ = ( 1 << 3 ),
DOT11_CAPABILITY_PRIVACY = ( 1 << 4 ),
DOT11_CAPABILITY_PREAMBLE = ( 1 << 5 ),
DOT11_CAPABILITY_PBCC = ( 1 << 6 ),
DOT11_CAPABILITY_AGILE = ( 1 << 7 )
} dot11_Capability_e;
#define DOT11_FC_TO_DS_SHIFT 8
#define DOT11_FC_FROM_DS_SHIFT 9
#define DOT11_FC_MORE_FRAG_SHIFT 10
#define DOT11_FC_RETRY_SHIFT 11
#define DOT11_FC_PWR_MGMT_SHIFT 12
#define DOT11_FC_MORE_DATA_SHIFT 13
#define DOT11_FC_WEP_SHIFT 14
#define DOT11_FC_ORDER_SHIFT 15
#define IS_WEP_ON(fc) ((1 << DOT11_FC_WEP_SHIFT) & (fc))
#define IS_DATA(fc) (((DOT11_FC_TYPE_MASK) & (fc)) == DOT11_FC_TYPE_DATA)
#define IS_CTRL(fc) (((DOT11_FC_TYPE_MASK) & (fc)) == DOT11_FC_TYPE_CTRL)
#define IS_MGMT(fc) (((DOT11_FC_TYPE_MASK) & (fc)) == DOT11_FC_TYPE_MGMT)
#define IS_LEGACY_DATA(fc) (((DOT11_FC_TYPESUBTYPE_MASK) & (fc)) == DOT11_FC_DATA)
#define IS_AUTH(fc) (((DOT11_FC_AUTH) & (fc)) == DOT11_FC_AUTH)
#define IS_QOS_FRAME(fc) ((((fc) & (DOT11_FC_TYPESUBTYPE_MASK)) == DOT11_FC_DATA_QOS) || \
(((fc) & (DOT11_FC_TYPESUBTYPE_MASK)) == DOT11_FC_DATA_NULL_QOS) )
#define IS_HT_FRAME(fc) ((fc) & (DOT11_FC_ORDER))
#define TUs_TO_MSECs(x) (((x) << 10) / 1000)
#define TIME_STAMP_LEN 8
/* SequenceControl field of the 802.11 header */
/**/
/* bit 15 - 4 3 - 0*/
/* +-------------------+-----------+*/
/* | Sequence Number | Fragment |*/
/* | | Number |*/
/* +-------------------+-----------+*/
/* 12 4*/
typedef enum
{
DOT11_SC_FRAG_NUM_MASK = ( 0xf << 0 ),
DOT11_SC_SEQ_NUM_MASK = ( 0xfff << 4 )
} dot11_Sc_t;
/* QoS Control field of the 802.11 header */
#define DOT11_QOS_CONTROL_FIELD_TID_BITS 0x000f
#define DOT11_QOS_CONTROL_FIELD_A_MSDU_BITS 0x0080
#define DOT11_QOS_CONTROL_ACK 0x0000
#define DOT11_QOS_CONTROL_DONT_ACK 0x0020
typedef struct
{
TI_UINT16 fc;
TI_UINT16 duration;
TMacAddr address1;
TMacAddr address2;
TMacAddr address3;
TI_UINT16 seqCtrl;
TI_UINT16 qosControl;
/* TMacAddr address4;*/
} dot11_header_t;
typedef struct
{
TI_UINT16 fc;
TI_UINT16 duration;
TMacAddr address1;
TMacAddr address2;
TMacAddr address3;
TI_UINT16 seqCtrl;
} legacy_dot11_header_t;
typedef struct
{
TI_UINT16 fc;
TI_UINT16 duration;
TMacAddr DA;
TMacAddr SA;
TMacAddr BSSID;
TI_UINT16 seqCtrl;
} dot11_mgmtHeader_t;
typedef struct
{
TI_UINT8 DSAP;
TI_UINT8 SSAP;
TI_UINT8 Control;
TI_UINT8 OUI[3];
TI_UINT16 Type;
} Wlan_LlcHeader_T;
typedef struct
{
TI_UINT16 fc;
TI_UINT16 AID;
TMacAddr BSSID;
TMacAddr TA;
} dot11_PsPollFrameHeader_t;
typedef struct
{
TI_UINT16 fc;
TI_UINT16 duration;
TMacAddr RA;
TMacAddr TA;
} dot11_BarFrameHeader_t;
#define FCS_SIZE 4
#define WLAN_HDR_LEN 24
#define WLAN_HT_HDR_LEN 28
#define WLAN_QOS_HDR_LEN 26
#define WLAN_QOS_HT_HDR_LEN 30
#define WLAN_QOS_HT_CONTROL_FIELD_LEN 4
#define WLAN_SNAP_HDR_LEN 8
#define WLAN_WITH_SNAP_HEADER_MAX_SIZE (WLAN_HDR_LEN + WLAN_SNAP_HDR_LEN)
#define WLAN_WITH_SNAP_QOS_HEADER_MAX_SIZE (WLAN_QOS_HDR_LEN + WLAN_SNAP_HDR_LEN)
#define GET_MAX_HEADER_SIZE(macHeaderPointer,headerSize) \
if (IS_QOS_FRAME(*(TI_UINT16*)(macHeaderPointer))) \
{\
if (IS_HT_FRAME(*(TI_UINT16*)(macHeaderPointer))) \
*headerSize = WLAN_QOS_HT_HDR_LEN; \
else \
*headerSize = WLAN_QOS_HDR_LEN; \
}\
else \
{\
if (IS_HT_FRAME(*(TI_UINT16*)(macHeaderPointer))) \
*headerSize = WLAN_HT_HDR_LEN; \
else \
*headerSize = WLAN_HDR_LEN; \
}
/****************************************************************************************
The next table is defined in 802.11 spec section 7.2.2 for the address field contents :
To DS From DS Address 1 Address 2 Address 3 Address 4
-------------------------------------------------------------------
0 0 DA SA BSSID N/A
0 1 DA BSSID SA N/A
1 0 BSSID SA DA N/A
1 1 RA TA DA SA
NOTE: We only support packets coming from within the DS (i.e. From DS = 0)
*****************************************************************************************/
/* return the destination address used in *dot11_header_t */
#define GET_DA_FROM_DOT11_HEADER_T(pDot11Hdr) ((pDot11Hdr->fc & DOT11_FC_TO_DS) ? (pDot11Hdr->address3) : (pDot11Hdr->address1))
/*
* MANAGEMENT
* -----------------
*/
/* mgmt body max length */
#define MAX_MGMT_BODY_LENGTH 2312
/* maximal length of beacon body - note that actual beacons may actually be longer
than this size, at least according to the spec, but so far no larger beacon was seen
Note: 1500 is the recommended size by the Motorola Standard team. TI recommendation is 700*/
#define MAX_BEACON_BODY_LENGTH 1500
/* general mgmt frame structure */
typedef struct
{
dot11_mgmtHeader_t hdr;
TI_UINT8 body[MAX_MGMT_BODY_LENGTH];
} dot11_mgmtFrame_t;
/* Capabilities Information Field - IN THE AIR */
/**/
/* bit 15 14 13 12 11 10 9 8 7 - 0*/
/* +----------+------+----------+---------+----------+---------+------+-----+---------------+*/
/* | Channel | | Short | Privacy | CF Poll | CF | | | RESERVED | */
/* | Agility | PBCC | Preamble | | Request | Pollable| IBSS | ESS | |*/
/* +----------+------+----------+---------+----------+---------+------+-----+---------------+ */
/* 1 1 1 1 1 1 1 1*/
/* Capabilities Information Field - IN THE MGMT SOFTWARE AFTER THE SWAP */
/**/
/* bit 15 - 8 7 6 5 4 3 2 1 0*/
/* +------------+----------+------+----------+---------+----------+---------+------+-----+*/
/* | | Channel | | Short | Privacy | CF Poll | CF | | |*/
/* | Reserved | Agility | PBCC | Preamble | | Request | Pollable| IBSS | ESS |*/
/* +------------+----------+------+----------+---------+----------+---------+------+-----+*/
/* 8 1 1 1 1 1 1 1 1*/
typedef enum
{
DOT11_CAPS_ESS = ( 1 << 0 ),
DOT11_CAPS_IBSS = ( 1 << 1 ),
DOT11_CAPS_CF_POLLABLE = ( 1 << 2 ),
DOT11_CAPS_CF_POLL_REQUEST = ( 1 << 3 ),
DOT11_CAPS_PRIVACY = ( 1 << 4 ),
DOT11_CAPS_SHORT_PREAMBLE = ( 1 << 5 ),
DOT11_CAPS_PBCC = ( 1 << 6 ),
DOT11_CAPS_CHANNEL_AGILITY = ( 1 << 7 ),
DOT11_SPECTRUM_MANAGEMENT = ( 1 << 8 ),
DOT11_CAPS_QOS_SUPPORTED = ( 1 << 9 ),
DOT11_CAPS_SHORT_SLOT_TIME = (1 << 10),
DOT11_CAPS_APSD_SUPPORT = ( 1 << 11),
DOT11_CAPS_DELAYED_BA = ( 1 << 14),
DOT11_CAPS_IMMEDIATE_BA = ( 1 << 15)
} dot11_capabilities_e;
typedef enum
{
/* ESS */
CAP_ESS_MASK = 1,
CAP_ESS_SHIFT = 0,
/* IBSS */
CAP_IBSS_MASK = 1,
CAP_IBSS_SHIFT = 1,
/* CF Pollable */
CAP_CF_POLL_MASK = 1,
CAP_CF_POLL_SHIFT = 2,
/* CF Poll request */
CAP_CF_REQ_MASK = 1,
CAP_CF_REQ_SHIFT = 3,
/* Privacy */
CAP_PRIVACY_MASK = 1,
CAP_PRIVACY_SHIFT = 4,
/* Short Preamble*/
CAP_PREAMBLE_MASK = 1,
CAP_PREAMBLE_SHIFT = 5,
/* PBCC */
CAP_PBCC_MASK = 1,
CAP_PBCC_SHIFT = 6,
/* Agile */
CAP_AGILE_MASK = 1,
CAP_AGILE_SHIFT = 7,
/* Slot time */
CAP_SLOT_TIME_MASK = 1,
CAP_SLOT_TIME_SHIFT = 10,
/* APSD */
CAP_APSD_MASK = 1,
CAP_APSD_SHIFT = 11
} wdrv_mgmtCapabilities_e;
/*
* 802.11 Information elements
* ---------------------------
*/
typedef TI_UINT8 dot11_eleHdr_t[2]; /* Byte-0: IE-ID, Byte-1: IE-Length */
/* fixed fields lengths, except of currentAP & timestamp*/
#define FIX_FIELD_LEN 2
/* SSID Information Element */
#define DOT11_SSID_ELE_ID 0
/* Max SSID length */
#define MAX_SSID_LEN 32
typedef struct
{
dot11_eleHdr_t hdr;
char serviceSetId[MAX_SSID_LEN];
} dot11_SSID_t;
/* Supportted rates Information Element */
#define DOT11_SUPPORTED_RATES_ELE_ID 1
#define DOT11_EXT_SUPPORTED_RATES_ELE_ID 50
typedef struct
{
dot11_eleHdr_t hdr;
TI_UINT8 rates[DOT11_MAX_SUPPORTED_RATES];
} dot11_RATES_t;
#define ERP_IE_NON_ERP_PRESENT_MASK 0x1
#define ERP_IE_USE_PROTECTION_MASK 0x2
#define ERP_IE_BARKER_PREAMBLE_MODE_MASK 0x4
#define DOT11_ERP_IE_ID 42
typedef struct
{
dot11_eleHdr_t hdr;
TI_UINT8 ctrl;
} dot11_ERP_t;
/* RSN Information Element */
#define MAX_RSN_IE 3
#define DOT11_RSN_MAX 255
typedef struct
{
dot11_eleHdr_t hdr;
TI_UINT8 rsnIeData[DOT11_RSN_MAX];
} dot11_RSN_t;
/* General definitions needed by rsn.c */
#define IV_FIELD_SIZE 4
#define ICV_FIELD_SIZE 4
#define MIC_FIELD_SIZE 8
#define EIV_FIELD_SIZE 4
#define WEP_AFTER_HEADER_FIELD_SIZE IV_FIELD_SIZE
#define TKIP_AFTER_HEADER_FIELD_SIZE (IV_FIELD_SIZE + EIV_FIELD_SIZE)
#define AES_AFTER_HEADER_FIELD_SIZE 8
/* DS params Information Element */
#define DOT11_DS_PARAMS_ELE_ID 3
#define DOT11_DS_PARAMS_ELE_LEN 1
typedef struct
{
dot11_eleHdr_t hdr;
TI_UINT8 currChannel;
} dot11_DS_PARAMS_t;
/* DS params Information Element */
#define DOT11_IBSS_PARAMS_ELE_ID 6
#define DOT11_IBSS_PARAMS_ELE_LEN 2
typedef struct
{
dot11_eleHdr_t hdr;
TI_UINT16 atimWindow;
} dot11_IBSS_PARAMS_t;
#define DOT11_FH_PARAMS_ELE_ID 2
#define DOT11_FH_PARAMS_ELE_LEN 5
typedef struct
{
dot11_eleHdr_t hdr;
TI_UINT16 dwellTime;
TI_UINT8 hopSet;
TI_UINT8 hopPattern;
TI_UINT8 hopIndex;
} dot11_FH_PARAMS_t;
/* tim Information Element */
#define DOT11_TIM_ELE_ID 5
#define DOT11_PARTIAL_VIRTUAL_BITMAP_MAX 251
typedef struct
{
dot11_eleHdr_t hdr;
TI_UINT8 dtimCount;
TI_UINT8 dtimPeriod;
TI_UINT8 bmapControl;
TI_UINT8 partialVirtualBmap[DOT11_PARTIAL_VIRTUAL_BITMAP_MAX];
} dot11_TIM_t;
/* tim Information Element */
#define DOT11_CF_ELE_ID 4
#define DOT11_CF_PARAMS_ELE_LEN 6
typedef struct
{
dot11_eleHdr_t hdr;
TI_UINT8 cfpCount;
TI_UINT8 cfpPeriod;
TI_UINT16 cfpMaxDuration;
TI_UINT16 cfpDurRemain;
} dot11_CF_PARAMS_t;
/* Challenge text Information Element */
#define DOT11_CHALLENGE_TEXT_ELE_ID 16
#define DOT11_CHALLENGE_TEXT_MAX 253
typedef struct
{
dot11_eleHdr_t hdr;
TI_UINT8 text[ DOT11_CHALLENGE_TEXT_MAX ];
} dot11_CHALLENGE_t;
#define DOT11_NUM_OF_MAX_TRIPLET_CHANNEL 37
typedef struct
{
TI_UINT8 firstChannelNumber;
TI_UINT8 numberOfChannels;
TI_UINT8 maxTxPowerLevel;
} dot11_TripletChannel_t;
typedef struct
{
TI_UINT8 CountryString[DOT11_COUNTRY_STRING_LEN];
dot11_TripletChannel_t tripletChannels[DOT11_NUM_OF_MAX_TRIPLET_CHANNEL];
} dot11_countryIE_t;
/* Country Inforamtion Element */
#define DOT11_COUNTRY_ELE_ID 7
#define DOT11_COUNTRY_ELE_LEN_MAX ( ((DOT11_NUM_OF_MAX_TRIPLET_CHANNEL+1)*3) + !((DOT11_NUM_OF_MAX_TRIPLET_CHANNEL&0x1)))
typedef struct
{
dot11_eleHdr_t hdr;
dot11_countryIE_t countryIE;
} dot11_COUNTRY_t;
/* Power Constraint Information Element */
#define DOT11_POWER_CONSTRAINT_ELE_ID (32)
#define DOT11_POWER_CONSTRAINT_ELE_LEN (1)
typedef struct
{
dot11_eleHdr_t hdr;
TI_UINT8 powerConstraint;
} dot11_POWER_CONSTRAINT_t;
/* Power Capability Information Element */
#define DOT11_CAPABILITY_ELE_ID (33)
#define DOT11_CAPABILITY_ELE_LEN (2)
typedef struct
{
dot11_eleHdr_t hdr;
TI_UINT8 minTxPower;
TI_UINT8 maxTxPower;
} dot11_CAPABILITY_t;
/* TPC request Information Element */
#define DOT11_TPC_REQUEST_ELE_ID (34)
#define DOT11_TPC_REQUEST_ELE_LEN (0)
typedef struct
{
dot11_eleHdr_t hdr;
} dot11_TPC_REQUEST_t;
/* TPC report Information Element */
#define DOT11_TPC_REPORT_ELE_ID (35)
#define DOT11_TPC_REPORT_ELE_LEN (2)
typedef struct
{
dot11_eleHdr_t hdr;
TI_UINT8 transmitPower;
TI_UINT8 linkMargin;
} dot11_TPC_REPORT_t;
#ifdef XCC_MODULE_INCLUDED
/* Cell Transmit Power Information Element */
#define DOT11_CELL_TP_ELE_ID (150)
#define DOT11_CELL_TP_ELE_LEN (6)
typedef struct
{
dot11_eleHdr_t hdr;
TI_UINT8 oui[4];
TI_UINT8 power;
TI_UINT8 reserved;
} dot11_CELL_TP_t;
#define DOT11_CELL_TP \
dot11_CELL_TP_t *cellTP;
#else /* XCC_MODULE_INCLUDED */
#define DOT11_CELL_TP
#endif /* XCC_MODULE_INCLUDED */
/* Channel Supported Information Element */
#define DOT11_CHANNEL_SUPPORTED_ELE_ID (36)
#define DOT11_CHANNEL_SUPPORTED_ELE_LEN (26)
typedef struct
{
dot11_eleHdr_t hdr;
TI_UINT8 supportedChannel[DOT11_CHANNEL_SUPPORTED_ELE_LEN];
} dot11_CHANNEL_SUPPORTED_t;
/* Channel Switch Announcement Information Element */
#define DOT11_CHANNEL_SWITCH_ELE_ID (37)
#define DOT11_CHANNEL_SWITCH_ELE_LEN (3)
typedef struct
{
dot11_eleHdr_t hdr;
TI_UINT8 channelSwitchMode;
TI_UINT8 channelNumber;
TI_UINT8 channelSwitchCount;
} dot11_CHANNEL_SWITCH_t;
#define MAX_NUM_REQ (16)
/* Measurement request Information Element */
#define DOT11_MEASUREMENT_REQUEST_ELE_ID (38)
#define DOT11_MEASUREMENT_REQUEST_LEN (2)
#define DOT11_MEASUREMENT_REQUEST_ELE_LEN (3 + DOT11_MEASUREMENT_REQUEST_LEN*MAX_NUM_REQ)
typedef struct
{
dot11_eleHdr_t hdr;
TI_UINT8 measurementToken;
TI_UINT8 measurementMode;
TI_UINT8 measurementType;
TI_UINT8 measurementRequests[DOT11_MEASUREMENT_REQUEST_LEN*MAX_NUM_REQ];
} dot11_MEASUREMENT_REQUEST_t;
/* Quiet Information Element */
#define DOT11_QUIET_ELE_ID (40)
#define DOT11_QUIET_ELE_LEN (6)
typedef struct
{
dot11_eleHdr_t hdr;
TI_UINT8 quietCount;
TI_UINT8 quietPeriod;
TI_UINT16 quietDuration;
TI_UINT16 quietOffset;
} dot11_QUIET_t;
/* QoS Capability Information Element */
#define DOT11_QOS_CAPABILITY_ELE_ID (46)
#define DOT11_QOS_CAPABILITY_ELE_LEN (1)
#define AC_APSD_FLAGS_MASK (1)
#define Q_ACK_BITG_MASK (1)
#define MAX_SP_LENGTH_MASK (3)
#define MORE_DATA_ACK_MASK (1)
#define AC_VO_APSD_FLAGS_SHIFT (0)
#define AC_VI_APSD_FLAGS_SHIFT (1)
#define AC_BK_APSD_FLAGS_SHIFT (2)
#define AC_BE_APSD_FLAGS_SHIFT (3)
#define Q_ACK_FLAGS_SHIFT (4)
#define MAX_SP_LENGTH_SHIFT (5)
#define MORE_DATA_ACK_SHIFT (7)
#define QOS_CONTROL_UP_SHIFT (0)
#define AP_QOS_INFO_UAPSD_MASK (1)
#define AP_QOS_INFO_UAPSD_SHIFT (7)
typedef struct
{
dot11_eleHdr_t hdr;
TI_UINT8 QosInfoField;
} dot11_QOS_CAPABILITY_IE_t;
/* WPS Information Element */
#define DOT11_WPS_ELE_ID (221)
#define DOT11_WPS_OUI {0x00, 0x50, 0xF2, 0x04}
#define DOT11_WPS_OUI_LEN 4
/* WME Information Element */
#define DOT11_WME_ELE_ID (221)
#define DOT11_WME_ELE_LEN (7)
typedef struct
{
dot11_eleHdr_t hdr;
TI_UINT8 OUI[3];
TI_UINT8 OUIType;
TI_UINT8 OUISubType;
TI_UINT8 version;
TI_UINT8 ACInfoField;
} dot11_WME_IE_t;
typedef struct
{
TI_UINT8 ACI_AIFSN;
TI_UINT8 ECWmin_ECWmax;
TI_UINT16 TXOPLimit;
} dot11_QOS_AC_IE_ParametersRecord_t;
typedef struct
{
dot11_QOS_AC_IE_ParametersRecord_t ACBEParametersRecord;
dot11_QOS_AC_IE_ParametersRecord_t ACBKParametersRecord;
dot11_QOS_AC_IE_ParametersRecord_t ACVIParametersRecord;
dot11_QOS_AC_IE_ParametersRecord_t ACVOParametersRecord;
} dot11_ACParameters_t;
/* WME Parameter Information Element */
#define DOT11_WME_PARAM_ELE_ID (221)
#define DOT11_WME_PARAM_ELE_LEN (24)
typedef struct
{
dot11_eleHdr_t hdr;
TI_UINT8 OUI[3];
TI_UINT8 OUIType;
TI_UINT8 OUISubType;
TI_UINT8 version;
TI_UINT8 ACInfoField;
TI_UINT8 reserved;
dot11_ACParameters_t WME_ACParameteres;
} dot11_WME_PARAM_t;
/* 802.11n HT Information Element */
#define DOT11_HT_CAPABILITIES_ELE_LEN (26)
#define DOT11_HT_INFORMATION_ELE_LEN (22)
#define DOT11_HT_CAPABILITIES_MCS_RATE_OFFSET (3)
#define DOT11_HT_INFORMATION_MCS_RATE_OFFSET (6)
typedef struct
{
dot11_eleHdr_t tHdr;
TI_UINT8 aHtCapabilitiesIe[DOT11_HT_CAPABILITIES_ELE_LEN]; /* HT capabilities IE unparsed */
} Tdot11HtCapabilitiesUnparse;
typedef struct
{
dot11_eleHdr_t tHdr;
TI_UINT8 aHtInformationIe[DOT11_HT_INFORMATION_ELE_LEN]; /* HT Information IE unparsed */
} Tdot11HtInformationUnparse;
/* BA session bits mask */
#define DOT11_BAR_CONTROL_FIELD_TID_BITS 0xf000
#define DOT11_BA_PARAMETER_SET_FIELD_TID_BITS 0x003C
#define DOT11_BA_PARAMETER_SET_FIELD_WINSIZE_BITS 0xffC0
#define DOT11_DELBA_PARAMETER_FIELD_TID_BITS 0xf000
/* action field BA frames */
typedef enum
{
DOT11_BA_ACTION_ADDBA = 0,
DOT11_BA_ACTION_DELBA = 2
} Edot11BaAction;
/* WiFi Simple Config Information Element */
#define DOT11_WSC_PARAM_ELE_ID (221)
#define DOT11_WSC_SELECTED_REGISTRAR_CONFIG_METHODS 0x1053
#define DOT11_WSC_SELECTED_REGISTRAR_CONFIG_METHODS_PIN 0xC
#define DOT11_WSC_SELECTED_REGISTRAR_CONFIG_METHODS_PBC 0x80
#define DOT11_WSC_DEVICE_PASSWORD_ID 0x1012
#define DOT11_WSC_DEVICE_PASSWORD_ID_PIN 0x0000
#define DOT11_WSC_DEVICE_PASSWORD_ID_PBC 0x0004
/* WiFi Simple Config Parameter Information Element */
#define DOT11_WSC_PROBE_REQ_PARAM_ELE_LEN (22)
#define DOT11_WSC_BEACON_MAX_LENGTH 160
typedef struct
{
dot11_eleHdr_t hdr;
TI_UINT8 OUI[3];
TI_UINT8 OUIType;
TI_UINT8 WSCBeaconOrProbIE[DOT11_WSC_BEACON_MAX_LENGTH];
} dot11_WSC_t;
#define dot11_WPA_OUI_TYPE (1)
#define dot11_WME_OUI_TYPE (2)
#define dot11_WSC_OUI_TYPE (4)
#define dot11_WME_OUI_SUB_TYPE_IE (0)
#define dot11_WME_OUI_SUB_TYPE_PARAMS_IE (1)
#define dot11_WME_VERSION (1)
#define dot11_WME_ACINFO_MASK 0x0f
/* -------------------- TSPEC ----------------- */
typedef struct
{
TI_UINT8 tsInfoArr[3];
} tsInfo_t;
/* This structure is part of the TSPEC structure. It was seperated since there are some cases (such as DEL_TS), which we dont need
to send ALL the TSPEC structure, but only as far as TsInfo. The TSPEC structure contains this smaller structure */
typedef struct
{
dot11_eleHdr_t hdr;
TI_UINT8 OUI[3];
TI_UINT8 oui_type;
TI_UINT8 oui_subtype;
TI_UINT8 version;
tsInfo_t tsInfoField;
} dot11_WME_TSPEC_IE_hdr_t;
typedef struct
{
dot11_WME_TSPEC_IE_hdr_t tHdr;
TI_UINT16 nominalMSDUSize;
TI_UINT16 maximumMSDUSize;
TI_UINT32 minimumServiceInterval;
TI_UINT32 maximumServiceInterval;
TI_UINT32 inactivityInterval;
TI_UINT32 suspensionInterval;
TI_UINT32 serviceStartTime;
TI_UINT32 minimumDataRate;
TI_UINT32 meanDataRate;
TI_UINT32 peakDataRate;
TI_UINT32 maximumBurstSize;
TI_UINT32 delayBound;
TI_UINT32 minimumPHYRate;
TI_UINT16 surplusBandwidthAllowance;
TI_UINT16 mediumTime;
} dot11_WME_TSPEC_IE_t;
#define WME_TSPEC_IE_ID 221
#define WME_TSPEC_IE_LEN 61
#define WME_TSPEC_IE_TSINFO_LEN 9
#define WME_TSPEC_IE_OUI_TYPE 0x02
#define WME_TSPEC_IE_OUI_SUB_TYPE 0x02
#define WME_TSPEC_IE_VERSION 0x01
/* OUI TYPE values that can be present in management packets inside Cisco vendor specific IE */
typedef enum
{
TS_METRIX_OUI_TYPE = 0x07,
TS_RATE_SET_OUI_TYPE = 0x08,
EDCA_LIFETIME_OUI_TYPE = 0x09
} XCC_IE_OUI_TYPE_t;
#define ADDTS_REQUEST_ACTION 0x00
#define ADDTS_RESPONSE_ACTION 0x01
#define DELTS_ACTION 0x02
#define ADDTS_STATUS_CODE_SUCCESS 0x00
#define DELTS_CODE_SUCCESS 0x00
#define TS_INFO_0_TRAFFIC_TYPE_MASK 0x01
#define TS_INFO_0_TSID_MASK 0x1E
#define TS_INFO_0_DIRECTION_MASK 0x60
#define TS_INFO_0_ACCESS_POLICY_MASK 0x80
#define TS_INFO_1_ACCESS_POLICY_MASK 0x01
#define TS_INFO_1_AGGREGATION_MASK 0x02
#define TS_INFO_1_APSD_MASK 0x04
#define TS_INFO_1_USER_PRIORITY_MASK 0x38
#define TS_INFO_1_TSINFO_ACK_POLICY_MASK 0xC0
#define TS_INFO_2_SCHEDULE_MASK 0x01
#define TS_INFO_2_RESERVED_MASK 0xF7
#define TRAFFIC_TYPE_SHIFT 0
#define TSID_SHIFT 1
#define DIRECTION_SHIFT 5
#define ACCESS_POLICY_SHIFT 7
#define AGGREGATION_SHIFT 1
#define APSD_SHIFT 2
#define USER_PRIORITY_SHIFT 3
#define TSINFO_ACK_POLICY_SHIFT 6
#define SCHEDULE_SHIFT 0
#define RESERVED_SHIFT 1
#define SURPLUS_BANDWIDTH_ALLOW 13
#define TS_INFO_0_ACCESS_POLICY_EDCA 0x1
#define NORMAL_ACKNOWLEDGEMENT 0x00
#define NO_SCHEDULE 0x00
#define PS_UPSD 0x01
#define EDCA_MODE 0x08
#define FIX_MSDU_SIZE 0x8000
#define WPA_IE_OUI {0x00, 0x50, 0xf2}
#define XCC_OUI {0x00, 0x40, 0x96}
/* Action field structure
used for extended management action such as spectrum management */
typedef TI_UINT8 dot11_ACTION_FIELD_t[2];
/* Management frames sub types */
typedef enum
{
ASSOC_REQUEST = 0,
ASSOC_RESPONSE = 1,
RE_ASSOC_REQUEST = 2,
RE_ASSOC_RESPONSE = 3,
PROBE_REQUEST = 4,
PROBE_RESPONSE = 5,
BEACON = 8,
ATIM = 9,
DIS_ASSOC = 10,
AUTH = 11,
DE_AUTH = 12,
ACTION = 13
} dot11MgmtSubType_e;
/* Management frames element IDs */
typedef enum
{
SSID_IE_ID = 0,
SUPPORTED_RATES_IE_ID = 1,
FH_PARAMETER_SET_IE_ID = 2,
DS_PARAMETER_SET_IE_ID = 3,
CF_PARAMETER_SET_IE_ID = 4,
TIM_IE_ID = 5,
IBSS_PARAMETER_SET_IE_ID = 6,
COUNTRY_IE_ID = 7,
CHALLANGE_TEXT_IE_ID = 16,
POWER_CONSTRAINT_IE_ID = 32,
TPC_REPORT_IE_ID = 35,
CHANNEL_SWITCH_ANNOUNCEMENT_IE_ID = 37,
QUIET_IE_ID = 40,
ERP_IE_ID = 42,
HT_CAPABILITIES_IE_ID = 45,
QOS_CAPABILITY_IE_ID = 46,
RSN_IE_ID = 48,
EXT_SUPPORTED_RATES_IE_ID = 50,
HT_INFORMATION_IE_ID = 61,
XCC_EXT_1_IE_ID = 133,
XCC_EXT_2_IE_ID = 149,
CELL_POWER_IE = 150, /*XCC*/
WPA_IE_ID = 221
} dot11MgmtIeId_e;
/* Spectrum Management Action fields */
typedef enum
{
MEASUREMENT_REQUEST = 0,
MEASUREMENT_REPORT = 1,
TPC_REQUEST = 2,
TPC_REPORT = 3,
CHANNEL_SWITCH_ANNOUNCEMENT = 4
} dot11ActionFrameTypes_e;
/* Category fields (such as apectrum management)*/
typedef enum
{
CATAGORY_SPECTRUM_MANAGEMENT = 0,
CATAGORY_QOS = 1,
WME_CATAGORY_QOS = 17,
CATAGORY_SPECTRUM_MANAGEMENT_ERROR = 128
} dot11CategoryTypes_e;
/*
* Management templates to set to the HAL:
*/
#ifdef XCC_MODULE_INCLUDED
typedef struct
{
dot11_mgmtHeader_t hdr;
char infoElements[sizeof( dot11_SSID_t ) +
sizeof( dot11_RATES_t ) +
sizeof( dot11_RATES_t ) +
sizeof( Tdot11HtCapabilitiesUnparse ) +
DOT11_WSC_PROBE_REQ_MAX_LENGTH +
sizeof( XCC_radioManagmentCapability_IE_t )
];
} probeReqTemplate_t;
#else /* XCC_MODULE_INCLUDED */
typedef struct
{
dot11_mgmtHeader_t hdr;
char infoElements[sizeof( dot11_SSID_t ) +
sizeof( dot11_RATES_t ) +
sizeof( dot11_RATES_t ) +
sizeof( Tdot11HtCapabilitiesUnparse ) +
DOT11_WSC_PROBE_REQ_MAX_LENGTH
];
} probeReqTemplate_t;
#endif /* XCC_MODULE_INCLUDED */
typedef struct
{
dot11_mgmtHeader_t hdr;
TI_UINT8 timeStamp[TIME_STAMP_LEN];
TI_UINT16 beaconInterval;
TI_UINT16 capabilities;
char infoElements[ sizeof( dot11_SSID_t ) +
sizeof( dot11_RATES_t ) +
sizeof( dot11_RATES_t ) +
sizeof( dot11_DS_PARAMS_t ) +
sizeof( dot11_COUNTRY_t) ];
} probeRspTemplate_t;
typedef struct
{
dot11_mgmtHeader_t hdr;
} nullDataTemplate_t;
typedef struct
{
dot11_mgmtHeader_t hdr;
TI_UINT16 disconnReason;
} disconnTemplate_t; /* Deauth or Disassoc */
typedef struct
{
dot11_header_t hdr;
TI_UINT8 securityOverhead[AES_AFTER_HEADER_FIELD_SIZE];
Wlan_LlcHeader_T LLC;
TI_UINT16 hardType;
TI_UINT16 protType;
TI_UINT8 hardSize;
TI_UINT8 protSize;
TI_UINT16 op;
TMacAddr StaMac;
TIpAddr StaIp;
TMacAddr TargMac;
TIpAddr TargIp;
} ArpRspTemplate_t; /* for auto ArpRsp sending by FW */
typedef struct
{
dot11_PsPollFrameHeader_t hdr;
} psPollTemplate_t;
typedef struct
{
dot11_header_t hdr;
} QosNullDataTemplate_t;
/* Traffic Stream Rate Set (TSRS) info-elements */
typedef struct
{
dot11_eleHdr_t hdr;
TI_UINT8 OUI[3];
TI_UINT8 oui_type;
TI_UINT8 tsid;
TI_UINT8 tsNominalRate;
} dot11_TSRS_STA_IE_t;
typedef struct
{
dot11_eleHdr_t hdr;
TI_UINT8 OUI[3];
TI_UINT8 oui_type;
TI_UINT8 tsid;
TI_UINT8 tsRates[8];
} dot11_TSRS_IE_t;
/* MSDU lifetime info-element */
typedef struct
{
dot11_eleHdr_t hdr;
TI_UINT8 OUI[3];
TI_UINT8 oui_type;
TI_UINT8 tsid;
TI_UINT16 msduLifeTime;
} dot11_MSDU_LIFE_TIME_IE_t;
typedef struct
{
dot11_eleHdr_t hdr;
TI_UINT8 OUI[3];
TI_UINT8 oui_type;
TI_UINT8 tsid;
TI_UINT8 state;
TI_UINT16 measureInterval;
} dot11_TS_METRICS_IE_t;
typedef struct
{
dot11_TSRS_IE_t *trafficStreamParameter;
dot11_MSDU_LIFE_TIME_IE_t *edcaLifetimeParameter;
dot11_TS_METRICS_IE_t *tsMetrixParameter;
} XCCv4IEs_t;
/* Measurement Report message frame structure */
#define DOT11_MEASUREMENT_REPORT_ELE_ID (39)
#define DOT11_MAX_MEASUREMENT_REPORT_LEN (4)
#define DOT11_MIN_MEASUREMENT_REPORT_IE_LEN (3)
#define DOT11_MEASUREMENT_REPORT_ELE_IE_LEN (DOT11_MIN_MEASUREMENT_REPORT_IE_LEN + DOT11_MAX_MEASUREMENT_REPORT_LEN*MAX_NUM_REQ)
typedef struct
{
dot11_ACTION_FIELD_t actionField;
TI_UINT8 dialogToken;
dot11_eleHdr_t hdr;
TI_UINT8 measurementToken;
TI_UINT8 measurementMode;
TI_UINT8 measurementType;
TI_UINT8 measurementReports[DOT11_MAX_MEASUREMENT_REPORT_LEN*MAX_NUM_REQ];
} MeasurementReportFrame_t;
typedef enum
{
STATUS_SUCCESSFUL = 0,
STATUS_UNSPECIFIED,
STATUS_AUTH_REJECT,
STATUS_ASSOC_REJECT,
STATUS_SECURITY_FAILURE,
STATUS_AP_DEAUTHENTICATE,
STATUS_AP_DISASSOCIATE,
STATUS_ROAMING_TRIGGER,
STATUS_DISCONNECT_DURING_CONNECT,
STATUS_SG_RESELECT,
STATUS_MIC_FAILURE = 14,
MGMT_STATUS_MAX_NUM = 15
} mgmtStatus_e;
/* Used as a status code in case of STATUS_AUTH_REJECT or STATUS_ASSOC_REJECT that was not received at all */
#define STATUS_PACKET_REJ_TIMEOUT 0xFFFF
/* As defined in 802.11 spec section 7.3.1 - status codes for deAuth packet */
#define STATUS_CODE_802_1X_AUTHENTICATION_FAILED 23
/* map field included in measurement report IE (only in basic report) */
typedef enum
{
DOT11_BSS_ONLY = (0x01),
DOT11_OFDM_ONLY = (0x02),
DOT11_RADAR_AND_UNIDENTIFIED = (0x0C)
} dot11_Map_Sub_Field_e;
typedef struct
{
legacy_dot11_header_t dot11Header;
Wlan_LlcHeader_T snapHeader;
} legacy_dot11_DataMsduHeader_t;
#define WLAN_HEADER_TYPE_CONCATENATION 0x01
#define WLAN_CONCAT_HEADER_LEN 2
#endif /* _802_11_INFO_DEFS_H */