nl80211: fix possible fd leak in nl80211_hostapd_hup()
[project/iwinfo.git] / api / madwifi.h
1 /*
2  * Header bits derived from MadWifi source:
3  *   Copyright (c) 2001 Atsushi Onoe
4  *   Copyright (c) 2002-2005 Sam Leffler, Errno Consulting
5  *   All rights reserved.
6  *
7  * Distributed under the terms of the GPLv2 license.
8  *
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.
19  */
20
21 #ifndef _MADWIFI_H
22 #define _MADWIFI_H
23
24 /* ieee80211.h */
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
29
30
31 /* ieee80211_crypto.h */
32 #define IEEE80211_KEYBUF_SIZE           16
33 #define IEEE80211_MICBUF_SIZE           16
34 #define IEEE80211_TID_SIZE                      17
35
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)
43
44
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
50
51 #define IEEE80211_IOCTL_GETKEY          (SIOCDEVPRIVATE+3)
52 #define IEEE80211_IOCTL_STA_STATS       (SIOCDEVPRIVATE+5)
53 #define IEEE80211_IOCTL_STA_INFO        (SIOCDEVPRIVATE+6)
54
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)
59
60 #define SIOC80211IFCREATE                       (SIOCDEVPRIVATE+7)
61 #define SIOC80211IFDESTROY                      (SIOCDEVPRIVATE+8)
62
63 #define IEEE80211_CLONE_BSSID   0x0001  /* allocate unique mac/bssid */
64 #define IEEE80211_NO_STABEACONS 0x0002  /* Do not setup the station beacon timers */
65
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 */
70 };
71
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 */
79 };
80
81 enum {
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) */
87 };
88
89 /*
90  * Authentication mode.
91  */
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 */
100 };
101
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 % */
111 };
112
113 struct ieee80211req_key {
114         u_int8_t ik_type;               /* key/cipher type */
115         u_int8_t ik_pad;
116         u_int16_t ik_keyix;     /* key index */
117         u_int8_t ik_keylen;             /* key length in bytes */
118         u_int8_t ik_flags;
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];
123 };
124
125 struct ieee80211req_chanlist {
126         u_int8_t ic_channels[IEEE80211_CHAN_BYTES];
127 };
128
129 struct ieee80211req_chaninfo {
130         u_int ic_nchans;
131         struct ieee80211_channel ic_chans[IEEE80211_CHAN_MAX];
132 };
133
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 */
140         u_int8_t isi_rssi;
141         int8_t isi_noise;
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 */
158 };
159
160 #endif