2 * Copyright 2007, Broadcom Corporation
5 * THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY
6 * KIND, EXPRESS OR IMPLIED, BY STATUTE, COMMUNICATION OR OTHERWISE. BROADCOM
7 * SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
8 * FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE.
10 * Fundamental types and constants relating to 802.11
22 #ifndef _NET_ETHERNET_H_
23 #include <proto/ethernet.h>
26 #include <proto/wpa.h>
28 /* enable structure packing */
30 #define PACKED __attribute__((packed))
36 #define DOT11_TU_TO_US 1024 /* 802.11 Time Unit is 1024 microseconds */
38 /* Generic 802.11 frame constants */
39 #define DOT11_A3_HDR_LEN 24 /* d11 header length with A3 */
40 #define DOT11_A4_HDR_LEN 30 /* d11 header length with A4 */
41 #define DOT11_MAC_HDR_LEN DOT11_A3_HDR_LEN /* MAC header length */
42 #define DOT11_FCS_LEN 4 /* d11 FCS length */
43 #define DOT11_ICV_LEN 4 /* d11 ICV length */
44 #define DOT11_ICV_AES_LEN 8 /* d11 ICV/AES length */
45 #define DOT11_QOS_LEN 2 /* d11 QoS length */
46 #define DOT11_HTC_LEN 4 /* d11 HT Control field length */
48 #define DOT11_KEY_INDEX_SHIFT 6 /* d11 key index shift */
49 #define DOT11_IV_LEN 4 /* d11 IV length */
50 #define DOT11_IV_TKIP_LEN 8 /* d11 IV TKIP length */
51 #define DOT11_IV_AES_OCB_LEN 4 /* d11 IV/AES/OCB length */
52 #define DOT11_IV_AES_CCM_LEN 8 /* d11 IV/AES/CCM length */
53 #define DOT11_IV_MAX_LEN 8 /* maximum iv len for any encryption */
56 #define DOT11_MAX_MPDU_BODY_LEN 2304 /* max MPDU body length */
57 /* A4 header + QoS + CCMP + PDU + ICV + FCS = 2352 */
58 #define DOT11_MAX_MPDU_LEN (DOT11_A4_HDR_LEN + \
60 DOT11_IV_AES_CCM_LEN + \
61 DOT11_MAX_MPDU_BODY_LEN + \
63 DOT11_FCS_LEN) /* d11 max MPDU length */
65 #define DOT11_MAX_SSID_LEN 32 /* d11 max ssid length */
67 /* dot11RTSThreshold */
68 #define DOT11_DEFAULT_RTS_LEN 2347 /* d11 default RTS length */
69 #define DOT11_MAX_RTS_LEN 2347 /* d11 max RTS length */
71 /* dot11FragmentationThreshold */
72 #define DOT11_MIN_FRAG_LEN 256 /* d11 min fragmentation length */
73 #define DOT11_MAX_FRAG_LEN 2346 /* Max frag is also limited by aMPDUMaxLength
76 #define DOT11_DEFAULT_FRAG_LEN 2346 /* d11 default fragmentation length */
78 /* dot11BeaconPeriod */
79 #define DOT11_MIN_BEACON_PERIOD 1 /* d11 min beacon period */
80 #define DOT11_MAX_BEACON_PERIOD 0xFFFF /* d11 max beacon period */
83 #define DOT11_MIN_DTIM_PERIOD 1 /* d11 min DTIM period */
84 #define DOT11_MAX_DTIM_PERIOD 0xFF /* d11 max DTIM period */
86 /* 802.2 LLC/SNAP header used by 802.11 per 802.1H */
87 #define DOT11_LLC_SNAP_HDR_LEN 8 /* d11 LLC/SNAP header length */
88 #define DOT11_OUI_LEN 3 /* d11 OUI length */
89 struct dot11_llc_snap_header
{
90 uint8 dsap
; /* always 0xAA */
91 uint8 ssap
; /* always 0xAA */
92 uint8 ctl
; /* always 0x03 */
93 uint8 oui
[DOT11_OUI_LEN
]; /* RFC1042: 0x00 0x00 0x00
94 * Bridge-Tunnel: 0x00 0x00 0xF8
96 uint16 type
; /* ethertype */
99 /* RFC1042 header used by 802.11 per 802.1H */
100 #define RFC1042_HDR_LEN (ETHER_HDR_LEN + DOT11_LLC_SNAP_HDR_LEN) /* RCF1042 header length */
102 /* Generic 802.11 MAC header */
104 * N.B.: This struct reflects the full 4 address 802.11 MAC header.
105 * The fields are defined such that the shorter 1, 2, and 3
106 * address headers just use the first k fields.
108 struct dot11_header
{
109 uint16 fc
; /* frame control */
110 uint16 durid
; /* duration/ID */
111 struct ether_addr a1
; /* address 1 */
112 struct ether_addr a2
; /* address 2 */
113 struct ether_addr a3
; /* address 3 */
114 uint16 seq
; /* sequence control */
115 struct ether_addr a4
; /* address 4 */
120 struct dot11_rts_frame
{
121 uint16 fc
; /* frame control */
122 uint16 durid
; /* duration/ID */
123 struct ether_addr ra
; /* receiver address */
124 struct ether_addr ta
; /* transmitter address */
126 #define DOT11_RTS_LEN 16 /* d11 RTS frame length */
128 struct dot11_cts_frame
{
129 uint16 fc
; /* frame control */
130 uint16 durid
; /* duration/ID */
131 struct ether_addr ra
; /* receiver address */
133 #define DOT11_CTS_LEN 10 /* d11 CTS frame length */
135 struct dot11_ack_frame
{
136 uint16 fc
; /* frame control */
137 uint16 durid
; /* duration/ID */
138 struct ether_addr ra
; /* receiver address */
140 #define DOT11_ACK_LEN 10 /* d11 ACK frame length */
142 struct dot11_ps_poll_frame
{
143 uint16 fc
; /* frame control */
144 uint16 durid
; /* AID */
145 struct ether_addr bssid
; /* receiver address, STA in AP */
146 struct ether_addr ta
; /* transmitter address */
148 #define DOT11_PS_POLL_LEN 16 /* d11 PS poll frame length */
150 struct dot11_cf_end_frame
{
151 uint16 fc
; /* frame control */
152 uint16 durid
; /* duration/ID */
153 struct ether_addr ra
; /* receiver address */
154 struct ether_addr bssid
; /* transmitter address, STA in AP */
156 #define DOT11_CS_END_LEN 16 /* d11 CF-END frame length */
158 /* BA/BAR Control parameters */
159 #define DOT11_BA_CTL_POLICY_NORMAL 0x0000 /* normal ack */
160 #define DOT11_BA_CTL_POLICY_NOACK 0x0001 /* no ack */
161 #define DOT11_BA_CTL_POLICY_MASK 0x0001 /* ack policy mask */
163 #define DOT11_BA_CTL_MTID 0x0002 /* multi tid BA */
164 #define DOT11_BA_CTL_COMPRESSED 0x0004 /* compressed bitmap */
166 #define DOT11_BA_CTL_NUMMSDU_MASK 0x0FC0 /* num msdu in bitmap mask */
167 #define DOT11_BA_CTL_NUMMSDU_SHIFT 6 /* num msdu in bitmap shift */
169 #define DOT11_BA_CTL_TID_MASK 0xF000 /* tid mask */
170 #define DOT11_BA_CTL_TID_SHIFT 12 /* tid shift */
172 /* control frame header (BA/BAR) */
173 struct dot11_ctl_header
{
174 uint16 fc
; /* frame control */
175 uint16 durid
; /* duration/ID */
176 struct ether_addr ra
; /* receiver address */
177 struct ether_addr ta
; /* transmitter address */
179 #define DOT11_CTL_HDR_LEN 16 /* control frame hdr len */
181 /* BAR frame payload */
183 uint16 bar_control
; /* BAR Control */
184 uint16 seqnum
; /* Starting Sequence control */
186 #define DOT11_BAR_LEN 4 /* BAR frame payload length */
188 #define DOT11_BA_BITMAP_LEN 128 /* bitmap length */
189 #define DOT11_BA_CMP_BITMAP_LEN 8 /* compressed bitmap length */
190 /* BA frame payload */
192 uint16 ba_control
; /* BA Control */
193 uint16 seqnum
; /* Starting Sequence control */
194 uint8 bitmap
[DOT11_BA_BITMAP_LEN
]; /* Block Ack Bitmap */
196 #define DOT11_BA_LEN 4 /* BA frame payload len (wo bitmap) */
198 /* Management frame header */
199 struct dot11_management_header
{
200 uint16 fc
; /* frame control */
201 uint16 durid
; /* duration/ID */
202 struct ether_addr da
; /* receiver address */
203 struct ether_addr sa
; /* transmitter address */
204 struct ether_addr bssid
; /* BSS ID */
205 uint16 seq
; /* sequence control */
207 #define DOT11_MGMT_HDR_LEN 24 /* d11 management header length */
209 /* Management frame payloads */
211 struct dot11_bcn_prb
{
213 uint16 beacon_interval
;
216 #define DOT11_BCN_PRB_LEN 12 /* 802.11 beacon/probe frame fixed length */
219 uint16 alg
; /* algorithm */
220 uint16 seq
; /* sequence control */
221 uint16 status
; /* status code */
223 #define DOT11_AUTH_FIXED_LEN 6 /* length of auth frame without challenge info
227 struct dot11_assoc_req
{
228 uint16 capability
; /* capability information */
229 uint16 listen
; /* listen interval */
231 #define DOT11_ASSOC_REQ_FIXED_LEN 4 /* length of assoc frame without info elts */
233 struct dot11_reassoc_req
{
234 uint16 capability
; /* capability information */
235 uint16 listen
; /* listen interval */
236 struct ether_addr ap
; /* Current AP address */
238 #define DOT11_REASSOC_REQ_FIXED_LEN 10 /* length of assoc frame without info elts */
240 struct dot11_assoc_resp
{
241 uint16 capability
; /* capability information */
242 uint16 status
; /* status code */
243 uint16 aid
; /* association ID */
246 struct dot11_action_measure
{
252 #define DOT11_ACTION_MEASURE_LEN 3 /* d11 action measurement header length */
254 struct dot11_action_ht_ch_width
{
260 struct dot11_action_ht_mimops
{
266 #define SM_PWRSAVE_ENABLE 1
267 #define SM_PWRSAVE_MODE 2
269 struct dot11_action_ht_info_xchg
{
275 #define DOT11_HT_INFO_XCHG_INFO_REQ 0x01
276 #define DOT11_HT_INFO_XCHG_40MHZ_INTOLERANT 0x02
277 #define DOT11_HT_INFO_XCHG_STA_CHAN_WIDTH 0x04
280 /* ************* 802.11h related definitions. ************* */
281 struct dot11_power_cnst
{
286 typedef struct dot11_power_cnst dot11_power_cnst_t
;
288 struct dot11_power_cap
{
292 typedef struct dot11_power_cap dot11_power_cap_t
;
294 struct dot11_tpc_rep
{
300 typedef struct dot11_tpc_rep dot11_tpc_rep_t
;
301 #define DOT11_MNG_IE_TPC_REPORT_LEN 2 /* length of IE data, not including 2 byte header */
303 struct dot11_supp_channels
{
309 typedef struct dot11_supp_channels dot11_supp_channels_t
;
311 /* Extension Channel Offset IE: 802.11n-D1.0 spec. added sideband
312 * offset for 40MHz operation. The possible 3 values are:
313 * 1 = above control channel
314 * 3 = below control channel
315 * 0 = no extension channel
318 uint8 id
; /* IE ID, 62, DOT11_MNG_EXT_CHANNEL_OFFSET */
319 uint8 len
; /* IE length */
322 typedef struct dot11_extch dot11_extch_ie_t
;
324 struct dot11_brcm_extch
{
325 uint8 id
; /* IE ID, 221, DOT11_MNG_PROPR_ID */
326 uint8 len
; /* IE length */
327 uint8 oui
[3]; /* Proprietary OUI, BRCM_OUI */
328 uint8 type
; /* type inidicates what follows */
331 typedef struct dot11_brcm_extch dot11_brcm_extch_ie_t
;
333 #define BRCM_EXTCH_IE_LEN 5
334 #define BRCM_EXTCH_IE_TYPE 53 /* 802.11n ID not yet assigned */
335 #define DOT11_EXTCH_IE_LEN 1
336 #define DOT11_EXT_CH_MASK 0x03 /* extension channel mask */
337 #define DOT11_EXT_CH_UPPER 0x01 /* ext. ch. on upper sb */
338 #define DOT11_EXT_CH_LOWER 0x03 /* ext. ch. on lower sb */
339 #define DOT11_EXT_CH_NONE 0x00 /* no extension ch. */
341 struct dot11_action_frmhdr
{
347 /* CSA IE data structure */
348 struct dot11_channel_switch
{
349 uint8 id
; /* id DOT11_MNG_CHANNEL_SWITCH_ID */
350 uint8 len
; /* length of IE */
351 uint8 mode
; /* mode 0 or 1 */
352 uint8 channel
; /* channel switch to */
353 uint8 count
; /* number of beacons before switching */
355 typedef struct dot11_channel_switch dot11_chan_switch_ie_t
;
357 #define DOT11_SWITCH_IE_LEN 3 /* length of IE data, not including 2 byte header */
358 /* CSA mode - 802.11h-2003 $7.3.2.20 */
359 #define DOT11_CSA_MODE_ADVISORY 0 /* no DOT11_CSA_MODE_NO_TX restriction imposed */
360 #define DOT11_CSA_MODE_NO_TX 1 /* no transmission upon receiving CSA frame. */
362 struct dot11_action_switch_channel
{
365 dot11_chan_switch_ie_t chan_switch_ie
; /* for switch IE */
366 dot11_brcm_extch_ie_t extch_ie
; /* extension channel offset */
369 /* 11n Extended Channel Switch IE data structure */
370 struct dot11_ext_csa
{
371 uint8 id
; /* id DOT11_MNG_EXT_CHANNEL_SWITCH_ID */
372 uint8 len
; /* length of IE */
373 uint8 mode
; /* mode 0 or 1 */
374 uint8 reg
; /* regulatory class */
375 uint8 channel
; /* channel switch to */
376 uint8 count
; /* number of beacons before switching */
378 typedef struct dot11_ext_csa dot11_ext_csa_ie_t
;
379 #define DOT11_EXT_CSA_IE_LEN 4 /* length of extended channel switch IE body */
381 struct dot11_action_ext_csa
{
384 dot11_ext_csa_ie_t chan_switch_ie
; /* for switch IE */
387 /* 802.11h Measurement Request/Report IEs */
388 /* Measurement Type field */
389 #define DOT11_MEASURE_TYPE_BASIC 0 /* d11 measurement basic type */
390 #define DOT11_MEASURE_TYPE_CCA 1 /* d11 measurement CCA type */
391 #define DOT11_MEASURE_TYPE_RPI 2 /* d11 measurement PRI type */
393 /* Measurement Request Modes */
394 #define DOT11_MEASURE_MODE_ENABLE (1<<1) /* d11 measurement enable */
395 #define DOT11_MEASURE_MODE_REQUEST (1<<2) /* d11 measurement request */
396 #define DOT11_MEASURE_MODE_REPORT (1<<3) /* d11 measurement report */
397 /* Measurement Report Modes */
398 #define DOT11_MEASURE_MODE_LATE (1<<0) /* d11 measurement late */
399 #define DOT11_MEASURE_MODE_INCAPABLE (1<<1) /* d11 measurement incapable */
400 #define DOT11_MEASURE_MODE_REFUSED (1<<2) /* d11 measurement refuse */
401 /* Basic Measurement Map bits */
402 #define DOT11_MEASURE_BASIC_MAP_BSS ((uint8)(1<<0)) /* d11 measurement basic map BSS */
403 #define DOT11_MEASURE_BASIC_MAP_OFDM ((uint8)(1<<1)) /* d11 measurement map OFDM */
404 #define DOT11_MEASURE_BASIC_MAP_UKNOWN ((uint8)(1<<2)) /* d11 measurement map unknown */
405 #define DOT11_MEASURE_BASIC_MAP_RADAR ((uint8)(1<<3)) /* d11 measurement map radar */
406 #define DOT11_MEASURE_BASIC_MAP_UNMEAS ((uint8)(1<<4)) /* d11 measurement map unmeasuremnt */
408 struct dot11_meas_req
{
418 typedef struct dot11_meas_req dot11_meas_req_t
;
419 #define DOT11_MNG_IE_MREQ_LEN 14 /* d11 measurement request IE length */
420 /* length of Measure Request IE data not including variable len */
421 #define DOT11_MNG_IE_MREQ_FIXED_LEN 3 /* d11 measurement request IE fixed length */
423 struct dot11_meas_rep
{
440 typedef struct dot11_meas_rep dot11_meas_rep_t
;
442 /* length of Measure Report IE data not including variable len */
443 #define DOT11_MNG_IE_MREP_FIXED_LEN 3 /* d11 measurement response IE fixed length */
445 struct dot11_meas_rep_basic
{
451 typedef struct dot11_meas_rep_basic dot11_meas_rep_basic_t
;
452 #define DOT11_MEASURE_BASIC_REP_LEN 12 /* d11 measurement basic report length */
457 uint8 count
; /* TBTTs until beacon interval in quiet starts */
458 uint8 period
; /* Beacon intervals between periodic quiet periods ? */
459 uint16 duration
; /* Length of quiet period, in TU's */
460 uint16 offset
; /* TU's offset from TBTT in Count field */
462 typedef struct dot11_quiet dot11_quiet_t
;
464 struct chan_map_tuple
{
468 typedef struct chan_map_tuple chan_map_tuple_t
;
470 struct dot11_ibss_dfs
{
473 uint8 eaddr
[ETHER_ADDR_LEN
];
475 chan_map_tuple_t map
[1];
477 typedef struct dot11_ibss_dfs dot11_ibss_dfs_t
;
480 #define WME_OUI "\x00\x50\xf2" /* WME OUI */
481 #define WME_VER 1 /* WME version */
482 #define WME_TYPE 2 /* WME type */
483 #define WME_SUBTYPE_IE 0 /* Information Element */
484 #define WME_SUBTYPE_PARAM_IE 1 /* Parameter Element */
485 #define WME_SUBTYPE_TSPEC 2 /* Traffic Specification */
487 /* WME Access Category Indices (ACIs) */
488 #define AC_BE 0 /* Best Effort */
489 #define AC_BK 1 /* Background */
490 #define AC_VI 2 /* Video */
491 #define AC_VO 3 /* Voice */
492 #define AC_COUNT 4 /* number of ACs */
494 typedef uint8 ac_bitmap_t
; /* AC bitmap of (1 << AC_xx) */
496 #define AC_BITMAP_NONE 0x0 /* No ACs */
497 #define AC_BITMAP_ALL 0xf /* All ACs */
498 #define AC_BITMAP_TST(ab, ac) (((ab) & (1 << (ac))) != 0)
500 /* WME Information Element (IE) */
508 typedef struct wme_ie wme_ie_t
;
509 #define WME_IE_LEN 7 /* WME IE length */
511 struct edcf_acparam
{
514 uint16 TXOP
; /* stored in network order (ls octet first) */
516 typedef struct edcf_acparam edcf_acparam_t
;
518 /* WME Parameter Element (PE) */
519 struct wme_param_ie
{
526 edcf_acparam_t acparam
[AC_COUNT
];
528 typedef struct wme_param_ie wme_param_ie_t
;
529 #define WME_PARAM_IE_LEN 24 /* WME Parameter IE length */
531 /* QoS Info field for IE as sent from AP */
532 #define WME_QI_AP_APSD_MASK 0x80 /* U-APSD Supported mask */
533 #define WME_QI_AP_APSD_SHIFT 7 /* U-APSD Supported shift */
534 #define WME_QI_AP_COUNT_MASK 0x0f /* Parameter set count mask */
535 #define WME_QI_AP_COUNT_SHIFT 0 /* Parameter set count shift */
537 /* QoS Info field for IE as sent from STA */
538 #define WME_QI_STA_MAXSPLEN_MASK 0x60 /* Max Service Period Length mask */
539 #define WME_QI_STA_MAXSPLEN_SHIFT 5 /* Max Service Period Length shift */
540 #define WME_QI_STA_APSD_ALL_MASK 0xf /* APSD all AC bits mask */
541 #define WME_QI_STA_APSD_ALL_SHIFT 0 /* APSD all AC bits shift */
542 #define WME_QI_STA_APSD_BE_MASK 0x8 /* APSD AC_BE mask */
543 #define WME_QI_STA_APSD_BE_SHIFT 3 /* APSD AC_BE shift */
544 #define WME_QI_STA_APSD_BK_MASK 0x4 /* APSD AC_BK mask */
545 #define WME_QI_STA_APSD_BK_SHIFT 2 /* APSD AC_BK shift */
546 #define WME_QI_STA_APSD_VI_MASK 0x2 /* APSD AC_VI mask */
547 #define WME_QI_STA_APSD_VI_SHIFT 1 /* APSD AC_VI shift */
548 #define WME_QI_STA_APSD_VO_MASK 0x1 /* APSD AC_VO mask */
549 #define WME_QI_STA_APSD_VO_SHIFT 0 /* APSD AC_VO shift */
552 #define EDCF_AIFSN_MIN 1 /* AIFSN minimum value */
553 #define EDCF_AIFSN_MAX 15 /* AIFSN maximum value */
554 #define EDCF_AIFSN_MASK 0x0f /* AIFSN mask */
555 #define EDCF_ACM_MASK 0x10 /* ACM mask */
556 #define EDCF_ACI_MASK 0x60 /* ACI mask */
557 #define EDCF_ACI_SHIFT 5 /* ACI shift */
560 #define EDCF_ECW_MIN 0 /* cwmin/cwmax exponent minimum value */
561 #define EDCF_ECW_MAX 15 /* cwmin/cwmax exponent maximum value */
562 #define EDCF_ECW2CW(exp) ((1 << (exp)) - 1)
563 #define EDCF_ECWMIN_MASK 0x0f /* cwmin exponent form mask */
564 #define EDCF_ECWMAX_MASK 0xf0 /* cwmax exponent form mask */
565 #define EDCF_ECWMAX_SHIFT 4 /* cwmax exponent form shift */
568 #define EDCF_TXOP_MIN 0 /* TXOP minimum value */
569 #define EDCF_TXOP_MAX 65535 /* TXOP maximum value */
570 #define EDCF_TXOP2USEC(txop) ((txop) << 5)
572 /* Default EDCF parameters that AP advertises for STA to use; WMM draft Table 12 */
573 #define EDCF_AC_BE_ACI_STA 0x03 /* STA ACI value for best effort AC */
574 #define EDCF_AC_BE_ECW_STA 0xA4 /* STA ECW value for best effort AC */
575 #define EDCF_AC_BE_TXOP_STA 0x0000 /* STA TXOP value for best effort AC */
576 #define EDCF_AC_BK_ACI_STA 0x27 /* STA ACI value for background AC */
577 #define EDCF_AC_BK_ECW_STA 0xA4 /* STA ECW value for background AC */
578 #define EDCF_AC_BK_TXOP_STA 0x0000 /* STA TXOP value for background AC */
579 #define EDCF_AC_VI_ACI_STA 0x42 /* STA ACI value for video AC */
580 #define EDCF_AC_VI_ECW_STA 0x43 /* STA ECW value for video AC */
581 #define EDCF_AC_VI_TXOP_STA 0x005e /* STA TXOP value for video AC */
582 #define EDCF_AC_VO_ACI_STA 0x62 /* STA ACI value for audio AC */
583 #define EDCF_AC_VO_ECW_STA 0x32 /* STA ECW value for audio AC */
584 #define EDCF_AC_VO_TXOP_STA 0x002f /* STA TXOP value for audio AC */
586 /* Default EDCF parameters that AP uses; WMM draft Table 14 */
587 #define EDCF_AC_BE_ACI_AP 0x03 /* AP ACI value for best effort AC */
588 #define EDCF_AC_BE_ECW_AP 0x64 /* AP ECW value for best effort AC */
589 #define EDCF_AC_BE_TXOP_AP 0x0000 /* AP TXOP value for best effort AC */
590 #define EDCF_AC_BK_ACI_AP 0x27 /* AP ACI value for background AC */
591 #define EDCF_AC_BK_ECW_AP 0xA4 /* AP ECW value for background AC */
592 #define EDCF_AC_BK_TXOP_AP 0x0000 /* AP TXOP value for background AC */
593 #define EDCF_AC_VI_ACI_AP 0x41 /* AP ACI value for video AC */
594 #define EDCF_AC_VI_ECW_AP 0x43 /* AP ECW value for video AC */
595 #define EDCF_AC_VI_TXOP_AP 0x005e /* AP TXOP value for video AC */
596 #define EDCF_AC_VO_ACI_AP 0x61 /* AP ACI value for audio AC */
597 #define EDCF_AC_VO_ECW_AP 0x32 /* AP ECW value for audio AC */
598 #define EDCF_AC_VO_TXOP_AP 0x002f /* AP TXOP value for audio AC */
600 struct dot11_qbss_load_ie
{
601 uint8 id
; /* 11, DOT11_MNG_QBSS_LOAD_ID */
603 uint16 station_count
; /* total number of STAs associated */
604 uint8 channel_utilization
; /* % of time, normalized to 255, QAP sensed medium busy */
605 uint16 aac
; /* available admission capacity */
607 typedef struct dot11_qbss_load_ie dot11_qbss_load_ie_t
;
610 #define FIXED_MSDU_SIZE 0x8000 /* MSDU size is fixed */
611 #define MSDU_SIZE_MASK 0x7fff /* (Nominal or fixed) MSDU size */
613 /* surplus_bandwidth */
614 /* Represented as 3 bits of integer, binary point, 13 bits fraction */
615 #define INTEGER_SHIFT 13 /* integer shift */
616 #define FRACTION_MASK 0x1FFF /* fraction mask */
618 /* Management Notification Frame */
619 struct dot11_management_notification
{
620 uint8 category
; /* DOT11_ACTION_NOTIFICATION */
624 uint8 data
[1]; /* Elements */
626 #define DOT11_MGMT_NOTIFICATION_LEN 4 /* Fixed length */
628 /* WME Action Codes */
629 #define WME_ADDTS_REQUEST 0 /* WME ADDTS request */
630 #define WME_ADDTS_RESPONSE 1 /* WME ADDTS response */
631 #define WME_DELTS_REQUEST 2 /* WME DELTS request */
633 /* WME Setup Response Status Codes */
634 #define WME_ADMISSION_ACCEPTED 0 /* WME admission accepted */
635 #define WME_INVALID_PARAMETERS 1 /* WME invalide parameters */
636 #define WME_ADMISSION_REFUSED 3 /* WME admission refused */
638 /* Macro to take a pointer to a beacon or probe response
639 * body and return the char* pointer to the SSID info element
641 #define BCN_PRB_SSID(body) ((char*)(body) + DOT11_BCN_PRB_LEN)
643 /* Authentication frame payload constants */
644 #define DOT11_OPEN_SYSTEM 0 /* d11 open authentication */
645 #define DOT11_SHARED_KEY 1 /* d11 shared authentication */
646 #define DOT11_CHALLENGE_LEN 128 /* d11 challenge text length */
648 /* Frame control macros */
649 #define FC_PVER_MASK 0x3 /* PVER mask */
650 #define FC_PVER_SHIFT 0 /* PVER shift */
651 #define FC_TYPE_MASK 0xC /* type mask */
652 #define FC_TYPE_SHIFT 2 /* type shift */
653 #define FC_SUBTYPE_MASK 0xF0 /* subtype mask */
654 #define FC_SUBTYPE_SHIFT 4 /* subtype shift */
655 #define FC_TODS 0x100 /* to DS */
656 #define FC_TODS_SHIFT 8 /* to DS shift */
657 #define FC_FROMDS 0x200 /* from DS */
658 #define FC_FROMDS_SHIFT 9 /* from DS shift */
659 #define FC_MOREFRAG 0x400 /* more frag. */
660 #define FC_MOREFRAG_SHIFT 10 /* more frag. shift */
661 #define FC_RETRY 0x800 /* retry */
662 #define FC_RETRY_SHIFT 11 /* retry shift */
663 #define FC_PM 0x1000 /* PM */
664 #define FC_PM_SHIFT 12 /* PM shift */
665 #define FC_MOREDATA 0x2000 /* more data */
666 #define FC_MOREDATA_SHIFT 13 /* more data shift */
667 #define FC_WEP 0x4000 /* WEP */
668 #define FC_WEP_SHIFT 14 /* WEP shift */
669 #define FC_ORDER 0x8000 /* order */
670 #define FC_ORDER_SHIFT 15 /* order shift */
672 /* sequence control macros */
673 #define SEQNUM_SHIFT 4 /* seq. number shift */
674 #define SEQNUM_MAX 0x1000 /* max seqnum + 1 */
675 #define FRAGNUM_MASK 0xF /* frag. number mask */
677 /* Frame Control type/subtype defs */
680 #define FC_TYPE_MNG 0 /* management type */
681 #define FC_TYPE_CTL 1 /* control type */
682 #define FC_TYPE_DATA 2 /* data type */
684 /* Management Subtypes */
685 #define FC_SUBTYPE_ASSOC_REQ 0 /* assoc. request */
686 #define FC_SUBTYPE_ASSOC_RESP 1 /* assoc. response */
687 #define FC_SUBTYPE_REASSOC_REQ 2 /* reassoc. request */
688 #define FC_SUBTYPE_REASSOC_RESP 3 /* reassoc. response */
689 #define FC_SUBTYPE_PROBE_REQ 4 /* probe request */
690 #define FC_SUBTYPE_PROBE_RESP 5 /* probe response */
691 #define FC_SUBTYPE_BEACON 8 /* beacon */
692 #define FC_SUBTYPE_ATIM 9 /* ATIM */
693 #define FC_SUBTYPE_DISASSOC 10 /* disassoc. */
694 #define FC_SUBTYPE_AUTH 11 /* authentication */
695 #define FC_SUBTYPE_DEAUTH 12 /* de-authentication */
696 #define FC_SUBTYPE_ACTION 13 /* action */
697 #define FC_SUBTYPE_ACTION_NOACK 14 /* action no-ack */
699 /* Control Subtypes */
700 #define FC_SUBTYPE_CTL_WRAPPER 7 /* Control Wrapper */
701 #define FC_SUBTYPE_BLOCKACK_REQ 8 /* Block Ack Req */
702 #define FC_SUBTYPE_BLOCKACK 9 /* Block Ack */
703 #define FC_SUBTYPE_PS_POLL 10 /* PS poll */
704 #define FC_SUBTYPE_RTS 11 /* RTS */
705 #define FC_SUBTYPE_CTS 12 /* CTS */
706 #define FC_SUBTYPE_ACK 13 /* ACK */
707 #define FC_SUBTYPE_CF_END 14 /* CF-END */
708 #define FC_SUBTYPE_CF_END_ACK 15 /* CF-END ACK */
711 #define FC_SUBTYPE_DATA 0 /* Data */
712 #define FC_SUBTYPE_DATA_CF_ACK 1 /* Data + CF-ACK */
713 #define FC_SUBTYPE_DATA_CF_POLL 2 /* Data + CF-Poll */
714 #define FC_SUBTYPE_DATA_CF_ACK_POLL 3 /* Data + CF-Ack + CF-Poll */
715 #define FC_SUBTYPE_NULL 4 /* Null */
716 #define FC_SUBTYPE_CF_ACK 5 /* CF-Ack */
717 #define FC_SUBTYPE_CF_POLL 6 /* CF-Poll */
718 #define FC_SUBTYPE_CF_ACK_POLL 7 /* CF-Ack + CF-Poll */
719 #define FC_SUBTYPE_QOS_DATA 8 /* QoS Data */
720 #define FC_SUBTYPE_QOS_DATA_CF_ACK 9 /* QoS Data + CF-Ack */
721 #define FC_SUBTYPE_QOS_DATA_CF_POLL 10 /* QoS Data + CF-Poll */
722 #define FC_SUBTYPE_QOS_DATA_CF_ACK_POLL 11 /* QoS Data + CF-Ack + CF-Poll */
723 #define FC_SUBTYPE_QOS_NULL 12 /* QoS Null */
724 #define FC_SUBTYPE_QOS_CF_POLL 14 /* QoS CF-Poll */
725 #define FC_SUBTYPE_QOS_CF_ACK_POLL 15 /* QoS CF-Ack + CF-Poll */
727 /* Data Subtype Groups */
728 #define FC_SUBTYPE_ANY_QOS(s) (((s) & 8) != 0)
729 #define FC_SUBTYPE_ANY_NULL(s) (((s) & 4) != 0)
730 #define FC_SUBTYPE_ANY_CF_POLL(s) (((s) & 2) != 0)
731 #define FC_SUBTYPE_ANY_CF_ACK(s) (((s) & 1) != 0)
733 /* Type/Subtype Combos */
734 #define FC_KIND_MASK (FC_TYPE_MASK | FC_SUBTYPE_MASK) /* FC kind mask */
736 #define FC_KIND(t, s) (((t) << FC_TYPE_SHIFT) | ((s) << FC_SUBTYPE_SHIFT)) /* FC kind */
738 #define FC_SUBTYPE(fc) (((fc) & FC_SUBTYPE_MASK) >> FC_SUBTYPE_SHIFT) /* Subtype from FC */
739 #define FC_TYPE(fc) (((fc) & FC_TYPE_MASK) >> FC_TYPE_SHIFT) /* Type from FC */
741 #define FC_ASSOC_REQ FC_KIND(FC_TYPE_MNG, FC_SUBTYPE_ASSOC_REQ) /* assoc. request */
742 #define FC_ASSOC_RESP FC_KIND(FC_TYPE_MNG, FC_SUBTYPE_ASSOC_RESP) /* assoc. response */
743 #define FC_REASSOC_REQ FC_KIND(FC_TYPE_MNG, FC_SUBTYPE_REASSOC_REQ) /* reassoc. request */
744 #define FC_REASSOC_RESP FC_KIND(FC_TYPE_MNG, FC_SUBTYPE_REASSOC_RESP) /* reassoc. response */
745 #define FC_PROBE_REQ FC_KIND(FC_TYPE_MNG, FC_SUBTYPE_PROBE_REQ) /* probe request */
746 #define FC_PROBE_RESP FC_KIND(FC_TYPE_MNG, FC_SUBTYPE_PROBE_RESP) /* probe response */
747 #define FC_BEACON FC_KIND(FC_TYPE_MNG, FC_SUBTYPE_BEACON) /* beacon */
748 #define FC_DISASSOC FC_KIND(FC_TYPE_MNG, FC_SUBTYPE_DISASSOC) /* disassoc */
749 #define FC_AUTH FC_KIND(FC_TYPE_MNG, FC_SUBTYPE_AUTH) /* authentication */
750 #define FC_DEAUTH FC_KIND(FC_TYPE_MNG, FC_SUBTYPE_DEAUTH) /* deauthentication */
751 #define FC_ACTION FC_KIND(FC_TYPE_MNG, FC_SUBTYPE_ACTION) /* action */
752 #define FC_ACTION_NOACK FC_KIND(FC_TYPE_MNG, FC_SUBTYPE_ACTION_NOACK) /* action no-ack */
754 #define FC_CTL_WRAPPER FC_KIND(FC_TYPE_CTL, FC_SUBTYPE_CTL_WRAPPER) /* Control Wrapper */
755 #define FC_BLOCKACK_REQ FC_KIND(FC_TYPE_CTL, FC_SUBTYPE_BLOCKACK_REQ) /* Block Ack Req */
756 #define FC_BLOCKACK FC_KIND(FC_TYPE_CTL, FC_SUBTYPE_BLOCKACK) /* Block Ack */
757 #define FC_PS_POLL FC_KIND(FC_TYPE_CTL, FC_SUBTYPE_PS_POLL) /* PS poll */
758 #define FC_RTS FC_KIND(FC_TYPE_CTL, FC_SUBTYPE_RTS) /* RTS */
759 #define FC_CTS FC_KIND(FC_TYPE_CTL, FC_SUBTYPE_CTS) /* CTS */
760 #define FC_ACK FC_KIND(FC_TYPE_CTL, FC_SUBTYPE_ACK) /* ACK */
761 #define FC_CF_END FC_KIND(FC_TYPE_CTL, FC_SUBTYPE_CF_END) /* CF-END */
762 #define FC_CF_END_ACK FC_KIND(FC_TYPE_CTL, FC_SUBTYPE_CF_END_ACK) /* CF-END ACK */
764 #define FC_DATA FC_KIND(FC_TYPE_DATA, FC_SUBTYPE_DATA) /* data */
765 #define FC_NULL_DATA FC_KIND(FC_TYPE_DATA, FC_SUBTYPE_NULL) /* null data */
766 #define FC_DATA_CF_ACK FC_KIND(FC_TYPE_DATA, FC_SUBTYPE_DATA_CF_ACK) /* data CF ACK */
767 #define FC_QOS_DATA FC_KIND(FC_TYPE_DATA, FC_SUBTYPE_QOS_DATA) /* QoS data */
768 #define FC_QOS_NULL FC_KIND(FC_TYPE_DATA, FC_SUBTYPE_QOS_NULL) /* QoS null */
770 /* QoS Control Field */
772 /* 802.1D Priority */
773 #define QOS_PRIO_SHIFT 0 /* QoS priority shift */
774 #define QOS_PRIO_MASK 0x0007 /* QoS priority mask */
775 #define QOS_PRIO(qos) (((qos) & QOS_PRIO_MASK) >> QOS_PRIO_SHIFT) /* QoS priority */
777 /* Traffic Identifier */
778 #define QOS_TID_SHIFT 0 /* QoS TID shift */
779 #define QOS_TID_MASK 0x000f /* QoS TID mask */
780 #define QOS_TID(qos) (((qos) & QOS_TID_MASK) >> QOS_TID_SHIFT) /* QoS TID */
782 /* End of Service Period (U-APSD) */
783 #define QOS_EOSP_SHIFT 4 /* QoS End of Service Period shift */
784 #define QOS_EOSP_MASK 0x0010 /* QoS End of Service Period mask */
785 #define QOS_EOSP(qos) (((qos) & QOS_EOSP_MASK) >> QOS_EOSP_SHIFT) /* Qos EOSP */
788 #define QOS_ACK_NORMAL_ACK 0 /* Normal Ack */
789 #define QOS_ACK_NO_ACK 1 /* No Ack (eg mcast) */
790 #define QOS_ACK_NO_EXP_ACK 2 /* No Explicit Ack */
791 #define QOS_ACK_BLOCK_ACK 3 /* Block Ack */
792 #define QOS_ACK_SHIFT 5 /* QoS ACK shift */
793 #define QOS_ACK_MASK 0x0060 /* QoS ACK mask */
794 #define QOS_ACK(qos) (((qos) & QOS_ACK_MASK) >> QOS_ACK_SHIFT) /* QoS ACK */
797 #define QOS_AMSDU_SHIFT 7 /* AMSDU shift */
798 #define QOS_AMSDU_MASK 0x0080 /* AMSDU mask */
800 /* Management Frames */
802 /* Management Frame Constants */
805 #define DOT11_MNG_AUTH_ALGO_LEN 2 /* d11 management auth. algo. length */
806 #define DOT11_MNG_AUTH_SEQ_LEN 2 /* d11 management auth. seq. length */
807 #define DOT11_MNG_BEACON_INT_LEN 2 /* d11 management beacon interval length */
808 #define DOT11_MNG_CAP_LEN 2 /* d11 management cap. length */
809 #define DOT11_MNG_AP_ADDR_LEN 6 /* d11 management AP address length */
810 #define DOT11_MNG_LISTEN_INT_LEN 2 /* d11 management listen interval length */
811 #define DOT11_MNG_REASON_LEN 2 /* d11 management reason length */
812 #define DOT11_MNG_AID_LEN 2 /* d11 management AID length */
813 #define DOT11_MNG_STATUS_LEN 2 /* d11 management status length */
814 #define DOT11_MNG_TIMESTAMP_LEN 8 /* d11 management timestamp length */
816 /* DUR/ID field in assoc resp is 0xc000 | AID */
817 #define DOT11_AID_MASK 0x3fff /* d11 AID mask */
820 #define DOT11_RC_RESERVED 0 /* d11 RC reserved */
821 #define DOT11_RC_UNSPECIFIED 1 /* Unspecified reason */
822 #define DOT11_RC_AUTH_INVAL 2 /* Previous authentication no longer valid */
823 #define DOT11_RC_DEAUTH_LEAVING 3 /* Deauthenticated because sending station
824 * is leaving (or has left) IBSS or ESS
826 #define DOT11_RC_INACTIVITY 4 /* Disassociated due to inactivity */
827 #define DOT11_RC_BUSY 5 /* Disassociated because AP is unable to handle
828 * all currently associated stations
830 #define DOT11_RC_INVAL_CLASS_2 6 /* Class 2 frame received from
831 * nonauthenticated station
833 #define DOT11_RC_INVAL_CLASS_3 7 /* Class 3 frame received from
834 * nonassociated station
836 #define DOT11_RC_DISASSOC_LEAVING 8 /* Disassociated because sending station is
837 * leaving (or has left) BSS
839 #define DOT11_RC_NOT_AUTH 9 /* Station requesting (re)association is not
840 * authenticated with responding station
842 #define DOT11_RC_BAD_PC 10 /* Unacceptable power capability element */
843 #define DOT11_RC_BAD_CHANNELS 11 /* Unacceptable supported channels element */
846 /* 32-39 are QSTA specific reasons added in 11e */
847 #define DOT11_RC_UNSPECIFIED_QOS 32 /* unspecified QoS-related reason */
848 #define DOT11_RC_INSUFFCIENT_BW 33 /* QAP lacks sufficient bandwidth */
849 #define DOT11_RC_EXCESSIVE_FRAMES 34 /* excessive number of frames need ack */
850 #define DOT11_RC_TX_OUTSIDE_TXOP 35 /* transmitting outside the limits of txop */
851 #define DOT11_RC_LEAVING_QBSS 36 /* QSTA is leaving the QBSS (or restting) */
852 #define DOT11_RC_BAD_MECHANISM 37 /* does not want to use the mechanism */
853 #define DOT11_RC_SETUP_NEEDED 38 /* mechanism needs a setup */
854 #define DOT11_RC_TIMEOUT 39 /* timeout */
856 #define DOT11_RC_MAX 23 /* Reason codes > 23 are reserved */
859 #define DOT11_SC_SUCCESS 0 /* Successful */
860 #define DOT11_SC_FAILURE 1 /* Unspecified failure */
861 #define DOT11_SC_CAP_MISMATCH 10 /* Cannot support all requested
862 * capabilities in the Capability
865 #define DOT11_SC_REASSOC_FAIL 11 /* Reassociation denied due to inability
866 * to confirm that association exists
868 #define DOT11_SC_ASSOC_FAIL 12 /* Association denied due to reason
869 * outside the scope of this standard
871 #define DOT11_SC_AUTH_MISMATCH 13 /* Responding station does not support
872 * the specified authentication
875 #define DOT11_SC_AUTH_SEQ 14 /* Received an Authentication frame
876 * with authentication transaction
877 * sequence number out of expected
880 #define DOT11_SC_AUTH_CHALLENGE_FAIL 15 /* Authentication rejected because of
883 #define DOT11_SC_AUTH_TIMEOUT 16 /* Authentication rejected due to timeout
884 * waiting for next frame in sequence
886 #define DOT11_SC_ASSOC_BUSY_FAIL 17 /* Association denied because AP is
887 * unable to handle additional
888 * associated stations
890 #define DOT11_SC_ASSOC_RATE_MISMATCH 18 /* Association denied due to requesting
891 * station not supporting all of the
892 * data rates in the BSSBasicRateSet
895 #define DOT11_SC_ASSOC_SHORT_REQUIRED 19 /* Association denied due to requesting
896 * station not supporting the Short
899 #define DOT11_SC_ASSOC_PBCC_REQUIRED 20 /* Association denied due to requesting
900 * station not supporting the PBCC
903 #define DOT11_SC_ASSOC_AGILITY_REQUIRED 21 /* Association denied due to requesting
904 * station not supporting the Channel
907 #define DOT11_SC_ASSOC_SPECTRUM_REQUIRED 22 /* Association denied because Spectrum
908 * Management capability is required.
910 #define DOT11_SC_ASSOC_BAD_POWER_CAP 23 /* Association denied because the info
911 * in the Power Cap element is
914 #define DOT11_SC_ASSOC_BAD_SUP_CHANNELS 24 /* Association denied because the info
915 * in the Supported Channel element is
918 #define DOT11_SC_ASSOC_SHORTSLOT_REQUIRED 25 /* Association denied due to requesting
919 * station not supporting the Short Slot
922 #define DOT11_SC_ASSOC_ERPBCC_REQUIRED 26 /* Association denied due to requesting
923 * station not supporting the ER-PBCC
926 #define DOT11_SC_ASSOC_DSSOFDM_REQUIRED 27 /* Association denied due to requesting
927 * station not supporting the DSS-OFDM
931 #define DOT11_SC_DECLINED 37 /* request declined */
932 #define DOT11_SC_INVALID_PARAMS 38 /* One or more params have invalid values */
934 /* Info Elts, length of INFORMATION portion of Info Elts */
935 #define DOT11_MNG_DS_PARAM_LEN 1 /* d11 management DS parameter length */
936 #define DOT11_MNG_IBSS_PARAM_LEN 2 /* d11 management IBSS parameter length */
938 /* TIM Info element has 3 bytes fixed info in INFORMATION field,
939 * followed by 1 to 251 bytes of Partial Virtual Bitmap
941 #define DOT11_MNG_TIM_FIXED_LEN 3 /* d11 management TIM fixed length */
942 #define DOT11_MNG_TIM_DTIM_COUNT 0 /* d11 management DTIM count */
943 #define DOT11_MNG_TIM_DTIM_PERIOD 1 /* d11 management DTIM period */
944 #define DOT11_MNG_TIM_BITMAP_CTL 2 /* d11 management TIM BITMAP control */
945 #define DOT11_MNG_TIM_PVB 3 /* d11 management TIM PVB */
948 #define TLV_TAG_OFF 0 /* tag offset */
949 #define TLV_LEN_OFF 1 /* length offset */
950 #define TLV_HDR_LEN 2 /* header length */
951 #define TLV_BODY_OFF 2 /* body offset */
953 /* Management Frame Information Element IDs */
954 #define DOT11_MNG_SSID_ID 0 /* d11 management SSID id */
955 #define DOT11_MNG_RATES_ID 1 /* d11 management rates id */
956 #define DOT11_MNG_FH_PARMS_ID 2 /* d11 management FH parameter id */
957 #define DOT11_MNG_DS_PARMS_ID 3 /* d11 management DS parameter id */
958 #define DOT11_MNG_CF_PARMS_ID 4 /* d11 management CF parameter id */
959 #define DOT11_MNG_TIM_ID 5 /* d11 management TIM id */
960 #define DOT11_MNG_IBSS_PARMS_ID 6 /* d11 management IBSS parameter id */
961 #define DOT11_MNG_COUNTRY_ID 7 /* d11 management country id */
962 #define DOT11_MNG_HOPPING_PARMS_ID 8 /* d11 management hopping parameter id */
963 #define DOT11_MNG_HOPPING_TABLE_ID 9 /* d11 management hopping table id */
964 #define DOT11_MNG_REQUEST_ID 10 /* d11 management request id */
965 #define DOT11_MNG_QBSS_LOAD_ID 11 /* d11 management QBSS Load id */
966 #define DOT11_MNG_CHALLENGE_ID 16 /* d11 management chanllenge id */
967 #define DOT11_MNG_PWR_CONSTRAINT_ID 32 /* 11H PowerConstraint */
968 #define DOT11_MNG_PWR_CAP_ID 33 /* 11H PowerCapability */
969 #define DOT11_MNG_TPC_REQUEST_ID 34 /* 11H TPC Request */
970 #define DOT11_MNG_TPC_REPORT_ID 35 /* 11H TPC Report */
971 #define DOT11_MNG_SUPP_CHANNELS_ID 36 /* 11H Supported Channels */
972 #define DOT11_MNG_CHANNEL_SWITCH_ID 37 /* 11H ChannelSwitch Announcement */
973 #define DOT11_MNG_MEASURE_REQUEST_ID 38 /* 11H MeasurementRequest */
974 #define DOT11_MNG_MEASURE_REPORT_ID 39 /* 11H MeasurementReport */
975 #define DOT11_MNG_QUIET_ID 40 /* 11H Quiet */
976 #define DOT11_MNG_IBSS_DFS_ID 41 /* 11H IBSS_DFS */
977 #define DOT11_MNG_ERP_ID 42 /* d11 management ERP id */
978 #define DOT11_MNG_TS_DELAY_ID 43 /* d11 management TS Delay id */
979 #define DOT11_MNG_HT_CAP 45 /* d11 mgmt HT cap id */
980 #define DOT11_MNG_NONERP_ID 47 /* d11 management NON-ERP id */
981 #define DOT11_MNG_RSN_ID 48 /* d11 management RSN id */
982 #define DOT11_MNG_EXT_RATES_ID 50 /* d11 management ext. rates id */
983 #define DOT11_MNG_EXT_CSA_ID 60 /* d11 Extended CSA */
984 #define DOT11_MNG_HT_ADD 61 /* d11 mgmt additional HT info */
985 #define DOT11_MNG_EXT_CHANNEL_OFFSET 62 /* d11 mgmt ext channel offset */
986 #define DOT11_MNG_EXT_CAP 127 /* d11 mgmt ext capability */
987 #define DOT11_MNG_WPA_ID 221 /* d11 management WPA id */
988 #define DOT11_MNG_PROPR_ID 221 /* d11 management proprietary id */
990 /* Rate element Basic flag and rate mask */
991 #define DOT11_RATE_BASIC 0x80 /* flag for a Basic Rate */
992 #define DOT11_RATE_MASK 0x7F /* mask for numeric part of rate */
994 /* ERP info element bit values */
995 #define DOT11_MNG_ERP_LEN 1 /* ERP is currently 1 byte long */
996 #define DOT11_MNG_NONERP_PRESENT 0x01 /* NonERP (802.11b) STAs are present
999 #define DOT11_MNG_USE_PROTECTION 0x02 /* Use protection mechanisms for
1002 #define DOT11_MNG_BARKER_PREAMBLE 0x04 /* Short Preambles: 0 == allowed,
1005 /* TS Delay element offset & size */
1006 #define DOT11_MGN_TS_DELAY_LEN 4 /* length of TS DELAY IE */
1007 #define TS_DELAY_FIELD_SIZE 4 /* TS DELAY field size */
1009 /* Capability Information Field */
1010 #define DOT11_CAP_ESS 0x0001 /* d11 cap. ESS */
1011 #define DOT11_CAP_IBSS 0x0002 /* d11 cap. IBSS */
1012 #define DOT11_CAP_POLLABLE 0x0004 /* d11 cap. pollable */
1013 #define DOT11_CAP_POLL_RQ 0x0008 /* d11 cap. poll request */
1014 #define DOT11_CAP_PRIVACY 0x0010 /* d11 cap. privacy */
1015 #define DOT11_CAP_SHORT 0x0020 /* d11 cap. short */
1016 #define DOT11_CAP_PBCC 0x0040 /* d11 cap. PBCC */
1017 #define DOT11_CAP_AGILITY 0x0080 /* d11 cap. agility */
1018 #define DOT11_CAP_SPECTRUM 0x0100 /* d11 cap. spectrum */
1019 #define DOT11_CAP_SHORTSLOT 0x0400 /* d11 cap. shortslot */
1020 #define DOT11_CAP_CCK_OFDM 0x2000 /* d11 cap. CCK/OFDM */
1022 /* Extended Capability Information Field */
1023 #define DOT11_EXT_CAP_HT_IE_SUPPORT 0x01 /* support for info xchg action frame */
1025 /* Action Frame Constants */
1026 #define DOT11_ACTION_HDR_LEN 2 /* action frame header length */
1027 #define DOT11_ACTION_CAT_ERR_MASK 0x80 /* d11 action category error mask */
1028 #define DOT11_ACTION_CAT_MASK 0x7F /* d11 action category mask */
1029 #define DOT11_ACTION_CAT_SPECT_MNG 0x00 /* d11 action category spectrum management */
1030 #define DOT11_ACTION_CAT_BLOCKACK 0x03 /* d11 action category block ack */
1031 #define DOT11_ACTION_CAT_HT 0x07 /* d11 action category for HT */
1032 #define DOT11_ACTION_NOTIFICATION 0x11 /* 17 */
1034 #define DOT11_ACTION_ID_M_REQ 0 /* d11 action measurement request */
1035 #define DOT11_ACTION_ID_M_REP 1 /* d11 action measurement response */
1036 #define DOT11_ACTION_ID_TPC_REQ 2 /* d11 action TPC request */
1037 #define DOT11_ACTION_ID_TPC_REP 3 /* d11 action TPC response */
1038 #define DOT11_ACTION_ID_CHANNEL_SWITCH 4 /* d11 action channel switch */
1039 #define DOT11_ACTION_ID_EXT_CSA 5 /* d11 extened CSA for 11n */
1042 #define DOT11_ACTION_ID_HT_CH_WIDTH 0 /* notify channel width action id */
1043 #define DOT11_ACTION_ID_HT_MIMO_PS 1 /* mimo ps action id */
1044 #define DOT11_ACTION_ID_HT_INFO_XCHG 8 /* HT Information Exchange action id */
1046 /* Block Ack action types */
1047 #define DOT11_BA_ACTION_ADDBA_REQ 0 /* ADDBA Req action frame type */
1048 #define DOT11_BA_ACTION_ADDBA_RESP 1 /* ADDBA Resp action frame type */
1049 #define DOT11_BA_ACTION_DELBA 2 /* DELBA action frame type */
1051 /* ADDBA action parameters */
1052 #define DOT11_ADDBA_PARAM_AMSDU_SUP 0x0001 /* AMSDU supported under BA */
1053 #define DOT11_ADDBA_PARAM_POLICY_MASK 0x0002 /* policy mask(ack vs delayed) */
1054 #define DOT11_ADDBA_PARAM_POLICY_SHIFT 1 /* policy shift */
1055 #define DOT11_ADDBA_PARAM_TID_MASK 0x003c /* tid mask */
1056 #define DOT11_ADDBA_PARAM_TID_SHIFT 2 /* tid shift */
1057 #define DOT11_ADDBA_PARAM_BSIZE_MASK 0xffc0 /* buffer size mask */
1058 #define DOT11_ADDBA_PARAM_BSIZE_SHIFT 6 /* buffer size shift */
1060 #define DOT11_ADDBA_POLICY_DELAYED 0 /* delayed BA policy */
1061 #define DOT11_ADDBA_POLICY_IMMEDIATE 1 /* immediate BA policy */
1063 struct dot11_addba_req
{
1064 uint8 category
; /* category of action frame (3) */
1065 uint8 action
; /* action: addba req */
1066 uint8 token
; /* identifier */
1067 uint16 addba_param_set
; /* parameter set */
1068 uint16 timeout
; /* timeout in seconds */
1069 uint16 start_seqnum
; /* starting sequence number */
1071 typedef struct dot11_addba_req dot11_addba_req_t
;
1072 #define DOT11_ADDBA_REQ_LEN 9 /* length of addba req frame */
1074 struct dot11_addba_resp
{
1075 uint8 category
; /* category of action frame (3) */
1076 uint8 action
; /* action: addba resp */
1077 uint8 token
; /* identifier */
1078 uint16 status
; /* status of add request */
1079 uint16 addba_param_set
; /* negotiated parameter set */
1080 uint16 timeout
; /* negotiated timeout in seconds */
1082 typedef struct dot11_addba_resp dot11_addba_resp_t
;
1083 #define DOT11_ADDBA_RESP_LEN 9 /* length of addba resp frame */
1085 /* DELBA action parameters */
1086 #define DOT11_DELBA_PARAM_INIT_MASK 0x0800 /* initiator mask */
1087 #define DOT11_DELBA_PARAM_INIT_SHIFT 11 /* initiator shift */
1088 #define DOT11_DELBA_PARAM_TID_MASK 0xf000 /* tid mask */
1089 #define DOT11_DELBA_PARAM_TID_SHIFT 12 /* tid shift */
1091 struct dot11_delba
{
1092 uint8 category
; /* category of action frame (3) */
1093 uint8 action
; /* action: addba req */
1094 uint16 delba_param_set
; /* paarmeter set */
1095 uint16 reason
; /* reason for dellba */
1097 typedef struct dot11_delba dot11_delba_t
;
1098 #define DOT11_DELBA_LEN 6 /* length of delba frame */
1100 /* MLME Enumerations */
1101 #define DOT11_BSSTYPE_INFRASTRUCTURE 0 /* d11 infrastructure */
1102 #define DOT11_BSSTYPE_INDEPENDENT 1 /* d11 independent */
1103 #define DOT11_BSSTYPE_ANY 2 /* d11 any BSS type */
1104 #define DOT11_SCANTYPE_ACTIVE 0 /* d11 scan active */
1105 #define DOT11_SCANTYPE_PASSIVE 1 /* d11 scan passive */
1107 /* 802.11 BRCM "Compromise" Pre N constants */
1108 #define PREN_PREAMBLE 24 /* green field preamble time */
1109 #define PREN_MM_EXT 8 /* extra mixed mode preamble time */
1110 #define PREN_PREAMBLE_EXT 4 /* extra preamble (multiply by unique_streams-1) */
1112 /* 802.11 N PHY constants */
1113 #define NPHY_RIFS_TIME 2 /* NPHY RIFS time */
1115 /* 802.11 A PHY constants */
1116 #define APHY_SLOT_TIME 9 /* APHY slot time */
1117 #define APHY_SIFS_TIME 16 /* APHY SIFS time */
1118 #define APHY_DIFS_TIME (APHY_SIFS_TIME + (2 * APHY_SLOT_TIME)) /* APHY DIFS time */
1119 #define APHY_PREAMBLE_TIME 16 /* APHY preamble time */
1120 #define APHY_SIGNAL_TIME 4 /* APHY signal time */
1121 #define APHY_SYMBOL_TIME 4 /* APHY symbol time */
1122 #define APHY_SERVICE_NBITS 16 /* APHY service nbits */
1123 #define APHY_TAIL_NBITS 6 /* APHY tail nbits */
1124 #define APHY_CWMIN 15 /* APHY cwmin */
1126 /* 802.11 B PHY constants */
1127 #define BPHY_SLOT_TIME 20 /* BPHY slot time */
1128 #define BPHY_SIFS_TIME 10 /* BPHY SIFS time */
1129 #define BPHY_DIFS_TIME 50 /* BPHY DIFS time */
1130 #define BPHY_PLCP_TIME 192 /* BPHY PLCP time */
1131 #define BPHY_PLCP_SHORT_TIME 96 /* BPHY PLCP short time */
1132 #define BPHY_CWMIN 31 /* BPHY cwmin */
1134 /* 802.11 G constants */
1135 #define DOT11_OFDM_SIGNAL_EXTENSION 6 /* d11 OFDM signal extension */
1137 #define PHY_CWMAX 1023 /* PHY cwmax */
1139 #define DOT11_MAXNUMFRAGS 16 /* max # fragments per MSDU */
1141 /* dot11Counters Table - 802.11 spec., Annex D */
1142 typedef struct d11cnt
{
1143 uint32 txfrag
; /* dot11TransmittedFragmentCount */
1144 uint32 txmulti
; /* dot11MulticastTransmittedFrameCount */
1145 uint32 txfail
; /* dot11FailedCount */
1146 uint32 txretry
; /* dot11RetryCount */
1147 uint32 txretrie
; /* dot11MultipleRetryCount */
1148 uint32 rxdup
; /* dot11FrameduplicateCount */
1149 uint32 txrts
; /* dot11RTSSuccessCount */
1150 uint32 txnocts
; /* dot11RTSFailureCount */
1151 uint32 txnoack
; /* dot11ACKFailureCount */
1152 uint32 rxfrag
; /* dot11ReceivedFragmentCount */
1153 uint32 rxmulti
; /* dot11MulticastReceivedFrameCount */
1154 uint32 rxcrc
; /* dot11FCSErrorCount */
1155 uint32 txfrmsnt
; /* dot11TransmittedFrameCount */
1156 uint32 rxundec
; /* dot11WEPUndecryptableCount */
1160 #define BRCM_OUI "\x00\x10\x18" /* Broadcom OUI */
1162 /* OUI for BRCM proprietary IE */
1163 #define BRCM_PROP_OUI "\x00\x90\x4C" /* Broadcom proprietary OUI */
1165 /* BRCM info element */
1167 uint8 id
; /* IE ID, 221, DOT11_MNG_PROPR_ID */
1168 uint8 len
; /* IE length */
1169 uint8 oui
[3]; /* Proprietary OUI, BRCM_OUI */
1170 uint8 ver
; /* type/ver of this IE */
1171 uint8 assoc
; /* # of assoc STAs */
1172 uint8 flags
; /* misc flags */
1173 uint8 flags1
; /* misc flags */
1174 uint16 amsdu_mtu_pref
; /* preferred A-MSDU MTU */
1176 typedef struct brcm_ie brcm_ie_t
;
1177 #define BRCM_IE_LEN 11 /* BRCM IE length */
1178 #define BRCM_IE_VER 2 /* BRCM IE version */
1179 #define BRCM_IE_LEGACY_AES_VER 1 /* BRCM IE legacy AES version */
1182 #define BRF_ABCAP 0x1 /* afterburner capable */
1183 #define BRF_ABRQRD 0x2 /* afterburner requested */
1184 #define BRF_LZWDS 0x4 /* lazy wds enabled */
1185 #define BRF_BLOCKACK 0x8 /* BlockACK capable */
1186 #define BRF_ABCOUNTER_MASK 0xf0 /* afterburner wds "state" counter */
1187 #define BRF_ABCOUNTER_SHIFT 4 /* offset of afterburner wds "state" counter */
1189 /* brcm_ie flags1 */
1190 #define BRF1_AMSDU 0x1 /* A-MSDU capable */
1191 #define BRF1_DPT 0x2 /* DPT capable */
1193 #define AB_WDS_TIMEOUT_MAX 15 /* afterburner wds Max count indicating not
1196 #define AB_WDS_TIMEOUT_MIN 1 /* afterburner wds, use zero count as indicating
1200 /* EWC definitions */
1201 #define MCSSET_LEN 16 /* 16-bits per 8-bit set to give 128-bits bitmap of MCS Index */
1202 #define MAX_MCS_NUM (128) /* max mcs number = 128 */
1207 uint8 supp_mcs
[MCSSET_LEN
];
1212 typedef struct ewc_cap_ie ewc_cap_ie_t
;
1214 /* CAP IE: EWC 1.0 spec. simply stole a 802.11 IE, we use our prop. IE until this is resolved */
1215 /* the capability IE is primarily used to convey this nodes abilities */
1216 struct ewc_prop_cap_ie
{
1217 uint8 id
; /* IE ID, 221, DOT11_MNG_PROPR_ID */
1218 uint8 len
; /* IE length */
1219 uint8 oui
[3]; /* Proprietary OUI, BRCM_PROP_OUI */
1220 uint8 type
; /* type inidicates what follows */
1221 ewc_cap_ie_t cap_ie
;
1223 typedef struct ewc_prop_cap_ie ewc_prop_cap_ie_t
;
1224 #define EWC_PROP_IE_OVERHEAD 4 /* overhead bytes for prop oui ie */
1225 #define EWC_CAP_IE_LEN 26
1226 #define EWC_CAP_IE_TYPE 51
1228 #define EWC_CAP_LDPC_CODING 0x0001 /* Support for rx of LDPC coded pkts */
1229 #define EWC_CAP_40MHZ 0x0002 /* FALSE:20Mhz, TRUE:20/40MHZ supported */
1230 #define EWC_CAP_MIMO_PS_MASK 0x000C /* Mimo PS mask */
1231 #define EWC_CAP_MIMO_PS_SHIFT 0x0002 /* Mimo PS shift */
1232 #define EWC_CAP_MIMO_PS_OFF 0x0003 /* Mimo PS, no restriction */
1233 #define EWC_CAP_MIMO_PS_RTS 0x0001 /* Mimo PS, send RTS/CTS around MIMO frames */
1234 #define EWC_CAP_MIMO_PS_ON 0x0000 /* Mimo PS, MIMO disallowed */
1235 #define EWC_CAP_GF 0x0010 /* Greenfield preamble support */
1236 #define EWC_CAP_SHORT_GI_20 0x0020 /* 20MHZ short guard interval support */
1237 #define EWC_CAP_SHORT_GI_40 0x0040 /* 40Mhz short guard interval support */
1238 #define EWC_CAP_TX_STBC 0x0080 /* Tx STBC support */
1239 #define EWC_CAP_RX_STBC_MASK 0x0300 /* Rx STBC mask */
1240 #define EWC_CAP_RX_STBC_SHIFT 8 /* Rx STBC shift */
1241 #define EWC_CAP_DELAYED_BA 0x0400 /* delayed BA support */
1242 #define EWC_CAP_MAX_AMSDU 0x0800 /* Max AMSDU size in bytes , 0=3839, 1=7935 */
1243 #define EWC_CAP_DSSS_CCK 0x1000 /* DSSS/CCK supported by the BSS */
1244 #define EWC_CAP_PSMP 0x2000 /* Power Save Multi Poll support */
1245 #define EWC_CAP_40MHZ_INTOLERANT 0x4000 /* 40MHz Intolerant */
1246 #define EWC_CAP_LSIG_TXOP 0x8000 /* L-SIG TXOP protection support */
1248 #define EWC_CAP_RX_STBC_NO 0x0 /* no rx STBC support */
1249 #define EWC_CAP_RX_STBC_ONE_STREAM 0x1 /* rx STBC support of 1 spatial stream */
1250 #define EWC_CAP_RX_STBC_TWO_STREAM 0x2 /* rx STBC support of 1-2 spatial streams */
1251 #define EWC_CAP_RX_STBC_THREE_STREAM 0x3 /* rx STBC support of 1-3 spatial streams */
1253 #define EWC_MAX_AMSDU 7935 /* max amsdu size (bytes) per the EWC spec */
1254 #define EWC_MIN_AMSDU 3835 /* min amsdu size (bytes) per the EWC spec */
1256 #define EWC_PARAMS_RX_FACTOR_MASK 0x03 /* ampdu rcv factor mask */
1257 #define EWC_PARAMS_DENSITY_MASK 0x1C /* ampdu density mask */
1258 #define EWC_PARAMS_DENSITY_SHIFT 2 /* ampdu density shift */
1260 /* EWC/AMPDU specific define */
1261 #define AMPDU_MAX_MPDU_DENSITY 7 /* max mpdu density; in 1/8 usec units */
1262 #define AMPDU_MAX_RX_FACTOR 3 /* max rcv ampdu len (64kb) */
1263 #define AMPDU_RX_FACTOR_BASE 8*1024 /* ampdu factor base for rx len */
1264 #define AMPDU_DELIMITER_LEN 4 /* length of ampdu delimiter */
1267 uint8 ctl_ch
; /* control channel number */
1268 uint8 byte1
; /* ext ch,rec. ch. width, RIFS support */
1269 uint16 opmode
; /* operation mode */
1270 uint16 misc_bits
; /* misc bits */
1271 uint8 basic_mcs
[MCSSET_LEN
]; /* required MCS set */
1273 typedef struct ewc_add_ie ewc_add_ie_t
;
1275 /* ADD IE: EWC 1.0 spec. simply stole a 802.11 IE, we use our prop. IE until this is resolved */
1276 /* the additional IE is primarily used to convey the current BSS configuration */
1277 struct ewc_prop_add_ie
{
1278 uint8 id
; /* IE ID, 221, DOT11_MNG_PROPR_ID */
1279 uint8 len
; /* IE length */
1280 uint8 oui
[3]; /* Proprietary OUI, BRCM_PROP_OUI */
1281 uint8 type
; /* indicates what follows */
1282 ewc_add_ie_t add_ie
;
1284 typedef struct ewc_prop_add_ie ewc_prop_add_ie_t
;
1286 #define EWC_ADD_IE_LEN 22
1287 #define EWC_ADD_IE_TYPE 52
1290 #define EWC_BW_ANY 0x04 /* set, STA can use 20 or 40MHz */
1291 #define EWC_RIFS_PERMITTED 0x08 /* RIFS allowed */
1294 #define EWC_OPMODE_MASK 0x0003 /* protection mode mask */
1295 #define EWC_OPMODE_SHIFT 0 /* protection mode shift */
1296 #define EWC_OPMODE_PURE 0x0000 /* protection mode PURE */
1297 #define EWC_OPMODE_OPTIONAL 0x0001 /* protection mode optional */
1298 #define EWC_OPMODE_HT20IN40 0x0002 /* protection mode 20MHz HT in 40MHz BSS */
1299 #define EWC_OPMODE_MIXED 0x0003 /* protection mode Mixed Mode */
1300 #define EWC_OPMODE_NONGF 0x0004 /* protection mode non-GF */
1301 #define DOT11N_TXBURST 0x0008 /* Tx burst limit */
1302 #define DOT11N_OBSS_NONHT 0x0010 /* OBSS Non-HT STA present */
1304 /* misc_bites defn's */
1305 #define EWC_BASIC_STBC_MCS 0x007f /* basic STBC MCS */
1306 #define EWC_DUAL_STBC_PROT 0x0080 /* Dual STBC Protection */
1307 #define EWC_SECOND_BCN 0x0100 /* Secondary beacon support */
1308 #define EWC_LSIG_TXOP 0x0200 /* L-SIG TXOP Protection full support */
1309 #define EWC_PCO_ACTIVE 0x0400 /* PCO active */
1310 #define EWC_PCO_PHASE 0x0800 /* PCO phase */
1312 /* Tx Burst Limits */
1313 #define DOT11N_2G_TXBURST_LIMIT 6160 /* 2G band Tx burst limit per 802.11n Draft 1.10 (usec) */
1314 #define DOT11N_5G_TXBURST_LIMIT 3080 /* 5G band Tx burst limit per 802.11n Draft 1.10 (usec) */
1316 /* Macros for opmode */
1317 #define GET_EWC_OPMODE(add_ie) ((ltoh16_ua(&add_ie->opmode) & EWC_OPMODE_MASK) \
1318 >> EWC_OPMODE_SHIFT)
1319 #define EWC_MIXEDMODE_PRESENT(add_ie) ((ltoh16_ua(&add_ie->opmode) & EWC_OPMODE_MASK) \
1320 == EWC_OPMODE_MIXED) /* mixed mode present */
1321 #define EWC_HT20_PRESENT(add_ie) ((ltoh16_ua(&add_ie->opmode) & EWC_OPMODE_MASK) \
1322 == EWC_OPMODE_HT20IN40) /* 20MHz HT present */
1323 #define EWC_OPTIONAL_PRESENT(add_ie) ((ltoh16_ua(&add_ie->opmode) & EWC_OPMODE_MASK) \
1324 == EWC_OPMODE_OPTIONAL) /* Optional protection present */
1325 #define EWC_USE_PROTECTION(add_ie) (EWC_HT20_PRESENT((add_ie)) || \
1326 EWC_MIXEDMODE_PRESENT((add_ie))) /* use protection */
1327 #define EWC_NONGF_PRESENT(add_ie) ((ltoh16_ua(&add_ie->opmode) & EWC_OPMODE_NONGF) \
1328 == EWC_OPMODE_NONGF) /* non-GF present */
1329 #define DOT11N_TXBURST_PRESENT(add_ie) ((ltoh16_ua(&add_ie->opmode) & DOT11N_TXBURST) \
1330 == DOT11N_TXBURST) /* Tx Burst present */
1331 #define DOT11N_OBSS_NONHT_PRESENT(add_ie) ((ltoh16_ua(&add_ie->opmode) & DOT11N_OBSS_NONHT) \
1332 == DOT11N_OBSS_NONHT) /* OBSS Non-HT present */
1334 /* Vendor IE structure */
1339 uchar data
[1]; /* Variable size data */
1341 typedef struct vndr_ie vndr_ie_t
;
1343 #define VNDR_IE_HDR_LEN 2 /* id + len field */
1344 #define VNDR_IE_MIN_LEN 3 /* size of the oui field */
1345 #define VNDR_IE_MAX_LEN 256 /* verdor IE max length */
1347 /* WPA definitions */
1348 #define WPA_VERSION 1 /* WPA version */
1349 #define WPA_OUI "\x00\x50\xF2" /* WPA OUI */
1351 #define WPA2_VERSION 1 /* WPA2 version */
1352 #define WPA2_VERSION_LEN 2 /* WAP2 version length */
1353 #define WPA2_OUI "\x00\x0F\xAC" /* WPA2 OUI */
1355 #define WPA_OUI_LEN 3 /* WPA OUI length */
1357 /* RSN authenticated key managment suite */
1358 #define RSN_AKM_NONE 0 /* None (IBSS) */
1359 #define RSN_AKM_UNSPECIFIED 1 /* Over 802.1x */
1360 #define RSN_AKM_PSK 2 /* Pre-shared Key */
1362 /* Key related defines */
1363 #define DOT11_MAX_DEFAULT_KEYS 4 /* number of default keys */
1364 #define DOT11_MAX_KEY_SIZE 32 /* max size of any key */
1365 #define DOT11_MAX_IV_SIZE 16 /* max size of any IV */
1366 #define DOT11_EXT_IV_FLAG (1<<5) /* flag to indicate IV is > 4 bytes */
1368 #define WEP1_KEY_SIZE 5 /* max size of any WEP key */
1369 #define WEP1_KEY_HEX_SIZE 10 /* size of WEP key in hex. */
1370 #define WEP128_KEY_SIZE 13 /* max size of any WEP key */
1371 #define WEP128_KEY_HEX_SIZE 26 /* size of WEP key in hex. */
1372 #define TKIP_MIC_SIZE 8 /* size of TKIP MIC */
1373 #define TKIP_EOM_SIZE 7 /* max size of TKIP EOM */
1374 #define TKIP_EOM_FLAG 0x5a /* TKIP EOM flag byte */
1375 #define TKIP_KEY_SIZE 32 /* size of any TKIP key */
1376 #define TKIP_MIC_AUTH_TX 16 /* offset to Authenticator MIC TX key */
1377 #define TKIP_MIC_AUTH_RX 24 /* offset to Authenticator MIC RX key */
1378 #define TKIP_MIC_SUP_RX TKIP_MIC_AUTH_TX /* offset to Supplicant MIC RX key */
1379 #define TKIP_MIC_SUP_TX TKIP_MIC_AUTH_RX /* offset to Supplicant MIC TX key */
1380 #define AES_KEY_SIZE 16 /* size of AES key */
1383 #if !defined(__GNUC__)
1387 #endif /* _802_11_H_ */