1 /* $NetBSD: ieee80211_ioctl.h,v 1.7 2004/04/30 22:51:04 dyoung Exp $ */ 2 /*- 3 * Copyright (c) 2001 Atsushi Onoe 4 * Copyright (c) 2002, 2003 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.5 2004/03/30 22:57:57 sam Exp $ 34 */ 35 #ifndef _NET80211_IEEE80211_IOCTL_H_ 36 #define _NET80211_IEEE80211_IOCTL_H_ 37 38 /* 39 * IEEE 802.11 ioctls. 40 */ 41 42 struct ieee80211_stats { 43 u_int32_t is_rx_badversion; /* rx frame with bad version */ 44 u_int32_t is_rx_tooshort; /* rx frame too short */ 45 u_int32_t is_rx_wrongbss; /* rx from wrong bssid */ 46 u_int32_t is_rx_dup; /* rx discard 'cuz dup */ 47 u_int32_t is_rx_wrongdir; /* rx w/ wrong direction */ 48 u_int32_t is_rx_mcastecho; /* rx discard 'cuz mcast echo */ 49 u_int32_t is_rx_notassoc; /* rx discard 'cuz sta !assoc */ 50 u_int32_t is_rx_nowep; /* rx w/ wep but wep !config */ 51 u_int32_t is_rx_wepfail; /* rx wep processing failed */ 52 u_int32_t is_rx_decap; /* rx decapsulation failed */ 53 u_int32_t is_rx_mgtdiscard; /* rx discard mgt frames */ 54 u_int32_t is_rx_ctl; /* rx discard ctrl frames */ 55 u_int32_t is_rx_rstoobig; /* rx rate set truncated */ 56 u_int32_t is_rx_elem_missing; /* rx required element missing*/ 57 u_int32_t is_rx_elem_toobig; /* rx element too big */ 58 u_int32_t is_rx_elem_toosmall; /* rx element too small */ 59 u_int32_t is_rx_elem_unknown; /* rx element unknown */ 60 u_int32_t is_rx_badchan; /* rx frame w/ invalid chan */ 61 u_int32_t is_rx_chanmismatch; /* rx frame chan mismatch */ 62 u_int32_t is_rx_nodealloc; /* rx frame dropped */ 63 u_int32_t is_rx_ssidmismatch; /* rx frame ssid mismatch */ 64 u_int32_t is_rx_auth_unsupported; /* rx w/ unsupported auth alg */ 65 u_int32_t is_rx_auth_fail; /* rx sta auth failure */ 66 u_int32_t is_rx_assoc_bss; /* rx assoc from wrong bssid */ 67 u_int32_t is_rx_assoc_notauth; /* rx assoc w/o auth */ 68 u_int32_t is_rx_assoc_capmismatch;/* rx assoc w/ cap mismatch */ 69 u_int32_t is_rx_assoc_norate; /* rx assoc w/ no rate match */ 70 u_int32_t is_rx_deauth; /* rx deauthentication */ 71 u_int32_t is_rx_disassoc; /* rx disassociation */ 72 u_int32_t is_rx_badsubtype; /* rx frame w/ unknown subtype*/ 73 u_int32_t is_rx_nombuf; /* rx failed for lack of mbuf */ 74 u_int32_t is_rx_decryptcrc; /* rx decrypt failed on crc */ 75 u_int32_t is_rx_ahdemo_mgt; /* rx discard ahdemo mgt frame*/ 76 u_int32_t is_rx_bad_auth; /* rx bad auth request */ 77 u_int32_t is_tx_nombuf; /* tx failed for lack of mbuf */ 78 u_int32_t is_tx_nonode; /* tx failed for no node */ 79 u_int32_t is_tx_unknownmgt; /* tx of unknown mgt frame */ 80 u_int32_t is_scan_active; /* active scans started */ 81 u_int32_t is_scan_passive; /* passive scans started */ 82 u_int32_t is_node_timeout; /* nodes timed out inactivity */ 83 u_int32_t is_crypto_nomem; /* no memory for crypto ctx */ 84 }; 85 86 #ifdef __FreeBSD__ 87 /* 88 * FreeBSD-style ioctls. 89 */ 90 /* the first member must be matched with struct ifreq */ 91 struct ieee80211req { 92 char i_name[IFNAMSIZ]; /* if_name, e.g. "wi0" */ 93 u_int16_t i_type; /* req type */ 94 int16_t i_val; /* Index or simple value */ 95 int16_t i_len; /* Index or simple value */ 96 void *i_data; /* Extra data */ 97 }; 98 #define SIOCS80211 _IOW('i', 234, struct ieee80211req) 99 #define SIOCG80211 _IOWR('i', 235, struct ieee80211req) 100 101 #define IEEE80211_IOC_SSID 1 102 #define IEEE80211_IOC_NUMSSIDS 2 103 #define IEEE80211_IOC_WEP 3 104 #define IEEE80211_WEP_NOSUP -1 105 #define IEEE80211_WEP_OFF 0 106 #define IEEE80211_WEP_ON 1 107 #define IEEE80211_WEP_MIXED 2 108 #define IEEE80211_IOC_WEPKEY 4 109 #define IEEE80211_IOC_NUMWEPKEYS 5 110 #define IEEE80211_IOC_WEPTXKEY 6 111 #define IEEE80211_IOC_AUTHMODE 7 112 #define IEEE80211_IOC_STATIONNAME 8 113 #define IEEE80211_IOC_CHANNEL 9 114 #define IEEE80211_IOC_POWERSAVE 10 115 #define IEEE80211_POWERSAVE_NOSUP -1 116 #define IEEE80211_POWERSAVE_OFF 0 117 #define IEEE80211_POWERSAVE_CAM 1 118 #define IEEE80211_POWERSAVE_PSP 2 119 #define IEEE80211_POWERSAVE_PSP_CAM 3 120 #define IEEE80211_POWERSAVE_ON IEEE80211_POWERSAVE_CAM 121 #define IEEE80211_IOC_POWERSAVESLEEP 11 122 #define IEEE80211_IOC_RTSTHRESHOLD 12 123 #define IEEE80211_IOC_PROTMODE 13 124 #define IEEE80211_PROTMODE_OFF 0 125 #define IEEE80211_PROTMODE_CTS 1 126 #define IEEE80211_PROTMODE_RTSCTS 2 127 #define IEEE80211_IOC_TXPOWER 14 128 129 #ifndef IEEE80211_CHAN_ANY 130 #define IEEE80211_CHAN_ANY 0xffff /* token for ``any channel'' */ 131 #endif 132 133 #define SIOCG80211STATS _IOWR('i', 236, struct ifreq) 134 #endif /* __FreeBSD__ */ 135 136 #ifdef __NetBSD__ 137 /* nwid is pointed at by ifr.ifr_data */ 138 struct ieee80211_nwid { 139 u_int8_t i_len; 140 u_int8_t i_nwid[IEEE80211_NWID_LEN]; 141 }; 142 143 #define SIOCS80211NWID _IOWR('i', 230, struct ifreq) 144 #define SIOCG80211NWID _IOWR('i', 231, struct ifreq) 145 146 /* the first member must be matched with struct ifreq */ 147 struct ieee80211_nwkey { 148 char i_name[IFNAMSIZ]; /* if_name, e.g. "wi0" */ 149 int i_wepon; /* wep enabled flag */ 150 int i_defkid; /* default encrypt key id */ 151 struct { 152 int i_keylen; 153 u_int8_t *i_keydat; 154 } i_key[IEEE80211_WEP_NKID]; 155 }; 156 #define SIOCS80211NWKEY _IOW('i', 232, struct ieee80211_nwkey) 157 #define SIOCG80211NWKEY _IOWR('i', 233, struct ieee80211_nwkey) 158 /* i_wepon */ 159 #define IEEE80211_NWKEY_OPEN 0 /* No privacy */ 160 #define IEEE80211_NWKEY_WEP 1 /* WEP enabled */ 161 #define IEEE80211_NWKEY_EAP 2 /* EAP enabled */ 162 #define IEEE80211_NWKEY_PERSIST 0x100 /* designate persist keyset */ 163 164 /* power management parameters */ 165 struct ieee80211_power { 166 char i_name[IFNAMSIZ]; /* if_name, e.g. "wi0" */ 167 int i_enabled; /* 1 == on, 0 == off */ 168 int i_maxsleep; /* max sleep in ms */ 169 }; 170 #define SIOCS80211POWER _IOW('i', 234, struct ieee80211_power) 171 #define SIOCG80211POWER _IOWR('i', 235, struct ieee80211_power) 172 173 struct ieee80211_auth { 174 char i_name[IFNAMSIZ]; /* if_name, e.g. "wi0" */ 175 int i_authtype; 176 }; 177 178 #define IEEE80211_AUTH_NONE 0 179 #define IEEE80211_AUTH_OPEN 1 180 #define IEEE80211_AUTH_SHARED 2 181 182 #define SIOCS80211AUTH _IOW('i', 236, struct ieee80211_auth) 183 #define SIOCG80211AUTH _IOWR('i', 237, struct ieee80211_auth) 184 185 struct ieee80211chanreq { 186 char i_name[IFNAMSIZ]; /* if_name, e.g. "wi0" */ 187 u_int16_t i_channel; 188 }; 189 190 #ifndef IEEE80211_CHAN_ANY 191 #define IEEE80211_CHAN_ANY 0xffff 192 #endif 193 194 #define SIOCS80211CHANNEL _IOW('i', 238, struct ieee80211chanreq) 195 #define SIOCG80211CHANNEL _IOWR('i', 239, struct ieee80211chanreq) 196 197 struct ieee80211_bssid { 198 char i_name[IFNAMSIZ]; /* if_name, e.g. "wi0" */ 199 u_int8_t i_bssid[IEEE80211_ADDR_LEN]; 200 }; 201 202 #define SIOCS80211BSSID _IOW('i', 240, struct ieee80211_bssid) 203 #define SIOCG80211BSSID _IOWR('i', 241, struct ieee80211_bssid) 204 205 #define SIOCG80211STATS _IOWR('i', 242, struct ifreq) 206 #endif 207 208 #endif /* _NET80211_IEEE80211_IOCTL_H_ */ 209