795 lines
28 KiB
C
795 lines
28 KiB
C
/*
|
|
* Fundamental types and constants relating to 802.11v -
|
|
* "Wireless Network Management" extending certain 802.11k -
|
|
* "Radio Resource Measurement of Wireless LANs" features
|
|
*
|
|
* WNM - Wireless Network Management
|
|
* UWNM - Unprotected Wireless Network Management
|
|
* BSSTRANS - BSS Management Transition
|
|
* TIMBC - TIM Broadcast
|
|
*
|
|
* Copyright (C) 2022, Broadcom.
|
|
*
|
|
* Unless you and Broadcom execute a separate written software license
|
|
* agreement governing use of this software, this software is licensed to you
|
|
* under the terms of the GNU General Public License version 2 (the "GPL"),
|
|
* available at http://www.broadcom.com/licenses/GPLv2.php, with the
|
|
* following added to such license:
|
|
*
|
|
* As a special exception, the copyright holders of this software give you
|
|
* permission to link this software with independent modules, and to copy and
|
|
* distribute the resulting executable under terms of your choice, provided that
|
|
* you also meet, for each linked independent module, the terms and conditions of
|
|
* the license of that module. An independent module is a module which is not
|
|
* derived from this software. The special exception does not apply to any
|
|
* modifications of the software.
|
|
*
|
|
*
|
|
* <<Broadcom-WL-IPTag/Dual:>>
|
|
*/
|
|
|
|
#ifndef _802_11v_h_
|
|
#define _802_11v_h_
|
|
|
|
#ifndef _TYPEDEFS_H_
|
|
#include <typedefs.h>
|
|
#endif
|
|
|
|
/* This marks the start of a packed structure section. */
|
|
#include <packed_section_start.h>
|
|
|
|
#define DOT11_EXTCAP_LEN_FMS 2
|
|
#define DOT11_EXTCAP_LEN_PROXY_ARP 2
|
|
#define DOT11_EXTCAP_LEN_TFS 3
|
|
#define DOT11_EXTCAP_LEN_WNM_SLEEP 3
|
|
#define DOT11_EXTCAP_LEN_TIMBC 3
|
|
#define DOT11_EXTCAP_LEN_BSSTRANS 3
|
|
#define DOT11_EXTCAP_LEN_DMS 4
|
|
#define DOT11_EXTCAP_LEN_WNM_NOTIFICATION 6
|
|
|
|
/* ************* 802.11v related definitions. ************* */
|
|
|
|
/** BSS Management Transition Query frame header */
|
|
BWL_PRE_PACKED_STRUCT struct dot11_bsstrans_query {
|
|
uint8 category; /* category of action frame (10) */
|
|
uint8 action; /* WNM action: trans_query (6) */
|
|
uint8 token; /* dialog token */
|
|
uint8 reason; /* transition query reason */
|
|
uint8 data[BCM_FLEX_ARRAY]; /* Elements */
|
|
} BWL_POST_PACKED_STRUCT;
|
|
typedef struct dot11_bsstrans_query dot11_bsstrans_query_t;
|
|
#define DOT11_BSSTRANS_QUERY_LEN 4 /* Fixed length */
|
|
|
|
/* BTM transition reason */
|
|
#define DOT11_BSSTRANS_REASON_UNSPECIFIED 0
|
|
#define DOT11_BSSTRANS_REASON_EXC_FRAME_LOSS 1
|
|
#define DOT11_BSSTRANS_REASON_EXC_TRAFFIC_DELAY 2
|
|
#define DOT11_BSSTRANS_REASON_INSUFF_QOS_CAPACITY 3
|
|
#define DOT11_BSSTRANS_REASON_FIRST_ASSOC 4
|
|
#define DOT11_BSSTRANS_REASON_LOAD_BALANCING 5
|
|
#define DOT11_BSSTRANS_REASON_BETTER_AP_FOUND 6
|
|
#define DOT11_BSSTRANS_REASON_DEAUTH_RX 7
|
|
#define DOT11_BSSTRANS_REASON_8021X_EAP_AUTH_FAIL 8
|
|
#define DOT11_BSSTRANS_REASON_4WAY_HANDSHK_FAIL 9
|
|
#define DOT11_BSSTRANS_REASON_MANY_REPLAYCNT_FAIL 10
|
|
#define DOT11_BSSTRANS_REASON_MANY_DATAMIC_FAIL 11
|
|
#define DOT11_BSSTRANS_REASON_EXCEED_MAX_RETRANS 12
|
|
#define DOT11_BSSTRANS_REASON_MANY_BCAST_DISASSOC_RX 13
|
|
#define DOT11_BSSTRANS_REASON_MANY_BCAST_DEAUTH_RX 14
|
|
#define DOT11_BSSTRANS_REASON_PREV_TRANSITION_FAIL 15
|
|
#define DOT11_BSSTRANS_REASON_LOW_RSSI 16
|
|
#define DOT11_BSSTRANS_REASON_ROAM_FROM_NON_80211 17
|
|
#define DOT11_BSSTRANS_REASON_RX_BTM_REQ 18
|
|
#define DOT11_BSSTRANS_REASON_PREF_LIST_INCLUDED 19
|
|
#define DOT11_BSSTRANS_REASON_LEAVING_ESS 20
|
|
|
|
/** BSS Management Transition Request frame header */
|
|
BWL_PRE_PACKED_STRUCT struct dot11_bsstrans_req {
|
|
uint8 category; /* category of action frame (10) */
|
|
uint8 action; /* WNM action: trans_req (7) */
|
|
uint8 token; /* dialog token */
|
|
uint8 reqmode; /* transition request mode */
|
|
uint16 disassoc_tmr; /* disassociation timer */
|
|
uint8 validity_intrvl; /* validity interval */
|
|
uint8 data[BCM_FLEX_ARRAY]; /* optional: BSS term duration, ... */
|
|
/* ...session info URL, candidate list */
|
|
} BWL_POST_PACKED_STRUCT;
|
|
typedef struct dot11_bsstrans_req dot11_bsstrans_req_t;
|
|
#define DOT11_BSSTRANS_REQ_LEN 7 /* Fixed length */
|
|
#define DOT11_BSSTRANS_REQ_FIXED_LEN 7u /* Fixed length */
|
|
|
|
/* BSS Mgmt Transition Request Mode Field - 802.11v */
|
|
#define DOT11_BSSTRANS_REQMODE_PREF_LIST_INCL 0x01
|
|
#define DOT11_BSSTRANS_REQMODE_ABRIDGED 0x02
|
|
#define DOT11_BSSTRANS_REQMODE_DISASSOC_IMMINENT 0x04
|
|
#define DOT11_BSSTRANS_REQMODE_BSS_TERM_INCL 0x08
|
|
#define DOT11_BSSTRANS_REQMODE_ESS_DISASSOC_IMNT 0x10
|
|
|
|
/** BSS Management transition response frame header */
|
|
BWL_PRE_PACKED_STRUCT struct dot11_bsstrans_resp {
|
|
uint8 category; /* category of action frame (10) */
|
|
uint8 action; /* WNM action: trans_resp (8) */
|
|
uint8 token; /* dialog token */
|
|
uint8 status; /* transition status */
|
|
uint8 term_delay; /* validity interval */
|
|
uint8 data[BCM_FLEX_ARRAY]; /* optional: BSSID target, candidate list */
|
|
} BWL_POST_PACKED_STRUCT;
|
|
typedef struct dot11_bsstrans_resp dot11_bsstrans_resp_t;
|
|
#define DOT11_BSSTRANS_RESP_LEN 5 /* Fixed length */
|
|
|
|
/* BSS Mgmt Transition Response Status Field */
|
|
#define DOT11_BSSTRANS_RESP_STATUS_ACCEPT 0
|
|
#define DOT11_BSSTRANS_RESP_STATUS_REJECT 1
|
|
#define DOT11_BSSTRANS_RESP_STATUS_REJ_INSUFF_BCN 2
|
|
#define DOT11_BSSTRANS_RESP_STATUS_REJ_INSUFF_CAP 3
|
|
#define DOT11_BSSTRANS_RESP_STATUS_REJ_TERM_UNDESIRED 4
|
|
#define DOT11_BSSTRANS_RESP_STATUS_REJ_TERM_DELAY_REQ 5
|
|
#define DOT11_BSSTRANS_RESP_STATUS_REJ_BSS_LIST_PROVIDED 6
|
|
#define DOT11_BSSTRANS_RESP_STATUS_REJ_NO_SUITABLE_BSS 7
|
|
#define DOT11_BSSTRANS_RESP_STATUS_REJ_LEAVING_ESS 8
|
|
|
|
/* Wireless Network Management (WNM) action types */
|
|
#define DOT11_WNM_ACTION_EVENT_REQ 0
|
|
#define DOT11_WNM_ACTION_EVENT_REP 1
|
|
#define DOT11_WNM_ACTION_DIAG_REQ 2
|
|
#define DOT11_WNM_ACTION_DIAG_REP 3
|
|
#define DOT11_WNM_ACTION_LOC_CFG_REQ 4
|
|
#define DOT11_WNM_ACTION_LOC_RFG_RESP 5
|
|
#define DOT11_WNM_ACTION_BSSTRANS_QUERY 6
|
|
#define DOT11_WNM_ACTION_BSSTRANS_REQ 7
|
|
#define DOT11_WNM_ACTION_BSSTRANS_RESP 8
|
|
#define DOT11_WNM_ACTION_FMS_REQ 9
|
|
#define DOT11_WNM_ACTION_FMS_RESP 10
|
|
#define DOT11_WNM_ACTION_COL_INTRFRNCE_REQ 11
|
|
#define DOT11_WNM_ACTION_COL_INTRFRNCE_REP 12
|
|
#define DOT11_WNM_ACTION_TFS_REQ 13
|
|
#define DOT11_WNM_ACTION_TFS_RESP 14
|
|
#define DOT11_WNM_ACTION_TFS_NOTIFY_REQ 15
|
|
#define DOT11_WNM_ACTION_WNM_SLEEP_REQ 16
|
|
#define DOT11_WNM_ACTION_WNM_SLEEP_RESP 17
|
|
#define DOT11_WNM_ACTION_TIMBC_REQ 18
|
|
#define DOT11_WNM_ACTION_TIMBC_RESP 19
|
|
#define DOT11_WNM_ACTION_QOS_TRFC_CAP_UPD 20
|
|
#define DOT11_WNM_ACTION_CHAN_USAGE_REQ 21
|
|
#define DOT11_WNM_ACTION_CHAN_USAGE_RESP 22
|
|
#define DOT11_WNM_ACTION_DMS_REQ 23
|
|
#define DOT11_WNM_ACTION_DMS_RESP 24
|
|
#define DOT11_WNM_ACTION_TMNG_MEASUR_REQ 25
|
|
#define DOT11_WNM_ACTION_NOTFCTN_REQ 26
|
|
#define DOT11_WNM_ACTION_NOTFCTN_RESP 27
|
|
#define DOT11_WNM_ACTION_TFS_NOTIFY_RESP 28
|
|
|
|
/* Unprotected Wireless Network Management (WNM) action types */
|
|
#define DOT11_UWNM_ACTION_TIM 0
|
|
#define DOT11_UWNM_ACTION_TIMING_MEASUREMENT 1
|
|
|
|
/** BSS Max Idle Period element */
|
|
BWL_PRE_PACKED_STRUCT struct dot11_bss_max_idle_period_ie {
|
|
uint8 id; /* 90, DOT11_MNG_BSS_MAX_IDLE_PERIOD_ID */
|
|
uint8 len;
|
|
uint16 max_idle_period; /* in unit of 1000 TUs */
|
|
uint8 idle_opt;
|
|
} BWL_POST_PACKED_STRUCT;
|
|
typedef struct dot11_bss_max_idle_period_ie dot11_bss_max_idle_period_ie_t;
|
|
#define DOT11_BSS_MAX_IDLE_PERIOD_IE_LEN 3 /* bss max idle period IE size */
|
|
#define DOT11_BSS_MAX_IDLE_PERIOD_OPT_PROTECTED 1 /* BSS max idle option */
|
|
|
|
/** TIM Broadcast request element */
|
|
BWL_PRE_PACKED_STRUCT struct dot11_timbc_req_ie {
|
|
uint8 id; /* 94, DOT11_MNG_TIMBC_REQ_ID */
|
|
uint8 len;
|
|
uint8 interval; /* in unit of beacon interval */
|
|
} BWL_POST_PACKED_STRUCT;
|
|
typedef struct dot11_timbc_req_ie dot11_timbc_req_ie_t;
|
|
#define DOT11_TIMBC_REQ_IE_LEN 1 /* Fixed length */
|
|
|
|
/** TIM Broadcast request frame header */
|
|
BWL_PRE_PACKED_STRUCT struct dot11_timbc_req {
|
|
uint8 category; /* category of action frame (10) */
|
|
uint8 action; /* WNM action: DOT11_WNM_ACTION_TIMBC_REQ(18) */
|
|
uint8 token; /* dialog token */
|
|
uint8 data[BCM_FLEX_ARRAY]; /* TIM broadcast request element */
|
|
} BWL_POST_PACKED_STRUCT;
|
|
typedef struct dot11_timbc_req dot11_timbc_req_t;
|
|
#define DOT11_TIMBC_REQ_LEN 3 /* Fixed length */
|
|
|
|
/** TIM Broadcast response element */
|
|
BWL_PRE_PACKED_STRUCT struct dot11_timbc_resp_ie {
|
|
uint8 id; /* 95, DOT11_MNG_TIM_BROADCAST_RESP_ID */
|
|
uint8 len;
|
|
uint8 status; /* status of add request */
|
|
uint8 interval; /* in unit of beacon interval */
|
|
int32 offset; /* in unit of ms */
|
|
uint16 high_rate; /* in unit of 0.5 Mb/s */
|
|
uint16 low_rate; /* in unit of 0.5 Mb/s */
|
|
} BWL_POST_PACKED_STRUCT;
|
|
typedef struct dot11_timbc_resp_ie dot11_timbc_resp_ie_t;
|
|
#define DOT11_TIMBC_DENY_RESP_IE_LEN 1 /* Deny. Fixed length */
|
|
#define DOT11_TIMBC_ACCEPT_RESP_IE_LEN 10 /* Accept. Fixed length */
|
|
|
|
#define DOT11_TIMBC_STATUS_ACCEPT 0
|
|
#define DOT11_TIMBC_STATUS_ACCEPT_TSTAMP 1
|
|
#define DOT11_TIMBC_STATUS_DENY 2
|
|
#define DOT11_TIMBC_STATUS_OVERRIDDEN 3
|
|
#define DOT11_TIMBC_STATUS_RESERVED 4
|
|
|
|
/** TIM Broadcast request frame header */
|
|
BWL_PRE_PACKED_STRUCT struct dot11_timbc_resp {
|
|
uint8 category; /* category of action frame (10) */
|
|
uint8 action; /* action: DOT11_WNM_ACTION_TIMBC_RESP(19) */
|
|
uint8 token; /* dialog token */
|
|
uint8 data[BCM_FLEX_ARRAY]; /* TIM broadcast response element */
|
|
} BWL_POST_PACKED_STRUCT;
|
|
typedef struct dot11_timbc_resp dot11_timbc_resp_t;
|
|
#define DOT11_TIMBC_RESP_LEN 3 /* Fixed length */
|
|
|
|
/** TIM Broadcast frame header */
|
|
BWL_PRE_PACKED_STRUCT struct dot11_timbc {
|
|
uint8 category; /* category of action frame (11) */
|
|
uint8 action; /* action: TIM (0) */
|
|
uint8 check_beacon; /* need to check-beacon */
|
|
uint8 tsf[8]; /* Time Synchronization Function */
|
|
dot11_tim_ie_t tim_ie; /* TIM element */
|
|
} BWL_POST_PACKED_STRUCT;
|
|
typedef struct dot11_timbc dot11_timbc_t;
|
|
#define DOT11_TIMBC_HDR_LEN (sizeof(dot11_timbc_t) - sizeof(dot11_tim_ie_t))
|
|
#define DOT11_TIMBC_FIXED_LEN (sizeof(dot11_timbc_t) - 1) /* Fixed length */
|
|
#define DOT11_TIMBC_LEN 11 /* Fixed length */
|
|
|
|
/** TFS request element */
|
|
BWL_PRE_PACKED_STRUCT struct dot11_tfs_req_ie {
|
|
uint8 id; /* 91, DOT11_MNG_TFS_REQUEST_ID */
|
|
uint8 len;
|
|
uint8 tfs_id;
|
|
uint8 actcode;
|
|
uint8 data[BCM_FLEX_ARRAY];
|
|
} BWL_POST_PACKED_STRUCT;
|
|
typedef struct dot11_tfs_req_ie dot11_tfs_req_ie_t;
|
|
#define DOT11_TFS_REQ_IE_LEN 2 /* Fixed length, without id and len */
|
|
|
|
/** TFS request action codes (bitfield) */
|
|
#define DOT11_TFS_ACTCODE_DELETE 1
|
|
#define DOT11_TFS_ACTCODE_NOTIFY 2
|
|
|
|
/** TFS request subelement IDs */
|
|
#define DOT11_TFS_REQ_TFS_SE_ID 1
|
|
#define DOT11_TFS_REQ_VENDOR_SE_ID 221
|
|
|
|
/** TFS subelement */
|
|
BWL_PRE_PACKED_STRUCT struct dot11_tfs_se {
|
|
uint8 sub_id;
|
|
uint8 len;
|
|
uint8 data[BCM_FLEX_ARRAY]; /* TCLAS element(s) + optional TCLAS proc */
|
|
} BWL_POST_PACKED_STRUCT;
|
|
typedef struct dot11_tfs_se dot11_tfs_se_t;
|
|
|
|
/** TFS response element */
|
|
BWL_PRE_PACKED_STRUCT struct dot11_tfs_resp_ie {
|
|
uint8 id; /* 92, DOT11_MNG_TFS_RESPONSE_ID */
|
|
uint8 len;
|
|
uint8 tfs_id;
|
|
uint8 data[BCM_FLEX_ARRAY];
|
|
} BWL_POST_PACKED_STRUCT;
|
|
typedef struct dot11_tfs_resp_ie dot11_tfs_resp_ie_t;
|
|
#define DOT11_TFS_RESP_IE_LEN 1u /* Fixed length, without id and len */
|
|
|
|
/** TFS response subelement IDs (same subelments, but different IDs than in TFS request */
|
|
#define DOT11_TFS_RESP_TFS_STATUS_SE_ID 1
|
|
#define DOT11_TFS_RESP_TFS_SE_ID 2
|
|
#define DOT11_TFS_RESP_VENDOR_SE_ID 221
|
|
|
|
/** TFS status subelement */
|
|
BWL_PRE_PACKED_STRUCT struct dot11_tfs_status_se {
|
|
uint8 sub_id; /* 92, DOT11_MNG_TFS_RESPONSE_ID */
|
|
uint8 len;
|
|
uint8 resp_st;
|
|
uint8 data[BCM_FLEX_ARRAY]; /* Potential dot11_tfs_se_t included */
|
|
} BWL_POST_PACKED_STRUCT;
|
|
typedef struct dot11_tfs_status_se dot11_tfs_status_se_t;
|
|
#define DOT11_TFS_STATUS_SE_LEN 1 /* Fixed length, without id and len */
|
|
|
|
/* Following Definition should be merged to FMS_TFS macro below */
|
|
/* TFS Response status code. Identical to FMS Element status, without N/A */
|
|
#define DOT11_TFS_STATUS_ACCEPT 0
|
|
#define DOT11_TFS_STATUS_DENY_FORMAT 1
|
|
#define DOT11_TFS_STATUS_DENY_RESOURCE 2
|
|
#define DOT11_TFS_STATUS_DENY_POLICY 4
|
|
#define DOT11_TFS_STATUS_DENY_UNSPECIFIED 5
|
|
#define DOT11_TFS_STATUS_ALTPREF_POLICY 7
|
|
#define DOT11_TFS_STATUS_ALTPREF_TCLAS_UNSUPP 14
|
|
|
|
/* FMS Element Status and TFS Response Status Definition */
|
|
#define DOT11_FMS_TFS_STATUS_ACCEPT 0
|
|
#define DOT11_FMS_TFS_STATUS_DENY_FORMAT 1
|
|
#define DOT11_FMS_TFS_STATUS_DENY_RESOURCE 2
|
|
#define DOT11_FMS_TFS_STATUS_DENY_MULTIPLE_DI 3
|
|
#define DOT11_FMS_TFS_STATUS_DENY_POLICY 4
|
|
#define DOT11_FMS_TFS_STATUS_DENY_UNSPECIFIED 5
|
|
#define DOT11_FMS_TFS_STATUS_ALT_DIFF_DI 6
|
|
#define DOT11_FMS_TFS_STATUS_ALT_POLICY 7
|
|
#define DOT11_FMS_TFS_STATUS_ALT_CHANGE_DI 8
|
|
#define DOT11_FMS_TFS_STATUS_ALT_MCRATE 9
|
|
#define DOT11_FMS_TFS_STATUS_TERM_POLICY 10
|
|
#define DOT11_FMS_TFS_STATUS_TERM_RESOURCE 11
|
|
#define DOT11_FMS_TFS_STATUS_TERM_HIGHER_PRIO 12
|
|
#define DOT11_FMS_TFS_STATUS_ALT_CHANGE_MDI 13
|
|
#define DOT11_FMS_TFS_STATUS_ALT_TCLAS_UNSUPP 14
|
|
|
|
/** TFS Management Request frame header */
|
|
BWL_PRE_PACKED_STRUCT struct dot11_tfs_req {
|
|
uint8 category; /* category of action frame (10) */
|
|
uint8 action; /* WNM action: TFS request (13) */
|
|
uint8 token; /* dialog token */
|
|
uint8 data[BCM_FLEX_ARRAY]; /* Elements */
|
|
} BWL_POST_PACKED_STRUCT;
|
|
typedef struct dot11_tfs_req dot11_tfs_req_t;
|
|
#define DOT11_TFS_REQ_LEN 3 /* Fixed length */
|
|
|
|
/** TFS Management Response frame header */
|
|
BWL_PRE_PACKED_STRUCT struct dot11_tfs_resp {
|
|
uint8 category; /* category of action frame (10) */
|
|
uint8 action; /* WNM action: TFS request (14) */
|
|
uint8 token; /* dialog token */
|
|
uint8 data[BCM_FLEX_ARRAY]; /* Elements */
|
|
} BWL_POST_PACKED_STRUCT;
|
|
typedef struct dot11_tfs_resp dot11_tfs_resp_t;
|
|
#define DOT11_TFS_RESP_LEN 3 /* Fixed length */
|
|
|
|
/** TFS Management Notify frame request header */
|
|
BWL_PRE_PACKED_STRUCT struct dot11_tfs_notify_req {
|
|
uint8 category; /* category of action frame (10) */
|
|
uint8 action; /* WNM action: TFS notify request (15) */
|
|
uint8 tfs_id_cnt; /* TFS IDs count */
|
|
uint8 tfs_id[BCM_FLEX_ARRAY]; /* Array of TFS IDs */
|
|
} BWL_POST_PACKED_STRUCT;
|
|
typedef struct dot11_tfs_notify_req dot11_tfs_notify_req_t;
|
|
#define DOT11_TFS_NOTIFY_REQ_LEN 3 /* Fixed length */
|
|
|
|
/** TFS Management Notify frame response header */
|
|
BWL_PRE_PACKED_STRUCT struct dot11_tfs_notify_resp {
|
|
uint8 category; /* category of action frame (10) */
|
|
uint8 action; /* WNM action: TFS notify response (28) */
|
|
uint8 tfs_id_cnt; /* TFS IDs count */
|
|
uint8 tfs_id[BCM_FLEX_ARRAY]; /* Array of TFS IDs */
|
|
} BWL_POST_PACKED_STRUCT;
|
|
typedef struct dot11_tfs_notify_resp dot11_tfs_notify_resp_t;
|
|
#define DOT11_TFS_NOTIFY_RESP_LEN 3 /* Fixed length */
|
|
|
|
/** WNM-Sleep Management Request frame header */
|
|
BWL_PRE_PACKED_STRUCT struct dot11_wnm_sleep_req {
|
|
uint8 category; /* category of action frame (10) */
|
|
uint8 action; /* WNM action: wnm-sleep request (16) */
|
|
uint8 token; /* dialog token */
|
|
uint8 data[BCM_FLEX_ARRAY]; /* Elements */
|
|
} BWL_POST_PACKED_STRUCT;
|
|
typedef struct dot11_wnm_sleep_req dot11_wnm_sleep_req_t;
|
|
#define DOT11_WNM_SLEEP_REQ_LEN 3 /* Fixed length */
|
|
|
|
/** WNM-Sleep Management Response frame header */
|
|
BWL_PRE_PACKED_STRUCT struct dot11_wnm_sleep_resp {
|
|
uint8 category; /* category of action frame (10) */
|
|
uint8 action; /* WNM action: wnm-sleep request (17) */
|
|
uint8 token; /* dialog token */
|
|
uint16 key_len; /* key data length */
|
|
uint8 data[BCM_FLEX_ARRAY]; /* Elements */
|
|
} BWL_POST_PACKED_STRUCT;
|
|
typedef struct dot11_wnm_sleep_resp dot11_wnm_sleep_resp_t;
|
|
#define DOT11_WNM_SLEEP_RESP_LEN 5 /* Fixed length */
|
|
|
|
#define DOT11_WNM_SLEEP_SUBELEM_ID_GTK 0
|
|
#define DOT11_WNM_SLEEP_SUBELEM_ID_IGTK 1
|
|
|
|
BWL_PRE_PACKED_STRUCT struct dot11_wnm_sleep_subelem_gtk {
|
|
uint8 sub_id;
|
|
uint8 len;
|
|
uint16 key_info;
|
|
uint8 key_length;
|
|
uint8 rsc[8];
|
|
uint8 key[BCM_FLEX_ARRAY];
|
|
} BWL_POST_PACKED_STRUCT;
|
|
typedef struct dot11_wnm_sleep_subelem_gtk dot11_wnm_sleep_subelem_gtk_t;
|
|
#define DOT11_WNM_SLEEP_SUBELEM_GTK_FIXED_LEN 11 /* without sub_id, len, and key */
|
|
#define DOT11_WNM_SLEEP_SUBELEM_GTK_MAX_LEN 43 /* without sub_id and len */
|
|
|
|
BWL_PRE_PACKED_STRUCT struct dot11_wnm_sleep_subelem_igtk {
|
|
uint8 sub_id;
|
|
uint8 len;
|
|
uint16 key_id;
|
|
uint8 pn[6];
|
|
uint8 key[16];
|
|
} BWL_POST_PACKED_STRUCT;
|
|
typedef struct dot11_wnm_sleep_subelem_igtk dot11_wnm_sleep_subelem_igtk_t;
|
|
#define DOT11_WNM_SLEEP_SUBELEM_IGTK_LEN 24 /* Fixed length */
|
|
|
|
BWL_PRE_PACKED_STRUCT struct dot11_wnm_sleep_ie {
|
|
uint8 id; /* 93, DOT11_MNG_WNM_SLEEP_MODE_ID */
|
|
uint8 len;
|
|
uint8 act_type;
|
|
uint8 resp_status;
|
|
uint16 interval;
|
|
} BWL_POST_PACKED_STRUCT;
|
|
typedef struct dot11_wnm_sleep_ie dot11_wnm_sleep_ie_t;
|
|
#define DOT11_WNM_SLEEP_IE_LEN 4 /* Fixed length */
|
|
|
|
#define DOT11_WNM_SLEEP_ACT_TYPE_ENTER 0
|
|
#define DOT11_WNM_SLEEP_ACT_TYPE_EXIT 1
|
|
|
|
#define DOT11_WNM_SLEEP_RESP_ACCEPT 0
|
|
#define DOT11_WNM_SLEEP_RESP_UPDATE 1
|
|
#define DOT11_WNM_SLEEP_RESP_DENY 2
|
|
#define DOT11_WNM_SLEEP_RESP_DENY_TEMP 3
|
|
#define DOT11_WNM_SLEEP_RESP_DENY_KEY 4
|
|
#define DOT11_WNM_SLEEP_RESP_DENY_INUSE 5
|
|
#define DOT11_WNM_SLEEP_RESP_LAST 6
|
|
|
|
/** DMS Management Request frame header */
|
|
BWL_PRE_PACKED_STRUCT struct dot11_dms_req {
|
|
uint8 category; /* category of action frame (10) */
|
|
uint8 action; /* WNM action: dms request (23) */
|
|
uint8 token; /* dialog token */
|
|
uint8 data[BCM_FLEX_ARRAY]; /* Elements */
|
|
} BWL_POST_PACKED_STRUCT;
|
|
typedef struct dot11_dms_req dot11_dms_req_t;
|
|
#define DOT11_DMS_REQ_LEN 3 /* Fixed length */
|
|
|
|
/** DMS Management Response frame header */
|
|
BWL_PRE_PACKED_STRUCT struct dot11_dms_resp {
|
|
uint8 category; /* category of action frame (10) */
|
|
uint8 action; /* WNM action: dms request (24) */
|
|
uint8 token; /* dialog token */
|
|
uint8 data[BCM_FLEX_ARRAY]; /* Elements */
|
|
} BWL_POST_PACKED_STRUCT;
|
|
typedef struct dot11_dms_resp dot11_dms_resp_t;
|
|
#define DOT11_DMS_RESP_LEN 3 /* Fixed length */
|
|
|
|
/** DMS request element */
|
|
BWL_PRE_PACKED_STRUCT struct dot11_dms_req_ie {
|
|
uint8 id; /* 99, DOT11_MNG_DMS_REQUEST_ID */
|
|
uint8 len;
|
|
uint8 data[BCM_FLEX_ARRAY];
|
|
} BWL_POST_PACKED_STRUCT;
|
|
typedef struct dot11_dms_req_ie dot11_dms_req_ie_t;
|
|
#define DOT11_DMS_REQ_IE_LEN 2 /* Fixed length */
|
|
|
|
/** DMS response element */
|
|
BWL_PRE_PACKED_STRUCT struct dot11_dms_resp_ie {
|
|
uint8 id; /* 100, DOT11_MNG_DMS_RESPONSE_ID */
|
|
uint8 len;
|
|
uint8 data[BCM_FLEX_ARRAY];
|
|
} BWL_POST_PACKED_STRUCT;
|
|
typedef struct dot11_dms_resp_ie dot11_dms_resp_ie_t;
|
|
#define DOT11_DMS_RESP_IE_LEN 2 /* Fixed length */
|
|
|
|
/** DMS request descriptor */
|
|
BWL_PRE_PACKED_STRUCT struct dot11_dms_req_desc {
|
|
uint8 dms_id;
|
|
uint8 len;
|
|
uint8 type;
|
|
uint8 data[BCM_FLEX_ARRAY];
|
|
} BWL_POST_PACKED_STRUCT;
|
|
typedef struct dot11_dms_req_desc dot11_dms_req_desc_t;
|
|
#define DOT11_DMS_REQ_DESC_LEN 3 /* Fixed length */
|
|
|
|
#define DOT11_DMS_REQ_TYPE_ADD 0
|
|
#define DOT11_DMS_REQ_TYPE_REMOVE 1
|
|
#define DOT11_DMS_REQ_TYPE_CHANGE 2
|
|
|
|
/** DMS response status */
|
|
BWL_PRE_PACKED_STRUCT struct dot11_dms_resp_st {
|
|
uint8 dms_id;
|
|
uint8 len;
|
|
uint8 type;
|
|
uint16 lsc;
|
|
uint8 data[BCM_FLEX_ARRAY];
|
|
} BWL_POST_PACKED_STRUCT;
|
|
typedef struct dot11_dms_resp_st dot11_dms_resp_st_t;
|
|
#define DOT11_DMS_RESP_STATUS_LEN 5 /* Fixed length */
|
|
|
|
#define DOT11_DMS_RESP_TYPE_ACCEPT 0
|
|
#define DOT11_DMS_RESP_TYPE_DENY 1
|
|
#define DOT11_DMS_RESP_TYPE_TERM 2
|
|
|
|
#define DOT11_DMS_RESP_LSC_UNSUPPORTED 0xFFFF
|
|
|
|
/** WNM-Notification Request frame header */
|
|
BWL_PRE_PACKED_STRUCT struct dot11_wnm_notif_req {
|
|
uint8 category; /* category of action frame (10) */
|
|
uint8 action; /* WNM action: Notification request (26) */
|
|
uint8 token; /* dialog token */
|
|
uint8 type; /* type */
|
|
uint8 data[BCM_FLEX_ARRAY]; /* Sub-elements */
|
|
} BWL_POST_PACKED_STRUCT;
|
|
typedef struct dot11_wnm_notif_req dot11_wnm_notif_req_t;
|
|
#define DOT11_WNM_NOTIF_REQ_LEN 4 /* Fixed length */
|
|
|
|
/** FMS Management Request frame header */
|
|
BWL_PRE_PACKED_STRUCT struct dot11_fms_req {
|
|
uint8 category; /* category of action frame (10) */
|
|
uint8 action; /* WNM action: fms request (9) */
|
|
uint8 token; /* dialog token */
|
|
uint8 data[BCM_FLEX_ARRAY]; /* Elements */
|
|
} BWL_POST_PACKED_STRUCT;
|
|
typedef struct dot11_fms_req dot11_fms_req_t;
|
|
#define DOT11_FMS_REQ_LEN 3 /* Fixed length */
|
|
|
|
/** FMS Management Response frame header */
|
|
BWL_PRE_PACKED_STRUCT struct dot11_fms_resp {
|
|
uint8 category; /* category of action frame (10) */
|
|
uint8 action; /* WNM action: fms request (10) */
|
|
uint8 token; /* dialog token */
|
|
uint8 data[BCM_FLEX_ARRAY]; /* Elements */
|
|
} BWL_POST_PACKED_STRUCT;
|
|
typedef struct dot11_fms_resp dot11_fms_resp_t;
|
|
#define DOT11_FMS_RESP_LEN 3 /* Fixed length */
|
|
|
|
/** FMS Descriptor element */
|
|
BWL_PRE_PACKED_STRUCT struct dot11_fms_desc {
|
|
uint8 id;
|
|
uint8 len;
|
|
uint8 num_fms_cnt;
|
|
uint8 data[BCM_FLEX_ARRAY];
|
|
} BWL_POST_PACKED_STRUCT;
|
|
typedef struct dot11_fms_desc dot11_fms_desc_t;
|
|
#define DOT11_FMS_DESC_LEN 1 /* Fixed length */
|
|
|
|
#define DOT11_FMS_CNTR_MAX 0x8
|
|
#define DOT11_FMS_CNTR_ID_MASK 0x7
|
|
#define DOT11_FMS_CNTR_ID_SHIFT 0x0
|
|
#define DOT11_FMS_CNTR_COUNT_MASK 0xf1
|
|
#define DOT11_FMS_CNTR_SHIFT 0x3
|
|
|
|
/** FMS request element */
|
|
BWL_PRE_PACKED_STRUCT struct dot11_fms_req_ie {
|
|
uint8 id;
|
|
uint8 len;
|
|
uint8 fms_token; /* token used to identify fms stream set */
|
|
uint8 data[BCM_FLEX_ARRAY];
|
|
} BWL_POST_PACKED_STRUCT;
|
|
typedef struct dot11_fms_req_ie dot11_fms_req_ie_t;
|
|
#define DOT11_FMS_REQ_IE_FIX_LEN 1 /* Fixed length */
|
|
|
|
BWL_PRE_PACKED_STRUCT struct dot11_rate_id_field {
|
|
uint8 mask;
|
|
uint8 mcs_idx;
|
|
uint16 rate;
|
|
} BWL_POST_PACKED_STRUCT;
|
|
typedef struct dot11_rate_id_field dot11_rate_id_field_t;
|
|
#define DOT11_RATE_ID_FIELD_MCS_SEL_MASK 0x7
|
|
#define DOT11_RATE_ID_FIELD_MCS_SEL_OFFSET 0
|
|
#define DOT11_RATE_ID_FIELD_RATETYPE_MASK 0x18
|
|
#define DOT11_RATE_ID_FIELD_RATETYPE_OFFSET 3
|
|
#define DOT11_RATE_ID_FIELD_LEN sizeof(dot11_rate_id_field_t)
|
|
|
|
/** FMS request subelements */
|
|
BWL_PRE_PACKED_STRUCT struct dot11_fms_se {
|
|
uint8 sub_id;
|
|
uint8 len;
|
|
uint8 interval;
|
|
uint8 max_interval;
|
|
dot11_rate_id_field_t rate;
|
|
uint8 data[BCM_FLEX_ARRAY];
|
|
} BWL_POST_PACKED_STRUCT;
|
|
typedef struct dot11_fms_se dot11_fms_se_t;
|
|
#define DOT11_FMS_REQ_SE_LEN 6 /* Fixed length */
|
|
|
|
#define DOT11_FMS_REQ_SE_ID_FMS 1 /* FMS subelement */
|
|
#define DOT11_FMS_REQ_SE_ID_VS 221 /* Vendor Specific subelement */
|
|
|
|
/** FMS response element */
|
|
BWL_PRE_PACKED_STRUCT struct dot11_fms_resp_ie {
|
|
uint8 id;
|
|
uint8 len;
|
|
uint8 fms_token;
|
|
uint8 data[BCM_FLEX_ARRAY];
|
|
} BWL_POST_PACKED_STRUCT;
|
|
typedef struct dot11_fms_resp_ie dot11_fms_resp_ie_t;
|
|
#define DOT11_FMS_RESP_IE_FIX_LEN 1 /* Fixed length */
|
|
|
|
/* FMS status subelements */
|
|
#define DOT11_FMS_STATUS_SE_ID_FMS 1 /* FMS Status */
|
|
#define DOT11_FMS_STATUS_SE_ID_TCLAS 2 /* TCLAS Status */
|
|
#define DOT11_FMS_STATUS_SE_ID_VS 221 /* Vendor Specific subelement */
|
|
|
|
/** FMS status subelement */
|
|
BWL_PRE_PACKED_STRUCT struct dot11_fms_status_se {
|
|
uint8 sub_id;
|
|
uint8 len;
|
|
uint8 status;
|
|
uint8 interval;
|
|
uint8 max_interval;
|
|
uint8 fmsid;
|
|
uint8 counter;
|
|
dot11_rate_id_field_t rate;
|
|
uint8 mcast_addr[ETHER_ADDR_LEN];
|
|
} BWL_POST_PACKED_STRUCT;
|
|
typedef struct dot11_fms_status_se dot11_fms_status_se_t;
|
|
#define DOT11_FMS_STATUS_SE_LEN 15 /* Fixed length */
|
|
|
|
/** TCLAS status subelement */
|
|
BWL_PRE_PACKED_STRUCT struct dot11_tclas_status_se {
|
|
uint8 sub_id;
|
|
uint8 len;
|
|
uint8 fmsid;
|
|
uint8 data[BCM_FLEX_ARRAY];
|
|
} BWL_POST_PACKED_STRUCT;
|
|
typedef struct dot11_tclas_status_se dot11_tclas_status_se_t;
|
|
#define DOT11_TCLAS_STATUS_SE_LEN 1 /* Fixed length */
|
|
|
|
/** TCLAS frame classifier type */
|
|
BWL_PRE_PACKED_STRUCT struct dot11_tclas_fc_hdr {
|
|
uint8 type;
|
|
uint8 mask;
|
|
uint8 data[BCM_FLEX_ARRAY];
|
|
} BWL_POST_PACKED_STRUCT;
|
|
typedef struct dot11_tclas_fc_hdr dot11_tclas_fc_hdr_t;
|
|
#define DOT11_TCLAS_FC_HDR_LEN 2 /* Fixed length */
|
|
|
|
#define DOT11_TCLAS_MASK_0 0x1
|
|
#define DOT11_TCLAS_MASK_1 0x2
|
|
#define DOT11_TCLAS_MASK_2 0x4
|
|
#define DOT11_TCLAS_MASK_3 0x8
|
|
#define DOT11_TCLAS_MASK_4 0x10
|
|
#define DOT11_TCLAS_MASK_5 0x20
|
|
#define DOT11_TCLAS_MASK_6 0x40
|
|
#define DOT11_TCLAS_MASK_7 0x80
|
|
|
|
#define DOT11_TCLAS_FC_0_ETH 0
|
|
#define DOT11_TCLAS_FC_1_IP 1
|
|
#define DOT11_TCLAS_FC_2_8021Q 2
|
|
#define DOT11_TCLAS_FC_3_OFFSET 3
|
|
#define DOT11_TCLAS_FC_4_IP_HIGHER 4
|
|
#define DOT11_TCLAS_FC_5_8021D 5
|
|
#define DOT11_TCLAS_FC_10_IP_HIGHER 10 /* classifier type 10, IP extensions and
|
|
* higher layer parameters
|
|
*/
|
|
|
|
/** TCLAS frame classifier type 0 parameters for Ethernet */
|
|
BWL_PRE_PACKED_STRUCT struct dot11_tclas_fc_0_eth {
|
|
uint8 type;
|
|
uint8 mask;
|
|
uint8 sa[ETHER_ADDR_LEN];
|
|
uint8 da[ETHER_ADDR_LEN];
|
|
uint16 eth_type;
|
|
} BWL_POST_PACKED_STRUCT;
|
|
typedef struct dot11_tclas_fc_0_eth dot11_tclas_fc_0_eth_t;
|
|
#define DOT11_TCLAS_FC_0_ETH_LEN 16
|
|
|
|
/** TCLAS frame classifier type 1 parameters for IPV4 */
|
|
BWL_PRE_PACKED_STRUCT struct dot11_tclas_fc_1_ipv4 {
|
|
uint8 type;
|
|
uint8 mask;
|
|
uint8 version;
|
|
uint32 src_ip;
|
|
uint32 dst_ip;
|
|
uint16 src_port;
|
|
uint16 dst_port;
|
|
uint8 dscp;
|
|
uint8 protocol;
|
|
uint8 reserved;
|
|
} BWL_POST_PACKED_STRUCT;
|
|
typedef struct dot11_tclas_fc_1_ipv4 dot11_tclas_fc_1_ipv4_t;
|
|
#define DOT11_TCLAS_FC_1_IPV4_LEN 18
|
|
|
|
/** TCLAS frame classifier type 2 parameters for 802.1Q */
|
|
BWL_PRE_PACKED_STRUCT struct dot11_tclas_fc_2_8021q {
|
|
uint8 type;
|
|
uint8 mask;
|
|
uint16 tci;
|
|
} BWL_POST_PACKED_STRUCT;
|
|
typedef struct dot11_tclas_fc_2_8021q dot11_tclas_fc_2_8021q_t;
|
|
#define DOT11_TCLAS_FC_2_8021Q_LEN 4
|
|
|
|
/** TCLAS frame classifier type 3 parameters for filter offset */
|
|
BWL_PRE_PACKED_STRUCT struct dot11_tclas_fc_3_filter {
|
|
uint8 type;
|
|
uint8 mask;
|
|
uint16 offset;
|
|
uint8 data[BCM_FLEX_ARRAY];
|
|
} BWL_POST_PACKED_STRUCT;
|
|
typedef struct dot11_tclas_fc_3_filter dot11_tclas_fc_3_filter_t;
|
|
#define DOT11_TCLAS_FC_3_FILTER_LEN 4
|
|
|
|
/** TCLAS frame classifier type 4 parameters for IPV4 is the same as TCLAS type 1 */
|
|
typedef struct dot11_tclas_fc_1_ipv4 dot11_tclas_fc_4_ipv4_t;
|
|
#define DOT11_TCLAS_FC_4_IPV4_LEN DOT11_TCLAS_FC_1_IPV4_LEN
|
|
|
|
/** TCLAS frame classifier type 4 parameters for IPV6 */
|
|
BWL_PRE_PACKED_STRUCT struct dot11_tclas_fc_4_ipv6 {
|
|
uint8 type;
|
|
uint8 mask;
|
|
uint8 version;
|
|
uint8 saddr[16];
|
|
uint8 daddr[16];
|
|
uint16 src_port;
|
|
uint16 dst_port;
|
|
uint8 dscp;
|
|
uint8 nexthdr;
|
|
uint8 flow_lbl[3];
|
|
} BWL_POST_PACKED_STRUCT;
|
|
typedef struct dot11_tclas_fc_4_ipv6 dot11_tclas_fc_4_ipv6_t;
|
|
#define DOT11_TCLAS_FC_4_IPV6_LEN 44
|
|
|
|
/** TCLAS frame classifier type 5 parameters for 802.1D */
|
|
BWL_PRE_PACKED_STRUCT struct dot11_tclas_fc_5_8021d {
|
|
uint8 type;
|
|
uint8 mask;
|
|
uint8 pcp;
|
|
uint8 cfi;
|
|
uint16 vid;
|
|
} BWL_POST_PACKED_STRUCT;
|
|
typedef struct dot11_tclas_fc_5_8021d dot11_tclas_fc_5_8021d_t;
|
|
#define DOT11_TCLAS_FC_5_8021D_LEN 6
|
|
|
|
/** TCLAS frame classifier type 10 parameters for IP extensions and higher layer parameters */
|
|
BWL_PRE_PACKED_STRUCT struct dot11_tclas_fc_10_ip_ext {
|
|
uint8 type;
|
|
uint8 proto_inst; /* protocol instance */
|
|
uint8 proto_or_nh; /* protocol(for IPv4) or next header(for IPv6) */
|
|
uint8 data[];
|
|
/* variable filter value */
|
|
/* variable filer mask */
|
|
} BWL_POST_PACKED_STRUCT;
|
|
typedef struct dot11_tclas_fc_10_ip_ext dot11_tclas_fc_10_ip_ext_t;
|
|
#define DOT11_TCLAS_FC_10_IP_EXT_LEN 3u
|
|
|
|
/** TCLAS frame classifier type parameters */
|
|
BWL_PRE_PACKED_STRUCT union dot11_tclas_fc {
|
|
uint8 data[1];
|
|
dot11_tclas_fc_hdr_t hdr;
|
|
dot11_tclas_fc_0_eth_t t0_eth;
|
|
dot11_tclas_fc_1_ipv4_t t1_ipv4;
|
|
dot11_tclas_fc_2_8021q_t t2_8021q;
|
|
dot11_tclas_fc_3_filter_t t3_filter;
|
|
dot11_tclas_fc_4_ipv4_t t4_ipv4;
|
|
dot11_tclas_fc_4_ipv6_t t4_ipv6;
|
|
dot11_tclas_fc_5_8021d_t t5_8021d;
|
|
} BWL_POST_PACKED_STRUCT;
|
|
typedef union dot11_tclas_fc dot11_tclas_fc_t;
|
|
|
|
#define DOT11_TCLAS_FC_MIN_LEN 4 /* Classifier Type 2 has the min size */
|
|
#define DOT11_TCLAS_FC_MAX_LEN 254
|
|
|
|
/** TCLAS element */
|
|
BWL_PRE_PACKED_STRUCT struct dot11_tclas_ie {
|
|
uint8 id; /* 14, DOT11_MNG_TCLAS_ID */
|
|
uint8 len;
|
|
uint8 user_priority;
|
|
dot11_tclas_fc_t fc;
|
|
} BWL_POST_PACKED_STRUCT;
|
|
typedef struct dot11_tclas_ie dot11_tclas_ie_t;
|
|
#define DOT11_TCLAS_IE_LEN 3u /* Fixed length, include id and len */
|
|
|
|
/** TCLAS processing element */
|
|
BWL_PRE_PACKED_STRUCT struct dot11_tclas_proc_ie {
|
|
uint8 id; /* 44, DOT11_MNG_TCLAS_PROC_ID */
|
|
uint8 len;
|
|
uint8 process;
|
|
} BWL_POST_PACKED_STRUCT;
|
|
typedef struct dot11_tclas_proc_ie dot11_tclas_proc_ie_t;
|
|
#define DOT11_TCLAS_PROC_IE_LEN 3 /* Fixed length, include id and len */
|
|
|
|
#define DOT11_TCLAS_PROC_LEN 1u /* Proc ie length is always 1 byte */
|
|
|
|
#define DOT11_TCLAS_PROC_MATCHALL 0 /* All high level element need to match */
|
|
#define DOT11_TCLAS_PROC_MATCHONE 1 /* One high level element need to match */
|
|
#define DOT11_TCLAS_PROC_NONMATCH 2 /* Non match to any high level element */
|
|
|
|
/* TSPEC element defined in 802.11 std section 8.4.2.32 - Not supported */
|
|
#define DOT11_TSPEC_IE_LEN 57 /* Fixed length */
|
|
|
|
/** TCLAS Mask element */
|
|
BWL_PRE_PACKED_STRUCT struct dot11_tclas_mask_ie {
|
|
uint8 id; /* DOT11_MNG_ID_EXT_ID (255) */
|
|
uint8 len;
|
|
uint8 id_ext; /* TCLAS_EXTID_MNG_MASK_ID (89) */
|
|
dot11_tclas_fc_t fc; /* Variable length frame classifier (fc) */
|
|
} BWL_POST_PACKED_STRUCT;
|
|
typedef struct dot11_tclas_mask_ie dot11_tclas_mask_ie_t;
|
|
#define DOT11_TCLAS_MASK_IE_LEN 1u /* Fixed length, excludes id and len */
|
|
#define DOT11_TCLAS_MASK_IE_HDR_LEN 3u /* Fixed length */
|
|
|
|
/* This marks the end of a packed structure section. */
|
|
#include <packed_section_end.h>
|
|
|
|
#endif /* _802_11v_h_ */
|