| /* |
| * Copyright (c) 2013 The Chromium OS Authors. All rights reserved. |
| * Use of this source code is governed by a BSD-style license that can be |
| * found in the LICENSE file. |
| */ |
| |
| /* |
| * These header definitions are taken from wpa_supplicant, which offers |
| * the use of them under the terms of a BSD license. |
| */ |
| |
| #include <linux/types.h> |
| |
| #define WLAN_FC_TYPE_MGMT 0 |
| #define WLAN_FC_TYPE_CTRL 1 |
| #define WLAN_FC_TYPE_DATA 2 |
| |
| /* management */ |
| #define WLAN_FC_STYPE_ASSOC_REQ 0 |
| #define WLAN_FC_STYPE_ASSOC_RESP 1 |
| #define WLAN_FC_STYPE_REASSOC_REQ 2 |
| #define WLAN_FC_STYPE_REASSOC_RESP 3 |
| #define WLAN_FC_STYPE_PROBE_REQ 4 |
| #define WLAN_FC_STYPE_PROBE_RESP 5 |
| #define WLAN_FC_STYPE_BEACON 8 |
| #define WLAN_FC_STYPE_ATIM 9 |
| #define WLAN_FC_STYPE_DISASSOC 10 |
| #define WLAN_FC_STYPE_AUTH 11 |
| #define WLAN_FC_STYPE_DEAUTH 12 |
| #define WLAN_FC_STYPE_ACTION 13 |
| |
| /* control */ |
| #define WLAN_FC_STYPE_PSPOLL 10 |
| #define WLAN_FC_STYPE_RTS 11 |
| #define WLAN_FC_STYPE_CTS 12 |
| #define WLAN_FC_STYPE_ACK 13 |
| #define WLAN_FC_STYPE_CFEND 14 |
| #define WLAN_FC_STYPE_CFENDACK 15 |
| |
| /* data */ |
| #define WLAN_FC_STYPE_DATA 0 |
| #define WLAN_FC_STYPE_DATA_CFACK 1 |
| #define WLAN_FC_STYPE_DATA_CFPOLL 2 |
| #define WLAN_FC_STYPE_DATA_CFACKPOLL 3 |
| #define WLAN_FC_STYPE_NULLFUNC 4 |
| #define WLAN_FC_STYPE_CFACK 5 |
| #define WLAN_FC_STYPE_CFPOLL 6 |
| #define WLAN_FC_STYPE_CFACKPOLL 7 |
| #define WLAN_FC_STYPE_QOS_DATA 8 |
| #define WLAN_FC_STYPE_QOS_DATA_CFACK 9 |
| #define WLAN_FC_STYPE_QOS_DATA_CFPOLL 10 |
| #define WLAN_FC_STYPE_QOS_DATA_CFACKPOLL 11 |
| #define WLAN_FC_STYPE_QOS_NULL 12 |
| #define WLAN_FC_STYPE_QOS_CFPOLL 14 |
| #define WLAN_FC_STYPE_QOS_CFACKPOLL 15 |
| |
| #define WLAN_FC_GET_STYPE(fc) (((fc) & 0x00f0) >> 4) |
| |
| /* Action frame categories (IEEE 802.11-2007, 7.3.1.11, Table 7-24) */ |
| #define WLAN_ACTION_SPECTRUM_MGMT 0 |
| #define WLAN_ACTION_QOS 1 |
| #define WLAN_ACTION_DLS 2 |
| #define WLAN_ACTION_BLOCK_ACK 3 |
| #define WLAN_ACTION_PUBLIC 4 |
| #define WLAN_ACTION_RADIO_MEASUREMENT 5 |
| #define WLAN_ACTION_FT 6 |
| #define WLAN_ACTION_HT 7 |
| #define WLAN_ACTION_SA_QUERY 8 |
| #define WLAN_ACTION_WNM 10 |
| #define WLAN_ACTION_UNPROTECTED_WNM 11 |
| #define WLAN_ACTION_TDLS 12 |
| #define WLAN_ACTION_WMM 17 /* WMM Specification 1.1 */ |
| #define WLAN_ACTION_VENDOR_SPECIFIC 127 |
| |
| /* SPECTRUM_MGMT action codes */ |
| #define WLAN_ACTION_SPCT_MSR_REQ 0 |
| #define WLAN_ACTION_SPCT_MSR_RPRT 1 |
| #define WLAN_ACTION_SPCT_TPC_REQ 2 |
| #define WLAN_ACTION_SPCT_TPC_RPRT 3 |
| #define WLAN_ACTION_SPCT_CHL_SWITCH 4 |
| |
| /* Information Element IDs */ |
| #define WLAN_EID_SSID 0 |
| #define WLAN_EID_SUPP_RATES 1 |
| #define WLAN_EID_FH_PARAMS 2 |
| #define WLAN_EID_DS_PARAMS 3 |
| #define WLAN_EID_CF_PARAMS 4 |
| #define WLAN_EID_TIM 5 |
| #define WLAN_EID_IBSS_PARAMS 6 |
| #define WLAN_EID_COUNTRY 7 |
| #define WLAN_EID_CHALLENGE 16 |
| /* EIDs defined by IEEE 802.11h - START */ |
| #define WLAN_EID_PWR_CONSTRAINT 32 |
| #define WLAN_EID_PWR_CAPABILITY 33 |
| #define WLAN_EID_TPC_REQUEST 34 |
| #define WLAN_EID_TPC_REPORT 35 |
| #define WLAN_EID_SUPPORTED_CHANNELS 36 |
| #define WLAN_EID_CHANNEL_SWITCH 37 |
| #define WLAN_EID_MEASURE_REQUEST 38 |
| #define WLAN_EID_MEASURE_REPORT 39 |
| #define WLAN_EID_QUITE 40 |
| #define WLAN_EID_IBSS_DFS 41 |
| /* EIDs defined by IEEE 802.11h - END */ |
| #define WLAN_EID_ERP_INFO 42 |
| #define WLAN_EID_HT_CAP 45 |
| #define WLAN_EID_RSN 48 |
| #define WLAN_EID_EXT_SUPP_RATES 50 |
| #define WLAN_EID_MOBILITY_DOMAIN 54 |
| #define WLAN_EID_FAST_BSS_TRANSITION 55 |
| #define WLAN_EID_TIMEOUT_INTERVAL 56 |
| #define WLAN_EID_RIC_DATA 57 |
| #define WLAN_EID_HT_OPERATION 61 |
| #define WLAN_EID_SECONDARY_CHANNEL_OFFSET 62 |
| #define WLAN_EID_TIME_ADVERTISEMENT 69 |
| #define WLAN_EID_20_40_BSS_COEXISTENCE 72 |
| #define WLAN_EID_20_40_BSS_INTOLERANT 73 |
| #define WLAN_EID_OVERLAPPING_BSS_SCAN_PARAMS 74 |
| #define WLAN_EID_MMIE 76 |
| #define WLAN_EID_TIME_ZONE 98 |
| #define WLAN_EID_LINK_ID 101 |
| #define WLAN_EID_INTERWORKING 107 |
| #define WLAN_EID_ADV_PROTO 108 |
| #define WLAN_EID_ROAMING_CONSORTIUM 111 |
| #define WLAN_EID_EXT_CAPAB 127 |
| #define WLAN_EID_VENDOR_SPECIFIC 221 |
| |
| #define WLAN_EID_LENGTH_CHANNEL_SWITCH 3 |
| |
| /* Channel Swtich Modes (IEEE 802.11h-2003, 7.3.2.20) */ |
| #define WLAN_CHANNEL_SWITCH_MODE_XMIT_ALLOWED 0 |
| #define WLAN_CHANNEL_SWITCH_MODE_XMIT_FORBIDDEN 1 |
| |
| struct ieee80211_hdr { |
| __le16 frame_control; |
| __le16 duration_id; |
| __u8 addr1[6]; |
| __u8 addr2[6]; |
| __u8 addr3[6]; |
| __le16 seq_ctrl; |
| /* followed by 'u8 addr4[6];' if ToDS and FromDS is set in data frame |
| */ |
| } __attribute__((packed)); |
| |
| #define IEEE80211_FC(type, stype) ((type << 2) | (stype << 4)) |
| #define WLAN_SA_QUERY_TR_ID_LEN 2 |
| |
| |
| struct ieee80211_mgmt { |
| __le16 frame_control; |
| __le16 duration; |
| __u8 da[6]; |
| __u8 sa[6]; |
| __u8 bssid[6]; |
| __le16 seq_ctrl; |
| union { |
| struct { |
| __le16 auth_alg; |
| __le16 auth_transaction; |
| __le16 status_code; |
| /* possibly followed by Challenge text */ |
| __u8 variable[0]; |
| } __attribute__((packed)) auth; |
| struct { |
| __le16 reason_code; |
| __u8 variable[0]; |
| } __attribute__((packed)) deauth; |
| struct { |
| __le16 capab_info; |
| __le16 listen_interval; |
| /* followed by SSID and Supported rates */ |
| __u8 variable[0]; |
| } __attribute__((packed)) assoc_req; |
| struct { |
| __le16 capab_info; |
| __le16 status_code; |
| __le16 aid; |
| /* followed by Supported rates */ |
| __u8 variable[0]; |
| } __attribute__((packed)) assoc_resp, reassoc_resp; |
| struct { |
| __le16 capab_info; |
| __le16 listen_interval; |
| __u8 current_ap[6]; |
| /* followed by SSID and Supported rates */ |
| __u8 variable[0]; |
| } __attribute__((packed)) reassoc_req; |
| struct { |
| __le16 reason_code; |
| __u8 variable[0]; |
| } __attribute__((packed)) disassoc; |
| struct { |
| __u8 timestamp[8]; |
| __le16 beacon_int; |
| __le16 capab_info; |
| /* followed by some of SSID, Supported rates, |
| * FH Params, DS Params, CF Params, IBSS Params, TIM */ |
| __u8 variable[0]; |
| } __attribute__((packed)) beacon; |
| struct { |
| /* only variable items: SSID, Supported rates */ |
| __u8 variable[0]; |
| } __attribute__((packed)) probe_req; |
| struct { |
| __u8 timestamp[8]; |
| __le16 beacon_int; |
| __le16 capab_info; |
| /* followed by some of SSID, Supported rates, |
| * FH Params, DS Params, CF Params, IBSS Params */ |
| __u8 variable[0]; |
| } __attribute__((packed)) probe_resp; |
| struct { |
| __u8 category; |
| union { |
| struct { |
| __u8 action_code; |
| __u8 dialog_token; |
| __u8 status_code; |
| __u8 variable[0]; |
| } __attribute__((packed)) wmm_action; |
| struct{ |
| __u8 action_code; |
| __u8 element_id; |
| __u8 length; |
| __u8 switch_mode; |
| __u8 new_chan; |
| __u8 switch_count; |
| } __attribute__((packed)) chan_switch; |
| struct { |
| __u8 action; |
| __u8 sta_addr[ETH_ALEN]; |
| __u8 target_ap_addr[ETH_ALEN]; |
| __u8 variable[0]; /* FT Request */ |
| } __attribute__((packed)) ft_action_req; |
| struct { |
| __u8 action; |
| __u8 sta_addr[ETH_ALEN]; |
| __u8 target_ap_addr[ETH_ALEN]; |
| __le16 status_code; |
| __u8 variable[0]; /* FT Request */ |
| } __attribute__((packed)) ft_action_resp; |
| struct { |
| __u8 action; |
| __u8 trans_id[WLAN_SA_QUERY_TR_ID_LEN]; |
| } __attribute__((packed)) sa_query_req; |
| struct { |
| __u8 action; /* */ |
| __u8 trans_id[WLAN_SA_QUERY_TR_ID_LEN]; |
| } __attribute__((packed)) sa_query_resp; |
| struct { |
| __u8 action; |
| __u8 variable[0]; |
| } __attribute__((packed)) public_action; |
| struct { |
| __u8 action; /* 9 */ |
| __u8 oui[3]; |
| /* Vendor-specific content */ |
| __u8 variable[0]; |
| } __attribute__((packed)) vs_public_action; |
| struct { |
| __u8 action; /* 7 */ |
| __u8 dialog_token; |
| __u8 req_mode; |
| __le16 disassoc_timer; |
| __u8 validity_interval; |
| /* BSS Termination Duration (optional), |
| * Session Information URL (optional), |
| * BSS Transition Candidate List |
| * Entries */ |
| __u8 variable[0]; |
| } __attribute__((packed)) bss_tm_req; |
| } u; |
| } __attribute__((packed)) action; |
| } u; |
| } __attribute__((packed)); |
| |
| |
| |