12949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* @(#) $Header: /tcpdump/master/tcpdump/ieee802_11.h,v 1.9.4.3 2007/07/22 20:01:16 guy Exp $ (LBL) */
22949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/*
32949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Copyright (c) 2001
42949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project *	Fortress Technologies
52949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project *      Charlie Lenahan ( clenahan@fortresstech.com )
62949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project *
72949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Redistribution and use in source and binary forms, with or without
82949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * modification, are permitted provided that: (1) source code distributions
92949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * retain the above copyright notice and this paragraph in its entirety, (2)
102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * distributions including binary code include the above copyright notice and
112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * this paragraph in its entirety in the documentation or other materials
122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * provided with the distribution, and (3) all advertising materials mentioning
132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * features or use of this software display the following acknowledgement:
142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * ``This product includes software developed by the University of California,
152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * the University nor the names of its contributors may be used to endorse
172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * or promote products derived from this software without specific prior
182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * written permission.
192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */
232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* Lengths of 802.11 header components. */
252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	IEEE802_11_FC_LEN		2
262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	IEEE802_11_DUR_LEN		2
272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	IEEE802_11_DA_LEN		6
282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	IEEE802_11_SA_LEN		6
292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	IEEE802_11_BSSID_LEN		6
302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	IEEE802_11_RA_LEN		6
312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	IEEE802_11_TA_LEN		6
322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	IEEE802_11_SEQ_LEN		2
332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	IEEE802_11_IV_LEN		3
342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	IEEE802_11_KID_LEN		1
352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* Frame check sequence length. */
372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	IEEE802_11_FCS_LEN		4
382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* Lengths of beacon components. */
402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	IEEE802_11_TSTAMP_LEN		8
412949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	IEEE802_11_BCNINT_LEN		2
422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	IEEE802_11_CAPINFO_LEN		2
432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	IEEE802_11_LISTENINT_LEN	2
442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	IEEE802_11_AID_LEN		2
462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	IEEE802_11_STATUS_LEN		2
472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	IEEE802_11_REASON_LEN		2
482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* Length of previous AP in reassocation frame */
502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	IEEE802_11_AP_LEN		6
512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	T_MGMT 0x0  /* management */
532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	T_CTRL 0x1  /* control */
542949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	T_DATA 0x2 /* data */
552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	T_RESV 0x3  /* reserved */
562949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	ST_ASSOC_REQUEST   	0x0
582949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	ST_ASSOC_RESPONSE 	0x1
592949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	ST_REASSOC_REQUEST   	0x2
602949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	ST_REASSOC_RESPONSE  	0x3
612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	ST_PROBE_REQUEST   	0x4
622949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	ST_PROBE_RESPONSE   	0x5
632949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* RESERVED 			0x6  */
642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* RESERVED 			0x7  */
652949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	ST_BEACON   		0x8
662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	ST_ATIM			0x9
672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	ST_DISASSOC		0xA
682949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	ST_AUTH			0xB
692949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	ST_DEAUTH		0xC
702949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* RESERVED 			0xD  */
712949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* RESERVED 			0xE  */
722949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* RESERVED 			0xF  */
732949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
752949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	CTRL_PS_POLL	0xA
762949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	CTRL_RTS	0xB
772949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	CTRL_CTS	0xC
782949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	CTRL_ACK	0xD
792949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	CTRL_CF_END	0xE
802949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	CTRL_END_ACK	0xF
812949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
822949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	DATA_DATA			0x0
832949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	DATA_DATA_CF_ACK		0x1
842949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	DATA_DATA_CF_POLL		0x2
852949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	DATA_DATA_CF_ACK_POLL		0x3
862949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	DATA_NODATA			0x4
872949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	DATA_NODATA_CF_ACK		0x5
882949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	DATA_NODATA_CF_POLL		0x6
892949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	DATA_NODATA_CF_ACK_POLL		0x7
902949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
912949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define DATA_QOS_DATA			0x8
922949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define DATA_QOS_DATA_CF_ACK		0x9
932949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define DATA_QOS_DATA_CF_POLL		0xA
942949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define DATA_QOS_DATA_CF_ACK_POLL	0xB
952949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define DATA_QOS_NODATA			0xC
962949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define DATA_QOS_CF_POLL_NODATA		0xE
972949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define DATA_QOS_CF_ACK_POLL_NODATA	0xF
982949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
992949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/*
1002949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * The subtype field of a data frame is, in effect, composed of 4 flag
1012949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * bits - CF-Ack, CF-Poll, Null (means the frame doesn't actually have
1022949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * any data), and QoS.
1032949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */
1042949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define DATA_FRAME_IS_CF_ACK(x)		((x) & 0x01)
1052949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define DATA_FRAME_IS_CF_POLL(x)	((x) & 0x02)
1062949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define DATA_FRAME_IS_NULL(x)		((x) & 0x04)
1072949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define DATA_FRAME_IS_QOS(x)		((x) & 0x08)
1082949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
1092949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/*
1102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Bits in the frame control field.
1112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */
1122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	FC_VERSION(fc)		((fc) & 0x3)
1132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	FC_TYPE(fc)		(((fc) >> 2) & 0x3)
1142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	FC_SUBTYPE(fc)		(((fc) >> 4) & 0xF)
1152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	FC_TO_DS(fc)		((fc) & 0x0100)
1162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	FC_FROM_DS(fc)		((fc) & 0x0200)
1172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	FC_MORE_FLAG(fc)	((fc) & 0x0400)
1182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	FC_RETRY(fc)		((fc) & 0x0800)
1192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	FC_POWER_MGMT(fc)	((fc) & 0x1000)
1202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	FC_MORE_DATA(fc)	((fc) & 0x2000)
1212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	FC_WEP(fc)		((fc) & 0x4000)
1222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	FC_ORDER(fc)		((fc) & 0x8000)
1232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
1242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstruct mgmt_header_t {
1252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int16_t	fc;
1262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int16_t 	duration;
1272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int8_t	da[6];
1282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int8_t	sa[6];
1292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int8_t	bssid[6];
1302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int16_t	seq_ctrl;
1312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project};
1322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
1332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	MGMT_HDRLEN	(IEEE802_11_FC_LEN+IEEE802_11_DUR_LEN+\
1342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project			 IEEE802_11_DA_LEN+IEEE802_11_SA_LEN+\
1352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project			 IEEE802_11_BSSID_LEN+IEEE802_11_SEQ_LEN)
1362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
1372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	CAPABILITY_ESS(cap)	((cap) & 0x0001)
1382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	CAPABILITY_IBSS(cap)	((cap) & 0x0002)
1392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	CAPABILITY_CFP(cap)	((cap) & 0x0004)
1402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	CAPABILITY_CFP_REQ(cap)	((cap) & 0x0008)
1412949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	CAPABILITY_PRIVACY(cap)	((cap) & 0x0010)
1422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
1432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projecttypedef enum {
1442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	NOT_PRESENT,
1452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	PRESENT,
1462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	TRUNCATED
1472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} elem_status_t;
1482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
1492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstruct ssid_t {
1502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int8_t	element_id;
1512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int8_t	length;
1522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_char		ssid[33];  /* 32 + 1 for null */
1532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project};
1542949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
1552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstruct rates_t {
1562949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int8_t	element_id;
1572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int8_t	length;
1582949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int8_t	rate[16];
1592949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project};
1602949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
1612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstruct challenge_t {
1622949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int8_t	element_id;
1632949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int8_t	length;
1642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int8_t	text[254]; /* 1-253 + 1 for null */
1652949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project};
1662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
1672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstruct fh_t {
1682949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int8_t	element_id;
1692949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int8_t	length;
1702949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int16_t	dwell_time;
1712949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int8_t	hop_set;
1722949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int8_t 	hop_pattern;
1732949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int8_t	hop_index;
1742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project};
1752949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
1762949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstruct ds_t {
1772949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int8_t	element_id;
1782949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int8_t	length;
1792949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int8_t	channel;
1802949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project};
1812949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
1822949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstruct cf_t {
1832949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int8_t	element_id;
1842949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int8_t	length;
1852949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int8_t	count;
1862949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int8_t	period;
1872949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int16_t	max_duration;
1882949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int16_t	dur_remaing;
1892949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project};
1902949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
1912949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstruct tim_t {
1922949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int8_t	element_id;
1932949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int8_t	length;
1942949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int8_t	count;
1952949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int8_t	period;
1962949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int8_t	bitmap_control;
1972949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int8_t	bitmap[251];
1982949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project};
1992949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
2002949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	E_SSID 		0
2012949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	E_RATES 	1
2022949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	E_FH	 	2
2032949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	E_DS 		3
2042949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	E_CF	 	4
2052949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	E_TIM	 	5
2062949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	E_IBSS 		6
2072949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* reserved 		7 */
2082949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* reserved 		8 */
2092949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* reserved 		9 */
2102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* reserved 		10 */
2112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* reserved 		11 */
2122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* reserved 		12 */
2132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* reserved 		13 */
2142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* reserved 		14 */
2152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* reserved 		15 */
2162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* reserved 		16 */
2172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
2182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	E_CHALLENGE 	16
2192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* reserved 		17 */
2202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* reserved 		18 */
2212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* reserved 		19 */
2222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* reserved 		16 */
2232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* reserved 		16 */
2242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
2252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
2262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstruct mgmt_body_t {
2272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int8_t   	timestamp[IEEE802_11_TSTAMP_LEN];
2282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int16_t  	beacon_interval;
2292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int16_t 	listen_interval;
2302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int16_t 	status_code;
2312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int16_t 	aid;
2322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_char		ap[IEEE802_11_AP_LEN];
2332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int16_t	reason_code;
2342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int16_t	auth_alg;
2352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int16_t	auth_trans_seq_num;
2362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	elem_status_t	challenge_status;
2372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	struct challenge_t  challenge;
2382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int16_t	capability_info;
2392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	elem_status_t	ssid_status;
2402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	struct ssid_t	ssid;
2412949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	elem_status_t	rates_status;
2422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	struct rates_t 	rates;
2432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	elem_status_t	ds_status;
2442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	struct ds_t	ds;
2452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	elem_status_t	cf_status;
2462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	struct cf_t	cf;
2472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	elem_status_t	fh_status;
2482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	struct fh_t	fh;
2492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	elem_status_t	tim_status;
2502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	struct tim_t	tim;
2512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project};
2522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
2532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstruct ctrl_rts_t {
2542949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int16_t	fc;
2552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int16_t	duration;
2562949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int8_t	ra[6];
2572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int8_t	ta[6];
2582949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int8_t	fcs[4];
2592949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project};
2602949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
2612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	CTRL_RTS_HDRLEN	(IEEE802_11_FC_LEN+IEEE802_11_DUR_LEN+\
2622949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project			 IEEE802_11_RA_LEN+IEEE802_11_TA_LEN)
2632949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
2642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstruct ctrl_cts_t {
2652949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int16_t	fc;
2662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int16_t	duration;
2672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int8_t	ra[6];
2682949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int8_t	fcs[4];
2692949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project};
2702949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
2712949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	CTRL_CTS_HDRLEN	(IEEE802_11_FC_LEN+IEEE802_11_DUR_LEN+IEEE802_11_RA_LEN)
2722949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
2732949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstruct ctrl_ack_t {
2742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int16_t	fc;
2752949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int16_t	duration;
2762949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int8_t	ra[6];
2772949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int8_t	fcs[4];
2782949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project};
2792949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
2802949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	CTRL_ACK_HDRLEN	(IEEE802_11_FC_LEN+IEEE802_11_DUR_LEN+IEEE802_11_RA_LEN)
2812949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
2822949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstruct ctrl_ps_poll_t {
2832949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int16_t	fc;
2842949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int16_t	aid;
2852949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int8_t	bssid[6];
2862949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int8_t	ta[6];
2872949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int8_t	fcs[4];
2882949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project};
2892949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
2902949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	CTRL_PS_POLL_HDRLEN	(IEEE802_11_FC_LEN+IEEE802_11_AID_LEN+\
2912949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project				 IEEE802_11_BSSID_LEN+IEEE802_11_TA_LEN)
2922949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
2932949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstruct ctrl_end_t {
2942949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int16_t	fc;
2952949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int16_t	duration;
2962949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int8_t	ra[6];
2972949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int8_t	bssid[6];
2982949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int8_t	fcs[4];
2992949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project};
3002949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
3012949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	CTRL_END_HDRLEN	(IEEE802_11_FC_LEN+IEEE802_11_DUR_LEN+\
3022949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project			 IEEE802_11_RA_LEN+IEEE802_11_BSSID_LEN)
3032949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
3042949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstruct ctrl_end_ack_t {
3052949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int16_t	fc;
3062949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int16_t	duration;
3072949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int8_t	ra[6];
3082949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int8_t	bssid[6];
3092949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int8_t	fcs[4];
3102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project};
3112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
3122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	CTRL_END_ACK_HDRLEN	(IEEE802_11_FC_LEN+IEEE802_11_DUR_LEN+\
3132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project				 IEEE802_11_RA_LEN+IEEE802_11_BSSID_LEN)
3142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
3152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	IV_IV(iv)	((iv) & 0xFFFFFF)
3162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	IV_PAD(iv)	(((iv) >> 24) & 0x3F)
3172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	IV_KEYID(iv)	(((iv) >> 30) & 0x03)
318