153f17a9db278d33517d9888dd77848f554522a38JP Abgrall/* @(#) $Header: /tcpdump/master/tcpdump/ieee802_11.h,v 1.12 2007-07-22 19:59:06 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
3353f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define	IEEE802_11_CTL_LEN		2
342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	IEEE802_11_IV_LEN		3
352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	IEEE802_11_KID_LEN		1
362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* Frame check sequence length. */
382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	IEEE802_11_FCS_LEN		4
392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* Lengths of beacon components. */
412949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	IEEE802_11_TSTAMP_LEN		8
422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	IEEE802_11_BCNINT_LEN		2
432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	IEEE802_11_CAPINFO_LEN		2
442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	IEEE802_11_LISTENINT_LEN	2
452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	IEEE802_11_AID_LEN		2
472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	IEEE802_11_STATUS_LEN		2
482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	IEEE802_11_REASON_LEN		2
492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* Length of previous AP in reassocation frame */
512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	IEEE802_11_AP_LEN		6
522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	T_MGMT 0x0  /* management */
542949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	T_CTRL 0x1  /* control */
552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	T_DATA 0x2 /* data */
562949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	T_RESV 0x3  /* reserved */
572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
582949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	ST_ASSOC_REQUEST   	0x0
592949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	ST_ASSOC_RESPONSE 	0x1
602949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	ST_REASSOC_REQUEST   	0x2
612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	ST_REASSOC_RESPONSE  	0x3
622949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	ST_PROBE_REQUEST   	0x4
632949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	ST_PROBE_RESPONSE   	0x5
642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* RESERVED 			0x6  */
652949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* RESERVED 			0x7  */
662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	ST_BEACON   		0x8
672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	ST_ATIM			0x9
682949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	ST_DISASSOC		0xA
692949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	ST_AUTH			0xB
702949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	ST_DEAUTH		0xC
7153f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define	ST_ACTION		0xD
722949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* RESERVED 			0xE  */
732949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* RESERVED 			0xF  */
742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
752949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
7653f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define CTRL_CONTROL_WRAPPER	0x7
7753f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define	CTRL_BAR	0x8
7853f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define	CTRL_BA		0x9
792949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	CTRL_PS_POLL	0xA
802949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	CTRL_RTS	0xB
812949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	CTRL_CTS	0xC
822949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	CTRL_ACK	0xD
832949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	CTRL_CF_END	0xE
842949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	CTRL_END_ACK	0xF
852949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
862949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	DATA_DATA			0x0
872949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	DATA_DATA_CF_ACK		0x1
882949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	DATA_DATA_CF_POLL		0x2
892949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	DATA_DATA_CF_ACK_POLL		0x3
902949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	DATA_NODATA			0x4
912949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	DATA_NODATA_CF_ACK		0x5
922949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	DATA_NODATA_CF_POLL		0x6
932949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	DATA_NODATA_CF_ACK_POLL		0x7
942949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
952949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define DATA_QOS_DATA			0x8
962949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define DATA_QOS_DATA_CF_ACK		0x9
972949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define DATA_QOS_DATA_CF_POLL		0xA
982949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define DATA_QOS_DATA_CF_ACK_POLL	0xB
992949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define DATA_QOS_NODATA			0xC
1002949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define DATA_QOS_CF_POLL_NODATA		0xE
1012949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define DATA_QOS_CF_ACK_POLL_NODATA	0xF
1022949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
1032949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/*
1042949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * The subtype field of a data frame is, in effect, composed of 4 flag
1052949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * bits - CF-Ack, CF-Poll, Null (means the frame doesn't actually have
1062949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * any data), and QoS.
1072949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */
1082949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define DATA_FRAME_IS_CF_ACK(x)		((x) & 0x01)
1092949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define DATA_FRAME_IS_CF_POLL(x)	((x) & 0x02)
1102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define DATA_FRAME_IS_NULL(x)		((x) & 0x04)
1112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define DATA_FRAME_IS_QOS(x)		((x) & 0x08)
1122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
1132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/*
1142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Bits in the frame control field.
1152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */
1162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	FC_VERSION(fc)		((fc) & 0x3)
1172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	FC_TYPE(fc)		(((fc) >> 2) & 0x3)
1182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	FC_SUBTYPE(fc)		(((fc) >> 4) & 0xF)
1192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	FC_TO_DS(fc)		((fc) & 0x0100)
1202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	FC_FROM_DS(fc)		((fc) & 0x0200)
1212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	FC_MORE_FLAG(fc)	((fc) & 0x0400)
1222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	FC_RETRY(fc)		((fc) & 0x0800)
1232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	FC_POWER_MGMT(fc)	((fc) & 0x1000)
1242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	FC_MORE_DATA(fc)	((fc) & 0x2000)
1252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	FC_WEP(fc)		((fc) & 0x4000)
1262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	FC_ORDER(fc)		((fc) & 0x8000)
1272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
1282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstruct mgmt_header_t {
1292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int16_t	fc;
1302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int16_t 	duration;
1312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int8_t	da[6];
1322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int8_t	sa[6];
1332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int8_t	bssid[6];
1342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int16_t	seq_ctrl;
1352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project};
1362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
1372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	MGMT_HDRLEN	(IEEE802_11_FC_LEN+IEEE802_11_DUR_LEN+\
1382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project			 IEEE802_11_DA_LEN+IEEE802_11_SA_LEN+\
1392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project			 IEEE802_11_BSSID_LEN+IEEE802_11_SEQ_LEN)
1402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
1412949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	CAPABILITY_ESS(cap)	((cap) & 0x0001)
1422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	CAPABILITY_IBSS(cap)	((cap) & 0x0002)
1432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	CAPABILITY_CFP(cap)	((cap) & 0x0004)
1442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	CAPABILITY_CFP_REQ(cap)	((cap) & 0x0008)
1452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	CAPABILITY_PRIVACY(cap)	((cap) & 0x0010)
1462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
1472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstruct ssid_t {
1482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int8_t	element_id;
1492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int8_t	length;
1502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_char		ssid[33];  /* 32 + 1 for null */
1512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project};
1522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
1532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstruct rates_t {
1542949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int8_t	element_id;
1552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int8_t	length;
1562949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int8_t	rate[16];
1572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project};
1582949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
1592949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstruct challenge_t {
1602949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int8_t	element_id;
1612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int8_t	length;
1622949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int8_t	text[254]; /* 1-253 + 1 for null */
1632949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project};
1642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
1652949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstruct fh_t {
1662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int8_t	element_id;
1672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int8_t	length;
1682949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int16_t	dwell_time;
1692949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int8_t	hop_set;
1702949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int8_t 	hop_pattern;
1712949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int8_t	hop_index;
1722949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project};
1732949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
1742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstruct ds_t {
1752949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int8_t	element_id;
1762949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int8_t	length;
1772949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int8_t	channel;
1782949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project};
1792949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
1802949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstruct cf_t {
1812949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int8_t	element_id;
1822949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int8_t	length;
1832949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int8_t	count;
1842949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int8_t	period;
1852949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int16_t	max_duration;
1862949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int16_t	dur_remaing;
1872949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project};
1882949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
1892949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstruct tim_t {
1902949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int8_t	element_id;
1912949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int8_t	length;
1922949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int8_t	count;
1932949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int8_t	period;
1942949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int8_t	bitmap_control;
1952949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int8_t	bitmap[251];
1962949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project};
1972949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
1982949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	E_SSID 		0
1992949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	E_RATES 	1
2002949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	E_FH	 	2
2012949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	E_DS 		3
2022949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	E_CF	 	4
2032949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	E_TIM	 	5
2042949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	E_IBSS 		6
2052949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* reserved 		7 */
2062949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* reserved 		8 */
2072949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* reserved 		9 */
2082949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* reserved 		10 */
2092949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* reserved 		11 */
2102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* reserved 		12 */
2112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* reserved 		13 */
2122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* reserved 		14 */
2132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* reserved 		15 */
2142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* reserved 		16 */
2152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
2162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	E_CHALLENGE 	16
2172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* reserved 		17 */
2182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* reserved 		18 */
2192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* reserved 		19 */
2202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* reserved 		16 */
2212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* reserved 		16 */
2222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
2232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
2242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstruct mgmt_body_t {
2252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int8_t   	timestamp[IEEE802_11_TSTAMP_LEN];
2262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int16_t  	beacon_interval;
2272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int16_t 	listen_interval;
2282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int16_t 	status_code;
2292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int16_t 	aid;
2302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_char		ap[IEEE802_11_AP_LEN];
2312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int16_t	reason_code;
2322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int16_t	auth_alg;
2332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int16_t	auth_trans_seq_num;
23453f17a9db278d33517d9888dd77848f554522a38JP Abgrall	int		challenge_present;
2352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	struct challenge_t  challenge;
2362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int16_t	capability_info;
23753f17a9db278d33517d9888dd77848f554522a38JP Abgrall	int		ssid_present;
2382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	struct ssid_t	ssid;
23953f17a9db278d33517d9888dd77848f554522a38JP Abgrall	int		rates_present;
2402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	struct rates_t 	rates;
24153f17a9db278d33517d9888dd77848f554522a38JP Abgrall	int		ds_present;
2422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	struct ds_t	ds;
24353f17a9db278d33517d9888dd77848f554522a38JP Abgrall	int		cf_present;
2442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	struct cf_t	cf;
24553f17a9db278d33517d9888dd77848f554522a38JP Abgrall	int		fh_present;
2462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	struct fh_t	fh;
24753f17a9db278d33517d9888dd77848f554522a38JP Abgrall	int		tim_present;
2482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	struct tim_t	tim;
2492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project};
2502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
2512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstruct ctrl_rts_t {
2522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int16_t	fc;
2532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int16_t	duration;
2542949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int8_t	ra[6];
2552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int8_t	ta[6];
2562949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int8_t	fcs[4];
2572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project};
2582949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
2592949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	CTRL_RTS_HDRLEN	(IEEE802_11_FC_LEN+IEEE802_11_DUR_LEN+\
2602949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project			 IEEE802_11_RA_LEN+IEEE802_11_TA_LEN)
2612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
2622949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstruct ctrl_cts_t {
2632949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int16_t	fc;
2642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int16_t	duration;
2652949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int8_t	ra[6];
2662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int8_t	fcs[4];
2672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project};
2682949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
2692949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	CTRL_CTS_HDRLEN	(IEEE802_11_FC_LEN+IEEE802_11_DUR_LEN+IEEE802_11_RA_LEN)
2702949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
2712949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstruct ctrl_ack_t {
2722949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int16_t	fc;
2732949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int16_t	duration;
2742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int8_t	ra[6];
2752949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int8_t	fcs[4];
2762949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project};
2772949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
2782949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	CTRL_ACK_HDRLEN	(IEEE802_11_FC_LEN+IEEE802_11_DUR_LEN+IEEE802_11_RA_LEN)
2792949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
2802949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstruct ctrl_ps_poll_t {
2812949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int16_t	fc;
2822949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int16_t	aid;
2832949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int8_t	bssid[6];
2842949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int8_t	ta[6];
2852949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int8_t	fcs[4];
2862949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project};
2872949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
2882949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	CTRL_PS_POLL_HDRLEN	(IEEE802_11_FC_LEN+IEEE802_11_AID_LEN+\
2892949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project				 IEEE802_11_BSSID_LEN+IEEE802_11_TA_LEN)
2902949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
2912949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstruct ctrl_end_t {
2922949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int16_t	fc;
2932949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int16_t	duration;
2942949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int8_t	ra[6];
2952949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int8_t	bssid[6];
2962949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int8_t	fcs[4];
2972949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project};
2982949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
2992949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	CTRL_END_HDRLEN	(IEEE802_11_FC_LEN+IEEE802_11_DUR_LEN+\
3002949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project			 IEEE802_11_RA_LEN+IEEE802_11_BSSID_LEN)
3012949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
3022949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstruct ctrl_end_ack_t {
3032949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int16_t	fc;
3042949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int16_t	duration;
3052949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int8_t	ra[6];
3062949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int8_t	bssid[6];
3072949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int8_t	fcs[4];
3082949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project};
3092949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
3102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	CTRL_END_ACK_HDRLEN	(IEEE802_11_FC_LEN+IEEE802_11_DUR_LEN+\
3112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project				 IEEE802_11_RA_LEN+IEEE802_11_BSSID_LEN)
3122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
31353f17a9db278d33517d9888dd77848f554522a38JP Abgrallstruct ctrl_ba_t {
31453f17a9db278d33517d9888dd77848f554522a38JP Abgrall	u_int16_t	fc;
31553f17a9db278d33517d9888dd77848f554522a38JP Abgrall	u_int16_t	duration;
31653f17a9db278d33517d9888dd77848f554522a38JP Abgrall	u_int8_t	ra[6];
31753f17a9db278d33517d9888dd77848f554522a38JP Abgrall	u_int8_t	fcs[4];
31853f17a9db278d33517d9888dd77848f554522a38JP Abgrall};
31953f17a9db278d33517d9888dd77848f554522a38JP Abgrall
32053f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define	CTRL_BA_HDRLEN	(IEEE802_11_FC_LEN+IEEE802_11_DUR_LEN+IEEE802_11_RA_LEN)
32153f17a9db278d33517d9888dd77848f554522a38JP Abgrall
32253f17a9db278d33517d9888dd77848f554522a38JP Abgrallstruct ctrl_bar_t {
32353f17a9db278d33517d9888dd77848f554522a38JP Abgrall	u_int16_t	fc;
32453f17a9db278d33517d9888dd77848f554522a38JP Abgrall	u_int16_t	dur;
32553f17a9db278d33517d9888dd77848f554522a38JP Abgrall	u_int8_t	ra[6];
32653f17a9db278d33517d9888dd77848f554522a38JP Abgrall	u_int8_t	ta[6];
32753f17a9db278d33517d9888dd77848f554522a38JP Abgrall	u_int16_t	ctl;
32853f17a9db278d33517d9888dd77848f554522a38JP Abgrall	u_int16_t	seq;
32953f17a9db278d33517d9888dd77848f554522a38JP Abgrall	u_int8_t	fcs[4];
33053f17a9db278d33517d9888dd77848f554522a38JP Abgrall};
33153f17a9db278d33517d9888dd77848f554522a38JP Abgrall
33253f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define	CTRL_BAR_HDRLEN		(IEEE802_11_FC_LEN+IEEE802_11_DUR_LEN+\
33353f17a9db278d33517d9888dd77848f554522a38JP Abgrall				 IEEE802_11_RA_LEN+IEEE802_11_TA_LEN+\
33453f17a9db278d33517d9888dd77848f554522a38JP Abgrall				 IEEE802_11_CTL_LEN+IEEE802_11_SEQ_LEN)
33553f17a9db278d33517d9888dd77848f554522a38JP Abgrall
33653f17a9db278d33517d9888dd77848f554522a38JP Abgrallstruct meshcntl_t {
33753f17a9db278d33517d9888dd77848f554522a38JP Abgrall	u_int8_t	flags;
33853f17a9db278d33517d9888dd77848f554522a38JP Abgrall	u_int8_t	ttl;
33953f17a9db278d33517d9888dd77848f554522a38JP Abgrall	u_int8_t	seq[4];
34053f17a9db278d33517d9888dd77848f554522a38JP Abgrall	u_int8_t	addr4[6];
34153f17a9db278d33517d9888dd77848f554522a38JP Abgrall	u_int8_t	addr5[6];
34253f17a9db278d33517d9888dd77848f554522a38JP Abgrall	u_int8_t	addr6[6];
34353f17a9db278d33517d9888dd77848f554522a38JP Abgrall};
34453f17a9db278d33517d9888dd77848f554522a38JP Abgrall
3452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	IV_IV(iv)	((iv) & 0xFFFFFF)
3462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	IV_PAD(iv)	(((iv) >> 24) & 0x3F)
3472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	IV_KEYID(iv)	(((iv) >> 30) & 0x03)
348