#ifndef _NET80211_IEEE80211_IOCTL_H_
#define _NET80211_IEEE80211_IOCTL_H_
#include <sys/ioccom.h>
#include <net/if.h>
#include <net80211/_ieee80211.h>
#include <net80211/ieee80211.h>
#include <net80211/ieee80211_crypto.h>
struct ieee80211_nodestats {
u_int32_t ns_rx_data;
u_int32_t ns_rx_mgmt;
u_int32_t ns_rx_ctrl;
u_int32_t ns_rx_ucast;
u_int32_t ns_rx_mcast;
u_int64_t ns_rx_bytes;
u_int64_t ns_rx_beacons;
u_int32_t ns_rx_proberesp;
u_int32_t ns_rx_dup;
u_int32_t ns_rx_noprivacy;
u_int32_t ns_rx_wepfail;
u_int32_t ns_rx_demicfail;
u_int32_t ns_rx_decap;
u_int32_t ns_rx_defrag;
u_int32_t ns_rx_disassoc;
u_int32_t ns_rx_deauth;
u_int32_t ns_rx_decryptcrc;
u_int32_t ns_rx_unauth;
u_int32_t ns_rx_unencrypted;
u_int32_t ns_tx_data;
u_int32_t ns_tx_mgmt;
u_int32_t ns_tx_ucast;
u_int32_t ns_tx_mcast;
u_int64_t ns_tx_bytes;
u_int32_t ns_tx_probereq;
u_int32_t ns_tx_novlantag;
u_int32_t ns_tx_vlanmismatch;
u_int32_t ns_ps_discard;
u_int32_t ns_tx_assoc;
u_int32_t ns_tx_assoc_fail;
u_int32_t ns_tx_auth;
u_int32_t ns_tx_auth_fail;
u_int32_t ns_tx_deauth;
u_int32_t ns_tx_deauth_code;
u_int32_t ns_tx_disassoc;
u_int32_t ns_tx_disassoc_code;
};
struct ieee80211_ostats {
u_int32_t is_rx_badversion;
u_int32_t is_rx_tooshort;
u_int32_t is_rx_wrongbss;
u_int32_t is_rx_dup;
u_int32_t is_rx_wrongdir;
u_int32_t is_rx_mcastecho;
u_int32_t is_rx_notassoc;
u_int32_t is_rx_nowep;
u_int32_t is_rx_wepfail;
u_int32_t is_rx_decap;
u_int32_t is_rx_mgtdiscard;
u_int32_t is_rx_ctl;
u_int32_t is_rx_rstoobig;
u_int32_t is_rx_elem_missing;
u_int32_t is_rx_elem_toobig;
u_int32_t is_rx_elem_toosmall;
u_int32_t is_rx_elem_unknown;
u_int32_t is_rx_badchan;
u_int32_t is_rx_chanmismatch;
u_int32_t is_rx_nodealloc;
u_int32_t is_rx_ssidmismatch;
u_int32_t is_rx_auth_unsupported;
u_int32_t is_rx_auth_fail;
u_int32_t is_rx_assoc_bss;
u_int32_t is_rx_assoc_notauth;
u_int32_t is_rx_assoc_capmismatch;
u_int32_t is_rx_assoc_norate;
u_int32_t is_rx_deauth;
u_int32_t is_rx_disassoc;
u_int32_t is_rx_badsubtype;
u_int32_t is_rx_nombuf;
u_int32_t is_rx_decryptcrc;
u_int32_t is_rx_ahdemo_mgt;
u_int32_t is_rx_bad_auth;
u_int32_t is_tx_nombuf;
u_int32_t is_tx_nonode;
u_int32_t is_tx_unknownmgt;
u_int32_t is_scan_active;
u_int32_t is_scan_passive;
u_int32_t is_node_timeout;
u_int32_t is_crypto_nomem;
};
struct ieee80211_stats {
u_int32_t is_rx_badversion;
u_int32_t is_rx_tooshort;
u_int32_t is_rx_wrongbss;
u_int32_t is_rx_dup;
u_int32_t is_rx_wrongdir;
u_int32_t is_rx_mcastecho;
u_int32_t is_rx_notassoc;
u_int32_t is_rx_noprivacy;
u_int32_t is_rx_unencrypted;
u_int32_t is_rx_wepfail;
u_int32_t is_rx_decap;
u_int32_t is_rx_mgtdiscard;
u_int32_t is_rx_ctl;
u_int32_t is_rx_beacon;
u_int32_t is_rx_rstoobig;
u_int32_t is_rx_elem_missing;
u_int32_t is_rx_elem_toobig;
u_int32_t is_rx_elem_toosmall;
u_int32_t is_rx_elem_unknown;
u_int32_t is_rx_badchan;
u_int32_t is_rx_chanmismatch;
u_int32_t is_rx_nodealloc;
u_int32_t is_rx_ssidmismatch;
u_int32_t is_rx_auth_unsupported;
u_int32_t is_rx_auth_fail;
u_int32_t is_rx_auth_countermeasures;
u_int32_t is_rx_assoc_bss;
u_int32_t is_rx_assoc_notauth;
u_int32_t is_rx_assoc_capmismatch;
u_int32_t is_rx_assoc_norate;
u_int32_t is_rx_assoc_badwpaie;
u_int32_t is_rx_deauth;
u_int32_t is_rx_disassoc;
u_int32_t is_rx_badsubtype;
u_int32_t is_rx_nobuf;
u_int32_t is_rx_decryptcrc;
u_int32_t is_rx_ahdemo_mgt;
u_int32_t is_rx_bad_auth;
u_int32_t is_rx_unauth;
u_int32_t is_rx_badkeyid;
u_int32_t is_rx_ccmpreplay;
u_int32_t is_rx_ccmpformat;
u_int32_t is_rx_ccmpmic;
u_int32_t is_rx_tkipreplay;
u_int32_t is_rx_tkipformat;
u_int32_t is_rx_tkipmic;
u_int32_t is_rx_tkipicv;
u_int32_t is_rx_badcipher;
u_int32_t is_rx_nocipherctx;
u_int32_t is_rx_acl;
u_int32_t is_tx_nobuf;
u_int32_t is_tx_nonode;
u_int32_t is_tx_unknownmgt;
u_int32_t is_tx_badcipher;
u_int32_t is_tx_nodefkey;
u_int32_t is_tx_noheadroom;
u_int32_t is_tx_fragframes;
u_int32_t is_tx_frags;
u_int32_t is_scan_active;
u_int32_t is_scan_passive;
u_int32_t is_node_timeout;
u_int32_t is_crypto_nomem;
u_int32_t is_crypto_tkip;
u_int32_t is_crypto_tkipenmic;
u_int32_t is_crypto_tkipdemic;
u_int32_t is_crypto_tkipcm;
u_int32_t is_crypto_ccmp;
u_int32_t is_crypto_wep;
u_int32_t is_crypto_setkey_cipher;
u_int32_t is_crypto_setkey_nokey;
u_int32_t is_crypto_delkey;
u_int32_t is_crypto_badcipher;
u_int32_t is_crypto_nocipher;
u_int32_t is_crypto_attachfail;
u_int32_t is_crypto_swfallback;
u_int32_t is_crypto_keyfail;
u_int32_t is_crypto_enmicfail;
u_int32_t is_ibss_capmismatch;
u_int32_t is_ibss_norate;
u_int32_t is_ps_unassoc;
u_int32_t is_ps_badaid;
u_int32_t is_ps_qempty;
u_int32_t is_ff_badhdr;
u_int32_t is_ff_tooshort;
u_int32_t is_ff_split;
u_int32_t is_ff_decap;
u_int32_t is_ff_encap;
u_int32_t is_rx_badbintval;
u_int32_t is_spare[9];
};
#define IEEE80211_MAX_OPT_IE 256
struct ieee80211req_key {
u_int8_t ik_type;
u_int8_t ik_pad;
u_int16_t ik_keyix;
u_int8_t ik_keylen;
u_int8_t ik_flags;
#define IEEE80211_KEY_DEFAULT 0x80
u_int8_t ik_macaddr[IEEE80211_ADDR_LEN];
u_int64_t ik_keyrsc;
u_int64_t ik_keytsc;
u_int8_t ik_keydata[IEEE80211_KEYBUF_SIZE+IEEE80211_MICBUF_SIZE];
};
struct ieee80211req_del_key {
u_int8_t idk_keyix;
u_int8_t idk_macaddr[IEEE80211_ADDR_LEN];
};
struct ieee80211req_mlme {
u_int8_t im_op;
#define IEEE80211_MLME_ASSOC 1
#define IEEE80211_MLME_DISASSOC 2
#define IEEE80211_MLME_DEAUTH 3
#define IEEE80211_MLME_AUTHORIZE 4
#define IEEE80211_MLME_UNAUTHORIZE 5
u_int8_t im_ssid_len;
u_int16_t im_reason;
u_int8_t im_macaddr[IEEE80211_ADDR_LEN];
u_int8_t im_ssid[IEEE80211_NWID_LEN];
};
enum {
IEEE80211_MACCMD_POLICY_OPEN = 0,
IEEE80211_MACCMD_POLICY_ALLOW = 1,
IEEE80211_MACCMD_POLICY_DENY = 2,
IEEE80211_MACCMD_FLUSH = 3,
IEEE80211_MACCMD_DETACH = 4,
IEEE80211_MACCMD_POLICY = 5,
IEEE80211_MACCMD_LIST = 6
};
struct ieee80211req_maclist {
u_int8_t ml_macaddr[IEEE80211_ADDR_LEN];
};
struct ieee80211req_chanlist {
u_int8_t ic_channels[IEEE80211_CHAN_BYTES];
};
struct ieee80211req_chaninfo {
u_int ic_nchans;
struct ieee80211_channel ic_chans[IEEE80211_CHAN_MAX];
};
struct ieee80211req_wpaie {
u_int8_t wpa_macaddr[IEEE80211_ADDR_LEN];
u_int8_t wpa_ie[IEEE80211_MAX_OPT_IE];
};
struct ieee80211req_sta_stats {
union {
u_int8_t macaddr[IEEE80211_ADDR_LEN];
u_int64_t pad;
} is_u;
struct ieee80211_nodestats is_stats;
};
struct ieee80211req_sta_info {
u_int16_t isi_len;
u_int16_t isi_freq;
u_int16_t isi_flags;
u_int16_t isi_state;
u_int8_t isi_authmode;
u_int8_t isi_rssi;
u_int8_t isi_capinfo;
u_int8_t isi_erp;
u_int8_t isi_macaddr[IEEE80211_ADDR_LEN];
u_int8_t isi_nrates;
u_int8_t isi_rates[IEEE80211_RATE_MAXSIZE];
u_int8_t isi_txrate;
u_int16_t isi_ie_len;
u_int16_t isi_associd;
u_int16_t isi_txpower;
u_int16_t isi_vlan;
u_int16_t isi_txseqs[17];
u_int16_t isi_rxseqs[17];
u_int16_t isi_inact;
};
struct ieee80211req_sta_req {
union {
u_int8_t macaddr[IEEE80211_ADDR_LEN];
u_int64_t pad;
} is_u;
struct ieee80211req_sta_info info[1];
};
struct ieee80211req_sta_txpow {
u_int8_t it_macaddr[IEEE80211_ADDR_LEN];
u_int8_t it_txpow;
};
#define IEEE80211_WMEPARAM_SELF 0x0000
#define IEEE80211_WMEPARAM_BSS 0x8000
#define IEEE80211_WMEPARAM_VAL 0x7fff
struct ieee80211req {
char i_name[IFNAMSIZ];
u_int16_t i_type;
int16_t i_val;
u_int16_t i_len;
void *i_data;
};
#ifdef __FreeBSD__
#define SIOCS80211 _IOW('i', 234, struct ieee80211req)
#define SIOCG80211 _IOWR('i', 235, struct ieee80211req)
#define SIOCG80211STATS _IOWR('i', 236, struct ifreq)
#endif
#ifdef __NetBSD__
#define SIOCS80211 _IOW('i', 244, struct ieee80211req)
#define SIOCG80211 _IOWR('i', 245, struct ieee80211req)
#define SIOCG80211STATS _IOWR('i', 246, struct ifreq)
#define SIOCG80211ZSTATS _IOWR('i', 247, struct ifreq)
#define OSIOCG80211STATS _IOWR('i', 242, struct ifreq)
#define OSIOCG80211ZSTATS _IOWR('i', 243, struct ifreq)
#endif
#if defined(__FreeBSD__) || defined(COMPAT_FREEBSD_NET80211)
#define IEEE80211_IOC_SSID 1
#endif
#define IEEE80211_IOC_NUMSSIDS 2
#define IEEE80211_IOC_WEP 3
#define IEEE80211_WEP_NOSUP -1
#define IEEE80211_WEP_OFF 0
#define IEEE80211_WEP_ON 1
#define IEEE80211_WEP_MIXED 2
#if defined(__FreeBSD__) || defined(COMPAT_FREEBSD_NET80211)
#define IEEE80211_IOC_WEPKEY 4
#endif
#define IEEE80211_IOC_NUMWEPKEYS 5
#if defined(__FreeBSD__) || defined(COMPAT_FREEBSD_NET80211)
#define IEEE80211_IOC_WEPTXKEY 6
#endif
#define IEEE80211_IOC_AUTHMODE 7
#define IEEE80211_IOC_STATIONNAME 8
#if defined(__FreeBSD__) || defined(COMPAT_FREEBSD_NET80211)
#define IEEE80211_IOC_CHANNEL 9
#endif
#define IEEE80211_IOC_POWERSAVE 10
#define IEEE80211_POWERSAVE_NOSUP -1
#define IEEE80211_POWERSAVE_OFF 0
#define IEEE80211_POWERSAVE_CAM 1
#define IEEE80211_POWERSAVE_PSP 2
#define IEEE80211_POWERSAVE_PSP_CAM 3
#define IEEE80211_POWERSAVE_ON IEEE80211_POWERSAVE_CAM
#define IEEE80211_IOC_POWERSAVESLEEP 11
#define IEEE80211_IOC_RTSTHRESHOLD 12
#define IEEE80211_IOC_PROTMODE 13
#define IEEE80211_PROTMODE_OFF 0
#define IEEE80211_PROTMODE_CTS 1
#define IEEE80211_PROTMODE_RTSCTS 2
#define IEEE80211_IOC_TXPOWER 14
#if defined(__FreeBSD__) || defined(COMPAT_FREEBSD_NET80211)
#define IEEE80211_IOC_BSSID 15
#endif
#define IEEE80211_IOC_ROAMING 16
#define IEEE80211_IOC_PRIVACY 17
#define IEEE80211_IOC_DROPUNENCRYPTED 18
#define IEEE80211_IOC_WPAKEY 19
#define IEEE80211_IOC_DELKEY 20
#define IEEE80211_IOC_MLME 21
#define IEEE80211_IOC_OPTIE 22
#define IEEE80211_IOC_SCAN_REQ 23
#define IEEE80211_IOC_SCAN_RESULTS 24
#define IEEE80211_IOC_COUNTERMEASURES 25
#define IEEE80211_IOC_WPA 26
#define IEEE80211_IOC_CHANLIST 27
#define IEEE80211_IOC_WME 28
#define IEEE80211_IOC_HIDESSID 29
#define IEEE80211_IOC_APBRIDGE 30
#define IEEE80211_IOC_MCASTCIPHER 31
#define IEEE80211_IOC_MCASTKEYLEN 32
#define IEEE80211_IOC_UCASTCIPHERS 33
#define IEEE80211_IOC_UCASTCIPHER 34
#define IEEE80211_IOC_UCASTKEYLEN 35
#define IEEE80211_IOC_DRIVER_CAPS 36
#define IEEE80211_IOC_KEYMGTALGS 37
#define IEEE80211_IOC_RSNCAPS 38
#define IEEE80211_IOC_WPAIE 39
#define IEEE80211_IOC_STA_STATS 40
#define IEEE80211_IOC_MACCMD 41
#define IEEE80211_IOC_CHANINFO 42
#define IEEE80211_IOC_TXPOWMAX 43
#define IEEE80211_IOC_STA_TXPOW 44
#define IEEE80211_IOC_STA_INFO 45
#define IEEE80211_IOC_WME_CWMIN 46
#define IEEE80211_IOC_WME_CWMAX 47
#define IEEE80211_IOC_WME_AIFS 48
#define IEEE80211_IOC_WME_TXOPLIMIT 49
#define IEEE80211_IOC_WME_ACM 50
#define IEEE80211_IOC_WME_ACKPOLICY 51
#define IEEE80211_IOC_DTIM_PERIOD 52
#define IEEE80211_IOC_BEACON_INTERVAL 53
#define IEEE80211_IOC_ADDMAC 54
#define IEEE80211_IOC_DELMAC 55
#define IEEE80211_IOC_PUREG 56
#define IEEE80211_IOC_MCAST_RATE 72
#define IEEE80211_IOC_FRAGTHRESHOLD 73
struct ieee80211req_scan_result {
u_int16_t isr_len;
u_int16_t isr_freq;
u_int16_t isr_flags;
u_int8_t isr_noise;
u_int8_t isr_rssi;
u_int8_t isr_intval;
u_int8_t isr_capinfo;
u_int8_t isr_erp;
u_int8_t isr_bssid[IEEE80211_ADDR_LEN];
u_int8_t isr_nrates;
u_int8_t isr_rates[IEEE80211_RATE_MAXSIZE];
u_int8_t isr_ssid_len;
u_int8_t isr_ie_len;
u_int8_t isr_pad[5];
};
#ifdef __NetBSD__
struct ieee80211_nwid {
u_int8_t i_len;
u_int8_t i_nwid[IEEE80211_NWID_LEN];
};
#define SIOCS80211NWID _IOWR('i', 230, struct ifreq)
#define SIOCG80211NWID _IOWR('i', 231, struct ifreq)
struct ieee80211_nwkey {
char i_name[IFNAMSIZ];
int i_wepon;
int i_defkid;
struct {
int i_keylen;
u_int8_t *i_keydat;
} i_key[IEEE80211_WEP_NKID];
};
#define SIOCS80211NWKEY _IOW('i', 232, struct ieee80211_nwkey)
#define SIOCG80211NWKEY _IOWR('i', 233, struct ieee80211_nwkey)
#define IEEE80211_NWKEY_OPEN 0
#define IEEE80211_NWKEY_WEP 1
#define IEEE80211_NWKEY_EAP 2
#define IEEE80211_NWKEY_PERSIST 0x100
struct ieee80211_power {
char i_name[IFNAMSIZ];
int i_enabled;
int i_maxsleep;
};
#define SIOCS80211POWER _IOW('i', 234, struct ieee80211_power)
#define SIOCG80211POWER _IOWR('i', 235, struct ieee80211_power)
struct ieee80211_auth {
char i_name[IFNAMSIZ];
int i_authtype;
};
#define SIOCS80211AUTH _IOW('i', 236, struct ieee80211_auth)
#define SIOCG80211AUTH _IOWR('i', 237, struct ieee80211_auth)
struct ieee80211chanreq {
char i_name[IFNAMSIZ];
u_int16_t i_channel;
};
#ifndef IEEE80211_CHAN_ANY
#define IEEE80211_CHAN_ANY 0xffff
#endif
#define SIOCS80211CHANNEL _IOW('i', 238, struct ieee80211chanreq)
#define SIOCG80211CHANNEL _IOWR('i', 239, struct ieee80211chanreq)
struct ieee80211_bssid {
char i_name[IFNAMSIZ];
u_int8_t i_bssid[IEEE80211_ADDR_LEN];
};
#define SIOCS80211BSSID _IOW('i', 240, struct ieee80211_bssid)
#define SIOCG80211BSSID _IOWR('i', 241, struct ieee80211_bssid)
#endif
#endif