root / lab4 / .minix-src / include / net80211 / ieee80211_ioctl.h @ 14
History | View | Annotate | Download (24.8 KB)
1 |
/* $NetBSD: ieee80211_ioctl.h,v 1.21 2015/09/06 06:01:01 dholland Exp $ */
|
---|---|
2 |
/*-
|
3 |
* Copyright (c) 2001 Atsushi Onoe
|
4 |
* Copyright (c) 2002-2005 Sam Leffler, Errno Consulting
|
5 |
* All rights reserved.
|
6 |
*
|
7 |
* Redistribution and use in source and binary forms, with or without
|
8 |
* modification, are permitted provided that the following conditions
|
9 |
* are met:
|
10 |
* 1. Redistributions of source code must retain the above copyright
|
11 |
* notice, this list of conditions and the following disclaimer.
|
12 |
* 2. Redistributions in binary form must reproduce the above copyright
|
13 |
* notice, this list of conditions and the following disclaimer in the
|
14 |
* documentation and/or other materials provided with the distribution.
|
15 |
* 3. The name of the author may not be used to endorse or promote products
|
16 |
* derived from this software without specific prior written permission.
|
17 |
*
|
18 |
* Alternatively, this software may be distributed under the terms of the
|
19 |
* GNU General Public License ("GPL") version 2 as published by the Free
|
20 |
* Software Foundation.
|
21 |
*
|
22 |
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
23 |
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
24 |
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
25 |
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
26 |
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
27 |
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
28 |
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
29 |
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
30 |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
31 |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
32 |
*
|
33 |
* $FreeBSD: src/sys/net80211/ieee80211_ioctl.h,v 1.14 2005/08/13 17:31:48 sam Exp $
|
34 |
*/
|
35 |
#ifndef _NET80211_IEEE80211_IOCTL_H_
|
36 |
#define _NET80211_IEEE80211_IOCTL_H_
|
37 |
|
38 |
/*
|
39 |
* IEEE 802.11 ioctls.
|
40 |
*/
|
41 |
#include <sys/ioccom.h> |
42 |
#include <net80211/_ieee80211.h> |
43 |
#include <net80211/ieee80211.h> |
44 |
#include <net80211/ieee80211_crypto.h> |
45 |
|
46 |
/*
|
47 |
* Per/node (station) statistics available when operating as an AP.
|
48 |
*/
|
49 |
struct ieee80211_nodestats {
|
50 |
u_int32_t ns_rx_data; /* rx data frames */
|
51 |
u_int32_t ns_rx_mgmt; /* rx management frames */
|
52 |
u_int32_t ns_rx_ctrl; /* rx control frames */
|
53 |
u_int32_t ns_rx_ucast; /* rx unicast frames */
|
54 |
u_int32_t ns_rx_mcast; /* rx multi/broadcast frames */
|
55 |
u_int64_t ns_rx_bytes; /* rx data count (bytes) */
|
56 |
u_int64_t ns_rx_beacons; /* rx beacon frames */
|
57 |
u_int32_t ns_rx_proberesp; /* rx probe response frames */
|
58 |
|
59 |
u_int32_t ns_rx_dup; /* rx discard 'cuz dup */
|
60 |
u_int32_t ns_rx_noprivacy; /* rx w/ wep but privacy off */
|
61 |
u_int32_t ns_rx_wepfail; /* rx wep processing failed */
|
62 |
u_int32_t ns_rx_demicfail; /* rx demic failed */
|
63 |
u_int32_t ns_rx_decap; /* rx decapsulation failed */
|
64 |
u_int32_t ns_rx_defrag; /* rx defragmentation failed */
|
65 |
u_int32_t ns_rx_disassoc; /* rx disassociation */
|
66 |
u_int32_t ns_rx_deauth; /* rx deauthentication */
|
67 |
u_int32_t ns_rx_decryptcrc; /* rx decrypt failed on crc */
|
68 |
u_int32_t ns_rx_unauth; /* rx on unauthorized port */
|
69 |
u_int32_t ns_rx_unencrypted; /* rx unecrypted w/ privacy */
|
70 |
|
71 |
u_int32_t ns_tx_data; /* tx data frames */
|
72 |
u_int32_t ns_tx_mgmt; /* tx management frames */
|
73 |
u_int32_t ns_tx_ucast; /* tx unicast frames */
|
74 |
u_int32_t ns_tx_mcast; /* tx multi/broadcast frames */
|
75 |
u_int64_t ns_tx_bytes; /* tx data count (bytes) */
|
76 |
u_int32_t ns_tx_probereq; /* tx probe request frames */
|
77 |
|
78 |
u_int32_t ns_tx_novlantag; /* tx discard 'cuz no tag */
|
79 |
u_int32_t ns_tx_vlanmismatch; /* tx discard 'cuz bad tag */
|
80 |
|
81 |
u_int32_t ns_ps_discard; /* ps discard 'cuz of age */
|
82 |
|
83 |
/* MIB-related state */
|
84 |
u_int32_t ns_tx_assoc; /* [re]associations */
|
85 |
u_int32_t ns_tx_assoc_fail; /* [re]association failures */
|
86 |
u_int32_t ns_tx_auth; /* [re]authentications */
|
87 |
u_int32_t ns_tx_auth_fail; /* [re]authentication failures*/
|
88 |
u_int32_t ns_tx_deauth; /* deauthentications */
|
89 |
u_int32_t ns_tx_deauth_code; /* last deauth reason */
|
90 |
u_int32_t ns_tx_disassoc; /* disassociations */
|
91 |
u_int32_t ns_tx_disassoc_code; /* last disassociation reason */
|
92 |
}; |
93 |
|
94 |
#ifdef COMPAT_20
|
95 |
struct ieee80211_ostats {
|
96 |
u_int32_t is_rx_badversion; /* rx frame with bad version */
|
97 |
u_int32_t is_rx_tooshort; /* rx frame too short */
|
98 |
u_int32_t is_rx_wrongbss; /* rx from wrong bssid */
|
99 |
u_int32_t is_rx_dup; /* rx discard 'cuz dup */
|
100 |
u_int32_t is_rx_wrongdir; /* rx w/ wrong direction */
|
101 |
u_int32_t is_rx_mcastecho; /* rx discard 'cuz mcast echo */
|
102 |
u_int32_t is_rx_notassoc; /* rx discard 'cuz sta !assoc */
|
103 |
u_int32_t is_rx_nowep; /* rx w/ wep but wep !config */
|
104 |
u_int32_t is_rx_wepfail; /* rx wep processing failed */
|
105 |
u_int32_t is_rx_decap; /* rx decapsulation failed */
|
106 |
u_int32_t is_rx_mgtdiscard; /* rx discard mgt frames */
|
107 |
u_int32_t is_rx_ctl; /* rx discard ctrl frames */
|
108 |
u_int32_t is_rx_rstoobig; /* rx rate set truncated */
|
109 |
u_int32_t is_rx_elem_missing; /* rx required element missing*/
|
110 |
u_int32_t is_rx_elem_toobig; /* rx element too big */
|
111 |
u_int32_t is_rx_elem_toosmall; /* rx element too small */
|
112 |
u_int32_t is_rx_elem_unknown; /* rx element unknown */
|
113 |
u_int32_t is_rx_badchan; /* rx frame w/ invalid chan */
|
114 |
u_int32_t is_rx_chanmismatch; /* rx frame chan mismatch */
|
115 |
u_int32_t is_rx_nodealloc; /* rx frame dropped */
|
116 |
u_int32_t is_rx_ssidmismatch; /* rx frame ssid mismatch */
|
117 |
u_int32_t is_rx_auth_unsupported; /* rx w/ unsupported auth alg */
|
118 |
u_int32_t is_rx_auth_fail; /* rx sta auth failure */
|
119 |
u_int32_t is_rx_assoc_bss; /* rx assoc from wrong bssid */
|
120 |
u_int32_t is_rx_assoc_notauth; /* rx assoc w/o auth */
|
121 |
u_int32_t is_rx_assoc_capmismatch;/* rx assoc w/ cap mismatch */
|
122 |
u_int32_t is_rx_assoc_norate; /* rx assoc w/ no rate match */
|
123 |
u_int32_t is_rx_deauth; /* rx deauthentication */
|
124 |
u_int32_t is_rx_disassoc; /* rx disassociation */
|
125 |
u_int32_t is_rx_badsubtype; /* rx frame w/ unknown subtype*/
|
126 |
u_int32_t is_rx_nombuf; /* rx failed for lack of mbuf */
|
127 |
u_int32_t is_rx_decryptcrc; /* rx decrypt failed on crc */
|
128 |
u_int32_t is_rx_ahdemo_mgt; /* rx discard ahdemo mgt frame*/
|
129 |
u_int32_t is_rx_bad_auth; /* rx bad auth request */
|
130 |
u_int32_t is_tx_nombuf; /* tx failed for lack of mbuf */
|
131 |
u_int32_t is_tx_nonode; /* tx failed for no node */
|
132 |
u_int32_t is_tx_unknownmgt; /* tx of unknown mgt frame */
|
133 |
u_int32_t is_scan_active; /* active scans started */
|
134 |
u_int32_t is_scan_passive; /* passive scans started */
|
135 |
u_int32_t is_node_timeout; /* nodes timed out inactivity */
|
136 |
u_int32_t is_crypto_nomem; /* no memory for crypto ctx */
|
137 |
}; |
138 |
#endif /* COMPAT_20 */ |
139 |
|
140 |
/*
|
141 |
* Summary statistics.
|
142 |
*/
|
143 |
struct ieee80211_stats {
|
144 |
u_int32_t is_rx_badversion; /* rx frame with bad version */
|
145 |
u_int32_t is_rx_tooshort; /* rx frame too short */
|
146 |
u_int32_t is_rx_wrongbss; /* rx from wrong bssid */
|
147 |
u_int32_t is_rx_dup; /* rx discard 'cuz dup */
|
148 |
u_int32_t is_rx_wrongdir; /* rx w/ wrong direction */
|
149 |
u_int32_t is_rx_mcastecho; /* rx discard 'cuz mcast echo */
|
150 |
u_int32_t is_rx_notassoc; /* rx discard 'cuz sta !assoc */
|
151 |
u_int32_t is_rx_noprivacy; /* rx w/ wep but privacy off */
|
152 |
u_int32_t is_rx_unencrypted; /* rx w/o wep and privacy on */
|
153 |
u_int32_t is_rx_wepfail; /* rx wep processing failed */
|
154 |
u_int32_t is_rx_decap; /* rx decapsulation failed */
|
155 |
u_int32_t is_rx_mgtdiscard; /* rx discard mgt frames */
|
156 |
u_int32_t is_rx_ctl; /* rx discard ctrl frames */
|
157 |
u_int32_t is_rx_beacon; /* rx beacon frames */
|
158 |
u_int32_t is_rx_rstoobig; /* rx rate set truncated */
|
159 |
u_int32_t is_rx_elem_missing; /* rx required element missing*/
|
160 |
u_int32_t is_rx_elem_toobig; /* rx element too big */
|
161 |
u_int32_t is_rx_elem_toosmall; /* rx element too small */
|
162 |
u_int32_t is_rx_elem_unknown; /* rx element unknown */
|
163 |
u_int32_t is_rx_badchan; /* rx frame w/ invalid chan */
|
164 |
u_int32_t is_rx_chanmismatch; /* rx frame chan mismatch */
|
165 |
u_int32_t is_rx_nodealloc; /* rx frame dropped */
|
166 |
u_int32_t is_rx_ssidmismatch; /* rx frame ssid mismatch */
|
167 |
u_int32_t is_rx_auth_unsupported; /* rx w/ unsupported auth alg */
|
168 |
u_int32_t is_rx_auth_fail; /* rx sta auth failure */
|
169 |
u_int32_t is_rx_auth_countermeasures;/* rx auth discard 'cuz CM */
|
170 |
u_int32_t is_rx_assoc_bss; /* rx assoc from wrong bssid */
|
171 |
u_int32_t is_rx_assoc_notauth; /* rx assoc w/o auth */
|
172 |
u_int32_t is_rx_assoc_capmismatch;/* rx assoc w/ cap mismatch */
|
173 |
u_int32_t is_rx_assoc_norate; /* rx assoc w/ no rate match */
|
174 |
u_int32_t is_rx_assoc_badwpaie; /* rx assoc w/ bad WPA IE */
|
175 |
u_int32_t is_rx_deauth; /* rx deauthentication */
|
176 |
u_int32_t is_rx_disassoc; /* rx disassociation */
|
177 |
u_int32_t is_rx_badsubtype; /* rx frame w/ unknown subtype*/
|
178 |
u_int32_t is_rx_nobuf; /* rx failed for lack of buf */
|
179 |
u_int32_t is_rx_decryptcrc; /* rx decrypt failed on crc */
|
180 |
u_int32_t is_rx_ahdemo_mgt; /* rx discard ahdemo mgt frame*/
|
181 |
u_int32_t is_rx_bad_auth; /* rx bad auth request */
|
182 |
u_int32_t is_rx_unauth; /* rx on unauthorized port */
|
183 |
u_int32_t is_rx_badkeyid; /* rx w/ incorrect keyid */
|
184 |
u_int32_t is_rx_ccmpreplay; /* rx seq# violation (CCMP) */
|
185 |
u_int32_t is_rx_ccmpformat; /* rx format bad (CCMP) */
|
186 |
u_int32_t is_rx_ccmpmic; /* rx MIC check failed (CCMP) */
|
187 |
u_int32_t is_rx_tkipreplay; /* rx seq# violation (TKIP) */
|
188 |
u_int32_t is_rx_tkipformat; /* rx format bad (TKIP) */
|
189 |
u_int32_t is_rx_tkipmic; /* rx MIC check failed (TKIP) */
|
190 |
u_int32_t is_rx_tkipicv; /* rx ICV check failed (TKIP) */
|
191 |
u_int32_t is_rx_badcipher; /* rx failed 'cuz key type */
|
192 |
u_int32_t is_rx_nocipherctx; /* rx failed 'cuz key !setup */
|
193 |
u_int32_t is_rx_acl; /* rx discard 'cuz acl policy */
|
194 |
u_int32_t is_tx_nobuf; /* tx failed for lack of buf */
|
195 |
u_int32_t is_tx_nonode; /* tx failed for no node */
|
196 |
u_int32_t is_tx_unknownmgt; /* tx of unknown mgt frame */
|
197 |
u_int32_t is_tx_badcipher; /* tx failed 'cuz key type */
|
198 |
u_int32_t is_tx_nodefkey; /* tx failed 'cuz no defkey */
|
199 |
u_int32_t is_tx_noheadroom; /* tx failed 'cuz no space */
|
200 |
u_int32_t is_tx_fragframes; /* tx frames fragmented */
|
201 |
u_int32_t is_tx_frags; /* tx fragments created */
|
202 |
u_int32_t is_scan_active; /* active scans started */
|
203 |
u_int32_t is_scan_passive; /* passive scans started */
|
204 |
u_int32_t is_node_timeout; /* nodes timed out inactivity */
|
205 |
u_int32_t is_crypto_nomem; /* no memory for crypto ctx */
|
206 |
u_int32_t is_crypto_tkip; /* tkip crypto done in s/w */
|
207 |
u_int32_t is_crypto_tkipenmic; /* tkip en-MIC done in s/w */
|
208 |
u_int32_t is_crypto_tkipdemic; /* tkip de-MIC done in s/w */
|
209 |
u_int32_t is_crypto_tkipcm; /* tkip counter measures */
|
210 |
u_int32_t is_crypto_ccmp; /* ccmp crypto done in s/w */
|
211 |
u_int32_t is_crypto_wep; /* wep crypto done in s/w */
|
212 |
u_int32_t is_crypto_setkey_cipher;/* cipher rejected key */
|
213 |
u_int32_t is_crypto_setkey_nokey; /* no key index for setkey */
|
214 |
u_int32_t is_crypto_delkey; /* driver key delete failed */
|
215 |
u_int32_t is_crypto_badcipher; /* unknown cipher */
|
216 |
u_int32_t is_crypto_nocipher; /* cipher not available */
|
217 |
u_int32_t is_crypto_attachfail; /* cipher attach failed */
|
218 |
u_int32_t is_crypto_swfallback; /* cipher fallback to s/w */
|
219 |
u_int32_t is_crypto_keyfail; /* driver key alloc failed */
|
220 |
u_int32_t is_crypto_enmicfail; /* en-MIC failed */
|
221 |
u_int32_t is_ibss_capmismatch; /* merge failed-cap mismatch */
|
222 |
u_int32_t is_ibss_norate; /* merge failed-rate mismatch */
|
223 |
u_int32_t is_ps_unassoc; /* ps-poll for unassoc. sta */
|
224 |
u_int32_t is_ps_badaid; /* ps-poll w/ incorrect aid */
|
225 |
u_int32_t is_ps_qempty; /* ps-poll w/ nothing to send */
|
226 |
u_int32_t is_ff_badhdr; /* fast frame rx'd w/ bad hdr */
|
227 |
u_int32_t is_ff_tooshort; /* fast frame rx decap error */
|
228 |
u_int32_t is_ff_split; /* fast frame rx split error */
|
229 |
u_int32_t is_ff_decap; /* fast frames decap'd */
|
230 |
u_int32_t is_ff_encap; /* fast frames encap'd for tx */
|
231 |
u_int32_t is_rx_badbintval; /* rx frame w/ bogus bintval */
|
232 |
u_int32_t is_spare[9];
|
233 |
}; |
234 |
|
235 |
/*
|
236 |
* Max size of optional information elements. We artificially
|
237 |
* constrain this; it's limited only by the max frame size (and
|
238 |
* the max parameter size of the wireless extensions).
|
239 |
*/
|
240 |
#define IEEE80211_MAX_OPT_IE 256 |
241 |
|
242 |
/*
|
243 |
* WPA/RSN get/set key request. Specify the key/cipher
|
244 |
* type and whether the key is to be used for sending and/or
|
245 |
* receiving. The key index should be set only when working
|
246 |
* with global keys (use IEEE80211_KEYIX_NONE for ``no index'').
|
247 |
* Otherwise a unicast/pairwise key is specified by the bssid
|
248 |
* (on a station) or mac address (on an ap). They key length
|
249 |
* must include any MIC key data; otherwise it should be no
|
250 |
more than IEEE80211_KEYBUF_SIZE.
|
251 |
*/
|
252 |
struct ieee80211req_key {
|
253 |
u_int8_t ik_type; /* key/cipher type */
|
254 |
u_int8_t ik_pad; |
255 |
u_int16_t ik_keyix; /* key index */
|
256 |
u_int8_t ik_keylen; /* key length in bytes */
|
257 |
u_int8_t ik_flags; |
258 |
/* NB: IEEE80211_KEY_XMIT and IEEE80211_KEY_RECV defined elsewhere */
|
259 |
#define IEEE80211_KEY_DEFAULT 0x80 /* default xmit key */ |
260 |
u_int8_t ik_macaddr[IEEE80211_ADDR_LEN]; |
261 |
u_int64_t ik_keyrsc; /* key receive sequence counter */
|
262 |
u_int64_t ik_keytsc; /* key transmit sequence counter */
|
263 |
u_int8_t ik_keydata[IEEE80211_KEYBUF_SIZE+IEEE80211_MICBUF_SIZE]; |
264 |
}; |
265 |
|
266 |
/*
|
267 |
* Delete a key either by index or address. Set the index
|
268 |
* to IEEE80211_KEYIX_NONE when deleting a unicast key.
|
269 |
*/
|
270 |
struct ieee80211req_del_key {
|
271 |
u_int8_t idk_keyix; /* key index */
|
272 |
u_int8_t idk_macaddr[IEEE80211_ADDR_LEN]; |
273 |
}; |
274 |
|
275 |
/*
|
276 |
* MLME state manipulation request. IEEE80211_MLME_ASSOC
|
277 |
* only makes sense when operating as a station. The other
|
278 |
* requests can be used when operating as a station or an
|
279 |
* ap (to effect a station).
|
280 |
*/
|
281 |
struct ieee80211req_mlme {
|
282 |
u_int8_t im_op; /* operation to perform */
|
283 |
#define IEEE80211_MLME_ASSOC 1 /* associate station */ |
284 |
#define IEEE80211_MLME_DISASSOC 2 /* disassociate station */ |
285 |
#define IEEE80211_MLME_DEAUTH 3 /* deauthenticate station */ |
286 |
#define IEEE80211_MLME_AUTHORIZE 4 /* authorize station */ |
287 |
#define IEEE80211_MLME_UNAUTHORIZE 5 /* unauthorize station */ |
288 |
u_int8_t im_ssid_len; /* length of optional ssid */
|
289 |
u_int16_t im_reason; /* 802.11 reason code */
|
290 |
u_int8_t im_macaddr[IEEE80211_ADDR_LEN]; |
291 |
u_int8_t im_ssid[IEEE80211_NWID_LEN]; |
292 |
}; |
293 |
|
294 |
/*
|
295 |
* MAC ACL operations.
|
296 |
*/
|
297 |
enum {
|
298 |
IEEE80211_MACCMD_POLICY_OPEN = 0, /* set policy: no ACL's */ |
299 |
IEEE80211_MACCMD_POLICY_ALLOW = 1, /* set policy: allow traffic */ |
300 |
IEEE80211_MACCMD_POLICY_DENY = 2, /* set policy: deny traffic */ |
301 |
IEEE80211_MACCMD_FLUSH = 3, /* flush ACL database */ |
302 |
IEEE80211_MACCMD_DETACH = 4, /* detach ACL policy */ |
303 |
IEEE80211_MACCMD_POLICY = 5, /* get ACL policy */ |
304 |
IEEE80211_MACCMD_LIST = 6 /* get ACL database */ |
305 |
}; |
306 |
|
307 |
struct ieee80211req_maclist {
|
308 |
u_int8_t ml_macaddr[IEEE80211_ADDR_LEN]; |
309 |
}; |
310 |
|
311 |
/*
|
312 |
* Set the active channel list. Note this list is
|
313 |
* intersected with the available channel list in
|
314 |
* calculating the set of channels actually used in
|
315 |
* scanning.
|
316 |
*/
|
317 |
struct ieee80211req_chanlist {
|
318 |
u_int8_t ic_channels[IEEE80211_CHAN_BYTES]; |
319 |
}; |
320 |
|
321 |
/*
|
322 |
* Get the active channel list info.
|
323 |
*/
|
324 |
struct ieee80211req_chaninfo {
|
325 |
u_int ic_nchans; |
326 |
struct ieee80211_channel ic_chans[IEEE80211_CHAN_MAX];
|
327 |
}; |
328 |
|
329 |
/*
|
330 |
* Retrieve the WPA/RSN information element for an associated station.
|
331 |
*/
|
332 |
struct ieee80211req_wpaie {
|
333 |
u_int8_t wpa_macaddr[IEEE80211_ADDR_LEN]; |
334 |
u_int8_t wpa_ie[IEEE80211_MAX_OPT_IE]; |
335 |
}; |
336 |
|
337 |
/*
|
338 |
* Retrieve per-node statistics.
|
339 |
*/
|
340 |
struct ieee80211req_sta_stats {
|
341 |
union {
|
342 |
/* NB: explicitly force 64-bit alignment */
|
343 |
u_int8_t macaddr[IEEE80211_ADDR_LEN]; |
344 |
u_int64_t pad; |
345 |
} is_u; |
346 |
struct ieee80211_nodestats is_stats;
|
347 |
}; |
348 |
|
349 |
/*
|
350 |
* Station information block; the mac address is used
|
351 |
* to retrieve other data like stats, unicast key, etc.
|
352 |
*/
|
353 |
struct ieee80211req_sta_info {
|
354 |
u_int16_t isi_len; /* length (mult of 4) */
|
355 |
u_int16_t isi_freq; /* MHz */
|
356 |
u_int16_t isi_flags; /* channel flags */
|
357 |
u_int16_t isi_state; /* state flags */
|
358 |
u_int8_t isi_authmode; /* authentication algorithm */
|
359 |
u_int8_t isi_rssi; |
360 |
u_int8_t isi_capinfo; /* capabilities */
|
361 |
u_int8_t isi_erp; /* ERP element */
|
362 |
u_int8_t isi_macaddr[IEEE80211_ADDR_LEN]; |
363 |
u_int8_t isi_nrates; |
364 |
/* negotiated rates */
|
365 |
u_int8_t isi_rates[IEEE80211_RATE_MAXSIZE]; |
366 |
u_int8_t isi_txrate; /* index to isi_rates[] */
|
367 |
u_int16_t isi_ie_len; /* IE length */
|
368 |
u_int16_t isi_associd; /* assoc response */
|
369 |
u_int16_t isi_txpower; /* current tx power */
|
370 |
u_int16_t isi_vlan; /* vlan tag */
|
371 |
u_int16_t isi_txseqs[17]; /* seq to be transmitted */ |
372 |
u_int16_t isi_rxseqs[17]; /* seq previous for qos frames*/ |
373 |
u_int16_t isi_inact; /* inactivity timer */
|
374 |
/* XXX frag state? */
|
375 |
/* variable length IE data */
|
376 |
}; |
377 |
|
378 |
/*
|
379 |
* Retrieve per-station information; to retrieve all
|
380 |
* specify a mac address of ff:ff:ff:ff:ff:ff.
|
381 |
*/
|
382 |
struct ieee80211req_sta_req {
|
383 |
union {
|
384 |
/* NB: explicitly force 64-bit alignment */
|
385 |
u_int8_t macaddr[IEEE80211_ADDR_LEN]; |
386 |
u_int64_t pad; |
387 |
} is_u; |
388 |
struct ieee80211req_sta_info info[1]; /* variable length */ |
389 |
}; |
390 |
|
391 |
/*
|
392 |
* Get/set per-station tx power cap.
|
393 |
*/
|
394 |
struct ieee80211req_sta_txpow {
|
395 |
u_int8_t it_macaddr[IEEE80211_ADDR_LEN]; |
396 |
u_int8_t it_txpow; |
397 |
}; |
398 |
|
399 |
/*
|
400 |
* WME parameters are set and return using i_val and i_len.
|
401 |
* i_val holds the value itself. i_len specifies the AC
|
402 |
* and, as appropriate, then high bit specifies whether the
|
403 |
* operation is to be applied to the BSS or ourself.
|
404 |
*/
|
405 |
#define IEEE80211_WMEPARAM_SELF 0x0000 /* parameter applies to self */ |
406 |
#define IEEE80211_WMEPARAM_BSS 0x8000 /* parameter applies to BSS */ |
407 |
#define IEEE80211_WMEPARAM_VAL 0x7fff /* parameter value */ |
408 |
|
409 |
/*
|
410 |
* FreeBSD-style ioctls.
|
411 |
*/
|
412 |
/* the first member must be matched with struct ifreq */
|
413 |
struct ieee80211req {
|
414 |
char i_name[IFNAMSIZ]; /* if_name, e.g. "wi0" */ |
415 |
u_int16_t i_type; /* req type */
|
416 |
int16_t i_val; /* Index or simple value */
|
417 |
u_int16_t i_len; /* Index or simple value */
|
418 |
void *i_data; /* Extra data */ |
419 |
}; |
420 |
|
421 |
#ifdef __FreeBSD__
|
422 |
#define SIOCS80211 _IOW('i', 234, struct ieee80211req) |
423 |
#define SIOCG80211 _IOWR('i', 235, struct ieee80211req) |
424 |
#define SIOCG80211STATS _IOWR('i', 236, struct ifreq) |
425 |
#endif /* __FreeBSD__ */ |
426 |
|
427 |
#if defined(__NetBSD__) || defined(__minix)
|
428 |
#define SIOCS80211 _IOW('i', 244, struct ieee80211req) |
429 |
#define SIOCG80211 _IOWR('i', 245, struct ieee80211req) |
430 |
#define SIOCG80211STATS _IOWR('i', 246, struct ifreq) |
431 |
#define SIOCG80211ZSTATS _IOWR('i', 247, struct ifreq) |
432 |
#ifdef COMPAT_20
|
433 |
#define OSIOCG80211STATS _IOWR('i', 242, struct ifreq) |
434 |
#define OSIOCG80211ZSTATS _IOWR('i', 243, struct ifreq) |
435 |
#endif /* COMPAT_20 */ |
436 |
#endif /* defined(__NetBSD__) || defined(__minix) */ |
437 |
|
438 |
#if defined(__FreeBSD__) || defined(COMPAT_FREEBSD_NET80211)
|
439 |
#define IEEE80211_IOC_SSID 1 |
440 |
#endif /* __FreeBSD__ || COMPAT_FREEBSD_NET80211 */ |
441 |
#define IEEE80211_IOC_NUMSSIDS 2 |
442 |
#define IEEE80211_IOC_WEP 3 |
443 |
#define IEEE80211_WEP_NOSUP -1 |
444 |
#define IEEE80211_WEP_OFF 0 |
445 |
#define IEEE80211_WEP_ON 1 |
446 |
#define IEEE80211_WEP_MIXED 2 |
447 |
#if defined(__FreeBSD__) || defined(COMPAT_FREEBSD_NET80211)
|
448 |
#define IEEE80211_IOC_WEPKEY 4 |
449 |
#endif /* __FreeBSD__ || COMPAT_FREEBSD_NET80211 */ |
450 |
#define IEEE80211_IOC_NUMWEPKEYS 5 |
451 |
#if defined(__FreeBSD__) || defined(COMPAT_FREEBSD_NET80211)
|
452 |
#define IEEE80211_IOC_WEPTXKEY 6 |
453 |
#endif /* __FreeBSD__ || COMPAT_FREEBSD_NET80211 */ |
454 |
#define IEEE80211_IOC_AUTHMODE 7 |
455 |
#define IEEE80211_IOC_STATIONNAME 8 |
456 |
#if defined(__FreeBSD__) || defined(COMPAT_FREEBSD_NET80211)
|
457 |
#define IEEE80211_IOC_CHANNEL 9 |
458 |
#endif /* __FreeBSD__ || COMPAT_FREEBSD_NET80211 */ |
459 |
#define IEEE80211_IOC_POWERSAVE 10 |
460 |
#define IEEE80211_POWERSAVE_NOSUP -1 |
461 |
#define IEEE80211_POWERSAVE_OFF 0 |
462 |
#define IEEE80211_POWERSAVE_CAM 1 |
463 |
#define IEEE80211_POWERSAVE_PSP 2 |
464 |
#define IEEE80211_POWERSAVE_PSP_CAM 3 |
465 |
#define IEEE80211_POWERSAVE_ON IEEE80211_POWERSAVE_CAM
|
466 |
#define IEEE80211_IOC_POWERSAVESLEEP 11 |
467 |
#define IEEE80211_IOC_RTSTHRESHOLD 12 |
468 |
#define IEEE80211_IOC_PROTMODE 13 |
469 |
#define IEEE80211_PROTMODE_OFF 0 |
470 |
#define IEEE80211_PROTMODE_CTS 1 |
471 |
#define IEEE80211_PROTMODE_RTSCTS 2 |
472 |
#define IEEE80211_IOC_TXPOWER 14 /* global tx power limit */ |
473 |
#if defined(__FreeBSD__) || defined(COMPAT_FREEBSD_NET80211)
|
474 |
#define IEEE80211_IOC_BSSID 15 |
475 |
#endif /* __FreeBSD__ || COMPAT_FREEBSD_NET80211 */ |
476 |
#define IEEE80211_IOC_ROAMING 16 /* roaming mode */ |
477 |
#define IEEE80211_IOC_PRIVACY 17 /* privacy invoked */ |
478 |
#define IEEE80211_IOC_DROPUNENCRYPTED 18 /* discard unencrypted frames */ |
479 |
#define IEEE80211_IOC_WPAKEY 19 |
480 |
#define IEEE80211_IOC_DELKEY 20 |
481 |
#define IEEE80211_IOC_MLME 21 |
482 |
#define IEEE80211_IOC_OPTIE 22 /* optional info. element */ |
483 |
#define IEEE80211_IOC_SCAN_REQ 23 |
484 |
#define IEEE80211_IOC_SCAN_RESULTS 24 |
485 |
#define IEEE80211_IOC_COUNTERMEASURES 25 /* WPA/TKIP countermeasures */ |
486 |
#define IEEE80211_IOC_WPA 26 /* WPA mode (0,1,2) */ |
487 |
#define IEEE80211_IOC_CHANLIST 27 /* channel list */ |
488 |
#define IEEE80211_IOC_WME 28 /* WME mode (on, off) */ |
489 |
#define IEEE80211_IOC_HIDESSID 29 /* hide SSID mode (on, off) */ |
490 |
#define IEEE80211_IOC_APBRIDGE 30 /* AP inter-sta bridging */ |
491 |
#define IEEE80211_IOC_MCASTCIPHER 31 /* multicast/default cipher */ |
492 |
#define IEEE80211_IOC_MCASTKEYLEN 32 /* multicast key length */ |
493 |
#define IEEE80211_IOC_UCASTCIPHERS 33 /* unicast cipher suites */ |
494 |
#define IEEE80211_IOC_UCASTCIPHER 34 /* unicast cipher */ |
495 |
#define IEEE80211_IOC_UCASTKEYLEN 35 /* unicast key length */ |
496 |
#define IEEE80211_IOC_DRIVER_CAPS 36 /* driver capabilities */ |
497 |
#define IEEE80211_IOC_KEYMGTALGS 37 /* key management algorithms */ |
498 |
#define IEEE80211_IOC_RSNCAPS 38 /* RSN capabilities */ |
499 |
#define IEEE80211_IOC_WPAIE 39 /* WPA information element */ |
500 |
#define IEEE80211_IOC_STA_STATS 40 /* per-station statistics */ |
501 |
#define IEEE80211_IOC_MACCMD 41 /* MAC ACL operation */ |
502 |
#define IEEE80211_IOC_CHANINFO 42 /* channel info list */ |
503 |
#define IEEE80211_IOC_TXPOWMAX 43 /* max tx power for channel */ |
504 |
#define IEEE80211_IOC_STA_TXPOW 44 /* per-station tx power limit */ |
505 |
#define IEEE80211_IOC_STA_INFO 45 /* station/neighbor info */ |
506 |
#define IEEE80211_IOC_WME_CWMIN 46 /* WME: ECWmin */ |
507 |
#define IEEE80211_IOC_WME_CWMAX 47 /* WME: ECWmax */ |
508 |
#define IEEE80211_IOC_WME_AIFS 48 /* WME: AIFSN */ |
509 |
#define IEEE80211_IOC_WME_TXOPLIMIT 49 /* WME: txops limit */ |
510 |
#define IEEE80211_IOC_WME_ACM 50 /* WME: ACM (bss only) */ |
511 |
#define IEEE80211_IOC_WME_ACKPOLICY 51 /* WME: ACK policy (!bss only)*/ |
512 |
#define IEEE80211_IOC_DTIM_PERIOD 52 /* DTIM period (beacons) */ |
513 |
#define IEEE80211_IOC_BEACON_INTERVAL 53 /* beacon interval (ms) */ |
514 |
#define IEEE80211_IOC_ADDMAC 54 /* add sta to MAC ACL table */ |
515 |
#define IEEE80211_IOC_DELMAC 55 /* del sta from MAC ACL table */ |
516 |
#define IEEE80211_IOC_PUREG 56 /* pure 11g (no 11b stations) */ |
517 |
#define IEEE80211_IOC_MCAST_RATE 72 /* tx rate for mcast frames */ |
518 |
#define IEEE80211_IOC_FRAGTHRESHOLD 73 /* tx fragmentation threshold */ |
519 |
|
520 |
/*
|
521 |
* Scan result data returned for IEEE80211_IOC_SCAN_RESULTS.
|
522 |
*/
|
523 |
struct ieee80211req_scan_result {
|
524 |
u_int16_t isr_len; /* length (mult of 4) */
|
525 |
u_int16_t isr_freq; /* MHz */
|
526 |
u_int16_t isr_flags; /* channel flags */
|
527 |
u_int8_t isr_noise; |
528 |
u_int8_t isr_rssi; |
529 |
u_int8_t isr_intval; /* beacon interval */
|
530 |
u_int8_t isr_capinfo; /* capabilities */
|
531 |
u_int8_t isr_erp; /* ERP element */
|
532 |
u_int8_t isr_bssid[IEEE80211_ADDR_LEN]; |
533 |
u_int8_t isr_nrates; |
534 |
u_int8_t isr_rates[IEEE80211_RATE_MAXSIZE]; |
535 |
u_int8_t isr_ssid_len; /* SSID length */
|
536 |
u_int8_t isr_ie_len; /* IE length */
|
537 |
u_int8_t isr_pad[5];
|
538 |
/* variable length SSID followed by IE data */
|
539 |
}; |
540 |
|
541 |
#if defined(__NetBSD__) || defined(__minix)
|
542 |
/* nwid is pointed at by ifr.ifr_data */
|
543 |
struct ieee80211_nwid {
|
544 |
u_int8_t i_len; |
545 |
u_int8_t i_nwid[IEEE80211_NWID_LEN]; |
546 |
}; |
547 |
|
548 |
#define SIOCS80211NWID _IOWR('i', 230, struct ifreq) |
549 |
#define SIOCG80211NWID _IOWR('i', 231, struct ifreq) |
550 |
|
551 |
/* the first member must be matched with struct ifreq */
|
552 |
struct ieee80211_nwkey {
|
553 |
char i_name[IFNAMSIZ]; /* if_name, e.g. "wi0" */ |
554 |
int i_wepon; /* wep enabled flag */ |
555 |
int i_defkid; /* default encrypt key id */ |
556 |
struct {
|
557 |
int i_keylen;
|
558 |
u_int8_t *i_keydat; |
559 |
} i_key[IEEE80211_WEP_NKID]; |
560 |
}; |
561 |
#define SIOCS80211NWKEY _IOW('i', 232, struct ieee80211_nwkey) |
562 |
#define SIOCG80211NWKEY _IOWR('i', 233, struct ieee80211_nwkey) |
563 |
/* i_wepon */
|
564 |
#define IEEE80211_NWKEY_OPEN 0 /* No privacy */ |
565 |
#define IEEE80211_NWKEY_WEP 1 /* WEP enabled */ |
566 |
#define IEEE80211_NWKEY_EAP 2 /* EAP enabled */ |
567 |
#define IEEE80211_NWKEY_PERSIST 0x100 /* designate persist keyset */ |
568 |
|
569 |
/* power management parameters */
|
570 |
struct ieee80211_power {
|
571 |
char i_name[IFNAMSIZ]; /* if_name, e.g. "wi0" */ |
572 |
int i_enabled; /* 1 == on, 0 == off */ |
573 |
int i_maxsleep; /* max sleep in ms */ |
574 |
}; |
575 |
#define SIOCS80211POWER _IOW('i', 234, struct ieee80211_power) |
576 |
#define SIOCG80211POWER _IOWR('i', 235, struct ieee80211_power) |
577 |
|
578 |
struct ieee80211_auth {
|
579 |
char i_name[IFNAMSIZ]; /* if_name, e.g. "wi0" */ |
580 |
int i_authtype;
|
581 |
}; |
582 |
|
583 |
#define IEEE80211_AUTH_NONE 0 |
584 |
#define IEEE80211_AUTH_OPEN 1 |
585 |
#define IEEE80211_AUTH_SHARED 2 |
586 |
|
587 |
#define SIOCS80211AUTH _IOW('i', 236, struct ieee80211_auth) |
588 |
#define SIOCG80211AUTH _IOWR('i', 237, struct ieee80211_auth) |
589 |
|
590 |
struct ieee80211chanreq {
|
591 |
char i_name[IFNAMSIZ]; /* if_name, e.g. "wi0" */ |
592 |
u_int16_t i_channel; |
593 |
}; |
594 |
|
595 |
#ifndef IEEE80211_CHAN_ANY
|
596 |
#define IEEE80211_CHAN_ANY 0xffff |
597 |
#endif
|
598 |
|
599 |
#define SIOCS80211CHANNEL _IOW('i', 238, struct ieee80211chanreq) |
600 |
#define SIOCG80211CHANNEL _IOWR('i', 239, struct ieee80211chanreq) |
601 |
|
602 |
struct ieee80211_bssid {
|
603 |
char i_name[IFNAMSIZ]; /* if_name, e.g. "wi0" */ |
604 |
u_int8_t i_bssid[IEEE80211_ADDR_LEN]; |
605 |
}; |
606 |
|
607 |
#define SIOCS80211BSSID _IOW('i', 240, struct ieee80211_bssid) |
608 |
#define SIOCG80211BSSID _IOWR('i', 241, struct ieee80211_bssid) |
609 |
|
610 |
#endif /* defined(__NetBSD__) || defined(__minix) */ |
611 |
|
612 |
#endif /* !_NET80211_IEEE80211_IOCTL_H_ */ |