1cf3e6881e38d348c7eabcb354631ae646d115c1fAli Bahar/****************************************************************************** 2cf3e6881e38d348c7eabcb354631ae646d115c1fAli Bahar * 3cf3e6881e38d348c7eabcb354631ae646d115c1fAli Bahar * Copyright(c) 2007 - 2010 Realtek Corporation. All rights reserved. 4cf3e6881e38d348c7eabcb354631ae646d115c1fAli Bahar * 5cf3e6881e38d348c7eabcb354631ae646d115c1fAli Bahar * This program is free software; you can redistribute it and/or modify it 6cf3e6881e38d348c7eabcb354631ae646d115c1fAli Bahar * under the terms of version 2 of the GNU General Public License as 7cf3e6881e38d348c7eabcb354631ae646d115c1fAli Bahar * published by the Free Software Foundation. 8cf3e6881e38d348c7eabcb354631ae646d115c1fAli Bahar * 9cf3e6881e38d348c7eabcb354631ae646d115c1fAli Bahar * This program is distributed in the hope that it will be useful, but WITHOUT 10cf3e6881e38d348c7eabcb354631ae646d115c1fAli Bahar * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11cf3e6881e38d348c7eabcb354631ae646d115c1fAli Bahar * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 12cf3e6881e38d348c7eabcb354631ae646d115c1fAli Bahar * more details. 13cf3e6881e38d348c7eabcb354631ae646d115c1fAli Bahar * 14cf3e6881e38d348c7eabcb354631ae646d115c1fAli Bahar * You should have received a copy of the GNU General Public License along with 15cf3e6881e38d348c7eabcb354631ae646d115c1fAli Bahar * this program; if not, write to the Free Software Foundation, Inc., 16cf3e6881e38d348c7eabcb354631ae646d115c1fAli Bahar * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA 17cf3e6881e38d348c7eabcb354631ae646d115c1fAli Bahar * 18cf3e6881e38d348c7eabcb354631ae646d115c1fAli Bahar * Modifications for inclusion into the Linux staging tree are 19cf3e6881e38d348c7eabcb354631ae646d115c1fAli Bahar * Copyright(c) 2010 Larry Finger. All rights reserved. 20cf3e6881e38d348c7eabcb354631ae646d115c1fAli Bahar * 21cf3e6881e38d348c7eabcb354631ae646d115c1fAli Bahar * Contact information: 22cf3e6881e38d348c7eabcb354631ae646d115c1fAli Bahar * WLAN FAE <wlanfae@realtek.com> 23cf3e6881e38d348c7eabcb354631ae646d115c1fAli Bahar * Larry Finger <Larry.Finger@lwfinger.net> 24cf3e6881e38d348c7eabcb354631ae646d115c1fAli Bahar * 25cf3e6881e38d348c7eabcb354631ae646d115c1fAli Bahar ******************************************************************************/ 262865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#ifndef __IEEE80211_H 272865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define __IEEE80211_H 282865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 292865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#include "osdep_service.h" 302865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#include "drv_types.h" 312865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#include "wifi.h" 3240878364f1f461af2030bce0ea7d5f026d5a1dc2Michael Fiedler#include <linux/compiler.h> 332865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#include <linux/wireless.h> 342865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 352865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define MGMT_QUEUE_NUM 5 362865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define ETH_ALEN 6 372865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE_CMD_SET_WPA_PARAM 1 382865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE_CMD_SET_WPA_IE 2 392865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE_CMD_SET_ENCRYPTION 3 402865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE_CMD_MLME 4 412865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 422865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE_PARAM_WPA_ENABLED 1 432865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE_PARAM_TKIP_COUNTERMEASURES 2 442865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE_PARAM_DROP_UNENCRYPTED 3 452865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE_PARAM_PRIVACY_INVOKED 4 462865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE_PARAM_AUTH_ALGS 5 472865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE_PARAM_IEEE_802_1X 6 482865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE_PARAM_WPAX_SELECT 7 492865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 502865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define AUTH_ALG_OPEN_SYSTEM 0x1 512865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define AUTH_ALG_SHARED_KEY 0x2 522865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define AUTH_ALG_LEAP 0x00000004 532865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 542865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE_MLME_STA_DEAUTH 1 552865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE_MLME_STA_DISASSOC 2 562865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 572865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE_CRYPT_ERR_UNKNOWN_ALG 2 582865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE_CRYPT_ERR_UNKNOWN_ADDR 3 592865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE_CRYPT_ERR_CRYPT_INIT_FAILED 4 602865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE_CRYPT_ERR_KEY_SET_FAILED 5 612865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE_CRYPT_ERR_TX_KEY_SET_FAILED 6 622865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE_CRYPT_ERR_CARD_CONF_FAILED 7 632865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 642865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 652865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE_CRYPT_ALG_NAME_LEN 16 662865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 672865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define WPA_CIPHER_NONE BIT(0) 682865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define WPA_CIPHER_WEP40 BIT(1) 692865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define WPA_CIPHER_WEP104 BIT(2) 702865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define WPA_CIPHER_TKIP BIT(3) 712865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define WPA_CIPHER_CCMP BIT(4) 722865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 732865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 742865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 752865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define WPA_SELECTOR_LEN 4 762865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define RSN_HEADER_LEN 4 772865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 782865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define RSN_SELECTOR_LEN 4 792865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 802865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Fingerenum NETWORK_TYPE { 812865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger WIRELESS_INVALID = 0, 822865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger WIRELESS_11B = 1, 832865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger WIRELESS_11G = 2, 842865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger WIRELESS_11BG = (WIRELESS_11B | WIRELESS_11G), 852865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger WIRELESS_11A = 4, 862865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger WIRELESS_11N = 8, 872865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger WIRELESS_11GN = (WIRELESS_11G | WIRELESS_11N), 882865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger WIRELESS_11BGN = (WIRELESS_11B | WIRELESS_11G | WIRELESS_11N), 892865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger}; 902865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 912865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 922865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Fingerstruct ieee_param { 932865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger u32 cmd; 942865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger u8 sta_addr[ETH_ALEN]; 952865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger union { 962865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger struct { 972865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger u8 name; 982865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger u32 value; 992865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger } wpa_param; 1002865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger struct { 1012865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger u32 len; 1022865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger u8 reserved[32]; 1032865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger u8 data[0]; 1042865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger } wpa_ie; 1050593758e4b71836d3a95714b626d273ee51173e0Javier M. Mellid struct { 1062865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger int command; 1072865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger int reason_code; 1082865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger } mlme; 1092865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger struct { 1102865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger u8 alg[IEEE_CRYPT_ALG_NAME_LEN]; 1112865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger u8 set_tx; 1122865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger u32 err; 1132865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger u8 idx; 1142865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger u8 seq[8]; /* sequence counter (set: RX, get: TX) */ 1152865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger u16 key_len; 1162865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger u8 key[0]; 1172865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger } crypt; 1182865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger } u; 1192865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger}; 1202865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 1212865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE80211_DATA_LEN 2304 1222865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger/* Maximum size for the MA-UNITDATA primitive, 802.11 standard section 1232865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 6.2.1.1.2. 1242865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 1252865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger The figure in section 7.1.2 suggests a body size of up to 2312 1262865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger bytes is allowed, which is a bit confusing, I suspect this 1272865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger represents the 2304 bytes of real data, plus a possible 8 bytes of 1282865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger WEP IV and ICV. (this interpretation suggested by Ramiro Barreiro) */ 1292865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 1302865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE80211_HLEN 30 1312865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE80211_FRAME_LEN (IEEE80211_DATA_LEN + IEEE80211_HLEN) 1322865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 1332865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger/* this is stolen from ipw2200 driver */ 1342865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE_IBSS_MAC_HASH_SIZE 31 1352865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 1362865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Fingerstruct ieee_ibss_seq { 1372865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger u8 mac[ETH_ALEN]; 1382865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger u16 seq_num; 1392865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger u16 frag_num; 140ee5b1aadfd5cda257337a9b9777114a10c18c31eAli Bahar unsigned long packet_time; 1412865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger struct list_head list; 1422865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger}; 1432865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 1442865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Fingerstruct ieee80211_hdr { 1452865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger u16 frame_ctl; 1462865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger u16 duration_id; 1472865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger u8 addr1[ETH_ALEN]; 1482865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger u8 addr2[ETH_ALEN]; 1492865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger u8 addr3[ETH_ALEN]; 1502865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger u16 seq_ctl; 1512865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger u8 addr4[ETH_ALEN]; 15240878364f1f461af2030bce0ea7d5f026d5a1dc2Michael Fiedler} __packed; 1532865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 1542865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Fingerstruct ieee80211_hdr_3addr { 1552865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger u16 frame_ctl; 1562865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger u16 duration_id; 1572865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger u8 addr1[ETH_ALEN]; 1582865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger u8 addr2[ETH_ALEN]; 1592865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger u8 addr3[ETH_ALEN]; 1602865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger u16 seq_ctl; 16140878364f1f461af2030bce0ea7d5f026d5a1dc2Michael Fiedler} __packed; 1622865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 1632865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 1642865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Fingerstruct ieee80211_hdr_qos { 1652865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger u16 frame_ctl; 1662865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger u16 duration_id; 1672865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger u8 addr1[ETH_ALEN]; 1682865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger u8 addr2[ETH_ALEN]; 1692865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger u8 addr3[ETH_ALEN]; 1702865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger u16 seq_ctl; 1712865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger u8 addr4[ETH_ALEN]; 1722865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger u16 qc; 17340878364f1f461af2030bce0ea7d5f026d5a1dc2Michael Fiedler} __packed; 1742865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 1752865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Fingerstruct ieee80211_hdr_3addr_qos { 1762865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger u16 frame_ctl; 1772865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger u16 duration_id; 1780593758e4b71836d3a95714b626d273ee51173e0Javier M. Mellid u8 addr1[ETH_ALEN]; 1790593758e4b71836d3a95714b626d273ee51173e0Javier M. Mellid u8 addr2[ETH_ALEN]; 1800593758e4b71836d3a95714b626d273ee51173e0Javier M. Mellid u8 addr3[ETH_ALEN]; 1812865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger u16 seq_ctl; 1820593758e4b71836d3a95714b626d273ee51173e0Javier M. Mellid u16 qc; 18340878364f1f461af2030bce0ea7d5f026d5a1dc2Michael Fiedler} __packed; 1842865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 1852865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Fingerstruct eapol { 1862865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger u8 snap[6]; 1872865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger u16 ethertype; 1882865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger u8 version; 1892865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger u8 type; 1902865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger u16 length; 19140878364f1f461af2030bce0ea7d5f026d5a1dc2Michael Fiedler} __packed; 1922865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 1932865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 1942865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Fingerenum eap_type { 1952865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger EAP_PACKET = 0, 1962865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger EAPOL_START, 1972865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger EAPOL_LOGOFF, 1982865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger EAPOL_KEY, 1992865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger EAPOL_ENCAP_ASF_ALERT 2002865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger}; 2012865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 2022865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE80211_3ADDR_LEN 24 2032865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE80211_4ADDR_LEN 30 2042865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE80211_FCS_LEN 4 2052865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 2062865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define MIN_FRAG_THRESHOLD 256U 2072865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define MAX_FRAG_THRESHOLD 2346U 2082865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 2092865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger/* Frame control field constants */ 2102865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE80211_FCTL_VERS 0x0002 2112865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE80211_FCTL_FTYPE 0x000c 2122865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE80211_FCTL_STYPE 0x00f0 2132865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE80211_FCTL_TODS 0x0100 2142865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE80211_FCTL_FROMDS 0x0200 2152865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE80211_FCTL_MOREFRAGS 0x0400 2162865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE80211_FCTL_RETRY 0x0800 2172865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE80211_FCTL_PM 0x1000 2182865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE80211_FCTL_MOREDATA 0x2000 2192865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE80211_FCTL_WEP 0x4000 2202865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE80211_FCTL_ORDER 0x8000 2212865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 2222865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE80211_FTYPE_MGMT 0x0000 2232865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE80211_FTYPE_CTL 0x0004 2242865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE80211_FTYPE_DATA 0x0008 2252865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 2262865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger/* management */ 2272865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE80211_STYPE_ASSOC_REQ 0x0000 2282865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE80211_STYPE_ASSOC_RESP 0x0010 2292865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE80211_STYPE_REASSOC_REQ 0x0020 2302865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE80211_STYPE_REASSOC_RESP 0x0030 2312865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE80211_STYPE_PROBE_REQ 0x0040 2322865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE80211_STYPE_PROBE_RESP 0x0050 2332865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE80211_STYPE_BEACON 0x0080 2342865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE80211_STYPE_ATIM 0x0090 2352865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE80211_STYPE_DISASSOC 0x00A0 2362865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE80211_STYPE_AUTH 0x00B0 2372865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE80211_STYPE_DEAUTH 0x00C0 2382865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 2392865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger/* control */ 2402865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE80211_STYPE_PSPOLL 0x00A0 2412865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE80211_STYPE_RTS 0x00B0 2422865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE80211_STYPE_CTS 0x00C0 2432865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE80211_STYPE_ACK 0x00D0 2442865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE80211_STYPE_CFEND 0x00E0 2452865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE80211_STYPE_CFENDACK 0x00F0 2462865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 2472865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger/* data */ 2482865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE80211_STYPE_DATA 0x0000 2492865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE80211_STYPE_DATA_CFACK 0x0010 2502865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE80211_STYPE_DATA_CFPOLL 0x0020 2512865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE80211_STYPE_DATA_CFACKPOLL 0x0030 2522865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE80211_STYPE_NULLFUNC 0x0040 2532865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE80211_STYPE_CFACK 0x0050 2542865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE80211_STYPE_CFPOLL 0x0060 2552865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE80211_STYPE_CFACKPOLL 0x0070 2562865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE80211_QOS_DATAGRP 0x0080 2572865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE80211_QoS_DATAGRP IEEE80211_QOS_DATAGRP 2582865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 2592865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE80211_SCTL_FRAG 0x000F 2602865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE80211_SCTL_SEQ 0xFFF0 2612865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 2622865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger/* QoS,QOS */ 2632865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define NORMAL_ACK 0 2642865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define NO_ACK 1 2652865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define NON_EXPLICIT_ACK 2 2662865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define BLOCK_ACK 3 2672865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 2682865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#ifndef ETH_P_PAE 2692865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define ETH_P_PAE 0x888E /* Port Access Entity (IEEE 802.1X) */ 2702865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#endif /* ETH_P_PAE */ 2712865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 2722865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define ETH_P_PREAUTH 0x88C7 /* IEEE 802.11i pre-authentication */ 2732865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 2742865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define ETH_P_ECONET 0x0018 2752865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 2762865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#ifndef ETH_P_80211_RAW 2772865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define ETH_P_80211_RAW (ETH_P_ECONET + 1) 2782865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#endif 2792865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 2802865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger/* IEEE 802.11 defines */ 2812865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 2822865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define P80211_OUI_LEN 3 2832865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 2842865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Fingerstruct ieee80211_snap_hdr { 2852865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger u8 dsap; /* always 0xAA */ 2862865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger u8 ssap; /* always 0xAA */ 2872865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger u8 ctrl; /* always 0x03 */ 2882865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger u8 oui[P80211_OUI_LEN]; /* organizational universal id */ 28940878364f1f461af2030bce0ea7d5f026d5a1dc2Michael Fiedler} __packed; 2902865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 2912865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define SNAP_SIZE sizeof(struct ieee80211_snap_hdr) 2922865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 2932865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define WLAN_FC_GET_TYPE(fc) ((fc) & IEEE80211_FCTL_FTYPE) 2942865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define WLAN_FC_GET_STYPE(fc) ((fc) & IEEE80211_FCTL_STYPE) 2952865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 2962865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define WLAN_QC_GET_TID(qc) ((qc) & 0x0f) 2972865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 2982865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define WLAN_GET_SEQ_FRAG(seq) ((seq) & IEEE80211_SCTL_FRAG) 2992865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define WLAN_GET_SEQ_SEQ(seq) ((seq) & IEEE80211_SCTL_SEQ) 3002865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 3012865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger/* Authentication algorithms */ 3022865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define WLAN_AUTH_OPEN 0 3032865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define WLAN_AUTH_SHARED_KEY 1 3042865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 3052865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define WLAN_AUTH_CHALLENGE_LEN 128 3062865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 3072865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define WLAN_CAPABILITY_BSS (1<<0) 3082865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define WLAN_CAPABILITY_IBSS (1<<1) 3092865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define WLAN_CAPABILITY_CF_POLLABLE (1<<2) 3102865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define WLAN_CAPABILITY_CF_POLL_REQUEST (1<<3) 3112865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define WLAN_CAPABILITY_PRIVACY (1<<4) 3122865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define WLAN_CAPABILITY_SHORT_PREAMBLE (1<<5) 3132865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define WLAN_CAPABILITY_PBCC (1<<6) 3142865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define WLAN_CAPABILITY_CHANNEL_AGILITY (1<<7) 3152865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define WLAN_CAPABILITY_SHORT_SLOT (1<<10) 3162865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 3172865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger/* Status codes */ 3182865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define WLAN_STATUS_SUCCESS 0 3192865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define WLAN_STATUS_UNSPECIFIED_FAILURE 1 3202865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define WLAN_STATUS_CAPS_UNSUPPORTED 10 3212865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define WLAN_STATUS_REASSOC_NO_ASSOC 11 3222865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define WLAN_STATUS_ASSOC_DENIED_UNSPEC 12 3232865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define WLAN_STATUS_NOT_SUPPORTED_AUTH_ALG 13 3242865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define WLAN_STATUS_UNKNOWN_AUTH_TRANSACTION 14 3252865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define WLAN_STATUS_CHALLENGE_FAIL 15 3262865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define WLAN_STATUS_AUTH_TIMEOUT 16 3272865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define WLAN_STATUS_AP_UNABLE_TO_HANDLE_NEW_STA 17 3282865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define WLAN_STATUS_ASSOC_DENIED_RATES 18 3292865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger/* 802.11b */ 3302865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define WLAN_STATUS_ASSOC_DENIED_NOSHORT 19 3312865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define WLAN_STATUS_ASSOC_DENIED_NOPBCC 20 3322865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define WLAN_STATUS_ASSOC_DENIED_NOAGILITY 21 3332865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 3342865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger/* Reason codes */ 3352865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define WLAN_REASON_UNSPECIFIED 1 3362865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define WLAN_REASON_PREV_AUTH_NOT_VALID 2 3372865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define WLAN_REASON_DEAUTH_LEAVING 3 3382865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define WLAN_REASON_DISASSOC_DUE_TO_INACTIVITY 4 3392865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define WLAN_REASON_DISASSOC_AP_BUSY 5 3402865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define WLAN_REASON_CLASS2_FRAME_FROM_NONAUTH_STA 6 3412865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define WLAN_REASON_CLASS3_FRAME_FROM_NONASSOC_STA 7 3422865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define WLAN_REASON_DISASSOC_STA_HAS_LEFT 8 3432865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define WLAN_REASON_STA_REQ_ASSOC_WITHOUT_AUTH 9 3442865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 3452865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 3462865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger/* Information Element IDs */ 3472865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define WLAN_EID_SSID 0 3482865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define WLAN_EID_SUPP_RATES 1 3492865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define WLAN_EID_FH_PARAMS 2 3502865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define WLAN_EID_DS_PARAMS 3 3512865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define WLAN_EID_CF_PARAMS 4 3522865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define WLAN_EID_TIM 5 3532865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define WLAN_EID_IBSS_PARAMS 6 3542865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define WLAN_EID_CHALLENGE 16 3552865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define WLAN_EID_RSN 48 3562865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define WLAN_EID_GENERIC 221 3572865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 3582865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE80211_MGMT_HDR_LEN 24 3592865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE80211_DATA_HDR3_LEN 24 3602865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE80211_DATA_HDR4_LEN 30 3612865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 3622865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 3632865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE80211_STATMASK_SIGNAL (1<<0) 3642865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE80211_STATMASK_RSSI (1<<1) 3652865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE80211_STATMASK_NOISE (1<<2) 3662865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE80211_STATMASK_RATE (1<<3) 3672865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE80211_STATMASK_WEMASK 0x7 3682865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 3692865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 3702865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE80211_CCK_MODULATION (1<<0) 3712865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE80211_OFDM_MODULATION (1<<1) 3722865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 3732865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE80211_24GHZ_BAND (1<<0) 3742865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE80211_52GHZ_BAND (1<<1) 3752865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 3762865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE80211_CCK_RATE_LEN 4 3772865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE80211_NUM_OFDM_RATESLEN 8 3782865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 3792865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 3802865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE80211_CCK_RATE_1MB 0x02 3812865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE80211_CCK_RATE_2MB 0x04 3822865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE80211_CCK_RATE_5MB 0x0B 3832865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE80211_CCK_RATE_11MB 0x16 3842865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE80211_OFDM_RATE_LEN 8 3852865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE80211_OFDM_RATE_6MB 0x0C 3862865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE80211_OFDM_RATE_9MB 0x12 3872865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE80211_OFDM_RATE_12MB 0x18 3882865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE80211_OFDM_RATE_18MB 0x24 3892865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE80211_OFDM_RATE_24MB 0x30 3902865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE80211_OFDM_RATE_36MB 0x48 3912865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE80211_OFDM_RATE_48MB 0x60 3922865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE80211_OFDM_RATE_54MB 0x6C 3932865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE80211_BASIC_RATE_MASK 0x80 3942865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 3952865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE80211_CCK_RATE_1MB_MASK (1<<0) 3962865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE80211_CCK_RATE_2MB_MASK (1<<1) 3972865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE80211_CCK_RATE_5MB_MASK (1<<2) 3982865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE80211_CCK_RATE_11MB_MASK (1<<3) 3992865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE80211_OFDM_RATE_6MB_MASK (1<<4) 4002865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE80211_OFDM_RATE_9MB_MASK (1<<5) 4012865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE80211_OFDM_RATE_12MB_MASK (1<<6) 4022865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE80211_OFDM_RATE_18MB_MASK (1<<7) 4032865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE80211_OFDM_RATE_24MB_MASK (1<<8) 4042865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE80211_OFDM_RATE_36MB_MASK (1<<9) 4052865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE80211_OFDM_RATE_48MB_MASK (1<<10) 4062865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE80211_OFDM_RATE_54MB_MASK (1<<11) 4072865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 4082865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE80211_CCK_RATES_MASK 0x0000000F 4092865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE80211_CCK_BASIC_RATES_MASK (IEEE80211_CCK_RATE_1MB_MASK | \ 4102865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger IEEE80211_CCK_RATE_2MB_MASK) 4112865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE80211_CCK_DEFAULT_RATES_MASK (IEEE80211_CCK_BASIC_RATES_MASK | \ 4122865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger IEEE80211_CCK_RATE_5MB_MASK | \ 4132865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger IEEE80211_CCK_RATE_11MB_MASK) 4142865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 4152865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE80211_OFDM_RATES_MASK 0x00000FF0 4162865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE80211_OFDM_BASIC_RATES_MASK (IEEE80211_OFDM_RATE_6MB_MASK | \ 4172865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger IEEE80211_OFDM_RATE_12MB_MASK | \ 4182865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger IEEE80211_OFDM_RATE_24MB_MASK) 4192865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE80211_OFDM_DEFAULT_RATES_MASK (IEEE80211_OFDM_BASIC_RATES_MASK | \ 4202865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger IEEE80211_OFDM_RATE_9MB_MASK | \ 4212865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger IEEE80211_OFDM_RATE_18MB_MASK | \ 4222865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger IEEE80211_OFDM_RATE_36MB_MASK | \ 4232865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger IEEE80211_OFDM_RATE_48MB_MASK | \ 4242865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger IEEE80211_OFDM_RATE_54MB_MASK) 4252865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE80211_DEFAULT_RATES_MASK (IEEE80211_OFDM_DEFAULT_RATES_MASK | \ 4262865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger IEEE80211_CCK_DEFAULT_RATES_MASK) 4272865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 4282865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE80211_NUM_OFDM_RATES 8 4292865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE80211_NUM_CCK_RATES 4 4302865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE80211_OFDM_SHIFT_MASK_A 4 4312865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 4322865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 4332865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 4342865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 4352865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger/* NOTE: This data is for statistical purposes; not all hardware provides this 4362865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger * information for frames received. Not setting these will not cause 4372865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger * any adverse affects. */ 4382865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Fingerstruct ieee80211_rx_stats { 4392865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger s8 rssi; 4402865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger u8 signal; 4412865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger u8 noise; 4422865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger u8 received_channel; 4432865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger u16 rate; /* in 100 kbps */ 4442865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger u8 mask; 4452865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger u8 freq; 4462865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger u16 len; 4472865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger}; 4482865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 4492865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger/* IEEE 802.11 requires that STA supports concurrent reception of at least 4502865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger * three fragmented frames. This define can be increased to support more 4512865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger * concurrent frames, but it should be noted that each entry can consume about 4522865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger * 2 kB of RAM and increasing cache size will slow down frame reassembly. */ 4532865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE80211_FRAG_CACHE_LEN 4 4542865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 4552865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Fingerstruct ieee80211_frag_entry { 4562865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger u32 first_frag_time; 4572865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger uint seq; 4582865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger uint last_frag; 4592865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger uint qos; /*jackson*/ 4602865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger uint tid; /*jackson*/ 4612865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger struct sk_buff *skb; 4622865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger u8 src_addr[ETH_ALEN]; 4632865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger u8 dst_addr[ETH_ALEN]; 4642865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger}; 4652865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 4662865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Fingerstruct ieee80211_stats { 4672865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger uint tx_unicast_frames; 4682865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger uint tx_multicast_frames; 4692865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger uint tx_fragments; 4702865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger uint tx_unicast_octets; 4712865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger uint tx_multicast_octets; 4722865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger uint tx_deferred_transmissions; 4732865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger uint tx_single_retry_frames; 4742865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger uint tx_multiple_retry_frames; 4752865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger uint tx_retry_limit_exceeded; 4762865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger uint tx_discards; 4772865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger uint rx_unicast_frames; 4782865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger uint rx_multicast_frames; 4792865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger uint rx_fragments; 4802865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger uint rx_unicast_octets; 4812865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger uint rx_multicast_octets; 4822865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger uint rx_fcs_errors; 4832865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger uint rx_discards_no_buffer; 4842865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger uint tx_discards_wrong_sa; 4852865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger uint rx_discards_undecryptable; 4862865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger uint rx_message_in_msg_fragments; 4872865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger uint rx_message_in_bad_msg_fragments; 4882865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger}; 4892865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 4900593758e4b71836d3a95714b626d273ee51173e0Javier M. Mellidstruct ieee80211_softmac_stats { 4912865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger uint rx_ass_ok; 4922865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger uint rx_ass_err; 4932865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger uint rx_probe_rq; 4942865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger uint tx_probe_rs; 4952865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger uint tx_beacons; 4962865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger uint rx_auth_rq; 4972865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger uint rx_auth_rs_ok; 4982865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger uint rx_auth_rs_err; 4992865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger uint tx_auth_rq; 5002865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger uint no_auth_rs; 5012865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger uint no_ass_rs; 5022865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger uint tx_ass_rq; 5032865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger uint rx_ass_rq; 5042865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger uint tx_probe_rq; 5052865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger uint reassoc; 5062865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger uint swtxstop; 5072865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger uint swtxawake; 5082865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger}; 5092865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 5102865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define SEC_KEY_1 (1<<0) 5112865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define SEC_KEY_2 (1<<1) 5122865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define SEC_KEY_3 (1<<2) 5132865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define SEC_KEY_4 (1<<3) 5142865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define SEC_ACTIVE_KEY (1<<4) 5152865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define SEC_AUTH_MODE (1<<5) 5162865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define SEC_UNICAST_GROUP (1<<6) 5172865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define SEC_LEVEL (1<<7) 5182865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define SEC_ENABLED (1<<8) 5192865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 5202865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define SEC_LEVEL_0 0 /* None */ 5212865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define SEC_LEVEL_1 1 /* WEP 40 and 104 bit */ 5222865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define SEC_LEVEL_2 2 /* Level 1 + TKIP */ 5232865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define SEC_LEVEL_2_CKIP 3 /* Level 1 + CKIP */ 5242865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define SEC_LEVEL_3 4 /* Level 2 + CCMP */ 5252865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 5262865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define WEP_KEYS 4 5272865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define WEP_KEY_LEN 13 5282865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 5292865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Fingerstruct ieee80211_security { 5302865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger u16 active_key:2, 5312865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger enabled:1, 5322865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger auth_mode:2, 5332865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger auth_algo:4, 5342865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger unicast_uses_group:1; 5352865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger u8 key_sizes[WEP_KEYS]; 5362865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger u8 keys[WEP_KEYS][WEP_KEY_LEN]; 5372865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger u8 level; 5382865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger u16 flags; 53940878364f1f461af2030bce0ea7d5f026d5a1dc2Michael Fiedler} __packed; 5402865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 5412865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger/* 5422865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 5432865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 802.11 data frame from AP 5442865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 5452865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger ,-------------------------------------------------------------------. 5462865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry FingerBytes | 2 | 2 | 6 | 6 | 6 | 2 | 0..2312 | 4 | 5472865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger |------|------|---------|---------|---------|------|---------|------| 5482865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry FingerDesc. | ctrl | dura | DA/RA | TA | SA | Sequ | frame | fcs | 5492865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger | | tion | (BSSID) | | | ence | data | | 5502865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger `-------------------------------------------------------------------' 5512865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 5522865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry FingerTotal: 28-2340 bytes 5532865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 5542865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger*/ 5552865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 5562865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Fingerstruct ieee80211_header_data { 5572865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger u16 frame_ctl; 5582865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger u16 duration_id; 5592865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger u8 addr1[6]; 5602865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger u8 addr2[6]; 5612865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger u8 addr3[6]; 5622865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger u16 seq_ctrl; 5632865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger}; 5642865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 5652865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define BEACON_PROBE_SSID_ID_POSITION 12 5662865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 5672865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger/* Management Frame Information Element Types */ 5682865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define MFIE_TYPE_SSID 0 5692865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define MFIE_TYPE_RATES 1 5702865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define MFIE_TYPE_FH_SET 2 5712865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define MFIE_TYPE_DS_SET 3 5722865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define MFIE_TYPE_CF_SET 4 5732865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define MFIE_TYPE_TIM 5 5742865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define MFIE_TYPE_IBSS_SET 6 5752865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define MFIE_TYPE_CHALLENGE 16 5762865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define MFIE_TYPE_ERP 42 5772865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define MFIE_TYPE_RSN 48 5782865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define MFIE_TYPE_RATES_EX 50 5792865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define MFIE_TYPE_GENERIC 221 5802865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 5812865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Fingerstruct ieee80211_info_element_hdr { 5822865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger u8 id; 5832865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger u8 len; 58440878364f1f461af2030bce0ea7d5f026d5a1dc2Michael Fiedler} __packed; 5852865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 5862865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Fingerstruct ieee80211_info_element { 5872865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger u8 id; 5882865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger u8 len; 5892865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger u8 data[0]; 59040878364f1f461af2030bce0ea7d5f026d5a1dc2Michael Fiedler} __packed; 5912865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 5922865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger/* 5932865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger * These are the data types that can make up management packets 5942865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger * 5952865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger u16 auth_algorithm; 5962865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger u16 auth_sequence; 5972865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger u16 beacon_interval; 5982865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger u16 capability; 5992865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger u8 current_ap[ETH_ALEN]; 6002865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger u16 listen_interval; 6012865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger struct { 6022865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger u16 association_id:14, reserved:2; 60340878364f1f461af2030bce0ea7d5f026d5a1dc2Michael Fiedler } __packed; 6042865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger u32 time_stamp[2]; 6052865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger u16 reason; 6062865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger u16 status; 6072865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger*/ 6082865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 6092865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE80211_DEFAULT_TX_ESSID "Penguin" 6102865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE80211_DEFAULT_BASIC_RATE 10 6112865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 6122865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Fingerstruct ieee80211_authentication { 6132865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger struct ieee80211_header_data header; 6142865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger u16 algorithm; 6152865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger u16 transaction; 6162865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger u16 status; 61740878364f1f461af2030bce0ea7d5f026d5a1dc2Michael Fiedler} __packed; 6182865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 6192865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Fingerstruct ieee80211_probe_response { 6202865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger struct ieee80211_header_data header; 6212865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger u32 time_stamp[2]; 6222865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger u16 beacon_interval; 6232865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger u16 capability; 6242865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger struct ieee80211_info_element info_element; 62540878364f1f461af2030bce0ea7d5f026d5a1dc2Michael Fiedler} __packed; 6262865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 6272865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Fingerstruct ieee80211_probe_request { 6282865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger struct ieee80211_header_data header; 62940878364f1f461af2030bce0ea7d5f026d5a1dc2Michael Fiedler} __packed; 6302865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 6312865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Fingerstruct ieee80211_assoc_request_frame { 6322865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger struct ieee80211_hdr_3addr header; 6332865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger u16 capability; 6342865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger u16 listen_interval; 6352865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger struct ieee80211_info_element_hdr info_element; 63640878364f1f461af2030bce0ea7d5f026d5a1dc2Michael Fiedler} __packed; 6372865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 6382865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Fingerstruct ieee80211_assoc_response_frame { 6392865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger struct ieee80211_hdr_3addr header; 6402865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger u16 capability; 6412865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger u16 status; 6422865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger u16 aid; 64340878364f1f461af2030bce0ea7d5f026d5a1dc2Michael Fiedler} __packed; 6442865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 6452865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Fingerstruct ieee80211_txb { 6462865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger u8 nr_frags; 6472865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger u8 encrypted; 6482865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger u16 reserved; 6492865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger u16 frag_size; 6502865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger u16 payload_size; 6512865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger struct sk_buff *fragments[0]; 6522865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger}; 6532865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 6542865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger/* SWEEP TABLE ENTRIES NUMBER*/ 6552865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define MAX_SWEEP_TAB_ENTRIES 42 6562865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define MAX_SWEEP_TAB_ENTRIES_PER_PACKET 7 6572865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger/* MAX_RATES_LENGTH needs to be 12. The spec says 8, and many APs 6582865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger * only use 8, and then use extended rates for the remaining supported 6592865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger * rates. Other APs, however, stick all of their supported rates on the 6602865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger * main rates information element... */ 6612865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define MAX_RATES_LENGTH ((u8)12) 6622865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define MAX_RATES_EX_LENGTH ((u8)16) 6632865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define MAX_NETWORK_COUNT 128 6642865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define MAX_CHANNEL_NUMBER 161 6652865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE80211_SOFTMAC_SCAN_TIME 400 6662865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger/*(HZ / 2)*/ 6672865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE80211_SOFTMAC_ASSOC_RETRY_TIME (HZ * 2) 6682865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 6692865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define CRC_LENGTH 4U 6702865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 6712865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define MAX_WPA_IE_LEN 128 6722865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 6732865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define NETWORK_EMPTY_ESSID (1<<0) 6742865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define NETWORK_HAS_OFDM (1<<1) 6752865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define NETWORK_HAS_CCK (1<<2) 6762865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 6772865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE80211_DTIM_MBCAST 4 6782865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE80211_DTIM_UCAST 2 6792865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE80211_DTIM_VALID 1 6802865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE80211_DTIM_INVALID 0 6812865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 6822865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE80211_PS_DISABLED 0 6832865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE80211_PS_UNICAST IEEE80211_DTIM_UCAST 6842865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE80211_PS_MBCAST IEEE80211_DTIM_MBCAST 6852865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IW_ESSID_MAX_SIZE 32 6862865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger/* 6872865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger * join_res: 6882865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger * -1: authentication fail 6892865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger * -2: association fail 6902865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger * > 0: TID 6912865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger */ 6922865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 6932865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Fingerenum ieee80211_state { 6942865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger /* the card is not linked at all */ 6952865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger IEEE80211_NOLINK = 0, 6962865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger /* IEEE80211_ASSOCIATING* are for BSS client mode 6972865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger * the driver shall not perform RX filtering unless 6982865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger * the state is LINKED. 6992865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger * The driver shall just check for the state LINKED and 7002865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger * defaults to NOLINK for ALL the other states (including 7012865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger * LINKED_SCANNING) 7022865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger */ 7032865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger /* the association procedure will start (wq scheduling)*/ 7042865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger IEEE80211_ASSOCIATING, 7052865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger IEEE80211_ASSOCIATING_RETRY, 7062865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger /* the association procedure is sending AUTH request*/ 7072865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger IEEE80211_ASSOCIATING_AUTHENTICATING, 708be10ac2b961e348919ce09d2b88471116d865087Justin P. Mattock /* the association procedure has successfully authenticated 7092865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger * and is sending association request 7102865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger */ 7112865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger IEEE80211_ASSOCIATING_AUTHENTICATED, 7122865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger /* the link is ok. the card associated to a BSS or linked 7132865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger * to a ibss cell or acting as an AP and creating the bss 7142865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger */ 7152865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger IEEE80211_LINKED, 7162865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger /* same as LINKED, but the driver shall apply RX filter 7172865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger * rules as we are in NO_LINK mode. As the card is still 7182865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger * logically linked, but it is doing a syncro site survey 7192865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger * then it will be back to LINKED state. 7202865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger */ 7212865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger IEEE80211_LINKED_SCANNING, 7222865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger}; 7232865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 7242865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define DEFAULT_MAX_SCAN_AGE (15 * HZ) 7252865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define DEFAULT_FTS 2346 7262865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 7272865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define CFG_IEEE80211_RESERVE_FCS (1<<0) 7282865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define CFG_IEEE80211_COMPUTE_FCS (1<<1) 7292865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 7302865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define MAXTID 16 7312865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 7322865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE_A (1<<0) 7332865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE_B (1<<1) 7342865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE_G (1<<2) 7352865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define IEEE_MODE_MASK (IEEE_A|IEEE_B|IEEE_G) 7362865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 7370c9f3a65c5eb7fe1fc611a22eb8a8b71ea865998Arnd Bergmannstatic inline int ieee80211_is_empty_essid(const char *essid, int essid_len) 7382865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger{ 7392865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger /* Single white space is for Linksys APs */ 7402865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger if (essid_len == 1 && essid[0] == ' ') 7412865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger return 1; 7422865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger /* Otherwise, if the entire essid is 0, we assume it is hidden */ 7432865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger while (essid_len) { 7442865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger essid_len--; 7452865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger if (essid[essid_len] != '\0') 7462865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger return 0; 7472865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger } 7482865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger return 1; 7492865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger} 7502865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 7510c9f3a65c5eb7fe1fc611a22eb8a8b71ea865998Arnd Bergmannstatic inline int ieee80211_get_hdrlen(u16 fc) 7522865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger{ 7532865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger int hdrlen = 24; 7542865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 7552865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger switch (WLAN_FC_GET_TYPE(fc)) { 7562865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger case IEEE80211_FTYPE_DATA: 7572865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger if (fc & IEEE80211_QOS_DATAGRP) 7582865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger hdrlen += 2; 7592865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger if ((fc & IEEE80211_FCTL_FROMDS) && (fc & IEEE80211_FCTL_TODS)) 7602865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger hdrlen += 6; /* Addr4 */ 7612865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger break; 7622865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger case IEEE80211_FTYPE_CTL: 7632865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger switch (WLAN_FC_GET_STYPE(fc)) { 7642865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger case IEEE80211_STYPE_CTS: 7652865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger case IEEE80211_STYPE_ACK: 7662865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger hdrlen = 10; 7672865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger break; 7682865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger default: 7692865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger hdrlen = 16; 7702865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger break; 7712865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger } 7722865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger break; 7732865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger } 7742865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger return hdrlen; 7752865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger} 7762865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 7772865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Fingerstruct registry_priv; 7782865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 7792865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Fingeru8 *r8712_set_ie(u8 *pbuf, sint index, uint len, u8 *source, uint *frlen); 780c07f972105a19104f56e82fab6c65c364d9f33b8Przemo Firsztu8 *r8712_get_ie(u8 *pbuf, sint index, sint *len, sint limit); 7812865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Fingerunsigned char *r8712_get_wpa_ie(unsigned char *pie, int *rsn_ie_len, int limit); 7820593758e4b71836d3a95714b626d273ee51173e0Javier M. Mellidunsigned char *r8712_get_wpa2_ie(unsigned char *pie, int *rsn_ie_len, 7830593758e4b71836d3a95714b626d273ee51173e0Javier M. Mellid int limit); 7842865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Fingerint r8712_parse_wpa_ie(u8 *wpa_ie, int wpa_ie_len, int *group_cipher, 7850593758e4b71836d3a95714b626d273ee51173e0Javier M. Mellid int *pairwise_cipher); 7862865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Fingerint r8712_parse_wpa2_ie(u8 *wpa_ie, int wpa_ie_len, int *group_cipher, 7870593758e4b71836d3a95714b626d273ee51173e0Javier M. Mellid int *pairwise_cipher); 7880593758e4b71836d3a95714b626d273ee51173e0Javier M. Mellidint r8712_get_sec_ie(u8 *in_ie, uint in_len, u8 *rsn_ie, u16 *rsn_len, 7890593758e4b71836d3a95714b626d273ee51173e0Javier M. Mellid u8 *wpa_ie, u16 *wpa_len); 7902865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Fingerint r8712_get_wps_ie(u8 *in_ie, uint in_len, u8 *wps_ie, uint *wps_ielen); 791ee5b1aadfd5cda257337a9b9777114a10c18c31eAli Baharint r8712_generate_ie(struct registry_priv *pregistrypriv); 7922865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Fingeruint r8712_is_cckrates_included(u8 *rate); 7932865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Fingeruint r8712_is_cckratesonly_included(u8 *rate); 7942865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 7952865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#endif /* IEEE80211_H */ 7962865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 797