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