/** **************************************************************************************** * * @file mac_frame.h * * @brief Main Frame Formation and Reception definitions. * * Copyright (C) RivieraWaves 2011-2019 * **************************************************************************************** */ #ifndef _MAC_FRAME_H_ #define _MAC_FRAME_H_ /** **************************************************************************************** * @defgroup CO_FRAME CO_FRAME * @ingroup COMMON * @brief Definition of the mac_frame module API. * @{ **************************************************************************************** */ /* * INCLUDE FILES **************************************************************************************** */ // for the CO_BIT macro #include "co_math.h" #include "co_utils.h" #include "lmac_mac.h" #include "rwnx_config.h" /** * @name Various Field Length definitions * @{ **************************************************************************************** */ /// IV Length #define MAC_IV_LEN (4) /// EIV Length #define MAC_EIV_LEN (4) /// Length of the FCS field #define MAC_FCS_LEN 4 /** @} */ /** * @name MAC Header Length definitions * @{ **************************************************************************************** */ /// Long MAC Header length (with QoS control field and HT control field) #define MAC_LONG_QOS_HTC_MAC_HDR_LEN 36 /// Long MAC Header length (with QoS control field) #define MAC_LONG_QOS_MAC_HDR_LEN 32 /// Long MAC Header length (without QoS control field) #define MAC_LONG_MAC_HDR_LEN 30 /// Short MAC Header length (with QoS control field and HT control field) #define MAC_SHORT_QOS_HTC_MAC_HDR_LEN 30 /// Short MAC Header length (with QoS control field) #define MAC_SHORT_QOS_MAC_HDR_LEN 26 /// Short MAC Header length (without QoS control field) #define MAC_SHORT_MAC_HDR_LEN 24 /// QoS Control Field Length #define MAC_HDR_QOS_CTRL_LEN 2 /// Longest possible MAC Header #define MAC_HDR_LEN_MAX MAC_LONG_QOS_HTC_MAC_HDR_LEN /// Long control frame header length #define MAC_LONG_CTRLFRAME_LEN 16 /// Short control frame header length (ACK/CTS) #define MAC_SHORT_CTRLFRAME_LEN 10 /** @} */ /** * @name MAC Header offset definitions * @{ **************************************************************************************** */ /// 802.11 MAC header definition #define MAC_HEAD_FCTRL_OFT 0 #define MAC_HEAD_DURATION_OFT 2 #define MAC_HEAD_DURATION_CFP 0x8000 #define MAC_HEAD_ADDR1_OFT 4 #define MAC_HEAD_ADDR2_OFT 10 #define MAC_HEAD_ADDR3_OFT 16 #define MAC_HEAD_CTRL_OFT 22 #define MAC_HEAD_ADDR4_OFT 24 #define MAC_HEAD_SHORT_QOS_OFT 24 #define MAC_HEAD_LONG_QOS_OFT 30 #define MAC_ORIGINAL_ETHTYPE_OFT 36 /** @} */ /** * @name Frame Control bit field definitions * @{ **************************************************************************************** */ /* The type information in the header of a frame consists of the Type and Subtype fields * When using the term "frame type" in the code, we refer to the type field and not to * the combined type+subtype information. */ /// 802.11 frame control definition #define MAC_FCTRL_LEN 2 #define MAC_FCTRL_PROTOCOLVERSION_MASK 0x0003 #define MAC_FCTRL_TYPE_MASK 0x000C #define MAC_FCTRL_SUBT_MASK 0x00F0 #define MAC_FCTRL_TODS 0x0100 #define MAC_FCTRL_FROMDS 0x0200 #define MAC_FCTRL_MOREFRAG 0x0400 #define MAC_FCTRL_RETRY 0x0800 #define MAC_FCTRL_PWRMGT 0x1000 #define MAC_FCTRL_MOREDATA 0x2000 #define MAC_FCTRL_PROTECTEDFRAME 0x4000 #define MAC_FCTRL_ORDER 0x8000 #define MAC_FCTRL_TODS_FROMDS (MAC_FCTRL_TODS | MAC_FCTRL_FROMDS) /** @} */ /** * @name Frame Control Type definitions * @{ **************************************************************************************** */ /// 802.11 type definition #define MAC_FCTRL_MGT_T 0x0000 #define MAC_FCTRL_CTRL_T 0x0004 #define MAC_FCTRL_DATA_T 0x0008 /** @} */ /** * @name Frame Control Subtype definitions * @{ **************************************************************************************** */ /// 802.11 subtype definition // Management SubType #define MAC_FCTRL_ASSOCREQ_ST 0x0000 #define MAC_FCTRL_ASSOCRSP_ST 0x0010 #define MAC_FCTRL_REASSOCREQ_ST 0x0020 #define MAC_FCTRL_REASSOCRSP_ST 0x0030 #define MAC_FCTRL_PROBEREQ_ST 0x0040 #define MAC_FCTRL_PROBERSP_ST 0x0050 #define MAC_FCTRL_BEACON_ST 0x0080 #define MAC_FCTRL_ATIM_ST 0x0090 #define MAC_FCTRL_DISASSOC_ST 0x00A0 #define MAC_FCTRL_AUTHENT_ST 0x00B0 #define MAC_FCTRL_DEAUTHENT_ST 0x00C0 #define MAC_FCTRL_ACTION_ST 0x00D0 #define MAC_FCTRL_ACTION_NO_ACK_ST 0x00E0 // Control SubTypes #define MAC_FCTRL_HE_TRIGGER_ST 0x0020 #define MAC_FCTRL_BFM_REPORT_POLL_ST 0x0040 #define MAC_FCTRL_VHT_NDPA_ST 0x0050 #define MAC_FCTRL_CTRL_WRAPPER_ST 0x0070 #define MAC_FCTRL_BAR_ST 0x0080 #define MAC_FCTRL_BA_ST 0x0090 #define MAC_FCTRL_PSPOLL_ST 0x00A0 #define MAC_FCTRL_RTS_ST 0x00B0 #define MAC_FCTRL_CTS_ST 0x00C0 #define MAC_FCTRL_ACK_ST 0x00D0 #define MAC_FCTRL_CFEND_ST 0x00E0 #define MAC_FCTRL_CFEND_CFACK_ST 0x00F0 #define MAC_FCTRL_IS(fc, type) (((fc) & MAC_FCTRL_TYPESUBTYPE_MASK) == MAC_FCTRL_##type) #define MAC_FCTRL_SUBTYPE(fc) (((fc) & MAC_FCTRL_SUBT_MASK) >> 4) // Data SubTypes /* Decoding the subtypes of data type frames can take advantage of the fact that * each subtype field bit position is used to indicate a specific modification of * the basic data frame (subtype 0). Frame control bit 4 is set to 1 in data * subtypes which include +CF-Ack, bit 5 is set to 1 in data subtypes which include * +CF-Poll, bit 6 is set to 1 in data subtypes that contain no Frame Body, * and bit 7 is set to 1 in the QoS data subtypes, which have QoS Control fields in * their MAC headers. * * Usage: check FrameT and FrameSubT individually. If the FrameT is MAC_FCTRL_DATA_T, * check the following bits of the FrameSubT */ #define MAC_CFACK_ST_BIT CO_BIT(4) #define MAC_CFPOLL_ST_BIT CO_BIT(5) #define MAC_NODATA_ST_BIT CO_BIT(6) #define MAC_QOS_ST_BIT CO_BIT(7) #define MAC_FCTRL_DATACFACKPOLL_ST (MAC_CFACK_ST_BIT | MAC_CFPOLL_ST_BIT) /** @} */ /** * @name Frame Control various frame type/subtype definitions * @{ **************************************************************************************** */ /// 802.11 type/subtype definition #define MAC_FCTRL_TYPESUBTYPE_MASK (MAC_FCTRL_TYPE_MASK | MAC_FCTRL_SUBT_MASK) #define MAC_FCTRL_ASSOCREQ (MAC_FCTRL_MGT_T | MAC_FCTRL_ASSOCREQ_ST) #define MAC_FCTRL_ASSOCRSP (MAC_FCTRL_MGT_T | MAC_FCTRL_ASSOCRSP_ST) #define MAC_FCTRL_REASSOCREQ (MAC_FCTRL_MGT_T | MAC_FCTRL_REASSOCREQ_ST) #define MAC_FCTRL_REASSOCRSP (MAC_FCTRL_MGT_T | MAC_FCTRL_REASSOCRSP_ST) #define MAC_FCTRL_PROBEREQ (MAC_FCTRL_MGT_T | MAC_FCTRL_PROBEREQ_ST) #define MAC_FCTRL_PROBERSP (MAC_FCTRL_MGT_T | MAC_FCTRL_PROBERSP_ST) #define MAC_FCTRL_BEACON (MAC_FCTRL_MGT_T | MAC_FCTRL_BEACON_ST) #define MAC_FCTRL_ATIM (MAC_FCTRL_MGT_T | MAC_FCTRL_ATIM_ST) #define MAC_FCTRL_DISASSOC (MAC_FCTRL_MGT_T | MAC_FCTRL_DISASSOC_ST) #define MAC_FCTRL_AUTHENT (MAC_FCTRL_MGT_T | MAC_FCTRL_AUTHENT_ST) #define MAC_FCTRL_DEAUTHENT (MAC_FCTRL_MGT_T | MAC_FCTRL_DEAUTHENT_ST) #define MAC_FCTRL_ACTION (MAC_FCTRL_MGT_T | MAC_FCTRL_ACTION_ST) #define MAC_FCTRL_ACTION_NO_ACK (MAC_FCTRL_MGT_T | MAC_FCTRL_ACTION_NO_ACK_ST) #define MAC_FCTRL_BFM_REPORT_POLL (MAC_FCTRL_CTRL_T | MAC_FCTRL_BFM_REPORT_POLL_ST) #define MAC_FCTRL_HE_TRIGGER (MAC_FCTRL_CTRL_T | MAC_FCTRL_HE_TRIGGER_ST) #define MAC_FCTRL_VHT_NDPA (MAC_FCTRL_CTRL_T | MAC_FCTRL_VHT_NDPA_ST) #define MAC_FCTRL_BA (MAC_FCTRL_CTRL_T | MAC_FCTRL_BA_ST) #define MAC_FCTRL_BAR (MAC_FCTRL_CTRL_T | MAC_FCTRL_BAR_ST) #define MAC_FCTRL_PSPOLL (MAC_FCTRL_CTRL_T | MAC_FCTRL_PSPOLL_ST) #define MAC_FCTRL_RTS (MAC_FCTRL_CTRL_T | MAC_FCTRL_RTS_ST) #define MAC_FCTRL_CTS (MAC_FCTRL_CTRL_T | MAC_FCTRL_CTS_ST) #define MAC_FCTRL_ACK (MAC_FCTRL_CTRL_T | MAC_FCTRL_ACK_ST) #define MAC_FCTRL_CFEND (MAC_FCTRL_CTRL_T | MAC_FCTRL_CFEND_ST) #define MAC_FCTRL_CFEND_CFACK (MAC_FCTRL_CFEND | MAC_CFACK_ST_BIT) #define MAC_FCTRL_DATA_CFACK (MAC_FCTRL_DATA_T | MAC_CFACK_ST_BIT) #define MAC_FCTRL_DATA_CFPOLL (MAC_FCTRL_DATA_T | MAC_CFPOLL_ST_BIT) #define MAC_FCTRL_DATA_CFACKPOLL (MAC_FCTRL_DATA_T | MAC_FCTRL_DATACFACKPOLL_ST) #define MAC_FCTRL_NULL_FUNCTION (MAC_FCTRL_DATA_T | MAC_NODATA_ST_BIT) #define MAC_FCTRL_NULL_CFACK (MAC_FCTRL_NULL_FUNCTION | MAC_CFACK_ST_BIT) #define MAC_FCTRL_NULL_CFPOLL (MAC_FCTRL_NULL_FUNCTION | MAC_CFPOLL_ST_BIT) #define MAC_FCTRL_NULL_CFACKPOLL (MAC_FCTRL_NULL_FUNCTION | MAC_FCTRL_DATACFACKPOLL_ST) #define MAC_FCTRL_QOS_DATA (MAC_FCTRL_DATA_T | MAC_QOS_ST_BIT) #define MAC_FCTRL_QOS_DATA_CFACK (MAC_FCTRL_QOS_DATA | MAC_CFACK_ST_BIT) #define MAC_FCTRL_QOS_DATA_CFPOLL (MAC_FCTRL_QOS_DATA | MAC_CFPOLL_ST_BIT) #define MAC_FCTRL_QOS_DATA_CFACKPOLL (MAC_FCTRL_QOS_DATA | MAC_FCTRL_DATACFACKPOLL_ST) #define MAC_FCTRL_QOS_NULL (MAC_FCTRL_QOS_DATA | MAC_NODATA_ST_BIT) #define MAC_FCTRL_QOS_NULL_CFACK (MAC_FCTRL_QOS_DATA | MAC_FCTRL_NULL_CFACK) #define MAC_FCTRL_QOS_NULL_CFPOLL (MAC_FCTRL_QOS_DATA | MAC_FCTRL_NULL_CFPOLL) #define MAC_FCTRL_QOS_NULL_CFACKPOLL (MAC_FCTRL_QOS_DATA | MAC_FCTRL_NULL_CFACKPOLL) #define MAC_FCTRL_IS(fc, type) (((fc) & MAC_FCTRL_TYPESUBTYPE_MASK) == MAC_FCTRL_##type) /** @} */ /* * FIELD DESCRIPTION **************************************************************************************** */ /** * @name Duration/AID field definitions * @{ **************************************************************************************** */ /// DURATION FIELD Length #define MAC_DURATION_LEN 2 /// ASSOCIATION ID Field Mask #define MAC_AID_MSK 0x3FFF /** @} */ #define ADDR1_MUTLICAST_BIT CO_BIT(0) /** * @name Sequence Control definitions * @{ **************************************************************************************** */ /// 802.11 Sequence Control definition #define MAC_SEQCTRL_LEN 2 #define MAC_SEQCTRL_NUM_OFT 4 #define MAC_SEQCTRL_NUM_MSK 0xFFF0 #define MAC_SEQCTRL_NUM_MAX (MAC_SEQCTRL_NUM_MSK >> MAC_SEQCTRL_NUM_OFT) #define MAC_SEQCTRL_FRAG_OFT 0 #define MAC_SEQCTRL_FRAG_MSK 0x000F /** @} */ /** * @name Security header definitions * @{ **************************************************************************************** */ /// 802.11 Security header definition #define MAC_HDR_TSC_LEN 6 #define MAC_TKIP_TSC1_OFT 0 #define MAC_TKIP_TSC0_OFT 2 #define MAC_TKIP_KEYID_OFT 3 #define MAC_CCMP_PN0_OFT 0 #define MAC_CCMP_PN1_OFT 1 #define MAC_CCMP_RSV_OFT 2 #define MAC_CCMP_PN2BIT_OFT 8 #define MAC_IV_EXTIV 0x20000000 /** @} */ /** * @name QoS Control definitions * @{ **************************************************************************************** */ /// 802.11 QoS control definition #define MAC_QOSCTRL_LEN 2 #define MAC_QOSCTRL_UP_OFT 0 #define MAC_QOSCTRL_UP_MSK 0x0007 #define MAC_QOSCTRL_EOSP_OFT 4 #define MAC_QOSCTRL_EOSP 0x10 #define MAC_QOSCTRL_QUEUE_SIZE_PRESENT 0x10 #define MAC_QOSCTRL_QUEUE_SIZE_OFT 8 #define MAC_QOSCTRL_QUEUE_SIZE_UNKNOWN (0xFF << MAC_QOSCTRL_QUEUE_SIZE_OFT) #define MAC_QOSCTRL_HE_QUEUE_SIZE (MAC_QOSCTRL_QUEUE_SIZE_PRESENT | \ MAC_QOSCTRL_QUEUE_SIZE_UNKNOWN) #define MAC_QOSCTRL_ACK_OFT 5 #define MAC_QOSCTRL_ACK_NORMAL 0x0000 #define MAC_QOSCTRL_ACK_NOACK 0x0020 #define MAC_QOSCTRL_ACK_NOEXPL 0x0040 #define MAC_QOSCTRL_ACK_BLOCK 0x0060 #define MAC_QOSCTRL_AMSDU_OFT 7 #define MAC_QOSCTRL_AMSDU_PRESENT CO_BIT(7) #define MAC_QOSCTRL_MESH_CTRL_PRESENT CO_BIT(8) #define MAC_QOSCTRL_MESH_POWER_SAVE_LVL CO_BIT(9) #define MAC_QOSCTRL_MESH_RSPI CO_BIT(10) /** @} */ /** * @name HT Control definitions * @{ **************************************************************************************** */ /// HT CONTROL FIELD #define MAC_HTCTRL_LEN 4 /** @} */ /** * @name Capability Information definitions * @{ **************************************************************************************** */ /// 802.11 Capability definition // CAPABILITY INFORMATION FIELD #define MAC_CAPA_ESS CO_BIT(0) #define MAC_CAPA_IBSS CO_BIT(1) #define MAC_CAPA_CFPOLL CO_BIT(2) #define MAC_CAPA_CFREQ CO_BIT(3) #define MAC_CAPA_PRIVA CO_BIT(4) #define MAC_CAPA_SHORT_PREAMBLE CO_BIT(5) #define MAC_CAPA_PBCB CO_BIT(6) #define MAC_CAPA_AGILITY CO_BIT(7) #define MAC_CAPA_SPECTRUM CO_BIT(8) #define MAC_CAPA_QOS CO_BIT(9) #define MAC_CAPA_SHORT_SLOT CO_BIT(10) //#define MAC_CAPA_ROBUST_SECURITY CO_BIT(11) #define MAC_CAPA_APSD CO_BIT(11) #define MAC_CAPA_DSSS_OFDM CO_BIT(13) #define MAC_CAPA_DELAYED_BA CO_BIT(14) #define MAC_CAPA_IMMEDIATE_BA CO_BIT(15) #define MAC_CAPA_BA_POLICY (MAC_CAPA_DELAYED_BA | MAC_CAPA_IMMEDIATE_BA) /** @} */ /** * @name HT Capability Information Element definitions * @{ **************************************************************************************** */ /// 802.11 HT capability definition #define MAC_HTCAPA_LDPC CO_BIT(0) #define MAC_HTCAPA_40_MHZ CO_BIT(1) #define MAC_HTCAPA_SMPS_OFT 2 #define MAC_HTCAPA_SMPS_MSK (0x03 << MAC_HTCAPA_SMPS_OFT) #define MAC_HTCAPA_SMPS_STATIC (0x00 << MAC_HTCAPA_SMPS_OFT) #define MAC_HTCAPA_SMPS_DYNAMIC (0x01 << MAC_HTCAPA_SMPS_OFT) #define MAC_HTCAPA_SMPS_DISABLE (0x03 << MAC_HTCAPA_SMPS_OFT) #define MAC_HTCAPA_GREEN_FIELD CO_BIT(4) #define MAC_HTCAPA_SHORTGI_20 CO_BIT(5) #define MAC_HTCAPA_SHORTGI_40 CO_BIT(6) #define MAC_HTCAPA_TX_STBC CO_BIT(7) #define MAC_HTCAPA_RX_STBC_OFT 8 #define MAC_HTCAPA_RX_STBC_MSK (0x03 << MAC_HTCAPA_RX_STBC_OFT) #define MAC_HTCAPA_AMSDU CO_BIT(11) #define MAC_HTCAPA_DSSS_CCK_40 CO_BIT(12) #define MAC_HTCAPA_40_INTOLERANT CO_BIT(14) #define MAC_HTCAPA_LSIG CO_BIT(15) #define MAC_AMPDU_LEN_EXP_OFT 0 #define MAC_AMPDU_LEN_EXP_MSK (0x03 << MAC_AMPDU_LEN_EXP_OFT) #define MAC_AMPDU_MIN_SPACING_OFT 2 #define MAC_AMPDU_MIN_SPACING_MSK (0x07 << MAC_AMPDU_MIN_SPACING_OFT) #define MAC_HT_MAX_AMPDU_FACTOR 13 #define MAC_HTXCAPA_MFB_UNSOLICIT CO_BIT(9) /** @} */ /** * @name VHT Capability Information Element definitions * @{ **************************************************************************************** */ /// 802.11 VHT capability definition #define MAC_VHTCAPA_MAX_MPDU_LENGTH_OFT 0 #define MAC_VHTCAPA_MAX_MPDU_LENGTH_MSK (0x03 << MAC_VHTCAPA_MAX_MPDU_LENGTH_OFT) #define MAC_VHTCAPA_MAX_MPDU_LENGTH_3895 (0x00 << MAC_VHTCAPA_MAX_MPDU_LENGTH_OFT) #define MAC_VHTCAPA_MAX_MPDU_LENGTH_7991 (0x01 << MAC_VHTCAPA_MAX_MPDU_LENGTH_OFT) #define MAC_VHTCAPA_MAX_MPDU_LENGTH_11454 (0x02 << MAC_VHTCAPA_MAX_MPDU_LENGTH_OFT) #define MAC_VHTCAPA_SUPP_CHAN_WIDTH_OFT 2 #define MAC_VHTCAPA_SUPP_CHAN_WIDTH_MSK (0x03 << MAC_VHTCAPA_SUPP_CHAN_WIDTH_OFT) #define MAC_VHTCAPA_SUPP_CHAN_WIDTH_80 (0x00 << MAC_VHTCAPA_SUPP_CHAN_WIDTH_OFT) #define MAC_VHTCAPA_SUPP_CHAN_WIDTH_160 (0x01 << MAC_VHTCAPA_SUPP_CHAN_WIDTH_OFT) #define MAC_VHTCAPA_SUPP_CHAN_WIDTH_160_80P80 (0x02 << MAC_VHTCAPA_SUPP_CHAN_WIDTH_OFT) #define MAC_VHTCAPA_RXLDPC CO_BIT(4) #define MAC_VHTCAPA_SHORT_GI_80 CO_BIT(5) #define MAC_VHTCAPA_SHORT_GI_160 CO_BIT(6) #define MAC_VHTCAPA_TXSTBC CO_BIT(7) #define MAC_VHTCAPA_RXSTBC_OFT 8 #define MAC_VHTCAPA_RXSTBC_MSK (0x07 << MAC_VHTCAPA_RXSTBC_OFT) #define MAC_VHTCAPA_RXSTBC_1 (0x01 << MAC_VHTCAPA_RXSTBC_OFT) #define MAC_VHTCAPA_RXSTBC_2 (0x02 << MAC_VHTCAPA_RXSTBC_OFT) #define MAC_VHTCAPA_RXSTBC_3 (0x03 << MAC_VHTCAPA_RXSTBC_OFT) #define MAC_VHTCAPA_RXSTBC_4 (0x04 << MAC_VHTCAPA_RXSTBC_OFT) #define MAC_VHTCAPA_SU_BEAMFORMER_CAPABLE CO_BIT(11) #define MAC_VHTCAPA_SU_BEAMFORMEE_CAPABLE CO_BIT(12) #define MAC_VHTCAPA_BEAMFORMEE_STS_OFT 13 #define MAC_VHTCAPA_BEAMFORMEE_STS_MSK (0x07 << MAC_VHTCAPA_BEAMFORMEE_STS_OFT) #define MAC_VHTCAPA_SOUNDING_DIMENSIONS_OFT 16 #define MAC_VHTCAPA_SOUNDING_DIMENSIONS_MSK (0x07 << MAC_VHTCAPA_SOUNDING_DIMENSIONS_OFT) #define MAC_VHTCAPA_MU_BEAMFORMER_CAPABLE CO_BIT(19) #define MAC_VHTCAPA_MU_BEAMFORMEE_CAPABLE CO_BIT(20) #define MAC_VHTCAPA_VHT_TXOP_PS CO_BIT(21) #define MAC_VHTCAPA_HTC_VHT CO_BIT(22) #define MAC_VHTCAPA_MAX_A_MPDU_LENGTH_EXP_OFT 23 #define MAC_VHTCAPA_MAX_A_MPDU_LENGTH_EXP_MSK (0x07 << MAC_VHTCAPA_MAX_A_MPDU_LENGTH_EXP_OFT) #define MAC_VHTCAPA_VHT_LA_VHT_UNSOL_MFB 0x08000000 #define MAC_VHTCAPA_VHT_LA_VHT_MRQ_MFB 0x0c000000 #define MAC_VHTCAPA_RX_ANTENNA_PATTERN CO_BIT(28) #define MAC_VHTCAPA_TX_ANTENNA_PATTERN CO_BIT(29) #define MAC_VHT_MCS_MAP_MSK 0x03 #define MAC_VHT_MCS_MAP_0_7 0x00 #define MAC_VHT_MCS_MAP_0_8 0x01 #define MAC_VHT_MCS_MAP_0_9 0x02 #define MAC_VHT_MCS_MAP_NONE 0x03 /** @} */ /** * @name HE MAC Capability Information Element definitions * @{ **************************************************************************************** */ /// 802.11 HE MAC capability definition #define HE_MAC_CAPA_HTC_HE_POS 0 #define HE_MAC_CAPA_TWT_REQ_POS 1 #define HE_MAC_CAPA_TWT_RES_POS 2 #define HE_MAC_CAPA_DYNAMIC_FRAG_OFT 3 #define HE_MAC_CAPA_DYNAMIC_FRAG_WIDTH 2 #define HE_MAC_CAPA_DYNAMIC_FRAG_NOT_SUPP 0x00 #define HE_MAC_CAPA_DYNAMIC_FRAG_LEVEL_1 0x01 #define HE_MAC_CAPA_DYNAMIC_FRAG_LEVEL_2 0x02 #define HE_MAC_CAPA_DYNAMIC_FRAG_LEVEL_3 0x03 #define HE_MAC_CAPA_MAX_NUM_FRAG_MSDU_OFT 5 #define HE_MAC_CAPA_MAX_NUM_FRAG_MSDU_WIDTH 3 #define HE_MAC_CAPA_MAX_NUM_FRAG_MSDU_1 0x00 #define HE_MAC_CAPA_MAX_NUM_FRAG_MSDU_2 0x01 #define HE_MAC_CAPA_MAX_NUM_FRAG_MSDU_4 0x02 #define HE_MAC_CAPA_MAX_NUM_FRAG_MSDU_8 0x03 #define HE_MAC_CAPA_MAX_NUM_FRAG_MSDU_16 0x04 #define HE_MAC_CAPA_MAX_NUM_FRAG_MSDU_32 0x05 #define HE_MAC_CAPA_MAX_NUM_FRAG_MSDU_64 0x06 #define HE_MAC_CAPA_MAX_NUM_FRAG_MSDU_UNLIMITED 0x07 #define HE_MAC_CAPA_MIN_FRAG_SIZE_OFT 8 #define HE_MAC_CAPA_MIN_FRAG_SIZE_WIDTH 2 #define HE_MAC_CAPA_MIN_FRAG_SIZE_UNLIMITED 0x00 #define HE_MAC_CAPA_MIN_FRAG_SIZE_128 0x01 #define HE_MAC_CAPA_MIN_FRAG_SIZE_256 0x02 #define HE_MAC_CAPA_MIN_FRAG_SIZE_512 0x03 #define HE_MAC_CAPA_TF_MAC_PAD_DUR_OFT 10 #define HE_MAC_CAPA_TF_MAC_PAD_DUR_WIDTH 2 #define HE_MAC_CAPA_TF_MAC_PAD_DUR_0US 0x00 #define HE_MAC_CAPA_TF_MAC_PAD_DUR_8US 0x01 #define HE_MAC_CAPA_TF_MAC_PAD_DUR_16US 0x02 #define HE_MAC_CAPA_MULTI_TID_AGG_RX_OFT 12 #define HE_MAC_CAPA_MULTI_TID_AGG_RX_WIDTH 3 #define HE_MAC_CAPA_MULTI_TID_AGG_RX_1 0x00 #define HE_MAC_CAPA_MULTI_TID_AGG_RX_2 0x01 #define HE_MAC_CAPA_MULTI_TID_AGG_RX_3 0x02 #define HE_MAC_CAPA_MULTI_TID_AGG_RX_4 0x03 #define HE_MAC_CAPA_MULTI_TID_AGG_RX_5 0x04 #define HE_MAC_CAPA_MULTI_TID_AGG_RX_6 0x05 #define HE_MAC_CAPA_MULTI_TID_AGG_RX_7 0x06 #define HE_MAC_CAPA_MULTI_TID_AGG_RX_8 0x07 #define HE_MAC_CAPA_LINK_ADAPTATION_OFT 15 #define HE_MAC_CAPA_LINK_ADAPTATION_WIDTH 2 #define HE_MAC_CAPA_LINK_ADAPTATION_NONE 0x00 #define HE_MAC_CAPA_LINK_ADAPTATION_RSVD 0x01 #define HE_MAC_CAPA_LINK_ADAPTATION_UNSOL 0x02 #define HE_MAC_CAPA_LINK_ADAPTATION_BOTH 0x03 #define HE_MAC_CAPA_ALL_ACK_POS 17 #define HE_MAC_CAPA_TSR_POS 18 #define HE_MAC_CAPA_BSR_POS 19 #define HE_MAC_CAPA_BCAST_TWT_POS 20 #define HE_MAC_CAPA_32BIT_BA_BITMAP_POS 21 #define HE_MAC_CAPA_MU_CASCADING_POS 22 #define HE_MAC_CAPA_ACK_EN_POS 23 #define HE_MAC_CAPA_OM_CONTROL_POS 25 #define HE_MAC_CAPA_OFDMA_RA_POS 26 #define HE_MAC_CAPA_MAX_A_AMPDU_LEN_EXP_OFT 27 #define HE_MAC_CAPA_MAX_A_AMPDU_LEN_EXP_WIDTH 2 #define HE_MAC_CAPA_MAX_A_AMPDU_LEN_EXP_USE_VHT 0x00 #define HE_MAC_CAPA_MAX_A_AMPDU_LEN_EXP_VHT_1 0x01 #define HE_MAC_CAPA_MAX_A_AMPDU_LEN_EXP_VHT_2 0x02 #define HE_MAC_CAPA_MAX_A_AMPDU_LEN_EXP_RSVD 0x03 #define HE_MAC_CAPA_A_AMSDU_FRAG_POS 29 #define HE_MAC_CAPA_FLEX_TWT_SCHED_POS 30 #define HE_MAC_CAPA_RX_CTRL_FRAME_TO_MULTIBSS_POS 31 #define HE_MAC_CAPA_BSRP_BQRP_A_MPDU_AGG_POS 32 #define HE_MAC_CAPA_QTP_POS 33 #define HE_MAC_CAPA_BQR_POS 34 #define HE_MAC_CAPA_SRP_RESP_POS 35 #define HE_MAC_CAPA_NDP_FB_REP_POS 36 #define HE_MAC_CAPA_OPS_POS 37 #define HE_MAC_CAPA_AMDSU_IN_AMPDU_POS 38 #define HE_MAC_CAPA_MULTI_TID_AGG_TX_OFT 39 #define HE_MAC_CAPA_MULTI_TID_AGG_TX_WIDTH 3 #define HE_MAC_CAPA_MULTI_TID_AGG_TX_1 0x00 #define HE_MAC_CAPA_MULTI_TID_AGG_TX_2 0x01 #define HE_MAC_CAPA_MULTI_TID_AGG_TX_3 0x02 #define HE_MAC_CAPA_MULTI_TID_AGG_TX_4 0x03 #define HE_MAC_CAPA_MULTI_TID_AGG_TX_5 0x04 #define HE_MAC_CAPA_MULTI_TID_AGG_TX_6 0x05 #define HE_MAC_CAPA_MULTI_TID_AGG_TX_7 0x06 #define HE_MAC_CAPA_MULTI_TID_AGG_TX_8 0x07 #define HE_MAC_CAPA_SUB_CHNL_SEL_TX_POS 42 #define HE_MAC_CAPA_UL_2_996_TONE_RU_POS 43 #define HE_MAC_CAPA_OM_CONTROL_UL_MU_DIS_RX_POS 44 #define HE_MAC_CAPA_DYN_SMPS_POS 45 /** @} */ /** * @name HE PHY Capability Information Element definitions * @{ **************************************************************************************** */ /// 802.11 HE PHY capability definition #define HE_PHY_CAPA_CHAN_WIDTH_SET_OFT 1 #define HE_PHY_CAPA_CHAN_WIDTH_SET_WIDTH 7 #define HE_PHY_CAPA_CHAN_WIDTH_SET_40MHZ_IN_2G 0x01 #define HE_PHY_CAPA_CHAN_WIDTH_SET_40MHZ_80MHZ_IN_5G 0x02 #define HE_PHY_CAPA_CHAN_WIDTH_SET_160MHZ_IN_5G 0x04 #define HE_PHY_CAPA_CHAN_WIDTH_SET_80PLUS80_MHZ_IN_5G 0x08 #define HE_PHY_CAPA_CHAN_WIDTH_SET_RU_MAPPING_IN_2G 0x10 #define HE_PHY_CAPA_CHAN_WIDTH_SET_RU_MAPPING_IN_5G 0x20 #define HE_PHY_CAPA_PREAMBLE_PUNC_RX_OFT 8 #define HE_PHY_CAPA_PREAMBLE_PUNC_RX_WIDTH 4 #define HE_PHY_CAPA_PREAMBLE_PUNC_RX_80M_ONLY_SCND_20M 0x01 #define HE_PHY_CAPA_PREAMBLE_PUNC_RX_80M_ONLY_SCND_40M 0x02 #define HE_PHY_CAPA_PREAMBLE_PUNC_RX_160M_ONLY_SCND_20M 0x04 #define HE_PHY_CAPA_PREAMBLE_PUNC_RX_160M_ONLY_SCND_40M 0x08 #define HE_PHY_CAPA_DEVICE_CLASS_A_POS 12 #define HE_PHY_CAPA_LDPC_CODING_IN_PAYLOAD_POS 13 #define HE_PHY_CAPA_HE_SU_PPDU_1x_LTF_AND_GI_0_8US_POS 14 #define HE_PHY_CAPA_MIDAMBLE_RX_MAX_NSTS_OFT 15 #define HE_PHY_CAPA_MIDAMBLE_RX_MAX_NSTS_WIDTH 2 #define HE_PHY_CAPA_NDP_4x_LTF_AND_3_2US_POS 17 #define HE_PHY_CAPA_STBC_TX_UNDER_80MHZ_POS 18 #define HE_PHY_CAPA_STBC_RX_UNDER_80MHZ_POS 19 #define HE_PHY_CAPA_DOPPLER_TX_POS 20 #define HE_PHY_CAPA_DOPPLER_RX_POS 21 #define HE_PHY_CAPA_FULL_BW_UL_MU_MIMO_POS 22 #define HE_PHY_CAPA_PARTIAL_BW_UL_MU_MIMO_POS 23 #define HE_PHY_CAPA_DCM_MAX_CONST_TX_OFT 24 #define HE_PHY_CAPA_DCM_MAX_CONST_TX_WIDTH 2 #define HE_PHY_CAPA_DCM_MAX_CONST_TX_NO_DCM 0x00 #define HE_PHY_CAPA_DCM_MAX_CONST_TX_BPSK 0x01 #define HE_PHY_CAPA_DCM_MAX_CONST_TX_QPSK 0x02 #define HE_PHY_CAPA_DCM_MAX_CONST_TX_16_QAM 0x03 #define HE_PHY_CAPA_DCM_MAX_NSS_TX_POS 26 #define HE_PHY_CAPA_DCM_MAX_CONST_RX_OFT 27 #define HE_PHY_CAPA_DCM_MAX_CONST_RX_WIDTH 2 #define HE_PHY_CAPA_DCM_MAX_CONST_RX_NO_DCM 0x00 #define HE_PHY_CAPA_DCM_MAX_CONST_RX_BPSK 0x01 #define HE_PHY_CAPA_DCM_MAX_CONST_RX_QPSK 0x02 #define HE_PHY_CAPA_DCM_MAX_CONST_RX_16_QAM 0x03 #define HE_PHY_CAPA_DCM_MAX_NSS_RX_POS 29 #define HE_PHY_CAPA_RX_HE_MU_PPDU_FRM_NON_AP_POS 30 #define HE_PHY_CAPA_SU_BEAMFORMER_POS 31 #define HE_PHY_CAPA_SU_BEAMFORMEE_POS 32 #define HE_PHY_CAPA_MU_BEAMFORMER_POS 33 #define HE_PHY_CAPA_BFMEE_MAX_STS_UNDER_80MHZ_OFT 34 #define HE_PHY_CAPA_BFMEE_MAX_STS_UNDER_80MHZ_WIDTH 3 #define HE_PHY_CAPA_BFMEE_MAX_STS_UNDER_80MHZ_4 0x03 #define HE_PHY_CAPA_BFMEE_MAX_STS_UNDER_80MHZ_5 0x04 #define HE_PHY_CAPA_BFMEE_MAX_STS_UNDER_80MHZ_6 0x05 #define HE_PHY_CAPA_BFMEE_MAX_STS_UNDER_80MHZ_7 0x06 #define HE_PHY_CAPA_BFMEE_MAX_STS_UNDER_80MHZ_8 0x07 #define HE_PHY_CAPA_BFMEE_MAX_STS_ABOVE_80MHZ_OFT 37 #define HE_PHY_CAPA_BFMEE_MAX_STS_ABOVE_80MHZ_WIDTH 3 #define HE_PHY_CAPA_BFMEE_MAX_STS_ABOVE_80MHZ_4 0x03 #define HE_PHY_CAPA_BFMEE_MAX_STS_ABOVE_80MHZ_5 0x04 #define HE_PHY_CAPA_BFMEE_MAX_STS_ABOVE_80MHZ_6 0x05 #define HE_PHY_CAPA_BFMEE_MAX_STS_ABOVE_80MHZ_7 0x06 #define HE_PHY_CAPA_BFMEE_MAX_STS_ABOVE_80MHZ_8 0x07 #define HE_PHY_CAPA_BFMEE_NUM_SND_DIM_UNDER_80MHZ_OFT 40 #define HE_PHY_CAPA_BFMEE_NUM_SND_DIM_UNDER_80MHZ_WIDTH 3 #define HE_PHY_CAPA_BFMEE_NUM_SND_DIM_UNDER_80MHZ_1 0x00 #define HE_PHY_CAPA_BFMEE_NUM_SND_DIM_UNDER_80MHZ_2 0x01 #define HE_PHY_CAPA_BFMEE_NUM_SND_DIM_UNDER_80MHZ_3 0x02 #define HE_PHY_CAPA_BFMEE_NUM_SND_DIM_UNDER_80MHZ_4 0x03 #define HE_PHY_CAPA_BFMEE_NUM_SND_DIM_UNDER_80MHZ_5 0x04 #define HE_PHY_CAPA_BFMEE_NUM_SND_DIM_UNDER_80MHZ_6 0x05 #define HE_PHY_CAPA_BFMEE_NUM_SND_DIM_UNDER_80MHZ_7 0x06 #define HE_PHY_CAPA_BFMEE_NUM_SND_DIM_UNDER_80MHZ_8 0x07 #define HE_PHY_CAPA_BFMEE_NUM_SND_DIM_ABOVE_80MHZ_OFT 43 #define HE_PHY_CAPA_BFMEE_NUM_SND_DIM_ABOVE_80MHZ_WIDTH 3 #define HE_PHY_CAPA_BFMEE_NUM_SND_DIM_ABOVE_80MHZ_1 0x00 #define HE_PHY_CAPA_BFMEE_NUM_SND_DIM_ABOVE_80MHZ_2 0x01 #define HE_PHY_CAPA_BFMEE_NUM_SND_DIM_ABOVE_80MHZ_3 0x02 #define HE_PHY_CAPA_BFMEE_NUM_SND_DIM_ABOVE_80MHZ_4 0x03 #define HE_PHY_CAPA_BFMEE_NUM_SND_DIM_ABOVE_80MHZ_5 0x04 #define HE_PHY_CAPA_BFMEE_NUM_SND_DIM_ABOVE_80MHZ_6 0x05 #define HE_PHY_CAPA_BFMEE_NUM_SND_DIM_ABOVE_80MHZ_7 0x06 #define HE_PHY_CAPA_BFMEE_NUM_SND_DIM_ABOVE_80MHZ_8 0x07 #define HE_PHY_CAPA_NG16_SU_FEEDBACK_POS 46 #define HE_PHY_CAPA_NG16_MU_FEEDBACK_POS 47 #define HE_PHY_CAPA_CODEBOOK_SIZE_42_SU_POS 48 #define HE_PHY_CAPA_CODEBOOK_SIZE_75_MU_POS 49 #define HE_PHY_CAPA_TRIG_SU_BEAMFORMER_FB_POS 50 #define HE_PHY_CAPA_TRIG_MU_BEAMFORMER_FB_POS 51 #define HE_PHY_CAPA_TRIG_CQI_FB_POS 52 #define HE_PHY_CAPA_PARTIAL_BW_EXT_RANGE_POS 53 #define HE_PHY_CAPA_PARTIAL_BW_DL_MUMIMO_POS 54 #define HE_PHY_CAPA_PPE_THRESHOLD_PRESENT_POS 55 #define HE_PHY_CAPA_SRP_BASED_SR_POS 56 #define HE_PHY_CAPA_POWER_BOOST_FACTOR_AR_POS 57 #define HE_PHY_CAPA_HE_SU_MU_PPDU_4x_LTF_AND_08_US_GI_POS 58 #define HE_PHY_CAPA_MAX_NC_OFT 59 #define HE_PHY_CAPA_MAX_NC_WIDTH 3 #define HE_PHY_CAPA_MAX_NC_1 0x01 #define HE_PHY_CAPA_MAX_NC_2 0x02 #define HE_PHY_CAPA_MAX_NC_3 0x03 #define HE_PHY_CAPA_MAX_NC_4 0x04 #define HE_PHY_CAPA_MAX_NC_5 0x05 #define HE_PHY_CAPA_MAX_NC_6 0x06 #define HE_PHY_CAPA_MAX_NC_7 0x07 #define HE_PHY_CAPA_STBC_TX_ABOVE_80MHZ_POS 62 #define HE_PHY_CAPA_STBC_RX_ABOVE_80MHZ_POS 63 #define HE_PHY_CAPA_HE_ER_SU_PPDU_4x_LTF_AND_08_US_GI_POS 64 #define HE_PHY_CAPA_20MHZ_IN_40MHZ_HE_PPDU_IN_2G_POS 65 #define HE_PHY_CAPA_20MHZ_IN_160MHZ_HE_PPDU_POS 66 #define HE_PHY_CAPA_80MHZ_IN_160MHZ_HE_PPDU_POS 67 #define HE_PHY_CAPA_HE_ER_SU_1x_LTF_AND_08_US_GI_POS 68 #define HE_PHY_CAPA_MIDAMBLE_RX_2x_AND_1x_LTF_POS 69 #define HE_PHY_CAPA_DCM_MAX_BW_OFT 70 #define HE_PHY_CAPA_DCM_MAX_BW_WIDTH 3 #define HE_PHY_CAPA_DCM_MAX_BW_20MHZ 0x00 #define HE_PHY_CAPA_DCM_MAX_BW_40MHZ 0x01 #define HE_PHY_CAPA_DCM_MAX_BW_80MHZ 0x02 #define HE_PHY_CAPA_DCM_MAX_BW_160MHZ_80P80MHZ 0x03 #define HE_PHY_CAPA_16PLUS_HE_SIGB_OFDM_SYM_POS 72 #define HE_PHY_CAPA_NON_TRIG_CQI_FEEDBACK_POS 73 #define HE_PHY_CAPA_TX_1024QAM_LESS_242_RU_POS 74 #define HE_PHY_CAPA_RX_1024QAM_LESS_242_RU_POS 75 #define HE_PHY_CAPA_RX_FULL_BW_SU_COMP_SIGB_POS 76 #define HE_PHY_CAPA_RX_FULL_BW_SU_NON_COMP_SIGB_POS 77 #define HE_PHY_CAPA_NOMINAL_PACKET_PADDING_OFT 78 #define HE_PHY_CAPA_NOMINAL_PACKET_PADDING_WIDTH 2 /** @} */ /** * @name HE MCS MAP definitions * @{ **************************************************************************************** */ /// 802.11 HE MCS map definition #define MAC_HE_MCS_MAP_MSK 0x03 #define MAC_HE_MCS_MAP_0_7 0x00 #define MAC_HE_MCS_MAP_0_9 0x01 #define MAC_HE_MCS_MAP_0_11 0x02 #define MAC_HE_MCS_MAP_NONE 0x03 /** @} */ /** * @name Information Element offsets, lengths and other definitions * @{ **************************************************************************************** */ /// 802.11 information element definition // Offset for the length frame in any element ID #define MAC_LEN_OFT 1 // SSID FIELD #define MAC_SSID_ID_OFT 0 #define MAC_SSID_LEN_OFT 1 #define MAC_SSID_SSID_OFT 2 #define MAC_SSID_MAX_LEN (MAC_SSID_LEN + 2) // SUPPORTED RATES FIELD #define MAC_RATES_ID_OFT 0 #define MAC_RATES_LEN_OFT 1 #define MAC_RATES_RATES_OFT 2 #define MAC_RATES_ELMT_MAX_LEN 8 #define MAC_RATES_MAX_LEN 10 #define MAC_RATES_MIN_LEN 3 // FH PARAM SET FIELD #define MAC_FH_ID_OFT 0 #define MAC_FH_LEN_OFT 1 #define MAC_FH_DWELL_OFT 2 #define MAC_FH_HOP_SET_OFT 4 #define MAC_FH_HOP_PAT_OFT 5 #define MAC_FH_HOP_IDX_OFT 6 #define MAC_FH_PARAM_LEN 7 // DS PARAM SET #define MAC_DS_ID_OFT 0 #define MAC_DS_LEN_OFT 1 #define MAC_DS_CHANNEL_OFT 2 #define MAC_DS_PARAM_LEN 3 // CF PARAM SET #define MAC_CF_ID_OFT 0 #define MAC_CF_LEN_OFT 1 #define MAC_CF_COUNT_OFT 2 #define MAC_CF_PERIOD_OFT 3 #define MAC_CF_MAX_DUR_OFT 4 #define MAC_CF_REM_DUR_OFT 6 #define MAC_CF_PARAM_LEN 8 // TIM #define MAC_TIM_ID_OFT 0 #define MAC_TIM_LEN_OFT 1 #define MAC_TIM_CNT_OFT 2 #define MAC_TIM_PERIOD_OFT 3 #define MAC_TIM_BMPC_OFT 4 #define MAC_TIM_BMP_OFT 5 #define MAC_TIM_MIN_LEN 6 #define MAC_TIM_MAX_LEN (5 + MAC_TIM_SIZE) #define MAC_TIM_BCMC_PRESENT CO_BIT(0) // IBSS PARAM SET #define MAC_IBSS_ID_OFT 0 #define MAC_IBSS_LEN_OFT 1 #define MAC_IBSSATIM_OFT 2 #define MAC_IBSS_PARAM_LEN 4 // Country #define MAC_COUNTRY_ID_OFT 0 #define MAC_COUNTRY_LEN_OFT 1 #define MAC_COUNTRY_MIN_LEN 8 #define MAC_COUNTRY_STRING_OFT 2 #define MAC_COUNTRY_STRING_LEN 3 #define MAC_COUNTRY_FIRST_CHAN_OFT 0 #define MAC_COUNTRY_NB_CHAN_OFT 1 #define MAC_COUNTRY_PWR_LEVEL_OFT 2 #define MAC_COUNTRY_TRIPLET_LEN 3 // CHALLENGE PARAM SET #define MAC_CHALLENGE_ID_OFT 0 #define MAC_CHALLENGE_LEN_OFT 1 #define MAC_CHALLENGE_TEXT_OFT 2 // ERP #define MAC_ERP_ID_OFT 0 #define MAC_ERP_LEN_OFT 1 #define MAC_ERP_PARAM_OFT 2 #define MAC_ERP_LEN 3 // ERP BIT FIELD #define MAC_ERP_NON_ERP_PRESENT CO_BIT(0) #define MAC_ERP_USE_PROTECTION CO_BIT(1) #define MAC_ERP_BARKER_PREAMBLE_MODE CO_BIT(2) #define MAC_ERP_IE_PRESENT CO_BIT(7) // not standard, used internally // RSN INFORMATION FIELD (WPA Extension) #define MAC_RSNIE_ID_OFT 0 #define MAC_RSNIE_LEN_OFT 1 #define MAC_RSNIE_INFO_OFT 2 #define MAC_RSNIE_VERSION_OFT 2 #define MAC_RSNIE_GROUP_CIPHER_OFT 4 #define MAC_RSNIE_PAIRWISE_CIPHER_SUITE_CNT_OFT 8 #define MAC_RSNIE_PAIRWISE_CIPHER_SUITE_LIST_OFT 10 #define MAC_RSNIE_PAIRWISE_CIPHER_SIZE 4 #define MAC_RSNIE_KEY_MANAGEMENT_SUITE_CNT_OFT 14 #define MAC_RSNIE_KEY_MANAGEMENT_SUITE_LIST_OFT 16 #define MAC_RSNIE_KEY_MANAGEMENT_SIZE 4 #define MAC_RSNIE_RSN_CAPABILITIES_OFT 20 #define MAC_RSNIE_RSN_PMKID_COUNT_OFT 22 #define MAC_RSNIE_RSN_PMKID_COUNT_LIST_OFT 24 #define MAC_RSNIE_RSN_PMKID_SIZE 16 #define MAC_RSNIE_MIN_LEN 20 // WPA INFORMATION FIELD (pre RSN) #define MAC_WPA_ID_OFT 0 #define MAC_WPA_LEN_OFT 1 #define MAC_WPA_INFO_OFT 2 #define MAC_WPA_VERSION_OFT 6 #define MAC_WPA_GROUP_CIPHER_OFT 8 #define MAC_WPA_PAIRWISE_CIPHER_SUITE_CNT_OFT 12 #define MAC_WPA_PAIRWISE_CIPHER_SUITE_LIST_OFT 14 #define MAC_WPA_CIPHER_SIZE 4 #define MAC_WPA_KEY_MANAGEMENT_SUITE_CNT_OFT 18 #define MAC_WPA_KEY_MANAGEMENT_SUITE_LIST_OFT 20 #define MAC_WPA_KEY_MANAGEMENT_SIZE 4 #define MAC_WPA_CAPABILITIES_OFT 24 #define MAC_WPA_MIN_LEN 24 // WAPI INFORMATION FIELD #define MAC_WAPI_ID_OFT 0 #define MAC_WAPI_LEN_OFT 1 #define MAC_WAPI_INFO_OFT 2 #define MAC_WAPI_VERSION_OFT 2 #define MAC_WAPI_AKM_SUITE_CNT_OFT 4 #define MAC_WAPI_AKM_SUITE_LIST_OFT 6 #define MAC_WAPI_AKM_SUITE_SIZE 4 #define MAC_WAPI_PAIRWISE_CIPHER_SUITE_CNT_OFT 10 #define MAC_WAPI_PAIRWISE_CIPHER_SUITE_LIST_OFT 12 #define MAC_WAPI_CIPHER_SUITE_SIZE 4 #define MAC_WAPI_GROUP_CIPHER_SUITE_OFT 16 #define MAC_WAPI_CAPABILITY_OFT 20 #define MAC_WAPI_BKID_CNT_OFT 22 #define MAC_WAPI_BKID_LIST_OFT 24 #define MAC_WAPI_MIN_LEN 22 // BSS Load IE #define MAC_BSS_LOAD_ID_OFT 0 #define MAC_BSS_LOAD_LEN_OFT 1 #define MAC_BSS_LOAD_STA_CNT_OFT 2 #define MAC_BSS_LOAD_CH_UTILIZATION_OFT 4 #define MAC_BSS_LOAD_AVAIL_ADM_CAPA 5 #define MAC_BSS_LOAD_LEN 7 // EDCA Parameter Set IE #define MAC_EDCA_PARAM_ID_OFT 0 #define MAC_EDCA_PARAM_LEN_OFT 1 #define MAC_EDCA_PARAM_QOS_INFO_OFT 2 #define MAC_EDCA_PARAM_RESERVED_OFT 3 #define MAC_EDCA_PARAM_BE_PARAM_OFT 4 #define MAC_EDCA_PARAM_BK_PARAM_OFT 8 #define MAC_EDCA_PARAM_VI_PARAM_OFT 12 #define MAC_EDCA_PARAM_VO_PARAM_OFT 16 #define MAC_EDCA_PARAM_LEN 20 // QoS Capability IE #define MAC_QOS_CAPA_ID_OFT 0 #define MAC_QOS_CAPA_LEN_OFT 1 #define MAC_QOS_CAPA_INFO_OFT 2 #define MAC_QOS_CAPA_LEN 3 // HT Capability IE #define MAC_HT_CAPA_ID_OFT 0 #define MAC_HT_CAPA_LEN_OFT 1 #define MAC_HT_CAPA_INFO_OFT 2 #define MAC_HT_CAPA_AMPDU_PARAM_OFT 4 #define MAC_HT_CAPA_SUPPORTED_MCS_SET_OFT 5 #define MAC_HT_CAPA_HIGHEST_RATE_OFT 15 #define MAC_HT_CAPA_EXTENDED_CAPA_OFT 21 #define MAC_HT_CAPA_TX_BEAM_FORMING_CAPA_OFT 23 #define MAC_HT_CAPA_ASEL_CAPA_OFT 27 #define MAC_HT_CAPA_ELMT_LEN 26 #define MAC_HT_CAPA_ELMT_LEN_WD (CO_ALIGN4_HI(MAC_HT_CAPA_ELMT_LEN) / 4) #define MAC_HT_CAPA_LEN 28 // HT Operation IE #define MAC_HT_OPER_ID_OFT 0 #define MAC_HT_OPER_LEN_OFT 1 #define MAC_HT_OPER_PRIM_CH_OFT 2 #define MAC_HT_OPER_INFO_OFT 3 #define MAC_HT_OPER_INFO_SUBSET2_OFT 4 #define MAC_HT_OPER_OP_MODE_MASK 0x0003 #define MAC_HT_OPER_NONGF_MASK 0x0004 #define MAC_HT_OPER_OBSS_MASK 0x0010 #define MAC_HT_OPER_INFO_SUBSET3_OFT 6 #define MAC_HT_OPER_BASIC_MSC_SET_OFT 8 #define MAC_HT_OPER_ELMT_LEN 22 #define MAC_HT_OPER_LEN 24 // HT Protection values enum mac_ht_oper_prot_val { MAC_HT_OPER_PROT_NO_PROT = 0, MAC_HT_OPER_PROT_NONMEMBER, MAC_HT_OPER_PROT_20MHZ, MAC_HT_OPER_PROP_NON_HT_MIXED }; // VHT Capability IE #define MAC_VHT_CAPA_ELMT_LEN 12 #define MAC_VHT_CAPA_ELMT_LEN_WD (CO_ALIGN4_HI(MAC_VHT_CAPA_ELMT_LEN) / 4) #define MAC_VHT_CAPA_LEN 14 #define MAC_VHT_CAPA_ID_OFT 0 #define MAC_VHT_CAPA_LEN_OFT 1 #define MAC_VHT_CAPA_INFO_OFT 2 #define MAC_VHT_RX_MCS_MAP_OFT 6 #define MAC_VHT_RX_HIGHEST_RATE_OFT 8 #define MAC_VHT_TX_MCS_MAP_OFT 10 #define MAC_VHT_TX_HIGHEST_RATE_OFT 12 // VHT Operation IE #define MAC_VHT_OPER_ELMT_LEN 5 #define MAC_VHT_OPER_LEN 7 #define MAC_VHT_OPER_ID_OFT 0 #define MAC_VHT_OPER_LEN_OFT 1 #define MAC_VHT_CHAN_WIDTH_OFT 2 #define MAC_VHT_CENTER_FREQ0_OFT 3 #define MAC_VHT_CENTER_FREQ1_OFT 4 #define MAC_VHT_BASIC_MCS_OFT 5 // 20/40 Coexistence IE #define MAC_20_40_COEXISTENCE_ID_OFT 0 #define MAC_20_40_COEXISTENCE_LEN_OFT 1 #define MAC_20_40_COEXISTENCE_INFO_OFT 2 #define MAC_20_40_COEXISTENCE_ELMT_LEN 1 #define MAC_20_40_COEXISTENCE_LEN 3 #define MAC_20_40_COEXISTENCE_INFO_REQ_MASK 0x01 #define MAC_20_40_COEXISTENCE_40_INTOLERANT_MASK 0x02 #define MAC_20_40_COEXISTENCE_20_BSS_WIDTH_REQ_MASK 0x04 #define MAC_20_40_COEXISTENCE_OBSS_SCAN_REQ_MASK 0x08 #define MAC_20_40_COEXISTENCE_OBSS_SCAN_GRANT_MASK 0x10 // Mgmt MIC IE #define MAC_MGMT_MIC_ID_OFT 0 #define MAC_MGMT_MIC_LEN_OFT 1 #define MAC_MGMT_MIC_KEYID_OFT 2 #define MAC_MGMT_MIC_IPN_OFT 4 #define MAC_MGMT_MIC_IPN_LEN 6 #define MAC_MGMT_MIC_MIC_OFT 10 #define MAC_MGMT_MIC_MIC_LEN 8 #define MAC_MGMT_MIC_LEN 18 // WME IE #define MAC_WMM_PARAM_ELMT_LEN 24 #define MAC_WMM_PARAM_LEN 26 #define MAC_WMM_PARAM_QOS_INFO_OFT 8 #define MAC_WMM_PARAM_SET_CNT_MSK 0x0F #define MAC_WMM_PARAM_RESERVED_OFT 9 #define MAC_WMM_PARAM_BK_PARAM_OFT 14 #define MAC_WMM_PARAM_BE_PARAM_OFT 10 #define MAC_WMM_PARAM_VI_PARAM_OFT 18 #define MAC_WMM_PARAM_VO_PARAM_OFT 22 // QOS INFORMATION FIELD #define MAC_QINFO_OFT 6 // QOS INFORMATION FIELD received from the AP #define MAC_QINFO_SET_COUNT_OFT 8 #define MAC_QINFO_SET_UAPSD_OFT 8 // Bit position for QOS INFORMATION FEILD received from the AP #define MAC_QINFO_SET_COUNT 0x07 // Bits 0,1,2 #define MAC_QINFO_SET_UAPSD 0x80 // Bit 7 #define SUP_MCS_RX_HIGHEST_RATE_OFT 10 // 10,11th Byte from Start of MCS. #define SUP_MCS_RX_HIGHEST_RATE_SIZE 10 // 10 Bits #define SUP_TX_MCS_SET_OFT 12 // 12th Byte from Start of MCS. // HE Capability IE #define MAC_HE_CAPA_ID_OFT 0 #define MAC_HE_CAPA_LEN_OFT 1 #define MAC_HE_CAPA_EXT_ID_OFT 2 #if NX_11AX_DRAFT_2_0 #define MAC_HE_CAPA_IE_MAC_CAPA_LEN (MAC_HE_MAC_CAPA_LEN - 1) #define MAC_HE_CAPA_IE_PHY_CAPA_LEN (MAC_HE_PHY_CAPA_LEN - 2) #else #define MAC_HE_CAPA_IE_MAC_CAPA_LEN MAC_HE_MAC_CAPA_LEN #define MAC_HE_CAPA_IE_PHY_CAPA_LEN MAC_HE_PHY_CAPA_LEN #endif #define MAC_HE_MAC_CAPA_INFO_OFT 3 #define MAC_HE_PHY_CAPA_INFO_OFT (MAC_HE_MAC_CAPA_INFO_OFT + MAC_HE_CAPA_IE_MAC_CAPA_LEN) #define MAC_HE_MCS_INFO_OFT (MAC_HE_PHY_CAPA_INFO_OFT + MAC_HE_CAPA_IE_PHY_CAPA_LEN) #define MAC_HE_MCS_INFO_PER_BW_LEN 4 #define MAC_HE_CAPA_MIN_LEN (MAC_HE_MCS_INFO_OFT + MAC_HE_MCS_INFO_PER_BW_LEN) #define MAC_HE_CAPA_MAX_LEN (MAC_HE_MCS_INFO_OFT + 3 * MAC_HE_MCS_INFO_PER_BW_LEN +\ MAC_HE_PPE_THRES_MAX_LEN) // HE Operation IE #define MAC_HE_OPER_ID_OFT 0 #define MAC_HE_OPER_LEN_OFT 1 #define MAC_HE_OPER_EXT_ID_OFT 2 #define MAC_HE_OPER_PARAM_OFT 3 #define MAC_HE_OPER_PARAM_LEN 4 #if NX_11AX_DRAFT_2_0 #define MAC_HE_OPER_BSS_COLOR_OFT 0 #define MAC_HE_OPER_BSS_COLOR_PARTIAL_BIT CO_BIT(20) #define MAC_HE_OPER_BSS_COLOR_DISABLED_BIT CO_BIT(30) #else #define MAC_HE_OPER_BSS_COLOR_OFT 24 #define MAC_HE_OPER_BSS_COLOR_PARTIAL_BIT CO_BIT(30) #define MAC_HE_OPER_BSS_COLOR_DISABLED_BIT CO_BIT(31) #endif #define MAC_HE_OPER_BSS_COLOR_MASK (0x3F << MAC_HE_OPER_BSS_COLOR_OFT) #define MAC_HE_OPER_TXOP_DUR_RTS_THRES_OFT 4 #define MAC_HE_OPER_TXOP_DUR_RTS_THRES_MSK (0x3FF << MAC_HE_OPER_TXOP_DUR_RTS_THRES_OFT) #define MAC_HE_OPER_TXOP_DUR_RTS_THRES_DISABLED 1023 #define MAC_HE_OPER_BASIC_MCS_OFT 7 #define MAC_HE_OPER_MIN_LEN 9 #define MAC_HE_OPER_MAX_LEN 13 // MU EDCA Operation IE #define MAC_MU_EDCA_ELMT_LEN 13 #define MAC_MU_EDCA_LEN 16 #define MAC_MU_EDCA_ID_OFT 0 #define MAC_MU_EDCA_LEN_OFT 1 #define MAC_MU_EDCA_EXT_ID_OFT 2 #define MAC_MU_EDCA_QOS_INFO_OFT 3 #define MAC_MU_EDCA_PARAM_SET_CNT_MSK 0x0F #define MAC_MU_EDCA_AC_BE_OFT 4 #define MAC_MU_EDCA_AC_BK_OFT 7 #define MAC_MU_EDCA_AC_VI_OFT 10 #define MAC_MU_EDCA_AC_VO_OFT 13 #define MAC_MESHID_ELMT_MAX_LEN 32 #define MAC_MESHID_MAX_LEN 34 #define MAC_MPM_INFO_MIN_LEN 4 #define MAC_MPM_PEERING_PROT_OFT (MAC_INFOELT_INFO_OFT + 0) #define MAC_MPM_LOCAL_LINK_ID_OFT (MAC_INFOELT_INFO_OFT + 2) #define MAC_MPM_OPT_FIELD_OFT (MAC_INFOELT_INFO_OFT + MAC_MPM_INFO_MIN_LEN) #define MAC_MPM_MIN_LEN 6 #define MAC_MPM_MAX_LEN 26 #define MAC_MAW_AWAKE_WIND_OFT MAC_INFOELT_INFO_OFT #define MAC_MAW_LEN 4 #define MAC_MCFG_ELMT_LEN 7 #define MAC_MCFG_PATH_SEL_PROT_OFT (MAC_INFOELT_INFO_OFT + 0) #define MAC_MCFG_PATH_METRIC_PROT_OFT (MAC_INFOELT_INFO_OFT + 1) #define MAC_MCFG_CONG_CTRL_MODE_OFT (MAC_INFOELT_INFO_OFT + 2) #define MAC_MCFG_SYNC_METHOD_OFT (MAC_INFOELT_INFO_OFT + 3) #define MAC_MCFG_AUTH_PROT_OFT (MAC_INFOELT_INFO_OFT + 4) #define MAC_MCFG_MESH_FORM_INFO_OFT (MAC_INFOELT_INFO_OFT + 5) #define MAC_MCFG_MESH_CAP_OFT (MAC_INFOELT_INFO_OFT + 6) #define MAC_MCFG_LEN 9 /** @} */ /** * @name Management Frame Element definitions and offsets * @{ **************************************************************************************** */ /// 802.11 Management frame element and offset definition #define MAC_BEACON_MAX_LEN 333 #define MAC_BEACONINFO_SIZE 78 // size without TIM #define MAC_TIM_SIZE 251 // max TIM size // Attention, in a non-AP STA the IBSS // parameter set is stored in place of // the TIM -> min size 4 #define MAC_BEACON_HDR_LEN 36 /* * Beacon Frame offset (Table 5 p46) */ #define MAC_BEACON_TIMESTAMP_OFT MAC_SHORT_MAC_HDR_LEN // Order 1 #define MAC_BEACON_INTERVAL_OFT (MAC_SHORT_MAC_HDR_LEN + 8) // Order 2 #define MAC_BEACON_CAPA_OFT (MAC_SHORT_MAC_HDR_LEN + 10) // Order 3 #define MAC_BEACON_VARIABLE_PART_OFT (MAC_SHORT_MAC_HDR_LEN + 12) // Order 4 /* * Probe Request Frame offset */ #define MAC_PROBEREQ_SSID_OFT 0 // Order 1 /* * Probe Response Frame offset (Table 12 p49) */ #define MAC_PROBE_TIMESTAMP_OFT 0 // Order 1 #define MAC_PROBE_INTERVAL_OFT 8 // Order 2 #define MAC_PROBE_CAPA_OFT 10 // Order 3 #define MAC_PROBE_SSID_OFT 12 // Order 4 /* * Authentication Frame offset */ #define MAC_AUTH_ALGONBR_OFT 0 // Order 1 #define MAC_AUTH_SEQNBR_OFT 2 // Order 2 #define MAC_AUTH_STATUS_OFT 4 // Order 3 #define MAC_AUTH_CHALLENGE_OFT 6 // Order 4 #define MAC_AUTH_CHALLENGE_LEN 128 //challenge text IE size #define CHALLENGE_TEXT_SIZE 130 /* * Association Req Frame offset */ #define MAC_ASSO_REQ_CAPA_OFT 0 // Order 1 #define MAC_ASSO_REQ_LISTEN_OFT 2 // Order 2 #define MAC_ASSO_REQ_SSID_OFT 4 // Order 3 /* * Association Rsp Frame offset */ #define MAC_ASSO_RSP_CAPA_OFT 0 // Order 1 #define MAC_ASSO_RSP_STATUS_OFT 2 // Order 2 #define MAC_ASSO_RSP_AID_OFT 4 // Order 3 #define MAC_ASSO_RSP_RATES_OFT 6 // Order 4 /* * Re association Req Frame offset */ #define MAC_REASSO_REQ_CAPA_OFT 0 // Order 1 #define MAC_REASSO_REQ_LISTEN_OFT 2 // Order 2 #define MAC_REASSO_REQ_AP_ADDR_OFT 4 // Order 3 #define MAC_REASSO_REQ_SSID_OFT 10 // Order 4 /* * Deauthentication Req Frame offset */ #define MAC_DEAUTH_REASON_OFT 0 /* * De association Req Frame offset */ #define MAC_DISASSOC_REASON_OFT 0 #define MAC_DISASSOC_REASON_LEN 2 /* * Category and action for all action frames */ #define MAC_ACTION_CATEGORY_OFT 0 #define MAC_ACTION_ACTION_OFT 1 #define MAC_ACTION_TOKEN_OFT 2 #define MAC_ACTION_P2P_ACTION_OFT 5 #define MAC_ACTION_P2P_TAGGED_OFT 7 /** @} */ /** * @name Action Frames categories and other definitions * @{ **************************************************************************************** */ /// 802.11 Action frame category #define MAC_SPECTRUM_ACTION_CATEGORY 0 #define MAC_WMMAC_QOS_ACTION_CATEGORY 1 #define MAC_DLS_ACTION_CATEGORY 2 #define MAC_BA_ACTION_CATEGORY 3 #define MAC_PUBLIC_ACTION_CATEGORY 4 #define MAC_RADIO_MEASURE_ACTION_CATEGORY 5 #define MAC_FAST_BSS_ACTION_CATEGORY 6 #define MAC_HT_ACTION_CATEGORY 7 #define MAC_SA_QUERY_ACTION_CATEGORY 8 #define MAC_PROT_PUBLIC_ACTION_CATEGORY 9 #define MAC_WNM_ACTION_CATEGORY 10 #define MAC_UNPROT_WNM_ACTION_CATEGORY 11 #define MAC_TDLS_ACTION_CATEGORY 12 #define MAC_MESH_ACTION_CATEGORY 13 #define MAC_MULTIHOP_ACTION_CATEGORY 14 #define MAC_SELF_PROT_ACTION_CATEGORY 15 #define MAC_VHT_ACTION_CATEGORY 21 #define MAC_VENDOR_PROT_ACTION_CATEGORY 126 #define MAC_VENDOR_ACTION_CATEGORY 127 #define MAC_ACTION_CATEGORY_ERROR 128 #define MAC_P2P_ACTION_NOA_SUBTYPE 0 #define MAC_SELF_PROT_ACTION_CAPA_OFT 2 #define MAC_SELF_PROT_ACTION_CAPA_LEN 2 #define MAC_SELF_PROT_ACTION_AID_OFT 4 #define MAC_SELF_PROT_ACTION_AID_LEN 2 /** @} */ /** * @name Capability Information definitions * See IEEE 802.1H for LLC/SNAP encapsulation/decapsulation * Ethernet-II snap header (RFC1042 for most EtherTypes) * @{ **************************************************************************************** */ /// LLC definition #define FRAME_BODY_LLC_H 0x0003AAAA #define FRAME_BODY_LLC_L 0x0D890000 #define PAYLOAD_TYPE_TDLS 0x02 #define MAC_ENCAPSULATED_LLC_H_OFT 0 #define MAC_ENCAPSULATED_LLC_L_OFT 4 #define MAC_ENCAPSULATED_PAYLOAD_TYPE_OFT 8 #define MAC_ENCAPSULATED_PAYLOAD_OFT 9 /** @} */ /** * @name WMM-AC Frames and Values definitions * @{ **************************************************************************************** */ /* *--------------------------------------------------------------------------------------- *---------------------------------WMM-AC fields offsets--------------------------------- *--------------------------------------------------------------------------------------- */ /// 802.11 WMM-AC frame definition #define MAC_WMMAC_OUI_BYTE 0x00 #define MAC_WMMAC_OUI_TYPE_BYTE 0x50 #define MAC_WMMAC_OUI_SUBTYPE_BYTE 0xF2 /* TSPEC field offsets *--------------------------------------------------------------------------------------*/ #define MAC_WMMAC_TSPEC_HDR_OFT 0 #define MAC_WMMAC_TSPEC_TSINFO_OFT 8 #define MAC_WMMAC_TSPEC_NOM_MSDU_SIZE_OFT 11 #define MAC_WMMAC_TSPEC_MAX_MSDU_SIZE_OFT 13 #define MAC_WMMAC_TSPEC_MINSI_OFT 15 #define MAC_WMMAC_TSPEC_MAXSI_OFT 19 #define MAC_WMMAC_TSPEC_INACTIVITY_INTERVAL_OFT 23 #define MAC_WMMAC_TSPEC_SUSPENSION_INTERVAL_OFT 27 #define MAC_WMMAC_TSPEC_SERVICE_START_TIME_OFT 31 #define MAC_WMMAC_TSPEC_MIN_DATA_RATE_OFT 35 #define MAC_WMMAC_TSPEC_MEAN_DATA_RATE_OFT 39 #define MAC_WMMAC_TSPEC_PEAK_DATA_RATE_OFT 43 #define MAC_WMMAC_TSPEC_BURST_SIZE_OFT 47 #define MAC_WMMAC_TSPEC_DELAY_BOUND_OFT 51 #define MAC_WMMAC_TSPEC_MIN_PHY_RATE_OFT 55 #define MAC_WMMAC_TSPEC_SURPLUS_BW_OFT 59 #define MAC_WMMAC_TSPEC_MEDUIM_TIME_OFT 61 /* TSINFO field offsets *--------------------------------------------------------------------------------------*/ #define MAC_WMMAC_TSINFO_HDR_OFT 0 #define MAC_WMMAC_TSINFO_BODY_OFT 8 /* TSDELAY field offsets *--------------------------------------------------------------------------------------*/ #define MAC_WMMSA_TSDELAY_HDR_OFT 0 #define MAC_WMMSA_TSDELAY_BODY_OFT 8 /* *--------------------------------------------------------------------------------------- *---------------------------------WMM-AC fields subtypes-------------------------------- *--------------------------------------------------------------------------------------- */ #define MAC_WMMAC_OUI_SUBTYPE_TSPEC_LEN 61 #define MAC_OUI_SUBTYPE_WMMAC_TSINFO_LEN 9 // Used by the unit test of the WMM-AC #define MAC_OUI_SUBTYPE_WMMAC_TSDELAY_LEN 10 // Bit position for TSPEC info field #define MAC_TSPEC_TRAFIC_TYPE_OFT 0 #define MAC_TSPEC_TRAFIC_TYPE_MASK (CO_BIT(0)) #define MAC_TSPEC_TSID_OFT 1 #define MAC_TSPEC_TSID_MASK (CO_BIT(1)|CO_BIT(2)|CO_BIT(3)|CO_BIT(4)) #define MAC_TSPEC_DIRECTION_OFT 5 #define MAC_TSPEC_DIRECTION_MASK (CO_BIT(5)|CO_BIT(6)) #define MAC_TSPEC_ACCESS_POLICY_OFT 7 #define MAC_TSPEC_ACCESS_POLICY_MASK (CO_BIT(7)|CO_BIT(8)) #define MAC_TSPEC_AGGREGATION_OFT 9 #define MAC_TSPEC_AGGREGATION_MASK (CO_BIT(9)) #define MAC_TSPEC_APSD_OFT 10 #define MAC_TSPEC_APSD_MASK (CO_BIT(10)) #define MAC_TSPEC_USER_PRIORITY_OFT 11 #define MAC_TSPEC_USER_PRIORITY_MASK (CO_BIT(11)|CO_BIT(12)|CO_BIT(13)) #define MAC_TSPEC_ACK_POLICY_OFT 14 #define MAC_TSPEC_ACK_POLICY_MASK (CO_BIT(14)|CO_BIT(15)) #define MAC_TSPEC_SCHEDULE_OFT 16 #define MAC_TSPEC_SCHEDULE_MASK (CO_BIT(16)) /* *--------------------------------------------------------------------------------------- *---------------------------------WMM-AC Status Codes----------------------------------- *--------------------------------------------------------------------------------------- */ #define MAC_WMMAC_ST_ADDTS_SUCESS 0 #define MAC_WMMAC_ST_DELTS_POOR_CHANNEL_COND 34 #define MAC_WMMAC_ST_ADDTS_REQUEST_DECLINED 37 #define MAC_WMMAC_ST_ADDTS_INVALID_PARAMETERS 38 #define MAC_WMMAC_ST_ADDTS_REJ_W_SUG_CHANGES 39 #define MAC_WMMAC_ST_ADDTS_REJ_W_DELAY_PRD 47 /* *--------------------------------------------------------------------------------------- *---------------------------------WMM-AC Reason Codes----------------------------------- *--------------------------------------------------------------------------------------- */ #define MAC_WMMAC_RS_DELTS_QSTA_LEAVING 36 #define MAC_WMMAC_RS_DELTS_END_TS 37 #define MAC_WMMAC_RS_DELTS_UNKOWN_TS 38 #define MAC_WMMAC_RS_DELTS_TIMEOUT 39 #define MAC_WMMAC_RS_DELTS_UNSPECIFIED 32 /* *--------------------------------------------------------------------------------------- *---------------------------------WMM-AC Action Frames---------------------------------- *--------------------------------------------------------------------------------------- */ /* CATEGORY \ ACTION values *--------------------------------------------------------------------------------------*/ #define MAC_WMMAC_ACTION_ADDTS_REQ 0 #define MAC_WMMAC_ACTION_ADDTS_RSP 1 #define MAC_WMMAC_ACTION_DELTS 2 #define MAC_WMMAC_ACTION_SCHEDULE 3 /* ADDTS_REQ offsets *--------------------------------------------------------------------------------------*/ #define MAC_ADDTS_REQ_TSPEC_OFT 3 #define MAC_ADDTS_REQ_TCLASS_OFT 66 /* ADDTS_RSP offsets *--------------------------------------------------------------------------------------*/ #define MAC_ADDTS_RSP_STATUS_OFT 3 #define MAC_ADDTS_RSP_TSDELAY_OFT 5 #define MAC_ADDTS_RSP_TSPEC_OFT 17 #define MAC_ADDTS_RSP_TCLASS_OFT 80 /* DELTS offsets *--------------------------------------------------------------------------------------*/ #define MAC_DELTS_TSINFO_OFT 2 #define MAC_DELTS_REASON_OFT 13 /** @} */ /** * @name Block-Ack Frames and Values definitions * @{ **************************************************************************************** */ /* *--------------------------------------------------------------------------------------- *---------------------------------Block Ack fields offsets--------------------------------- *--------------------------------------------------------------------------------------- */ /// 802.11 BlockAck action frame definition #define MAC_BARINFO_PERTIDINFO_OFT 0 #define MAC_BARINFO_PERTIDINFO_STEP 1 #define MAC_BARINFO_SEQ_OFT 2 #define MAC_BARINFO_PERTIDINFO_TID_STEP 4 #define MAC_CAPA_BA_OFT 14 // the length of fields #define MAC_BA_PARAMSET_LEN 2 #define MAC_BA_TIMEOUT_LEN 2 #define MAC_BA_BARINFO_LEN 4 #define MAC_BA_DELBA_REASON_LEN 2 // value of the The Fragment Number #define MAC_BARINFO_SEQ_FRAG 0 // offset of The DELPARAMSET #define MAC_DELPARAMSET_START_OFT 0 #define MAC_DELPARAMSET_STEP_OFT 1 // Bit position for Parameter Set field #define MAC_BA_PARAMSET_AMSDU_OFT 0 #define MAC_BA_PARAMSET_AMSDU_MASK CO_BIT(0) #define MAC_BA_PARAMSET_POLICY_OFT 1 #define MAC_BA_PARAMSET_POLICY_MASK CO_BIT(1) #define MAC_BA_PARAMSET_TID_OFT 2 #define MAC_BA_PARAMSET_TID_MASK (CO_BIT(2)|CO_BIT(3)|CO_BIT(4)|CO_BIT(5)) #define MAC_BA_PARAMSET_BUFFER_OFT 6 #define MAC_BA_PARAMSET_BUFFER_MASK 0xFFC0 //Bit position for Per TID Info field #define MAC_BA_BARINFO_PERTIDINFO_TID_OFT 12 #define MAC_BA_BARINFO_PERTIDINFO_TID_MASK (CO_BIT(12)|CO_BIT(13))|(CO_BIT(14)|CO_BIT(15)) //Bit position for Starting Sequence Control filed #define MAC_BA_BARINFO_SEQ_FRAG_OFT 0 #define MAC_BA_BARINFO_SEQ_FRAG_MASK (CO_BIT(0)|CO_BIT(1))|(CO_BIT(2)|CO_BIT(3)) #define MAC_BA_BARINFO_SEQ_STARTSEQ_OFT 4 #define MAC_BA_BARINFO_SEQ_STARTSEQ_MASK 0x7FF0 //Bit position for DELBA Parameter Set field #define MAC_BA_DELPARAMSET_INIT_OFT 3 #define MAC_BA_DELBARINFO_INIT_MASK CO_BIT(3) #define MAC_BA_DELPARAMSET_TID_OFT 4 #define MAC_BA_DELPARAMSET_TID_MASK (CO_BIT(4)|CO_BIT(5)|CO_BIT(6)|CO_BIT(7)) /* *--------------------------------------------------------------------------------------- *---------------------------------Block Ack Status Codes----------------------------------- *--------------------------------------------------------------------------------------- */ #define MAC_BA_ST_SUCCESS 0 #define MAC_BA_ST_REQUEST_REFUSED 37 #define MAC_BA_ST_INVALID_PARAMETERS 38 /* *--------------------------------------------------------------------------------------- *---------------------------------Block Ack Reason Codes----------------------------------- *--------------------------------------------------------------------------------------- */ #define MAC_BA_RS_STA_LEAVING 36 #define MAC_BA_RS_END_BA 37 #define MAC_BA_RS_UNKNOWN_BA 38 #define MAC_BA_RS_TIMEOUT 39 /* *--------------------------------------------------------------------------------------- *---------------------------------Block Ack Action Frames---------------------------------- *--------------------------------------------------------------------------------------- */ /* CATEGORY \ ACTION values *--------------------------------------------------------------------------------------*/ #define MAC_BA_ACTION_ADDBA_REQ 0 #define MAC_BA_ACTION_ADDBA_RSP 1 #define MAC_BA_ACTION_DELBA 2 /* ADDBA_REQ offsets *--------------------------------------------------------------------------------------*/ #define MAC_ADDBA_REQ_PARAMSET_OFT 3 #define MAC_ADDBA_REQ_TIMEOUT_OFT 5 #define MAC_ADDBA_REQ_BARINFO_OFT 7 /* ADDBA_RSP offsets *--------------------------------------------------------------------------------------*/ #define MAC_ADDBA_RSP_STATUS_OFT 3 #define MAC_ADDBA_RSP_PARAMSET_OFT 5 #define MAC_ADDBA_RSP_TIMEOUT_OFT 7 /* DELBA offsets *--------------------------------------------------------------------------------------*/ #define MAC_DELBA_PARAMSET_OFT 2 #define MAC_DELBA_REASON_OFT 4 /** @} */ /** * @name TDLS Action Frames definitions * @{ **************************************************************************************** */ /* CATEGORY \ ACTION values *--------------------------------------------------------------------------------------*/ /// 802.11 TDLS action frame definition #define MAC_TDLS_ACTION_SETUP_REQ 0 #define MAC_TDLS_ACTION_SETUP_RSP 1 #define MAC_TDLS_ACTION_SETUP_CFM 2 #define MAC_TDLS_ACTION_TEARDOWN 3 #define MAC_TDLS_ACTION_PEER_TRAFFIC_IND 4 #define MAC_TDLS_ACTION_CHANSW_REQ 5 #define MAC_TDLS_ACTION_CHANSW_RSP 6 #define MAC_TDLS_ACTION_PEER_TRAFFIC_RSP 9 #define MAC_TDLS_ACTION_DISCOVERY_REQ 10 #define TDLS_CHANSW_REQ_TARGET_CH_OFFSET 2 #define TDLS_CHANSW_REQ_OP_CLASS 3 #define TDLS_CHANSW_REQ_IES_OFFSET 4 #define TDLS_CHANSW_REQ_IE_SEC_CH_OFT_LEN 3 #define TDLS_CHANSW_REQ_IE_LINK_ID_LEN 20 #define TDLS_CHANSW_REQ_IE_CH_SWITCH_TIMING_LEN 6 #define TDLS_CHANSW_REQ_IE_WIDE_BW_CHAN_SWITCH_LEN 5 #define TDLS_CHANSW_RSP_STATUS_OFFSET 2 #define TDLS_CHANSW_RSP_IES_OFFSET 4 #define TDLS_CHANSW_REQUEST_ACCEPTED 0 #define TDLS_CHANSW_REQUEST_DECLINED 37 #define TDLS_PEER_TRAFFIC_IND_IES_OFFSET 3 #define TDLS_PEER_TRAFFIC_IND_IE_LINK_ID_LEN 20 #define TDLS_PEER_TRAFFIC_IND_IE_PTI_CTRL_LEN 5 #define TDLS_PEER_TRAFFIC_IND_IE_TPU_BUF_STATUS_LEN 3 #define TDLS_PEER_TRAFFIC_RSP_IES_OFFSET 3 #define TDLS_PEER_TRAFFIC_RSP_IE_LINK_ID_LEN 20 /** @} */ /** * @name Link Management definitions * @{ **************************************************************************************** */ /// 802.11 Link Management frame definition #define MAC_HEAD_HT_OFT 32 #define MAC_MAI_MASK 0x003C #define MAC_MAI_OFT 2 #define MAC_MAI_IND_ASELI 14 #define MAC_MFB_MASK 0xFE00 #define MAC_MFB_OFT 9 #define NO_FEEDBACK 127 #define MAC_ADDR2_OFT 10 #define MCS_IDX3_MASK 0x0000FF #define MCS_IDX2_MASK 0x00FF00 #define MCS_IDX1_MASK 0xFF0000 #define MCS_IDX2_OFT 8 #define MCS_IDX1_OFT 16 /** @} */ /** * @name Spectrum and Power Management Frame definitions * @{ **************************************************************************************** */ /// 802.11 Spectrum and Power Management frame definition #define MAC_ACTION_FRAME_INFO_OFT 3 #define MAC_ACTION_CH_SWITCH_FRAME_INFO_OFT 2 #define MAC_ACTION_FRAME_PRE_INFO_LEN 3 //Spectrum & Power Management Element Offset // Power Constraint Element #define MAC_INFOELT_POWER_CONSTRAINT_OFT 2 #define MAC_POWER_CONSTRAINT_ELT_LEN 3 // Power Capability Element #define MAC_INFOELT_MIN_TX_POWER_OFT 2 #define MAC_INFOELT_MAX_TX_POWER_OFT 3 #define MAC_POWER_CAPABILITY_ELT_LEN 4 #define MAC_POWER_CAPABILITY_ELT_LEN_FIELD 2 // TPC Report Info Element sub-offsets #define MAC_INFOELT_TX_POWER_OFT 2 #define MAC_INFOELT_LINK_MARGIN_OFT 3 // TPC Report and Request IE lengths #define MAC_TPC_REQUEST_ELT_LEN 2 #define MAC_TPC_REPORT_ELT_LEN 4 // TPC Report and Request IE's length field values #define MAC_INFOELT_LEN_VAL_TPC_REQ 0 #define MAC_INFOELT_LEN_VAL_TPC_REP 2 // TPC Report and Request Action frame lengths #define MAC_ACTION_FRAME_TPC_REQ_LEN 5 #define MAC_ACTION_FRAME_TPC_REP_LEN 7 // Supported Channels Element #define MAC_INFOELT_FIRST_CHANNEL_OFT 2 #define MAC_INFOELT_NUMBER_CHANNEL_OFT 3 // Channel Switch Announcement Element #define MAC_INFOELT_SWITCH_MODE_OFT 2 #define MAC_INFOELT_SWITCH_NEW_CHAN_OFT 3 #define MAC_INFOELT_SWITCH_COUNT_OFT 4 #define MAC_CHANNEL_SWITCH_INFO_LEN 3 #define MAC_CHANNEL_SWITCH_ELT_LEN 5 // Extended Channel Switch Announcement Element #define MAC_INFOELT_EXT_SWITCH_MODE_OFT 2 #define MAC_INFOELT_EXT_SWITCH_NEW_CLASS 3 #define MAC_INFOELT_EXT_SWITCH_NEW_CHAN_OFT 4 #define MAC_INFOELT_EXT_SWITCH_COUNT_OFT 5 #define MAC_EXT_CHANNEL_SWITCH_INFO_LEN 4 #define MAC_EXT_CHANNEL_SWITCH_ELT_LEN 6 // Secondary Channel Offset Element #define MAC_INFOELT_SEC_CH_OFFSET_OFT 2 #define MAC_INFOELT_SEC_CH_OFFSET_INFO_LEN 1 #define MAC_INFOELT_SEC_CH_OFFSET_ELT_LEN 3 #define MAC_INFOELT_SEC_CH_OFFSET_SEC_CH_OFT 2 #define MAC_INFOELT_SEC_CH_OFFSET_NO_SEC_CH 0 #define MAC_INFOELT_SEC_CH_OFFSET_SEC_ABOVE 1 #define MAC_INFOELT_SEC_CH_OFFSET_SEC_BELOW 3 // Wide BAndwidth Channel switch #define MAC_INFOELT_WIDE_BW_CHAN_SWITCH_NEW_CW_OFT 2 #define MAC_INFOELT_WIDE_BW_CHAN_SWITCH_NEW_CENTER1_OFT 3 #define MAC_INFOELT_WIDE_BW_CHAN_SWITCH_NEW_CENTER2_OFT 4 #define MAC_INFOELT_WIDE_BW_CHAN_SWITCH_INFO_LEN 3 #define MAC_INFOELT_WIDE_BW_CHAN_SWITCH_ELT_LEN 5 // Measurement Request/Report Element #define MAC_INFOELT_MEASURE_TOKEN_OFT 2 #define MAC_INFOELT_MEASURE_MODE_OFT 3 #define MAC_INFOELT_MEASURE_TYPE_OFT 4 #define MAC_INFOELT_MEASURE_CH_NBR_OFT 5 #define MAC_INFOELT_MEASURE_START_TIME_OFT 6 #define MAC_INFOELT_MEASURE_DURATION_OFT 14 #define MAC_INFOELT_MEASURE_INFO_OFT 16 #define MAC_MEAS_REQ_CNF_ELT_LEN 5 #define MAC_MEAS_REQ_ELT_LEN 16 #define MAC_MEAS_REQ_FRAME_LEN 19 #define MAC_MEAS_REP_BASIC_ELT_LEN 17 #define MAC_MEAS_REP_BASIC_FRAME_LEN 20 #define MAC_MEAS_REP_CCA_ELT_LEN 17 #define MAC_MEAS_REP_CCA_FRAME_LEN 20 #define MAC_MEAS_REP_RPI_ELT_LEN 24 #define MAC_MEAS_REP_RPI_FRAME_LEN 27 #define MAC_MEAS_REP_ERR_ELT_LEN 5 #define MAC_MEAS_REP_ERR_FRAME_LEN 8 // Mobility Domain Element (MDE) #define MAC_INFOELT_MDE_ID_OFT 0 #define MAC_INFOELT_MDE_LEN_OFT 1 #define MAC_INFOELT_MDE_MDID_OFT 2 #define MAC_INFOELT_MDE_FT_CAPA_POL_OFT 4 #define MAC_INFOELT_MDE_MDID_LEN 2 #define MAC_INFOELT_MDE_FT_CAPA_POL_LEN 1 #define MAC_INFOELT_MDE_ELMT_LEN 3 #define MAC_INFOELT_MDE_LEN 5 // Link Identifier Element #define MAC_INFOELT_LINK_ID_LEN 18 #define MAC_INFOELT_LINK_ID_BSSID_OFT 2 #define MAC_INFOELT_LINK_ID_INIT_STA_OFT 8 #define MAC_INFOELT_LINK_ID_RESP_STA_OFT 14 // Link Identifier Element #define MAC_INFOELT_CH_SWITCH_TIMING_LEN 4 #define MAC_INFOELT_CH_SWITCH_TIMING_SWTIME_OFT 2 #define MAC_INFOELT_CH_SWITCH_TIMING_SWTOUT_OFT 4 // PTI Control Element #define MAC_INFOELT_PTI_CONTROL_LEN 3 #define MAC_INFOELT_PTI_CONTROL_TID_OFT 2 #define MAC_INFOELT_PTI_CONTROL_SEQ_CTRL_OFT 3 // TPU Buffer Status Element #define MAC_INFOELT_TPU_BUF_STATUS_LEN 1 #define MAC_INFOELT_TPU_BUF_STATUS_AC_STATUS 2 // Spectrum management frame values: //---------------------------------- //TO_DO_MMH:Remove unused fields //MAC Action Spectrum Categorie => Sub Action /// 802.11 Spectrum management frame definition #define MAC_ACTION_MEASURE_REQUEST 0 #define MAC_ACTION_MEASURE_REPORT 1 #define MAC_ACTION_TPC_REQUEST 2 #define MAC_ACTION_TPC_REPORT 3 #define MAC_ACTION_CHANNEL_SWITCH 4 // Channel Switch Annoncement Mode #define MAC_SWITCH_MODE_TX_TRAFFIC_CONT 0 #define MAC_SWITCH_MODE_TX_TRAFFIC_STOP 1 // Measurement Request Mode #define MAC_MEASURE_MODE_ENABLE CO_BIT(1) #define MAC_MEASURE_MODE_REQUEST CO_BIT(2) #define MAC_MEASURE_MODE_REPORT CO_BIT(3) // Measurement Report Mode #define MAC_MEASURE_MODE_LATE CO_BIT(0) #define MAC_MEASURE_MODE_INCAPABLE CO_BIT(1) #define MAC_MEASURE_MODE_REFUSED CO_BIT(2) // Measurement Request Type #define MAC_MEASURE_TYPE_BASIC 0 #define MAC_MEASURE_TYPE_CCA 1 #define MAC_MEASURE_TYPE_RPI 2 // Measurement Report Map Bits #define MAC_MEASURE_MAP_FREE 0x00 #define MAC_MEASURE_MAP_BSS CO_BIT(0) #define MAC_MEASURE_MAP_OFDM CO_BIT(1) #define MAC_MEASURE_MAP_UNIDENTIFIED CO_BIT(2) #define MAC_MEASURE_MAP_RADAR CO_BIT(3) #define MAC_MEASURE_MAP_UNMEASURED CO_BIT(4) #define MAC_MEASURE_MAP_MASK 0x1F /* * We set the default switch count to Zero which indicates that the switch shall occur at * any time after the frame containing the element is transmitted. * This is done to be able to give the STA time to know the new channel number in case the * channel switch fails and another new channel was decided */ #define MAC_DEFAULT_SWITCH_COUNT 0 #define MAC_DEFAULT_RADAR_CHECK_TIME 60 enum { REMOTE_MEAS_REQ_LATE = 1, REMOTE_MEAS_REQ_INCAPABLE, REMOTE_MEAS_REQ_REFUSED }; /** @} */ /** * @name HT Action Frame definitions * @{ **************************************************************************************** */ /* HT Action Field values *--------------------------------------------------------------------------------------*/ /// 802.11 HT action frame definition #define MAC_CHAN_WIDTH_HT_ACTION 0 #define MAC_SMPS_HT_ACTION 1 #define MAC_PSMP_HT_ACTION 2 #define MAC_SET_PCO_PHASE_HT_ACTION 3 #define MAC_CSI_HT_ACTION 4 #define MAC_NON_COMP_BEAMFORMING_HT_ACTION 5 #define MAC_COMP_BEAMFORMING_HT_ACTION 6 #define MAC_ASEL_INDICES_FEEDBACK_HT_ACTION 7 /* HT channel width offsets *--------------------------------------------------------------------------------------*/ #define MAC_CHAN_WIDTH_WIDTH_OFT 2 /* HT SM Power Control field offset *--------------------------------------------------------------------------------------*/ #define MAC_SM_PRW_CTRL_OFT 2 #define MAC_SMPS_ENABLE_BIT CO_BIT(0) #define MAC_SMPS_DYNAMIC_BIT CO_BIT(1) /** @} */ /** * @name VHT Action Frame definitions * @{ **************************************************************************************** */ /* VHT Action Field values *--------------------------------------------------------------------------------------*/ /// 802.11 VHT action frame definition #define MAC_COMP_BEAMFORMING_VHT_ACTION 0 #define MAC_GROUP_ID_MGMT_VHT_ACTION 1 #define MAC_OP_MODE_NOTIF_VHT_ACTION 2 /* GroupId management offsets *--------------------------------------------------------------------------------------*/ #define MAC_GROUP_ID_MGT_PAYL_LENGTH 26 #define MAC_GROUP_ID_MGT_MEMBERSHIP_OFT 2 #define MAC_GROUP_ID_MGT_USER_POS_OFT 10 /* VHT operation mode notification offsets *--------------------------------------------------------------------------------------*/ #define MAC_OP_MODE_NOTIF_OPMODE_OFT 2 #define MAC_OP_MODE_NOTIF_LEN 3 #define MAC_OP_MODE_NOTIF_PARAM_LEN 1 #define MAC_OPMODE_BW_OFT 0 #define MAC_OPMODE_BW_MSK (0x3 << MAC_OPMODE_BW_OFT) #define MAC_OPMODE_RXNSS_OFT 4 #define MAC_OPMODE_RXNSS_MSK (0x7 << MAC_OPMODE_RXNSS_OFT) #define MAC_OPMODE_RXNSS_TYPE_BIT CO_BIT(7) /** @} */ /** * @name SA QUERY Action Frame definitions * @{ **************************************************************************************** */ #define MAC_SA_QUERY_ACTION_OFT 1 #define MAC_SA_QUERY_REQUEST 0 #define MAC_SA_QUERY_RESPONSE 1 #define MAC_SA_QUERY_TR_ID_OFT 2 #define MAC_SA_QUERY_TR_ID_LEN 2 #define MAC_SA_QUERY_MIN_LEN (MAC_SA_QUERY_TR_ID_OFT + MAC_SA_QUERY_TR_ID_LEN) /** @} */ #define MAC_RSNIE_CIPHER_NOSEC 0xFE #define MAC_RSNIE_CIPHER_INVALID 0xFF /** * @name Information Element Identifier definitions * @{ **************************************************************************************** */ /// 802.11 IE identifier #define MAC_INFOELT_ID_OFT 0 #define MAC_INFOELT_LEN_OFT 1 #define MAC_INFOELT_EXT_ID_OFT 2 #define MAC_INFOELT_INFO_OFT 2 #define MAC_INFOELT_EXT_INFO_OFT 3 #define MAC_ELTID_SSID 0 #define MAC_ELTID_RATES 1 #define MAC_ELTID_FH 2 #define MAC_ELTID_DS 3 #define MAC_ELTID_CF 4 #define MAC_ELTID_TIM 5 #define MAC_ELTID_IBSS 6 #define MAC_ELTID_COUNTRY 7 // optional #define MAC_ELTID_HOP_PARAM 8 // optional #define MAC_ELTID_HOP_TABLE 9 // optional #define MAC_ELTID_REQUEST 10 // optional #define MAC_ELTID_BSS_LOAD 11 #define MAC_ELTID_EDCA_PARAM 12 #define MAC_ELTID_CHALLENGE 16 #define MAC_ELTID_POWER_CONSTRAINT 32 // Spectrum & Power Management #define MAC_ELTID_POWER_CAPABILITY 33 // Spectrum & Power Management #define MAC_POWER_CAPABILITY_IE_LEN 2 // Spectrum & Power Management #define MAC_ELTID_TPC_REQUEST 34 // Spectrum & Power Management #define MAC_ELTID_TPC_REPORT 35 // Spectrum & Power Management #define MAC_ELTID_SUPPORTED_CHANNELS 36 // Spectrum & Power Management #define MAC_ELTID_CHANNEL_SWITCH 37 // Spectrum & Power Management #define MAC_ELTID_MEASUREMENT_REQUEST 38 // Spectrum & Power Management #define MAC_ELTID_MEASUREMENT_REPORT 39 // Spectrum & Power Management #define MAC_ELTID_QUIET 40 // Spectrum & Power Management #define MAC_ELTID_IBSS_DFS 41 // Spectrum & Power Management #define MAC_ELTID_ERP 42 #define MAC_ELTID_HT_CAPA 45 #define MAC_ELTID_QOS_CAPA 46 #define MAC_ELTID_RSN_IEEE 48 #define MAC_ELTID_EXT_RATES 50 #define MAC_ELTID_MDE 54 // Mobility Domain #define MAC_ELTID_FTE 55 // Fast BSS Transition #define MAC_ELTID_SUPP_OPER_CLASS 59 #define MAC_ELTID_EXT_CHANNEL_SWITCH 60 #define MAC_ELTID_SEC_CH_OFFSET 62 #define MAC_ELTID_WAPI 68 #define MAC_ELTID_20_40_COEXISTENCE 72 #define MAC_ELTID_OBSS_SCAN_PARAM 74 #define MAC_ELTID_MGMT_MIC 76 #define MAC_ELTID_HT_OPERATION 61 #define MAC_ELTID_LINK_IDENTIFIER 101 #define MAC_ELTID_CHANNEL_SWITCH_TIMING 104 #define MAC_ELTID_PTI_CONTROL 105 #define MAC_ELTID_TPU_BUFFER_STATUS 106 #define MAC_ELTID_MESH_CONF 113 #define MAC_ELTID_MESH_ID 114 #define MAC_ELTID_MESH_LINK_METRIC_REP 115 #define MAC_ELTID_CONGESTION_NOTIF 116 #define MAC_ELTID_MESH_PEER_MGMT 117 #define MAC_ELTID_MESH_CHAN_SWITCH_PARAM 118 #define MAC_ELTID_MESH_AWAKE_WINDOW 119 #define MAC_ELTID_MESH_GANN 125 #define MAC_ELTID_MESH_RANN 126 #define MAC_ELTID_EXT_CAPA 127 // This number need to be confirmed. #define MAC_ELTID_MESH_PREQ 130 #define MAC_ELTID_MESH_PREP 131 #define MAC_ELTID_MESH_PERR 132 #define MAC_ELTID_VHT_CAPA 191 #define MAC_ELTID_VHT_OPERATION 192 #define MAC_ELTID_WIDE_BANDWIDTH_CHAN_SWITCH 194 #define MAC_ELTID_VHT_TRANSMIT_PWR_ENVELOP 195 #define MAC_ELTID_CHAN_SWITCH_WRP 196 #define MAC_ELTID_OP_MODE_NOTIF 199 #define MAC_ELTID_OUI 221 // Proprietary (0xDD) #define MAC_ELTID_EXT 255 #define MAC_OUI_TYPE_WPA 1 #define MAC_OUI_TYPE_WME 2 #define MAC_OUI_SUBTYPE_WME_INFORMATION 0 #define MAC_OUI_SUBTYPE_WME_PARAMETER 1 #define MAC_OUI_TYPE_WMMAC 2 #define MAC_OUI_SUBTYPE_WMMAC_TSPEC 2 #define MAC_OUI_SUBTYPE_WMMAC_TSDELAY 8 #define MAC_OUI_SUBTYPE_WMMAC_TSINFO 10 #define MAC_ELTID_EXT_HE_CAPA 35 #define MAC_ELTID_EXT_HE_OPERATION 36 #define MAC_ELTID_EXT_UORA 37 #define MAC_ELTID_EXT_MU_EDCA 38 /** @} */ /** * @name Standard Status Code definitions * @{ **************************************************************************************** */ /// 802.11 Status Code #define MAC_ST_SUCCESSFUL 0 #define MAC_ST_FAILURE 1 #define MAC_ST_RESERVED 2 #define MAC_ST_CAPA_NOT_SUPPORTED 10 #define MAC_ST_REASSOC_NOT_ASSOC 11 #define MAC_ST_ASSOC_DENIED 12 #define MAC_ST_AUTH_ALGO_NOT_SUPPORTED 13 #define MAC_ST_AUTH_FRAME_WRONG_SEQ 14 #define MAC_ST_AUTH_CHALLENGE_FAILED 15 #define MAC_ST_AUTH_TIMEOUT 16 #define MAC_ST_ASSOC_TOO_MANY_STA 17 #define MAC_ST_ASSOC_RATES_NOT_SUPPORTED 18 #define MAC_ST_ASSOC_PREAMBLE_NOT_SUPPORTED 19 #define MAC_ST_ASSOC_SPECTRUM_REQUIRED 22 #define MAC_ST_ASSOC_POWER_CAPA 23 #define MAC_ST_ASSOC_SUPPORTED_CHANNEL 24 #define MAC_ST_ASSOC_SLOT_NOT_SUPPORTED 25 #define MAC_ST_REFUSED_TEMPORARILY 30 #define MAC_ST_INVALID_MFP_POLICY 31 #define MAC_ST_INVALID_IE 40 // draft 7.0 extention #define MAC_ST_GROUP_CIPHER_INVALID 41 // draft 7.0 extention #define MAC_ST_PAIRWISE_CIPHER_INVALID 42 // draft 7.0 extention #define MAC_ST_AKMP_INVALID 43 // draft 7.0 extention #define MAC_ST_UNSUPPORTED_RSNE_VERSION 44 // draft 7.0 extention #define MAC_ST_INVALID_RSNE_CAPA 45 // draft 7.0 extention #define MAC_ST_CIPHER_SUITE_REJECTED 46 // draft 7.0 extention /** @} */ /** * @name Standard Reason Code definitions * @{ **************************************************************************************** */ /// 802.11 Reason Code #define MAC_RS_RESERVED 0 #define MAC_RS_UNSPECIFIED 1 #define MAC_RS_PREVIOUS_AUTH_NOT_VALID 2 #define MAC_RS_DEAUTH_SENDER_LEFT_IBSS_ESS 3 #define MAC_RS_DIASSOC_INACTIVITY 4 #define MAC_RS_DIASSOC_TOO_MANY_STA 5 #define MAC_RS_CLASS_2_FORBIDDEN 6 #define MAC_RS_CLASS_3_FORBIDDEN 7 #define MAC_RS_DEAUTH_SENDER_LEFT_BSS 8 #define MAC_RS_STA_REQ_ASSOC_NOT_AUTH 9 #define MAC_RS_DIASSOC_POWER_CAPA 10 #define MAC_RS_DIASSOC_SUPPORTED_CHANNEL 11 #define MAC_RS_RESERVED_12 12 #define MAC_RS_INVALID_IE 13 #define MAC_RS_MIC_FAILURE 14 #define MAC_RS_4WAY_HANDSHAKE_TIMEOUT 15 #define MAC_RS_GROUP_KEY_UPDATE_TIMEOUT 16 #define MAC_RS_BAD_RSNIE 17 #define MAC_RS_GROUP_CIPHER_INVALID 18 #define MAC_RS_PAIRWISE_CIPHER_INVALID 19 #define MAC_RS_AKMP_INVALID 20 #define MAC_RS_UNSUPPORTED_RSNE_VERSION 21 #define MAC_RS_INVALID_RSNE_CAPA 22 #define MAC_RS_802_1X_AUTH_FAIL 23 #define MAC_RS_CIPHER_SUITE_REJECTED 24 #define MAC_RS_TIMEOUT 39 /** @} */ /** * @name WMMIE definitions * @{ **************************************************************************************** */ /// WMM IE definition #define MAC_WME_PARAM_LEN 16 /// Default WME information element format #define MAC_RAW_WME_INFO_ELMT_DEFAULT \ { \ MAC_ELTID_OUI, 0x07, \ 0x00, 0x50, 0xF2, MAC_OUI_TYPE_WME, /* additionnal WPA OUI */ \ MAC_OUI_SUBTYPE_WME_INFORMATION, 0x01, /* OUI subtype and version */ \ 0x00 /* QoS field */ \ } // Best effort #define MAC_ACI_BE 0 // Background #define MAC_ACI_BK 1 // Video #define MAC_ACI_VI 2 // Voice #define MAC_ACI_VO 3 #define MAC_ACI_OFT 5 #define MAC_ECWMIN 4 #define MAC_ECWMAX 10 #define MAC_ECW_BK_MIN MAC_ECWMIN #define MAC_ECW_BE_MIN MAC_ECWMIN //#define MAC_ECW_VI_MIN ((MAC_ECWMIN+1)/2 - 1) //#define MAC_ECW_VO_MIN ((MAC_ECWMIN+1)/4 - 1) #define MAC_ECW_VI_MIN ((MAC_ECWMIN) - 1) #define MAC_ECW_VO_MIN ((MAC_ECWMIN)/2) #define MAC_ECW_BK_MAX MAC_ECWMAX #define MAC_ECW_BE_MAX MAC_ECWMAX #define MAC_ECW_VI_MAX MAC_ECWMIN //#define MAC_ECW_VO_MAX ((MAC_ECWMIN+1)/2 - 1) #define MAC_ECW_VO_MAX ((MAC_ECWMIN) - 1) #define MAC_AIFSN_BK 7 #define MAC_AIFSN_BE 3 #define MAC_AIFSN_VI 2 #define MAC_AIFSN_VO 2 #define MAC_AC_BE_TXOP 0 #define MAC_AC_BK_TXOP 0 #define MAC_AC_VI_TXOP_b 188 // 6016us / 32 us #define MAC_AC_VI_TXOP_ag 94 // 3008 ms / 32 usec #define MAC_AC_VO_TXOP_b 102 // 3264us / 32 us #define MAC_AC_VO_TXOP_ag 47 // 1504us / 32 us /** @} */ /** * @name RSNIE definitions * @{ **************************************************************************************** */ // Cipher suites #define MAC_RSNIE_CIPHER_USE_GROUP 0x000FAC00 #define MAC_RSNIE_CIPHER_WEP_40 0x000FAC01 #define MAC_RSNIE_CIPHER_TKIP 0x000FAC02 #define MAC_RSNIE_CIPHER_RSVD 0x000FAC03 #define MAC_RSNIE_CIPHER_CCMP_128 0x000FAC04 #define MAC_RSNIE_CIPHER_WEP_104 0x000FAC05 #define MAC_RSNIE_CIPHER_BIP_CMAC_128 0x000FAC06 #define MAC_RSNIE_CIPHER_NO_GROUP 0x000FAC07 #define MAC_RSNIE_CIPHER_GCMP_128 0x000FAC08 #define MAC_RSNIE_CIPHER_GCMP_256 0x000FAC09 #define MAC_RSNIE_CIPHER_CCMP_256 0x000FAC0A #define MAC_RSNIE_CIPHER_BIP_GMAC_128 0x000FAC0B #define MAC_RSNIE_CIPHER_BIP_GMAC_256 0x000FAC0C #define MAC_RSNIE_CIPHER_BIP_CMAC_256 0x000FAC0D // AKM suites #define MAC_RSNIE_AKM_8021X 0x000FAC01 #define MAC_RSNIE_AKM_PSK 0x000FAC02 #define MAC_RSNIE_AKM_FT_8021X 0x000FAC03 #define MAC_RSNIE_AKM_FT_PSK 0x000FAC04 #define MAC_RSNIE_AKM_8021X_SHA256 0x000FAC05 #define MAC_RSNIE_AKM_PSK_SHA256 0x000FAC06 #define MAC_RSNIE_AKM_TDLS 0x000FAC07 #define MAC_RSNIE_AKM_SAE 0x000FAC08 #define MAC_RSNIE_AKM_FT_OVER_SAE 0x000FAC09 #define MAC_RSNIE_AKM_8021X_SUITE_B 0x000FAC0B #define MAC_RSNIE_AKM_8021X_SUITE_B_192 0x000FAC0C #define MAC_RSNIE_AKM_FILS_SHA256 0x000FAC0D #define MAC_RSNIE_AKM_FILS_SHA384 0x000FAC0F #define MAC_RSNIE_AKM_FT_FILS_SHA256 0x000FAC10 #define MAC_RSNIE_AKM_FT_FILS_SHA384 0x000FAC11 #define MAC_RSNIE_AKM_OWE 0x000FAC12 // RSN CAPA #define MAC_RSNIE_CAPA_PREAUTH_BIT CO_BIT(0) #define MAC_RSNIE_CAPA_NO_PAIRWISE_BIT CO_BIT(1) #define MAC_RSNIE_CAPA_PTKSA_REPLAY_CNT_MSK 0x000C #define MAC_RSNIE_CAPA_GTKSA_REPLAY_CNT_MSK 0x0030 #define MAC_RSNIE_CAPA_MFPR_BIT CO_BIT(6) #define MAC_RSNIE_CAPA_MFPC_BIT CO_BIT(7) #define MAC_RSNIE_CAPA_JOINT_MULIT_BAND_BIT CO_BIT(8) #define MAC_RSNIE_CAPA_PEERKEY_BIT CO_BIT(9) #define MAC_RSNIE_CAPA_SPP_AMSDU_CAP_BIT CO_BIT(10) #define MAC_RSNIE_CAPA_SPP_AMSDU_REQ_BIT CO_BIT(11) #define MAC_RSNIE_CAPA_PBAC_BIT CO_BIT(12) #define MAC_RSNIE_CAPA_EXT_KEY_ID_BIT CO_BIT(13) /** @} */ /** * @name WPA (pre-RSN) definitions * @{ **************************************************************************************** */ // Cipher suites #define MAC_WPA_CIPHER_TKIP 0x0050F202 #define MAC_WPA_CIPHER_CCMP 0x0050F204 // AKM suites #define MAC_WPA_AKM_8021X 0x0050F201 #define MAC_WPA_AKM_PSK 0x0050F202 /** @} */ /** * @name WAPI definitions * @{ **************************************************************************************** */ // Cipher suites #define MAC_WAPI_CIPHER_WPI_SMS4 0x00147201 // AKM suites #define MAC_WAPI_AKM_CERT 0x00147201 #define MAC_WAPI_AKM_PSK 0x00147202 /** @} */ /** * @name Country IE definitions * @{ **************************************************************************************** */ /// Country IE definition #define MAC_COUNTRY_2G4_FULL { 3, {'x', 'x', ' '}, { 1, 14, 30}} #define MAC_COUNTRY_2G4_USA { 6, {'U', 'S', ' '}, { 1, 11, 30}} // X'10' FCC #define MAC_COUNTRY_2G4_CANADA { 6, {'C', 'A', ' '}, { 1, 11, 30}} // X'20' DOC/IC #define MAC_COUNTRY_2G4_EUROPE { 6, {'E', 'U', ' '}, { 1, 13, 30}} // X'30' ETSI #define MAC_COUNTRY_2G4_SPAIN { 6, {'S', 'P', ' '}, {10, 2, 30}} // X'31' #define MAC_COUNTRY_2G4_FRANCE { 6, {'F', 'R', ' '}, {10, 4, 20}} // X'32' #define MAC_COUNTRY_2G4_JAPAN { 6, {'J', 'P', ' '}, {14, 1, 30}} // X'40' #define MAC_COUNTRY_2G4_CHINA { 6, {'C', 'N', ' '}, { 1, 13, 30}} // X'50' #define MAC_COUNTRY_5G_FULL { 3, {'x', 'x', ' '}, {{ 36, 8, 23}}} #define MAC_COUNTRY_5G_USA { 18, {'U', 'S', ' '}, {{ 36, 4, 16}, /**/ {52, 4, 23}, /**/ {100, 11, 23}, /**/ {149, 4, 29}, /**/ {165, 1, 30}}} #define MAC_COUNTRY_5G_FRANCE { 12, {'F', 'R', ' '}, {{ 36, 4, 23}, /**/ {52, 4, 23}, /**/ {100, 11, 40}}} #define MAC_COUNTRY_5G_JAPAN { 12, {'J', 'P', ' '}, {{184, 4, 24}, /**/ { 8, 3, 24}, /**/ { 34, 4, 22}}} /** @} */ /** * @name Authentication Algorithm definitions * @{ **************************************************************************************** */ /// Authentication algorithm definition #define MAC_AUTH_ALGO_OPEN 0 #define MAC_AUTH_ALGO_SHARED 1 #define MAC_AUTH_ALGO_FT 2 #define MAC_AUTH_ALGO_SAE 3 #define MAC_AUTH_FIRST_SEQ 1 #define MAC_AUTH_SECOND_SEQ 2 #define MAC_AUTH_THIRD_SEQ 3 #define MAC_AUTH_FOURTH_SEQ 4 /** @} */ /** * @name Security definitions * @{ **************************************************************************************** */ /// Crypto definition // Defines for encryption status #define MAC_ENC_NONE 0 #define MAC_ENC_WEP 0x01 #define MAC_ENC_WPA 0x02 #define MAC_ENC_TKIP 0x04 #define MAC_ENC_WPA2 0x10 #define MAC_ENC_CCMP 0x20 // Key Offsets #define MAC_ENC_KEY_OFFSET 0 #define MAC_AUTHENTICATOR_KEY 16 #define MAC_SUPPLICANT_KEY 24 #define MAC_ENC_KEY_LEN 16 #define MAC_MICHAEL_KEY_LEN 8 /// Word 1 of CCMP IV #define EIV_PRESENT (0x2000) /** @} */ /** * @name Various Frame Size definitions * @{ **************************************************************************************** */ /// Maximum size of a beacon frame (default IE + TIM + remaining IE space) #define MAC_BEACON_SIZE (102 + MAC_TIM_SIZE + 128) /// Maximum size of a probe request frame #define MAC_PROBEREQ_SIZE 100 /// Maximum size of a probe response frame (default IE + remaining IE space) #define MAC_PROBERSP_SIZE (102 + 128) /// Size of a NULL frame #define MAC_NULL_FRAME_SIZE MAC_SHORT_MAC_HDR_LEN /// Size of a QoS-NULL frame #define MAC_QOS_NULL_FRAME_SIZE MAC_SHORT_QOS_MAC_HDR_LEN /// Size of a PS poll #define MAC_PSPOLL_FRAME_SIZE MAC_LONG_CTRLFRAME_LEN /** @} */ /// Structure of a short control frame MAC header struct mac_hdr_ctrl_short { /// Frame control uint16_t fctl; /// Duration/ID uint16_t durid; /// Address 1 struct mac_addr addr1; } __PACKED; /// Structure of a long control frame MAC header struct mac_hdr_ctrl { /// Frame control uint16_t fctl; /// Duration/ID uint16_t durid; /// Address 1 struct mac_addr addr1; /// Address 2 struct mac_addr addr2; } __PACKED; /// Structure of a long control frame MAC header struct mac_hdr { /// Frame control uint16_t fctl; /// Duration/ID uint16_t durid; /// Address 1 struct mac_addr addr1; /// Address 2 struct mac_addr addr2; /// Address 3 struct mac_addr addr3; /// Sequence control uint16_t seq; } __PACKED; /// Structure of a long control frame MAC header struct mac_hdr_qos { /// Frame control uint16_t fctl; /// Duration/ID uint16_t durid; /// Address 1 struct mac_addr addr1; /// Address 2 struct mac_addr addr2; /// Address 3 struct mac_addr addr3; /// Sequence control uint16_t seq; /// QoS control uint16_t qos; } __PACKED; /// Structure of a long control frame MAC header struct mac_hdr_long { /// Frame control uint16_t fctl; /// Duration/ID uint16_t durid; /// Address 1 struct mac_addr addr1; /// Address 2 struct mac_addr addr2; /// Address 3 struct mac_addr addr3; /// Sequence control uint16_t seq; /// Address 4 struct mac_addr addr4; } __PACKED; /// Structure of a long control frame MAC header struct mac_hdr_long_qos { /// Frame control uint16_t fctl; /// Duration/ID uint16_t durid; /// Address 1 struct mac_addr addr1; /// Address 2 struct mac_addr addr2; /// Address 3 struct mac_addr addr3; /// Sequence control uint16_t seq; /// Address 4 struct mac_addr addr4; /// QoS control uint16_t qos; } __PACKED; /// Structure of Ethernet Header struct mac_eth_hdr { /// Destination Address struct mac_addr da; /// Source Address struct mac_addr sa; /// Length / Type uint16_t type; } __PACKED; /// Structure of a Beacon or ProbeRsp frame struct bcn_frame { /// MAC Header struct mac_hdr h; /// Timestamp uint64_t tsf; /// Beacon interval uint16_t bcnint; /// Capability information uint16_t capa; /// Rest of the payload uint8_t variable[]; } __PACKED; /// Structure of a Probe Request frame struct preq_frame { /// MAC Header struct mac_hdr h; /// Rest of the payload uint8_t payload[]; } __PACKED; /// Structure of a Block Acknowledgment Request frame struct bar_frame { /// MAC Header struct mac_hdr_ctrl h; /// BAR control uint16_t bar_cntrl; /// BAR information uint16_t bar_information; } __PACKED; /// Base structure of a Block Acknowledgment frame struct ba_base { /// MAC Header struct mac_hdr_ctrl h; /// BA control uint16_t ba_cntrl; } __PACKED; /// Structure of generic BA SSC + bitmap struct ba_ssc_bitmap { /// BA Start Sequence Control uint16_t ssc; /// BA bitmap uint16_t bitmap[]; } __PACKED; /// Structure of BA SSC + 32-bit bitmap struct ba_ssc_bitmap_32 { /// BA Start Sequence Control uint16_t ssc; /// BA bitmap uint16_t bitmap[2]; } __PACKED; /// Structure of BA SSC + 64-bit bitmap struct ba_ssc_bitmap_64 { /// BA Start Sequence Control uint16_t ssc; /// BA bitmap uint16_t bitmap[4]; } __PACKED; /// Structure of BA SSC + 128-bit bitmap struct ba_ssc_bitmap_128 { /// BA Start Sequence Control uint16_t ssc; /// BA bitmap uint16_t bitmap[8]; } __PACKED; /// Structure of BA SSC + 256-bit bitmap struct ba_ssc_bitmap_256 { /// BA Start Sequence Control uint16_t ssc; /// BA bitmap uint16_t bitmap[16]; } __PACKED; /// Multi-STA AID/TID info field struct ba_msta_aid_tid_info { /// BA control uint16_t aid_tid; /// BA Start Sequence Control and Bitmap struct ba_ssc_bitmap ssc_bitmap; } __PACKED; /// Structure of a Compressed Block Acknowledgment frame struct ba_comp_frame { /// MAC Header struct mac_hdr_ctrl h; /// BA control uint16_t ba_cntrl; /// BA Start Sequence Control and Bitmap struct ba_ssc_bitmap_64 ssc_bitmap; } __PACKED; /// Structure of A-MSDU Header struct amsdu_hdr { /// Destination Address struct mac_addr da; /// Source Address struct mac_addr sa; /// Length uint16_t len; } __PACKED; /// Structure of the User Info part of the HE Basic Trigger frame struct he_basic_trigger_user_info { /// First part of the user uint32_t user_info1; uint8_t ul_target_rssi; uint8_t user_info2; } __PACKED; /// Base part of the User Info field present in the HE trigger frames struct he_user_info_base { /// First part of the user uint32_t user_info1; uint8_t ul_target_rssi; } __PACKED; /// Base structure of a HE Trigger frame struct he_trigger_base { /// MAC Header struct mac_hdr_ctrl h; /// Common Info uint32_t common[2]; } __PACKED; /** * @name BAR/BA Frame definitions * @{ **************************************************************************************** */ /// Payload length of the BAR frame #define BAR_PAYLOAD_LEN (sizeof_b(struct bar_frame)) /// Byte length of the BAR frame, including FCS #define BAR_FRM_LEN_WITH_FCS (BAR_PAYLOAD_LEN + MAC_FCS_LEN) /// BAR frame body BAR Control field - Ack type #define BAR_CNTL_ACK_TYPE_BIT CO_BIT(0) /// BAR frame body BAR Control field - Multi-TID flag #define BAR_CNTL_MULTI_TID_BIT CO_BIT(1) /// BAR frame body BAR Control field - Compressed BA flag #define BAR_CNTL_COMPRESSED_BIT CO_BIT(2) /// Offset of the TID in the BAR frame #define BAR_CNTL_TID_OFT 12 /// Mask of the TID in the BAR frame #define BAR_CNTL_TID_MSK (0xF<