2 * Header bits derived from MadWifi source:
3 * Copyright (c) 2001 Atsushi Onoe
4 * Copyright (c) 2002-2005 Sam Leffler, Errno Consulting
7 * Distributed under the terms of the GPLv2 license.
9 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
10 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
11 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
12 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
13 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
14 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
15 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
16 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
17 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
18 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25 #define IEEE80211_ADDR_LEN 6
26 #define IEEE80211_RATE_VAL 0x7f
27 #define IEEE80211_SEQ_SEQ_MASK 0xfff0
28 #define IEEE80211_SEQ_SEQ_SHIFT 4
31 /* ieee80211_crypto.h */
32 #define IEEE80211_KEYBUF_SIZE 16
33 #define IEEE80211_MICBUF_SIZE 16
34 #define IEEE80211_TID_SIZE 17
36 #define IEEE80211_CIPHER_WEP 0
37 #define IEEE80211_CIPHER_TKIP 1
38 #define IEEE80211_CIPHER_AES_OCB 2
39 #define IEEE80211_CIPHER_AES_CCM 3
40 #define IEEE80211_CIPHER_CKIP 5
41 #define IEEE80211_CIPHER_NONE 6
42 #define IEEE80211_CIPHER_MAX (IEEE80211_CIPHER_NONE + 1)
45 /* ieee80211_ioctl.h */
46 #define IEEE80211_KEY_DEFAULT 0x80
47 #define IEEE80211_CHAN_MAX 255
48 #define IEEE80211_CHAN_BYTES 32
49 #define IEEE80211_RATE_MAXSIZE 15
51 #define IEEE80211_IOCTL_GETKEY (SIOCDEVPRIVATE+3)
52 #define IEEE80211_IOCTL_STA_STATS (SIOCDEVPRIVATE+5)
53 #define IEEE80211_IOCTL_STA_INFO (SIOCDEVPRIVATE+6)
55 #define IEEE80211_IOCTL_GETPARAM (SIOCIWFIRSTPRIV+1)
56 #define IEEE80211_IOCTL_GETMODE (SIOCIWFIRSTPRIV+3)
57 #define IEEE80211_IOCTL_GETCHANLIST (SIOCIWFIRSTPRIV+7)
58 #define IEEE80211_IOCTL_GETCHANINFO (SIOCIWFIRSTPRIV+13)
60 #define SIOC80211IFCREATE (SIOCDEVPRIVATE+7)
61 #define SIOC80211IFDESTROY (SIOCDEVPRIVATE+8)
63 #define IEEE80211_CLONE_BSSID 0x0001 /* allocate unique mac/bssid */
64 #define IEEE80211_NO_STABEACONS 0x0002 /* Do not setup the station beacon timers */
66 struct ieee80211_clone_params
{
67 char icp_name
[IFNAMSIZ
]; /* device name */
68 u_int16_t icp_opmode
; /* operating mode */
69 u_int16_t icp_flags
; /* see below */
72 enum ieee80211_opmode
{
73 IEEE80211_M_STA
= 1, /* infrastructure station */
74 IEEE80211_M_IBSS
= 0, /* IBSS (adhoc) station */
75 IEEE80211_M_AHDEMO
= 3, /* Old lucent compatible adhoc demo */
76 IEEE80211_M_HOSTAP
= 6, /* Software Access Point */
77 IEEE80211_M_MONITOR
= 8, /* Monitor mode */
78 IEEE80211_M_WDS
= 2, /* WDS link */
82 IEEE80211_PARAM_AUTHMODE
= 3, /* authentication mode */
83 IEEE80211_PARAM_MCASTCIPHER
= 5, /* multicast/default cipher */
84 IEEE80211_PARAM_MCASTKEYLEN
= 6, /* multicast key length */
85 IEEE80211_PARAM_UCASTCIPHERS
= 7, /* unicast cipher suites */
86 IEEE80211_PARAM_WPA
= 10, /* WPA mode (0,1,2) */
90 * Authentication mode.
92 enum ieee80211_authmode
{
93 IEEE80211_AUTH_NONE
= 0,
94 IEEE80211_AUTH_OPEN
= 1, /* open */
95 IEEE80211_AUTH_SHARED
= 2, /* shared-key */
96 IEEE80211_AUTH_8021X
= 3, /* 802.1x */
97 IEEE80211_AUTH_AUTO
= 4, /* auto-select/accept */
98 /* NB: these are used only for ioctls */
99 IEEE80211_AUTH_WPA
= 5, /* WPA/RSN w/ 802.1x/PSK */
102 struct ieee80211_channel
{
103 u_int16_t ic_freq
; /* setting in MHz */
104 u_int16_t ic_flags
; /* see below */
105 u_int8_t ic_ieee
; /* IEEE channel number */
106 int8_t ic_maxregpower
; /* maximum regulatory tx power in dBm */
107 int8_t ic_maxpower
; /* maximum tx power in dBm */
108 int8_t ic_minpower
; /* minimum tx power in dBm */
109 u_int8_t ic_scanflags
;
110 u_int8_t ic_idletime
; /* phy idle time in % */
113 struct ieee80211req_key
{
114 u_int8_t ik_type
; /* key/cipher type */
116 u_int16_t ik_keyix
; /* key index */
117 u_int8_t ik_keylen
; /* key length in bytes */
119 u_int8_t ik_macaddr
[IEEE80211_ADDR_LEN
];
120 u_int64_t ik_keyrsc
; /* key receive sequence counter */
121 u_int64_t ik_keytsc
; /* key transmit sequence counter */
122 u_int8_t ik_keydata
[IEEE80211_KEYBUF_SIZE
+IEEE80211_MICBUF_SIZE
];
125 struct ieee80211req_chanlist
{
126 u_int8_t ic_channels
[IEEE80211_CHAN_BYTES
];
129 struct ieee80211req_chaninfo
{
131 struct ieee80211_channel ic_chans
[IEEE80211_CHAN_MAX
];
134 struct ieee80211req_sta_info
{
135 u_int16_t isi_len
; /* length (mult of 4) */
136 u_int16_t isi_freq
; /* MHz */
137 u_int16_t isi_flags
; /* channel flags */
138 u_int16_t isi_state
; /* state flags */
139 u_int8_t isi_authmode
; /* authentication algorithm */
142 u_int16_t isi_capinfo
; /* capabilities */
143 u_int8_t isi_athflags
; /* Atheros capabilities */
144 u_int8_t isi_erp
; /* ERP element */
145 u_int8_t isi_macaddr
[IEEE80211_ADDR_LEN
];
146 u_int8_t isi_nrates
; /* negotiated rates */
147 u_int8_t isi_rates
[IEEE80211_RATE_MAXSIZE
];
148 u_int8_t isi_txrate
; /* index to isi_rates[] */
149 u_int16_t isi_ie_len
; /* IE length */
150 u_int16_t isi_associd
; /* assoc response */
151 u_int16_t isi_txpower
; /* current tx power */
152 u_int16_t isi_vlan
; /* vlan tag */
153 u_int16_t isi_txseqs
[17]; /* seq to be transmitted */
154 u_int16_t isi_rxseqs
[17]; /* seq previous for qos frames*/
155 u_int16_t isi_inact
; /* inactivity timer */
156 u_int8_t isi_uapsd
; /* UAPSD queues */
157 u_int8_t isi_opmode
; /* sta operating mode */