2014-11-10 00:16:55 +01:00
|
|
|
#ifndef __DOT11_H
|
|
|
|
#define __DOT11_H
|
|
|
|
|
|
|
|
|
|
|
|
#include <stdint.h>
|
|
|
|
|
|
|
|
|
2014-10-19 12:14:24 +02:00
|
|
|
struct dot11_mgmt_head {
|
|
|
|
uint16_t frame_control;
|
|
|
|
uint16_t duration;
|
|
|
|
uint8_t da[6];
|
|
|
|
uint8_t sa[6];
|
|
|
|
uint8_t bssid[6];
|
|
|
|
uint16_t seq_ctrl;
|
|
|
|
};
|
|
|
|
|
2014-11-10 00:16:55 +01:00
|
|
|
|
|
|
|
struct dot11_mgmt_beacon{
|
|
|
|
uint8_t timestamp[8];
|
|
|
|
uint16_t beacon_int;
|
|
|
|
uint16_t capab_info;
|
|
|
|
};
|
|
|
|
|
2014-10-19 12:14:24 +02:00
|
|
|
#define ETH_ALEN 6
|
|
|
|
/* SA Query Action frame (IEEE 802.11w/D8.0, 7.4.9) */
|
|
|
|
#define WLAN_SA_QUERY_REQUEST 0
|
|
|
|
#define WLAN_SA_QUERY_RESPONSE 1
|
|
|
|
#define WLAN_SA_QUERY_TR_ID_LEN 2
|
|
|
|
|
2014-09-22 06:57:13 +02:00
|
|
|
struct dot11_mgmt {
|
|
|
|
uint16_t frame_control;
|
|
|
|
uint16_t duration;
|
|
|
|
uint8_t da[6];
|
|
|
|
uint8_t sa[6];
|
|
|
|
uint8_t bssid[6];
|
|
|
|
uint16_t seq_ctrl;
|
2014-10-19 12:14:24 +02:00
|
|
|
|
|
|
|
|
|
|
|
union {
|
|
|
|
struct {
|
|
|
|
uint8_t timestamp[8];
|
|
|
|
uint16_t beacon_int;
|
|
|
|
uint16_t capab_info;
|
|
|
|
/* followed by some of SSID, Supported rates,
|
|
|
|
* FH Params, DS Params, CF Params, IBSS Params, TIM */
|
|
|
|
uint8_t variable[0];
|
|
|
|
} beacon;
|
|
|
|
struct {
|
|
|
|
uint16_t auth_alg;
|
|
|
|
uint16_t auth_transaction;
|
|
|
|
uint16_t status_code;
|
|
|
|
/* possibly followed by Challenge text */
|
|
|
|
uint8_t variable[0];
|
|
|
|
} auth;
|
|
|
|
struct {
|
|
|
|
uint16_t reason_code;
|
|
|
|
uint8_t variable[0];
|
|
|
|
} deauth;
|
|
|
|
struct {
|
|
|
|
uint16_t capab_info;
|
|
|
|
uint16_t listen_interval;
|
|
|
|
/* followed by SSID and Supported rates */
|
|
|
|
uint8_t variable[0];
|
|
|
|
} assoc_req;
|
|
|
|
struct {
|
|
|
|
uint16_t capab_info;
|
|
|
|
uint16_t status_code;
|
|
|
|
uint16_t aid;
|
|
|
|
/* followed by Supported rates */
|
|
|
|
uint8_t variable[0];
|
|
|
|
} assoc_resp, reassoc_resp;
|
|
|
|
struct {
|
|
|
|
uint16_t capab_info;
|
|
|
|
uint16_t listen_interval;
|
|
|
|
uint8_t current_ap[6];
|
|
|
|
/* followed by SSID and Supported rates */
|
|
|
|
uint8_t variable[0];
|
|
|
|
} reassoc_req;
|
|
|
|
struct {
|
|
|
|
uint16_t reason_code;
|
|
|
|
uint8_t variable[0];
|
|
|
|
} disassoc;
|
|
|
|
struct {
|
|
|
|
/* only variable items: SSID, Supported rates */
|
|
|
|
uint8_t variable[0];
|
|
|
|
} probe_req;
|
|
|
|
struct {
|
|
|
|
uint8_t timestamp[8];
|
|
|
|
uint16_t beacon_int;
|
|
|
|
uint16_t capab_info;
|
|
|
|
/* followed by some of SSID, Supported rates,
|
|
|
|
* FH Params, DS Params, CF Params, IBSS Params */
|
|
|
|
uint8_t variable[0];
|
|
|
|
} probe_resp;
|
|
|
|
struct {
|
|
|
|
uint8_t category;
|
|
|
|
union {
|
|
|
|
struct {
|
|
|
|
uint8_t action_code;
|
|
|
|
uint8_t dialog_token;
|
|
|
|
uint8_t status_code;
|
|
|
|
uint8_t variable[0];
|
|
|
|
} wmm_action;
|
|
|
|
struct{
|
|
|
|
uint8_t action_code;
|
|
|
|
uint8_t element_id;
|
|
|
|
uint8_t length;
|
|
|
|
uint8_t switch_mode;
|
|
|
|
uint8_t new_chan;
|
|
|
|
uint8_t switch_count;
|
|
|
|
} chan_switch;
|
|
|
|
struct {
|
|
|
|
uint8_t action;
|
|
|
|
uint8_t sta_addr[ETH_ALEN];
|
|
|
|
uint8_t target_ap_addr[ETH_ALEN];
|
|
|
|
uint8_t variable[0]; /* FT Request */
|
|
|
|
} ft_action_req;
|
|
|
|
struct {
|
|
|
|
uint8_t action;
|
|
|
|
uint8_t sta_addr[ETH_ALEN];
|
|
|
|
uint8_t target_ap_addr[ETH_ALEN];
|
|
|
|
uint16_t status_code;
|
|
|
|
uint8_t variable[0]; /* FT Request */
|
|
|
|
} ft_action_resp;
|
|
|
|
struct {
|
|
|
|
uint8_t action;
|
|
|
|
uint8_t trans_id[WLAN_SA_QUERY_TR_ID_LEN];
|
|
|
|
} sa_query_req;
|
|
|
|
struct {
|
|
|
|
uint8_t action; /* */
|
|
|
|
uint8_t trans_id[WLAN_SA_QUERY_TR_ID_LEN];
|
|
|
|
} sa_query_resp;
|
|
|
|
struct {
|
|
|
|
uint8_t action;
|
|
|
|
uint8_t dialogtoken;
|
|
|
|
uint8_t variable[0];
|
|
|
|
} wnm_sleep_req;
|
|
|
|
struct {
|
|
|
|
uint8_t action;
|
|
|
|
uint8_t dialogtoken;
|
|
|
|
uint16_t keydata_len;
|
|
|
|
uint8_t variable[0];
|
|
|
|
} wnm_sleep_resp;
|
|
|
|
struct {
|
|
|
|
uint8_t action;
|
|
|
|
uint8_t variable[0];
|
|
|
|
} public_action;
|
|
|
|
struct {
|
|
|
|
uint8_t action; /* 9 */
|
|
|
|
uint8_t oui[3];
|
|
|
|
/* Vendor-specific content */
|
|
|
|
uint8_t variable[0];
|
|
|
|
} vs_public_action;
|
|
|
|
struct {
|
|
|
|
uint8_t action; /* 7 */
|
|
|
|
uint8_t dialog_token;
|
|
|
|
uint8_t req_mode;
|
|
|
|
uint16_t disassoc_timer;
|
|
|
|
uint8_t validity_interval;
|
|
|
|
/* BSS Termination Duration (optional),
|
|
|
|
* Session Information URL (optional),
|
|
|
|
* BSS Transition Candidate List
|
|
|
|
* Entries */
|
|
|
|
uint8_t variable[0];
|
|
|
|
} bss_tm_req;
|
|
|
|
struct {
|
|
|
|
uint8_t action; /* 8 */
|
|
|
|
uint8_t dialog_token;
|
|
|
|
uint8_t status_code;
|
|
|
|
uint8_t bss_termination_delay;
|
|
|
|
/* Target BSSID (optional),
|
|
|
|
* BSS Transition Candidate List
|
|
|
|
* Entries (optional) */
|
|
|
|
uint8_t variable[0];
|
|
|
|
} bss_tm_resp;
|
|
|
|
struct {
|
|
|
|
uint8_t action; /* 6 */
|
|
|
|
uint8_t dialog_token;
|
|
|
|
uint8_t query_reason;
|
|
|
|
/* BSS Transition Candidate List
|
|
|
|
* Entries (optional) */
|
|
|
|
uint8_t variable[0];
|
|
|
|
} bss_tm_query;
|
|
|
|
} u;
|
|
|
|
} action;
|
|
|
|
} u;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-09-22 06:57:13 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
/* frame types */
|
|
|
|
#define DOT11_FTYPE_MGMT 0x0000
|
|
|
|
#define DOT11_FTYPE_CTL 0x0004
|
|
|
|
#define DOT11_FTYPE_DATA 0x0008
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* management */
|
|
|
|
#define DOT11_STYPE_ASSOC_REQ 0x0000
|
|
|
|
#define DOT11_STYPE_ASSOC_RESP 0x0010
|
|
|
|
#define DOT11_STYPE_REASSOC_REQ 0x0020
|
|
|
|
#define DOT11_STYPE_REASSOC_RESP 0x0030
|
|
|
|
#define DOT11_STYPE_PROBE_REQ 0x0040
|
|
|
|
#define DOT11_STYPE_PROBE_RESP 0x0050
|
|
|
|
#define DOT11_STYPE_BEACON 0x0080
|
|
|
|
#define DOT11_STYPE_ATIM 0x0090
|
|
|
|
#define DOT11_STYPE_DISASSOC 0x00A0
|
|
|
|
#define DOT11_STYPE_AUTH 0x00B0
|
|
|
|
#define DOT11_STYPE_DEAUTH 0x00C0
|
|
|
|
#define DOT11_STYPE_ACTION 0x00D0
|
|
|
|
|
|
|
|
/* control */
|
|
|
|
#define DOT11_STYPE_BACK_REQ 0x0080
|
|
|
|
#define DOT11_STYPE_BACK 0x0090
|
|
|
|
#define DOT11_STYPE_PSPOLL 0x00A0
|
|
|
|
#define DOT11_STYPE_RTS 0x00B0
|
|
|
|
#define DOT11_STYPE_CTS 0x00C0
|
|
|
|
#define DOT11_STYPE_ACK 0x00D0
|
|
|
|
#define DOT11_STYPE_CFEND 0x00E0
|
|
|
|
#define DOT11_STYPE_CFENDACK 0x00F0
|
|
|
|
|
|
|
|
/* data */
|
|
|
|
#define DOT11_STYPE_DATA 0x0000
|
|
|
|
#define DOT11_STYPE_DATA_CFACK 0x0010
|
|
|
|
#define DOT11_STYPE_DATA_CFPOLL 0x0020
|
|
|
|
#define DOT11_STYPE_DATA_CFACKPOLL 0x0030
|
|
|
|
#define DOT11_STYPE_NULLFUNC 0x0040
|
|
|
|
#define DOT11_STYPE_CFACK 0x0050
|
|
|
|
#define DOT11_STYPE_CFPOLL 0x0060
|
|
|
|
#define DOT11_STYPE_CFACKPOLL 0x0070
|
|
|
|
#define DOT11_STYPE_QOS_DATA 0x0080
|
|
|
|
#define DOT11_STYPE_QOS_DATA_CFACK 0x0090
|
|
|
|
#define DOT11_STYPE_QOS_DATA_CFPOLL 0x00A0
|
|
|
|
#define DOT11_STYPE_QOS_DATA_CFACKPOLL 0x00B0
|
|
|
|
#define DOT11_STYPE_QOS_NULLFUNC 0x00C0
|
|
|
|
#define DOT11_STYPE_QOS_CFACK 0x00D0
|
|
|
|
#define DOT11_STYPE_QOS_CFPOLL 0x00E0
|
|
|
|
#define DOT11_STYPE_QOS_CFACKPOLL 0x00F0
|
|
|
|
|
2014-10-19 12:14:24 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* 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_BSS_LOAD 11
|
|
|
|
#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 */
|
|
|
|
|
2014-11-10 00:16:55 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* capability bits */
|
|
|
|
#define WLAN_CAPAB_ESS 0x001
|
|
|
|
#define WLAN_CAPAB_IBSS 0x002
|
|
|
|
#define WLAN_CAPAB_CF_POLLABLE 0x004
|
|
|
|
#define WLAN_CAPAB_CF_POLL_REQUEST 0x008
|
|
|
|
#define WLAN_CAPAB_PRIVACY 0x010
|
|
|
|
#define WLAN_CAPAB_SHORT_PREAMBLE 0x020
|
|
|
|
#define WLAN_CAPAB_PBCC 0x040
|
|
|
|
#define WLAN_CAPAB_CHANNEL_AGILITY 0x080
|
|
|
|
#define WLAN_CAPAB_SPECTRUM_MGMT BIT 0x100
|
|
|
|
#define WLAN_CAPAB_SHORT_SLOT_TIME BIT 0x200
|
|
|
|
#define WLAN_CAPAB_DSSS_OFDM 0x400
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
struct apdata {
|
|
|
|
int phy;
|
|
|
|
uint32_t idx;
|
|
|
|
uint8_t mac[6];
|
|
|
|
const char * ssid;
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
struct beacon_data{
|
|
|
|
uint8_t * head;
|
|
|
|
int head_len;
|
|
|
|
uint8_t * tail;
|
|
|
|
int tail_len;
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
2015-04-26 12:36:53 +02:00
|
|
|
int dot11_get_beacon_data(struct apdata *ap,struct beacon_data *bd);
|
2014-11-10 00:16:55 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#endif
|