Project

General

Profile

Statistics
| Revision:

root / lab4 / .minix-src / include / net80211 / ieee80211_ioctl.h @ 13

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_ */