blob: 1036b658271b109bfcb2a9ff86d7bd4ae20e1c94 [file] [log] [blame]
/*
* $Copyright Open Broadcom Corporation$
*
* Fundamental types and constants relating to 802.11 ccx
*
* $Id: 802.11_ccx.h 382882 2013-02-04 23:24:31Z $
*/
#ifndef _802_11_CCX_H_
#define _802_11_CCX_H_
#ifndef _TYPEDEFS_H_
#include <typedefs.h>
#endif
#ifndef _NET_ETHERNET_H_
#include <proto/ethernet.h>
#endif
/* This marks the start of a packed structure section. */
#include <packed_section_start.h>
#define DOT11_LEAP_AUTH 0x80 /* LEAP authentication frame payload constants */
/* Management Frame Information Element IDs */
#define DOT11_MNG_AIRONET_ID 133 /* AIRONET id */
#define DOT11_MNG_CELL_PWR_ID 150 /* cell power id */
#define DOT11_MNG_CCKM_REASSOC_ID 156 /* CCKM reassoc. id */
#define DOT11_MNG_SSIDL_ID 221 /* SSIDL id */
#define CISCO_BASE 8 /* base of Cisco cipher and AKM vals */
/* AIRONET IE field offsets */
#define AIRONET_IE_REFRESH_RATE 3 /* refresh rate */
#define AIRONET_IE_CWMIN 4 /* cwmin */
#define AIRONET_IE_CWMAX 6 /* cwmax */
#define AIRONET_IE_CKIP 8 /* CKIP */
#define AIRONET_IE_NAME 10 /* offset to AP/Machine name field */
#define AIRONET_IE_DEVICE_ID 0x66 /* Dev ID */
#define AIRONET_IE_MAX_NAME_LEN 16 /* device name length, include NULL */
BWL_PRE_PACKED_STRUCT struct aironet_assoc_ie {
uint8 id; /* IE ID */
uint8 len; /* IE length */
uint8 load;
uint8 hops;
uint8 device;
uint8 refresh_rate;
uint16 cwmin;
uint16 cwmax;
uint8 flags;
uint8 distance;
char name[AIRONET_IE_MAX_NAME_LEN]; /* AP or Client's machine name */
uint16 num_assoc; /* number of clients associated */
uint16 radiotype;
} BWL_POST_PACKED_STRUCT;
typedef struct aironet_assoc_ie aironet_assoc_ie_t;
/* CKIP Negotiation bit fields */
#define CKIP_MIC 0x08 /* MIC */
#define CKIP_KP 0x10 /* KP */
#define CKIP_LLC_SNAP_LEN 8 /* SKIP LLC SNAP header length */
#define CCX_DDP_LLC_SNAP_LEN 8 /* CCX DDP/LLC/SNAP length */
#define CCX_DDP_MSG_LEN 40 /* CCX DDP MSG length */
#define CCX_DDP_ROGUE_NAME_LEN 16 /* CCX DDP rogue name length */
BWL_PRE_PACKED_STRUCT struct ccx_ddp_pkt_s {
struct ether_header eth;
struct dot11_llc_snap_header snap;
uint16 msg_len;
uint8 msg_type;
uint8 fcn_code;
struct ether_addr dest_mac;
struct ether_addr src_mac;
uint16 fail_reason;
struct ether_addr rogue_mac;
uint8 rogue_name[CCX_DDP_ROGUE_NAME_LEN];
} BWL_POST_PACKED_STRUCT;
typedef struct ccx_ddp_pkt_s ccx_ddp_pkt_t;
#define CCX_DDP_PKT_LEN (ETHER_HDR_LEN + DOT11_LLC_SNAP_HDR_LEN + CCX_DDP_MSG_LEN)
#define CCX_ROGUE_INVALID_AUTH 1 /* invalid auth. */
#define CCX_ROGUE_LEAP_TIMEOUT 2 /* LEAP timeout */
#define CCX_ROGUE_CHAN_FROM_AP 3 /* chan. from AP */
#define CCX_ROGUE_CHAN_TO_AP 4 /* chan. to AP */
/* Cisco/Aironet IAPP packet defs */
#define CISCO_AIRONET_OUI "\x00\x40\x96" /* Cisco AIRONET OUI */
#define CISCO_AIRONET_SNAP "\xAA\xAA\x03\x00\x40\x96\x00\x00" /* Cisco AIRONET SNAP */
#define CCX_IAPP_ID_MASK 0xf000 /* IAPP id mask */
#define CCX_IAPP_LEN_MASK 0x0fff /* IAPP len mask */
#define CCX_IAPP_ID_SHIFT 12 /* IAPP id shift */
#define CCX_IAPP_ID_CONTROL 0x0000 /* IAPP id control */
#define CCX_IAPP_TYPE_RM 0x32 /* IAPP radio measurement request type */
#define CCX_IAPP_TYPE_ROAM 0x33 /* IAPP roam request type */
#define CCX_IAPP_TYPE_LINK_TEST 0x41 /* IAPP link test request type */
#define CCX_IAPP_SUBTYPE_REQ 0x01 /* IAPP subtype request */
#define CCX_IAPP_SUBTYPE_ROAM_REP 0x81 /* IAPP subtype report */
#define CCX_IAPP_SUBTYPE_ROAM_REQ 0x82 /* IAPP subtype directed roam request */
#define CCXv2_IAPP_TYPE_ROAM 0x30 /* CCXv2 IAPP roam request type */
#define CCXv2_IAPP_SUBTYPE_ROAM_REQ 0x00 /* CCXv2 IAPP roam subtype request */
#define CCX_IAPP_TYPE_DIAG_GROUP 0x60 /* IAPP type for diag. group(s64, s65 and s66) */
/* Cisco/Aironet IAPP header */
BWL_PRE_PACKED_STRUCT struct ccx_iapp_hdr {
uint16 id_len; /* IAPP ID & Length */
uint8 type; /* IAPP Type */
uint8 subtype; /* IAPP Subtype */
struct ether_addr da;
struct ether_addr sa;
uint8 data[1];
} BWL_POST_PACKED_STRUCT;
typedef struct ccx_iapp_hdr ccx_iapp_hdr_t;
#define CCX_IAPP_HDR_LEN 16 /* IAPP header length */
/* CCXv2 Transmit Power Control IE */
BWL_PRE_PACKED_STRUCT struct ccx_cell_pwr {
uint8 id; /* 150, DOT11_MNG_CELL_PWR_ID */
uint8 len;
uint8 oui[3]; /* 00:40:96, CISCO_AIRONET_OUI */
uint8 ver; /* 0 */
uint8 power; /* signed int dBm */
uint8 reserved;
} BWL_POST_PACKED_STRUCT;
typedef struct ccx_cell_pwr ccx_cell_pwr_t;
#define CCX_RM_STATE_NORMAL 1 /* Radio Management Capability IE state */
#define CCX_RM_STATE_MBSSID_MASK 0x0700 /* MBSSID Mask field */
#define CCX_RM_STATE_MBSSID_SHIFT 8 /* MBSSID Mask field */
/* CCXv2 Radio Management Capability IE */
BWL_PRE_PACKED_STRUCT struct ccx_radio_mgmt {
uint8 id; /* 221, DOT11_MNG_PROPR_ID */
uint8 len;
uint8 oui[3]; /* 00:40:96, CISCO_AIRONET_OUI */
uint8 ver; /* 1 */
uint16 state; /* Radio Mgmt state, 1->Normal. MBSSID mask starts at bit 8 */
} BWL_POST_PACKED_STRUCT;
typedef struct ccx_radio_mgmt ccx_radio_mgmt_t;
#define CCX_QOS_IE_TYPE 4 /* CCX QoS IE type */
#define CCX_QOS_IE_LEN 0x16 /* CCX QoS IE length */
#define CCX_VERSION_IE_TYPE 3 /* CCX version IE type */
#define CCX_VERSION_IE_LEN 5 /* CCX version IE length */
#define CCX_RM_CAP_IE_TYPE 1 /* CCX RM cap IE type */
/* CCXv2 QOS Parameter set IE */
BWL_PRE_PACKED_STRUCT struct ccx_qos_params {
uint8 id; /* 221, DOT11_MNG_PROPR_ID */
uint8 len;
uint8 oui[3]; /* 00:40:96, CISCO_AIRONET_OUI */
uint8 type; /* 4 */
uint8 unused;
uint8 count; /* incremented when element changes */
uint8 aifsn_0; /* AIFSN class 0 */
uint8 ecw_0; /* ECWmin/ECWmax class 0 */
uint16 txop_0; /* TXOP Limit class 0 */
uint8 aifsn_1; /* AIFSN class 1 */
uint8 ecw_1; /* ECWmin/ECWmax class 1 */
uint16 txop_1; /* TXOP Limit class 1 */
uint8 aifsn_2; /* AIFSN class 2 */
uint8 ecw_2; /* ECWmin/ECWmax class 2 */
uint16 txop_2; /* TXOP Limit class 2 */
uint8 aifsn_3; /* AIFSN class 3 */
uint8 ecw_3; /* ECWmin/ECWmax class 3 */
uint16 txop_3; /* TXOP Limit class 3 */
} BWL_POST_PACKED_STRUCT;
typedef struct ccx_qos_params ccx_qos_params_t;
/* CCXv2 Version IE */
BWL_PRE_PACKED_STRUCT struct ccx_version_ie {
uint8 id; /* 221, DOT11_MNG_PROPR_ID */
uint8 len;
uint8 oui[DOT11_OUI_LEN]; /* 00:40:96, CISCO_AIRONET_OUI */
uint8 type; /* 3 */
uint8 version;
} BWL_POST_PACKED_STRUCT;
typedef struct ccx_version_ie ccx_version_ie_t;
/* CCX Adjacent AP Report IE in roam IAPP packet */
BWL_PRE_PACKED_STRUCT struct ccx_roam_ap_ie_s {
uint16 tag; /* 0x9b - Adjacent AP report */
uint16 len;
uint8 oui[DOT11_OUI_LEN]; /* Aironet OUI 0x00 0x40 0x96 0x00 */
uint8 ver;
struct ether_addr mac; /* MAC address of AP */
uint16 channel;
uint16 ssid_len;
uint8 ssid[32];
uint16 disassoc_time; /* Seconds that the client has been disassociated */
} BWL_POST_PACKED_STRUCT;
typedef struct ccx_roam_ap_ie_s ccx_roam_ap_ie_t;
#define CCX_ROAM_AP_IE_LEN 52 /* CCX roam AP IE length */
/* CCX IAPP packet sent to AP on association with info on previous AP */
BWL_PRE_PACKED_STRUCT struct ccx_roam_iapp_pkt_s {
struct ether_header eth;
struct dot11_llc_snap_header snap;
uint16 msg_len;
uint8 msg_type;
uint8 fcn_code;
struct ether_addr dest_mac;
struct ether_addr src_mac;
ccx_roam_ap_ie_t ap_ie;
} BWL_POST_PACKED_STRUCT;
typedef struct ccx_roam_iapp_pkt_s ccx_roam_iapp_pkt_t;
/* CCX roam IAPP message length */
#define CCX_ROAM_IAPP_MSG_SIZE (sizeof(ccx_roam_iapp_pkt_t) - sizeof(struct ether_header))
#define CCX_ROAM_ADJ_AP_TAG 0x9b /* CCX adjacent AP tag */
/* CCXv4 S51 */
/* CCX roam reason IE in roam IAPP packet */
BWL_PRE_PACKED_STRUCT struct ccx_roam_reason_ie {
uint16 tag; /* 0x9c - roam reason tag */
uint16 len;
uint8 oui[DOT11_OUI_LEN]; /* Aironet OUI 0x00 0x40 0x96 0x00 */
uint8 ver;
uint8 reason; /* roam reason */
} BWL_POST_PACKED_STRUCT;
typedef struct ccx_roam_reason_ie ccx_roam_reason_ie_t;
#define CCX_ROAM_REASON_IE_LEN 8 /* CCX roam reason IE length */
/* CCX roam neighbor report IE in roam IAPP packet */
BWL_PRE_PACKED_STRUCT struct ccx_neighbor_rept_ie {
uint8 id; /* CCX_ROAM_NEIGHBOR_REPT_ID */
uint8 len; /* length beyond len */
struct ether_addr mac; /* MAC address of neighbor AP */
uint8 channel; /* current channel of neighbor AP */
uint8 band; /* band of current channel of neighbor AP */
uint8 phy_type; /* PHY type of current channel of neighbor AP */
/* variable subelements follows */
} BWL_POST_PACKED_STRUCT;
typedef struct ccx_neighbor_rept_ie ccx_neighbor_rept_ie_t;
#define CCX_NEIGHBOR_REPT_IE_LEN 11 /* CCX neighbor report IE length */
#define CCX_NEIGHBOR_REPT_IE_LEN_W_H 9 /* CCX_NEIGHBOR_REPT_IE_LEN - header (2) */
/* RF parameter subelement for neighbor ie */
BWL_PRE_PACKED_STRUCT struct ccx_radio_param_subie {
uint8 sub_id; /* subelement id */
uint8 len; /* length beyond len */
int8 min_rssi; /* min. recv pwr in dBm required to associate with the AP */
int8 ap_tx_pwr; /* tx pwr in dBm of neighbor AP */
int8 sta_tx_pwr; /* tx pwr in dBm of sta advertised by neighbor AP */
int8 roam_delta; /* roam delta */
int8 roam_trigger; /* roam trigger */
uint8 roam_time; /* transition time(in 0.1s) permmited in roam */
} BWL_POST_PACKED_STRUCT;
typedef struct ccx_radio_param_subie ccx_radio_param_subie_t;
#define CCX_RADIO_PARAM_SUBIE_LEN 8 /* CCX RF parameter sub IE length */
/* TSF info. subelement for neighbor ie */
BWL_PRE_PACKED_STRUCT struct ccx_tsf_info_subie {
uint8 sub_id; /* subelement id */
uint8 len; /* length beyond len */
BWL_PRE_PACKED_STRUCT struct {
uint16 offset; /* TSF time offset in TUs between serving AP and this AP */
uint16 bcn_interval; /* beacon interval of AP */
} BWL_POST_PACKED_STRUCT TSF;
} BWL_POST_PACKED_STRUCT;
typedef struct ccx_tsf_info_subie ccx_tsf_info_subie_t;
#define CCX_TSF_INFO_SUBIE_LEN 6 /* CCX TSF info. sub IE length */
/* subelement id */
#define CCX_ROAM_SUB_RF_PARAMS 1 /* CCX neighbor element RF subelement id */
#define CCX_ROAM_SUB_TSF_INFO 2 /* CCX neighbor element TSF subelement id */
/* roam reason */
#define CCX_ROAM_UNSPECIFIED 0 /* unspecified */
#define CCX_ROAM_NORMAL 1 /* poor link(excessive retries, RSSI too low...) */
#define CCX_ROAM_LOAD_BALANCING 2 /* normal roam, load balancing */
#define CCX_ROAM_AP_INCAPACITY 3 /* AP has insufficient capacity(TSPEC rejected) */
#define CCX_ROAM_DIRECTED_ROAM 4 /* Infrastructure directed roam */
#define CCX_ROAM_FIRST_ASSOC 5 /* first association to WLAN */
#define CCX_ROAM_IN_NET 6 /* roaming in from cellular or other WAN */
#define CCX_ROAM_OUT_NET 7 /* roaming out to cellular or other WAN */
#define CCX_ROAM_BETTER_AP 8 /* normal roaming, better AP found */
#define CCX_ROAM_LINK_DOWN 9 /* deauthnticated or disassociated from the previous AP */
/* band */
#define CCX_CHAN_BAND_2G 0 /* 2.4 GHz band */
#define CCX_CHAN_BAND_5G 1 /* 5 GHz band */
#define CCX_ROAM_NEIGHBOR_REPT_ID 0x28 /* CCX roam neighbor report id */
#define CCX_ROAM_REASON_TAG 0x9c /* roam reason tag */
#if defined(BCMSUP_PSK) || !defined(BCMINTSUP)
#define CCKM_KRK_LEN 16 /* CCKM KRK length */
#define CCKM_BTK_LEN 32 /* CCKM BTK length */
#define CCKM_OUI_TYPE 0 /* CCKM OUI type */
#define CCKM_RSC_LEN 8 /* CCKM RSC length */
#define CCKM_MIC_LEN 8 /* CCKM MIC length */
BWL_PRE_PACKED_STRUCT struct cckm_reassoc_req_ie_s {
uint8 id; /* DOT11_MNG_CCKM_REASSOC_ID */
uint8 len; /* length beyond len */
uint8 oui[DOT11_OUI_LEN]; /* expect AIRONET_OUI */
uint8 oui_type; /* expect CCKM_OUI_TYPE */
uint8 timestamp[DOT11_MNG_TIMESTAMP_LEN]; /* TSF timer value (LE) */
uint32 rn; /* reassociation request number (LE) */
uint8 mic[CCKM_MIC_LEN]; /* MIC computed using KRK */
} BWL_POST_PACKED_STRUCT;
typedef struct cckm_reassoc_req_ie_s cckm_reassoc_req_ie_t;
#define CCKM_REASSOC_REQ_IE_LEN 26 /* CCKM reassoc. request IE length */
BWL_PRE_PACKED_STRUCT struct cckm_reassoc_resp_ie_s {
uint8 id; /* DOT11_MNG_CCKM_REASSOC_ID */
uint8 len; /* length beyond len */
uint8 oui[DOT11_OUI_LEN]; /* expect AIRONET_OUI */
uint8 oui_type; /* expect CCKM_OUI_TYPE */
uint32 rn; /* rekey value */
uint8 ucast_idx; /* ucast key index; expect 0 */
uint8 mcast_idx; /* mcast key index */
uint8 rsc[CCKM_RSC_LEN]; /* mcast RSC */
uint16 gtklen; /* mcast key len */
uint8 mic[CCKM_MIC_LEN]; /* msg integrity code */
uint8 egtk[1]; /* encrypted group key */
} BWL_POST_PACKED_STRUCT;
typedef struct cckm_reassoc_resp_ie_s cckm_reassoc_resp_ie_t;
#define CCKM_REASSOC_RESP_IE_LEN 31 /* CCKM reassoc. response IE length */
#endif /* BCMSUP_PSK || !BCMINTSUP */
/* CCX Radio Managment definitions, CCX spec section S36 */
#define CCX_RM_IE_HDR_LEN 4 /* length of Radio Mgmt IE ID plus Len */
/* Radio Measurement IE IDs */
#define CCX_RM_ID_REQUEST 38 /* CCX radio measurement request id */
#define CCX_RM_ID_REPORT 39 /* CCX radio measurement respond id */
/* Radio Measurement Request Type field */
#define CCX_RM_TYPE_LOAD 1 /* CCX radio measurement load request */
#define CCX_RM_TYPE_NOISE 2 /* CCX radio measurement noise request */
#ifndef CCX_SDK /* CCX SDK defined the same RM types with the same names */
#define CCX_RM_TYPE_BEACON 3 /* CCX radio measurement beacon request */
#define CCX_RM_TYPE_FRAME 4 /* CCX radio measurement frame request */
#endif /* CCX_SDK */
#define CCXv4_RM_TYPE_PATHLOSS 6 /* CCX radio measurement PathLoss request for CCXv4 */
#define CCX_RM_TYPE_PATHLOSS 9 /* CCX radio measurement PathLoss request */
#define CCX_RM_TYPE_STATISTICS 10 /* CCX radio measurement Statistics request */
/* Radio Measurement Request Mode field */
#define CCX_RM_MODE_PARALLEL (1<<0) /* CCX radio measurement parallel request */
#define CCX_RM_MODE_ENABLE (1<<2) /* CCX radio measurement autonomous request */
#define CCX_RM_MODE_REPORT (1<<3) /* CCX radio measurement report */
/* Radio Measurement Report Modes */
#define CCX_RM_MODE_INCAPABLE (1<<1) /* CCX radio measurement incapable */
#define CCX_RM_MODE_REFUSED (1<<2) /* CCX radio measurement refused */
/* Radio Measurement Beacon scan types */
#define CCX_RM_BEACON_PASSIVE_SCAN 0 /* CCX radio measurement beacon passive scan */
#define CCX_RM_BEACON_ACTIVE_SCAN 1 /* CCX radio measurement beacon active scan */
#define CCX_RM_BEACON_TABLE 2 /* CCX radio measurement beacon table */
/* Radio Measurement Beacon PHY Types */
#define CCX_RM_PHY_FH 1 /* CCX radio measurement FH */
#define CCX_RM_PHY_DSS 2 /* CCX radio measurement DSS */
#define CCX_RM_PHY_OFDM 4 /* CCX radio measurement OFDM */
#define CCX_RM_PHY_HRDSS 5 /* CCX radio measurement HRDSS */
#define CCX_RM_PHY_ERP 6 /* CCX radio measurement ERP */
/* CCXv2 Radio Measurment Request frame
* Encapsulated in Cisco Aironet IAPP frame
*/
BWL_PRE_PACKED_STRUCT struct ccx_rm_req {
uint16 token; /* Dialog Token */
uint8 delay; /* Request Activation Delay (TBTTs) */
uint8 offset; /* Request Activation Offset (TUs) */
uint8 data[1]; /* Request information elts */
} BWL_POST_PACKED_STRUCT;
typedef struct ccx_rm_req ccx_rm_req_t;
#define CCX_RM_REQ_LEN 4 /* CCX radio measurement request header length */
/* CCXv2 Radio Measurment Report frame header
* Encapsulated in Cisco Aironet IAPP frame
*/
BWL_PRE_PACKED_STRUCT struct ccx_rm_rep {
uint16 token; /* Dialog Token */
uint8 data[1]; /* Report information elts */
} BWL_POST_PACKED_STRUCT;
typedef struct ccx_rm_rep ccx_rm_rep_t;
#define CCX_RM_REP_LEN 2 /* CCX radio measurement reponse header length */
/* Max length of CCXv2 Radio Measurment Report data section based on
* the maximum size of the LLC_SNAP encapsulating frame.
*/
#define CCX_RM_REP_DATA_MAX_LEN \
(ETHER_MAX_DATA - (DOT11_LLC_SNAP_HDR_LEN + CCX_IAPP_HDR_LEN + \
CCX_RM_REP_LEN)) /* CCX radio measurement max report data length */
/* CCXv2 Radio Measurment Request IE
* Encapsulated in a CCXv2 Radio Measurment Request frame
*/
BWL_PRE_PACKED_STRUCT struct ccx_rm_req_ie {
uint16 id;
uint16 len;
uint16 token; /* Dialog Token */
uint8 mode;
uint8 type;
/* end of fixed portion */
/* variable data, depends on mode and type */
uint8 channel; /* channel for the measurment */
uint8 param; /* measurement parameter */
uint16 duration; /* measurement duration (TUs) */
} BWL_POST_PACKED_STRUCT;
typedef struct ccx_rm_req_ie ccx_rm_req_ie_t;
#define CCX_RM_REQ_IE_FIXED_LEN 8 /* CCX radio measurement request IE fixed length */
/* CCXv2 Radio Measurment Report IE
* Encapsulated in a CCXv2 Radio Measurment Report frame
*/
BWL_PRE_PACKED_STRUCT struct ccx_rm_rep_ie {
uint16 id;
uint16 len;
uint16 token;
uint8 mode;
uint8 type;
uint8 data[1];
} BWL_POST_PACKED_STRUCT;
typedef struct ccx_rm_rep_ie ccx_rm_rep_ie_t;
#define CCX_RM_REP_IE_FIXED_LEN 8 /* CCX radio measurement report IE fixed length */
BWL_PRE_PACKED_STRUCT struct ccx_rm_beacon_rep {
uint8 channel;
uint8 spare;
uint16 duration;
uint8 phy_type;
int8 rssi;
struct ether_addr bssid;
uint32 parent_tsf;
uint32 target_tsf_low;
uint32 target_tsf_hi;
uint16 beacon_interval;
uint16 capability;
uint8 data[1];
} BWL_POST_PACKED_STRUCT;
typedef struct ccx_rm_beacon_rep ccx_rm_beacon_rep_t;
#define CCX_RM_BEACON_REP_FIXED_LEN 28 /* CCX rm beacon report fixed length */
BWL_PRE_PACKED_STRUCT struct ccx_rm_frm_rep_elt {
struct ether_addr ta; /* transmitter address */
struct ether_addr bssid; /* bssid transmitter belongs to */
uint8 rssi; /* average RSSI */
uint8 frames; /* total number of frames */
} BWL_POST_PACKED_STRUCT;
typedef struct ccx_rm_frm_rep_elt ccx_rm_frm_rep_elt_t;
#define CCX_RM_FRAME_REP_ENTRY_LEN 14 /* CCX rm frame report entry length */
BWL_PRE_PACKED_STRUCT struct ccx_rm_frame_rep {
uint8 channel;
uint8 spare;
uint16 duration;
ccx_rm_frm_rep_elt_t elt[1];
} BWL_POST_PACKED_STRUCT;
typedef struct ccx_rm_frame_rep ccx_rm_frame_rep_t;
#define CCX_RM_FRAME_REP_FIXED_LEN 4 /* CCX rm frame report fixed length */
BWL_PRE_PACKED_STRUCT struct ccx_rm_load_rep {
uint8 channel;
uint8 spare;
uint16 duration;
uint8 fraction;
} BWL_POST_PACKED_STRUCT;
typedef struct ccx_rm_load_rep ccx_rm_load_rep_t;
#define CCX_RM_LOAD_REP_LEN 5 /* CCX radio measurement load report length */
BWL_PRE_PACKED_STRUCT struct ccx_rm_noise_rep {
uint8 channel;
uint8 spare;
uint16 duration;
uint8 rpi[8];
} BWL_POST_PACKED_STRUCT;
typedef struct ccx_rm_noise_rep ccx_rm_noise_rep_t;
#define CCX_RM_NOISE_REP_LEN 12 /* CCX radio measurement noise report length */
/* SSIDL Elements. CCXv4 S53 */
#define SSIDL_OUI "\x00\x50\xf2" /* SSIDL OUI */
#define SSIDL_OUI_LEN 3 /* SSIDL OUI length */
#define SSIDL_TYPE 5 /* SSIDL type */
/* extended capability bits */
#define PRI_EXT_CAP_8021X 1 /* primary ssid supports 802.1x */
#define PRI_EXT_CAP_WPS 2 /* primary ssid supports WPS */
/* hidden ssid capability field */
#define SEC_CAP_MC_CIPHER_MASK 0x0000000f /* mcast cipher mask */
#define SEC_CAP_UC_CIPHER_MASK 0x000efff0 /* ucast cipher mask */
#define SEC_CAP_AKM_MASK 0x7e000000 /* AKM mask */
#define SEC_CAP_UC_CIPHER_SHIFT 4 /* ucast cipher shift */
#define SEC_CAP_AKM_SHIFT 25 /* AKM shift */
/* SEC_CAP_MC_CIPHER value */
enum {
MC_CIPHER_NONE,
MC_CIPHER_WEP40,
MC_CIPHER_WEP104,
MC_CIPHER_TKIP,
MC_CIPHER_CCMP,
MC_CIPHER_CKIP_CMIC,
MC_CIPHER_CKIP,
MC_CIPHER_CMIC
};
/* SEC_CAP_UC_CIPHER value */
#define UC_CIPHER_NONE (1 << 0)
#define UC_CIPHER_WEP40 (1 << 1)
#define UC_CIPHER_WEP104 (1 << 2)
#define UC_CIPHER_TKIP (1 << 3)
#define UC_CIPHER_CCMP (1 << 4)
#define UC_CIPHER_CKIP_CMIC (1 << 5)
#define UC_CIPHER_CKIP (1 << 6)
#define UC_CIPHER_CMIC (1 << 7)
#define UC_CIPHER_WPA2_WEP40 (1 << 8)
#define UC_CIPHER_WPA2_WEP104 (1 << 9)
#define UC_CIPHER_WPA2_TKIP (1 << 10)
#define UC_CIPHER_WPA2_CCMP (1 << 11)
#define UC_CIPHER_WPA2_CKIP_CMIC (1 << 12)
#define UC_CIPHER_WPA2_CKIP (1 << 13)
#define UC_CIPHER_WPA2_CMIC (1 << 14)
/* SEC_CAP_AKM value */
#define AKM_WPA1_1X (1 << 0)
#define AKM_WPA1_PSK (1 << 1)
#define AKM_WPA2_1X (1 << 2)
#define AKM_WPA2_PSK (1 << 3)
#define AKM_WPA1_CCKM (1 << 4)
#define AKM_WPA2_CCKM (1 << 5)
BWL_PRE_PACKED_STRUCT struct ccx_hidden_ssid {
uint8 ext_cap; /* hidden ssid extended capability */
uint32 capability; /* hidden ssid capability */
uint8 ssid_len; /* ssid name length */
uint8 ssid[1]; /* ssid. variable length */
} BWL_POST_PACKED_STRUCT;
typedef struct ccx_hidden_ssid ccx_hidden_ssid_t;
/* CCXv4 SSIDL IE */
BWL_PRE_PACKED_STRUCT struct ccx_ssidl_ie {
uint8 id; /* 221, DOT11_MNG_SSIDL_ID */
uint8 length;
uint8 oui[3]; /* 00:50:f2 */
uint8 type; /* 5 */
uint8 pri_ext_cap; /* primary ssid extended capability */
/* following fields are optional */
uint8 ssid_count; /* number of hidden ssids followed */
ccx_hidden_ssid_t hidden_ssid[1]; /* hidden ssid start */
} BWL_POST_PACKED_STRUCT;
typedef struct ccx_ssidl_ie ccx_ssidl_ie_t;
/* link test. CCXv4 S62 */
BWL_PRE_PACKED_STRUCT struct ccx_link_test_s {
uint16 frm_num; /* frame number */
uint32 time; /* time from sender */
uint8 rsq; /* raw signal quality of request */
uint8 rss; /* raw signal strength of request */
uint8 txretried; /* retries in sending previous response */
uint8 rssi; /* signal strength in dBm of request */
uint8 sqp; /* signal quality as percent of request */
uint8 ssp; /* signal strength as percent of request */
uint8 data[1]; /* start data set by sender */
} BWL_POST_PACKED_STRUCT;
typedef struct ccx_link_test_s ccx_link_test_t;
#define CCX_LINK_TEST_REQ_LEN 12 /* line test request length */
/* Supported Features Advertisement(SFA) IE. CCXv5 S63 */
BWL_PRE_PACKED_STRUCT struct ccx_sfa_ie {
uint8 id; /* 221, DOT11_MNG_PROPR_ID */
uint8 length; /* 5 */
uint8 oui[3]; /* 00:40:96 */
uint8 type; /* 14 */
uint8 capability; /* capability to support CCXv5 features */
} BWL_POST_PACKED_STRUCT;
typedef struct ccx_sfa_ie ccx_sfa_ie_t;
#define CCX_SFA_IE_TYPE 0x14 /* SFA IE type */
/* feature bit in capability field */
#define CAP_MFP 0x01 /* S67. MFP */
#define CAP_DIAG_CHANL 0x02 /* S64. Diagnostic channel */
#define CAP_LOC_SERVICE 0x04 /* S69. Location services */
#define CAP_EXP_BNDWITH 0x08 /* S70. Expedited Bandwidth Requests */
/* MHDR IE. CCXv5 S67 */
BWL_PRE_PACKED_STRUCT struct ccx_mhdr_ie {
uint8 id; /* 221, DOT11_MNG_PROPR_ID */
uint8 length; /* 12 */
uint8 oui[3]; /* 00:40:96 */
uint8 type; /* 16 */
uint8 fc[2];
struct ether_addr bssid;
} BWL_POST_PACKED_STRUCT;
typedef struct ccx_mhdr_ie ccx_mhdr_ie_t;
#define CCX_HMDR_IE_TYPE 16
#define CKIP_MIC_SIZE 4 /* size of CKIP MIC */
#define CKIP_SEQ_SIZE 4 /* size of CKIP SEQ */
#define CKIP_KEY_SIZE 16 /* size of CKIP key */
/* 802.11e MSDU Lifetime IE */
BWL_PRE_PACKED_STRUCT typedef struct {
uint8 oui[DOT11_OUI_LEN]; /* 3 bytes OUI */
uint8 oui_type; /* OUI Type */
uint8 tid; /* traffic stream ID */
uint16 msdu_lifetime; /* time in TU, specify per AC */
} BWL_POST_PACKED_STRUCT ccx_msdu_lifetime_t;
/* CCX traffic stream rateset IE */
BWL_PRE_PACKED_STRUCT typedef struct {
uint8 oui[DOT11_OUI_LEN]; /* 3 bytes OUI */
uint8 oui_type; /* OUI Type */
uint8 tid; /* traffic stream ID */
uint8 rateset[1]; /* nominal rate to use (multiple of 500k) */
} BWL_POST_PACKED_STRUCT ccx_stream_rs_t;
#define CAC_STREAM_RS_HDR_LEN (DOT11_OUI_LEN + 2) /* len from oui to tid */
/* CCX traffic stream metrics IE */
BWL_PRE_PACKED_STRUCT typedef struct {
uint8 oui[DOT11_OUI_LEN]; /* 3 bytes OUI */
uint8 oui_type; /* OUI Type */
uint8 tid; /* traffic stream ID */
uint8 state; /* metrics enable or disable */
uint16 measure_interval; /* interval time in TU */
} BWL_POST_PACKED_STRUCT ccx_ts_metrics_t;
#define CCX_CAC_TS_METRICS_TYPE 7 /* Traffic Stream Metrics type */
#define CCX_CAC_TS_RATESET_TYPE 8 /* Traffic Stream Rateset type */
#define CCX_CAC_MSDU_LIFETIME_TYPE 9 /* MSUD Lifetime type */
/* CCX Traffic Stream Metrics IE in IAPP packet */
BWL_PRE_PACKED_STRUCT typedef struct {
uint16 dialog_token; /* dialog token should set to 0 */
uint16 id; /* ID should be 0x27 */
uint16 len; /* len start from token to end of struct */
uint16 token; /* token should set to 0 */
uint8 mode; /* mode should set to 0 */
uint8 type; /* Traffic Stream Metrics type set to 6 */
uint16 avg_delay; /* average delay in msec */
uint16 cnt_delay10; /* bucket for <= 10 msec delay */
uint16 cnt_delay20; /* bucket for > 10 && <= 20 msec delay */
uint16 cnt_delay40; /* bucket for >20 && <= 40 msec delay */
uint16 cnt_delay; /* bucket for > 40 msec delay */
uint32 media_delay; /* average media delay in TU */
uint16 pkt_loss; /* packet loss per AC */
uint16 pkt_cnt; /* packet count per AC */
uint8 roam_cnt; /* roam count */
uint16 roam_delay; /* roam delay measure in TU */
/* following fields are added in CCXv5 */
uint16 used_time; /* defined in section 3.5.1 in the WMM */
uint8 tid; /* traffic stream ID */
} BWL_POST_PACKED_STRUCT ccx_tsm_param_t;
/* ccx_tsm_param_t defines */
#define CCX_TSM_LEN_DELTA 3 /* length delta between V4 and later versions */
#define CCX_TSM_LEN (sizeof(ccx_tsm_param_t)) /* length */
#define CCX_TSM_V4_LEN (CCX_TSM_LEN - CCX_TSM_LEN_DELTA)
#define CCX_TSM_IE_LEN 28 /* length (from token to end of struct) */
#define CCX_TSM_IE_V4_LEN (CCX_TSM_IE_LEN - CCX_TSM_LEN_DELTA)
#define CCX_TSM_ID 0x27 /* ID */
#define CCX_TSM_TOKEN 0 /* Token */
#define CCX_TSM_MODE 0 /* Mode */
#define CCX_TSM_TYPE 8 /* Type */
#define CCX_TSM_V4_TYPE 6 /* Type for V4 */
/* CCX IAPP packet sent to AP on ts metrics interval */
#define CCX_TSM_IAPP_PKT_LEN (DOT11_LLC_SNAP_HDR_LEN + CCX_TSM_IAPP_LEN)
#define CCX_TSM_IAPP_PKT_V4_LEN (DOT11_LLC_SNAP_HDR_LEN + CCX_TSM_IAPP_V4_LEN)
#define CCX_TSM_IAPP_LEN (CCX_IAPP_HDR_LEN + CCX_TSM_LEN)
#define CCX_TSM_IAPP_V4_LEN (CCX_IAPP_HDR_LEN + CCX_TSM_V4_LEN)
#define CCX_TSM_IAPP_SUBTYPE 0x81 /* CCX IAPP Subtype for Traffic Stream Metrics */
/* CCXv4 S60 PathLoss Measurement req */
BWL_PRE_PACKED_STRUCT struct ccx_rm_pathlossreq {
uint16 nbursts; /* Number of Bursts */
uint16 burstinterval; /* Burst Interval in seconds */
uint8 burstlen; /* Burst len */
uint16 duration; /* Measurement Duration in TUs 1024 us */
uint8 txpower; /* Desired txpower -128 to +127dBm */
struct ether_addr addr; /* multicast Address for the report */
uint8 nchannels; /* number of Channels */
uint8 channel[1]; /* Channel list */
} BWL_POST_PACKED_STRUCT;
typedef struct ccx_rm_pathlossreq ccx_rm_pathlossreq_t;
#define CCX_RM_PATHLOSSREQ_FIXEDLEN 15
/* CCXv4 S60 PathLoss Measurement Frame */
BWL_PRE_PACKED_STRUCT struct ccx_rm_pathlossmeas_frame {
uint16 seq;
int8 txpower;
uint8 txchannel;
} BWL_POST_PACKED_STRUCT;
#define CCX_RM_PATHLOSS_SEQ_MASK 0x0FFF
#define CCX_RM_IAPP_SUBTYPE 0x82 /* CCX IAPP Subtype for Pathloss Measurement */
/* This marks the end of a packed structure section. */
#include <packed_section_end.h>
#endif /* _802_11_CCX_H_ */