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