hostapd: Update vendor branch to 0.6.10
[dragonfly.git] / contrib / hostapd / src / drivers / driver_ralink.h
blobddf44de232a3bbdde7701bda1f7732c3a164f79a
1 /*
2 * WPA Supplicant - driver_ralink exported functions
3 * Copyright (c) 2003-2005, Jouni Malinen <j@w1.fi>
4 * Copyright (c) 2007, Snowpin Lee <snowpin_lee@ralinktech.com.tw>
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License version 2 as
8 * published by the Free Software Foundation.
10 * Alternatively, this software may be distributed under the terms of BSD
11 * license.
13 * See README and COPYING for more details.
16 // Ralink defined OIDs
17 #if WIRELESS_EXT <= 11
18 #ifndef SIOCDEVPRIVATE
19 #define SIOCDEVPRIVATE 0x8BE0
20 #endif
21 #define SIOCIWFIRSTPRIV SIOCDEVPRIVATE
22 #endif
24 #define RT_PRIV_IOCTL (SIOCIWFIRSTPRIV + 0x0E)
25 #define RTPRIV_IOCTL_SET (SIOCIWFIRSTPRIV + 0x02)
27 // IEEE 802.11 OIDs & Ralink defined OIDs ******
29 // (RaConfig Set/QueryInform) ==>
30 #define OID_GET_SET_TOGGLE 0x8000
32 #define OID_802_11_ADD_WEP 0x0112
33 #define OID_802_11_REMOVE_WEP 0x0113
34 #define OID_802_11_DISASSOCIATE 0x0114
35 #define OID_802_11_PRIVACY_FILTER 0x0118
36 #define OID_802_11_ASSOCIATION_INFORMATION 0x011E
37 #define OID_802_11_BSSID_LIST_SCAN 0x0508
38 #define OID_802_11_SSID 0x0509
39 #define OID_802_11_BSSID 0x050A
40 #define OID_802_11_WEP_STATUS 0x0510
41 #define OID_802_11_AUTHENTICATION_MODE 0x0511
42 #define OID_802_11_INFRASTRUCTURE_MODE 0x0512
43 #define OID_802_11_TX_POWER_LEVEL 0x0517
44 #define OID_802_11_REMOVE_KEY 0x0519
45 #define OID_802_11_ADD_KEY 0x0520
46 #define OID_802_11_DEAUTHENTICATION 0x0526
47 #define OID_802_11_DROP_UNENCRYPTED 0x0527
48 #define OID_802_11_BSSID_LIST 0x0609
49 #define OID_802_3_CURRENT_ADDRESS 0x060A
50 #define OID_SET_COUNTERMEASURES 0x0616
51 #define OID_802_11_SET_IEEE8021X 0x0617 // For IEEE8021x mode
52 #define OID_802_11_SET_IEEE8021X_REQUIRE_KEY 0x0618 // For DynamicWEP in IEEE802.1x mode
53 #define OID_802_11_PMKID 0x0620
54 #define RT_OID_WPA_SUPPLICANT_SUPPORT 0x0621 // for trigger driver enable/disable wpa_supplicant support
55 #define RT_OID_WE_VERSION_COMPILED 0x0622
56 #define RT_OID_NEW_DRIVER 0x0623
58 #define PACKED __attribute__ ((packed))
60 //wpa_supplicant event flags
61 #define RT_ASSOC_EVENT_FLAG 0x0101
62 #define RT_DISASSOC_EVENT_FLAG 0x0102
63 #define RT_REQIE_EVENT_FLAG 0x0103
64 #define RT_RESPIE_EVENT_FLAG 0x0104
65 #define RT_ASSOCINFO_EVENT_FLAG 0x0105
66 #define RT_PMKIDCAND_FLAG 0x0106
67 #define RT_INTERFACE_DOWN 0x0107
68 #define RT_REPORT_AP_INFO 0x0108
71 // IEEE 802.11 Structures and definitions
73 // new types for Media Specific Indications
75 #ifndef ULONG
76 #define CHAR char
77 #define INT int
78 #define SHORT int
79 #define UINT u32
80 #undef ULONG
81 //#define ULONG u32
82 #define ULONG unsigned long /* 32-bit in 32-bit CPU or 64-bit in 64-bit CPU */
83 #define USHORT unsigned short
84 #define UCHAR unsigned char
86 #define uint32 u32
87 #define uint8 u8
90 #define BOOLEAN u8
91 //#define LARGE_INTEGER s64
92 #define VOID void
93 #define LONG long
94 #define LONGLONG s64
95 #define ULONGLONG u64
96 typedef VOID *PVOID;
97 typedef CHAR *PCHAR;
98 typedef UCHAR *PUCHAR;
99 typedef USHORT *PUSHORT;
100 typedef LONG *PLONG;
101 typedef ULONG *PULONG;
103 typedef union _LARGE_INTEGER {
104 struct {
105 ULONG LowPart;
106 LONG HighPart;
107 }vv;
108 struct {
109 ULONG LowPart;
110 LONG HighPart;
111 } u;
112 s64 QuadPart;
113 } LARGE_INTEGER;
115 #endif
117 #define NDIS_802_11_LENGTH_SSID 32
118 #define NDIS_802_11_LENGTH_RATES 8
119 #define NDIS_802_11_LENGTH_RATES_EX 16
120 #define MAX_LEN_OF_SSID 32
121 #define MAC_ADDR_LEN 6
123 typedef UCHAR NDIS_802_11_MAC_ADDRESS[6];
125 // mask for authentication/integrity fields
126 #define NDIS_802_11_AUTH_REQUEST_AUTH_FIELDS 0x0f
128 #define NDIS_802_11_AUTH_REQUEST_REAUTH 0x01
129 #define NDIS_802_11_AUTH_REQUEST_KEYUPDATE 0x02
130 #define NDIS_802_11_AUTH_REQUEST_PAIRWISE_ERROR 0x06
131 #define NDIS_802_11_AUTH_REQUEST_GROUP_ERROR 0x0E
133 // Added new types for OFDM 5G and 2.4G
134 typedef enum _NDIS_802_11_NETWORK_TYPE
136 Ndis802_11FH,
137 Ndis802_11DS,
138 Ndis802_11OFDM5,
139 Ndis802_11OFDM24,
140 Ndis802_11Automode,
141 Ndis802_11NetworkTypeMax // not a real type, defined as an upper bound
142 } NDIS_802_11_NETWORK_TYPE, *PNDIS_802_11_NETWORK_TYPE;
145 // Received Signal Strength Indication
147 typedef LONG NDIS_802_11_RSSI; // in dBm
149 typedef struct _NDIS_802_11_CONFIGURATION_FH
151 ULONG Length; // Length of structure
152 ULONG HopPattern; // As defined by 802.11, MSB set
153 ULONG HopSet; // to one if non-802.11
154 ULONG DwellTime; // units are Kusec
155 } NDIS_802_11_CONFIGURATION_FH, *PNDIS_802_11_CONFIGURATION_FH;
157 typedef struct _NDIS_802_11_CONFIGURATION
159 ULONG Length; // Length of structure
160 ULONG BeaconPeriod; // units are Kusec
161 ULONG ATIMWindow; // units are Kusec
162 ULONG DSConfig; // Frequency, units are kHz
163 NDIS_802_11_CONFIGURATION_FH FHConfig;
164 } NDIS_802_11_CONFIGURATION, *PNDIS_802_11_CONFIGURATION;
166 typedef ULONG NDIS_802_11_KEY_INDEX;
167 typedef ULONGLONG NDIS_802_11_KEY_RSC;
169 // Key mapping keys require a BSSID
170 typedef struct _NDIS_802_11_KEY
172 UINT Length; // Length of this structure
173 UINT KeyIndex;
174 UINT KeyLength; // length of key in bytes
175 NDIS_802_11_MAC_ADDRESS BSSID;
176 NDIS_802_11_KEY_RSC KeyRSC;
177 UCHAR KeyMaterial[1]; // variable length depending on above field
178 } NDIS_802_11_KEY, *PNDIS_802_11_KEY;
180 typedef struct _NDIS_802_11_REMOVE_KEY
182 UINT Length; // Length of this structure
183 UINT KeyIndex;
184 NDIS_802_11_MAC_ADDRESS BSSID;
185 } NDIS_802_11_REMOVE_KEY, *PNDIS_802_11_REMOVE_KEY;
187 typedef struct PACKED _NDIS_802_11_WEP
189 UINT Length; // Length of this structure
190 UINT KeyIndex; // 0 is the per-client key, 1-N are the
191 // global keys
192 UINT KeyLength; // length of key in bytes
193 UCHAR KeyMaterial[1];// variable length depending on above field
194 } NDIS_802_11_WEP, *PNDIS_802_11_WEP;
197 typedef enum _NDIS_802_11_NETWORK_INFRASTRUCTURE
199 Ndis802_11IBSS,
200 Ndis802_11Infrastructure,
201 Ndis802_11AutoUnknown,
202 Ndis802_11InfrastructureMax // Not a real value, defined as upper bound
203 } NDIS_802_11_NETWORK_INFRASTRUCTURE, *PNDIS_802_11_NETWORK_INFRASTRUCTURE;
205 // PMKID Structures
206 typedef UCHAR NDIS_802_11_PMKID_VALUE[16];
208 typedef struct _BSSID_INFO
210 NDIS_802_11_MAC_ADDRESS BSSID;
211 NDIS_802_11_PMKID_VALUE PMKID;
212 } BSSID_INFO, *PBSSID_INFO;
214 typedef struct _NDIS_802_11_PMKID
216 ULONG Length;
217 ULONG BSSIDInfoCount;
218 BSSID_INFO BSSIDInfo[1];
219 } NDIS_802_11_PMKID, *PNDIS_802_11_PMKID;
221 //Added new types for PMKID Candidate lists.
222 typedef struct _PMKID_CANDIDATE {
223 NDIS_802_11_MAC_ADDRESS BSSID;
224 ULONG Flags;
225 } PMKID_CANDIDATE, *PPMKID_CANDIDATE;
227 typedef struct _NDIS_802_11_PMKID_CANDIDATE_LIST
229 ULONG Version; // Version of the structure
230 ULONG NumCandidates; // No. of pmkid candidates
231 PMKID_CANDIDATE CandidateList[1];
232 } NDIS_802_11_PMKID_CANDIDATE_LIST, *PNDIS_802_11_PMKID_CANDIDATE_LIST;
234 //Flags for PMKID Candidate list structure
235 #define NDIS_802_11_PMKID_CANDIDATE_PREAUTH_ENABLED 0x01
237 // Add new authentication modes
238 typedef enum _NDIS_802_11_AUTHENTICATION_MODE
240 Ndis802_11AuthModeOpen,
241 Ndis802_11AuthModeShared,
242 Ndis802_11AuthModeAutoSwitch,
243 Ndis802_11AuthModeWPA,
244 Ndis802_11AuthModeWPAPSK,
245 Ndis802_11AuthModeWPANone,
246 Ndis802_11AuthModeWPA2,
247 Ndis802_11AuthModeWPA2PSK,
248 Ndis802_11AuthModeMax // Not a real mode, defined as upper bound
249 } NDIS_802_11_AUTHENTICATION_MODE, *PNDIS_802_11_AUTHENTICATION_MODE;
251 typedef UCHAR NDIS_802_11_RATES[NDIS_802_11_LENGTH_RATES]; // Set of 8 data rates
252 typedef UCHAR NDIS_802_11_RATES_EX[NDIS_802_11_LENGTH_RATES_EX]; // Set of 16 data rates
254 typedef struct PACKED _NDIS_802_11_SSID
256 INT SsidLength; // length of SSID field below, in bytes;
257 // this can be zero.
258 UCHAR Ssid[NDIS_802_11_LENGTH_SSID]; // SSID information field
259 } NDIS_802_11_SSID, *PNDIS_802_11_SSID;
262 typedef struct PACKED _NDIS_WLAN_BSSID
264 ULONG Length; // Length of this structure
265 NDIS_802_11_MAC_ADDRESS MacAddress; // BSSID
266 UCHAR Reserved[2];
267 NDIS_802_11_SSID Ssid; // SSID
268 ULONG Privacy; // WEP encryption requirement
269 NDIS_802_11_RSSI Rssi; // receive signal
270 // strength in dBm
271 NDIS_802_11_NETWORK_TYPE NetworkTypeInUse;
272 NDIS_802_11_CONFIGURATION Configuration;
273 NDIS_802_11_NETWORK_INFRASTRUCTURE InfrastructureMode;
274 NDIS_802_11_RATES SupportedRates;
275 } NDIS_WLAN_BSSID, *PNDIS_WLAN_BSSID;
277 typedef struct PACKED _NDIS_802_11_BSSID_LIST
279 UINT NumberOfItems; // in list below, at least 1
280 NDIS_WLAN_BSSID Bssid[1];
281 } NDIS_802_11_BSSID_LIST, *PNDIS_802_11_BSSID_LIST;
283 // Added Capabilities, IELength and IEs for each BSSID
284 typedef struct PACKED _NDIS_WLAN_BSSID_EX
286 ULONG Length; // Length of this structure
287 NDIS_802_11_MAC_ADDRESS MacAddress; // BSSID
288 UCHAR Reserved[2];
289 NDIS_802_11_SSID Ssid; // SSID
290 UINT Privacy; // WEP encryption requirement
291 NDIS_802_11_RSSI Rssi; // receive signal
292 // strength in dBm
293 NDIS_802_11_NETWORK_TYPE NetworkTypeInUse;
294 NDIS_802_11_CONFIGURATION Configuration;
295 NDIS_802_11_NETWORK_INFRASTRUCTURE InfrastructureMode;
296 NDIS_802_11_RATES_EX SupportedRates;
297 ULONG IELength;
298 UCHAR IEs[1];
299 } NDIS_WLAN_BSSID_EX, *PNDIS_WLAN_BSSID_EX;
301 typedef struct PACKED _NDIS_802_11_BSSID_LIST_EX
303 UINT NumberOfItems; // in list below, at least 1
304 NDIS_WLAN_BSSID_EX Bssid[1];
305 } NDIS_802_11_BSSID_LIST_EX, *PNDIS_802_11_BSSID_LIST_EX;
307 typedef struct PACKED _NDIS_802_11_FIXED_IEs
309 UCHAR Timestamp[8];
310 USHORT BeaconInterval;
311 USHORT Capabilities;
312 } NDIS_802_11_FIXED_IEs, *PNDIS_802_11_FIXED_IEs;
314 // Added new encryption types
315 // Also aliased typedef to new name
316 typedef enum _NDIS_802_11_WEP_STATUS
318 Ndis802_11WEPEnabled,
319 Ndis802_11Encryption1Enabled = Ndis802_11WEPEnabled,
320 Ndis802_11WEPDisabled,
321 Ndis802_11EncryptionDisabled = Ndis802_11WEPDisabled,
322 Ndis802_11WEPKeyAbsent,
323 Ndis802_11Encryption1KeyAbsent = Ndis802_11WEPKeyAbsent,
324 Ndis802_11WEPNotSupported,
325 Ndis802_11EncryptionNotSupported = Ndis802_11WEPNotSupported,
326 Ndis802_11Encryption2Enabled,
327 Ndis802_11Encryption2KeyAbsent,
328 Ndis802_11Encryption3Enabled,
329 Ndis802_11Encryption3KeyAbsent
330 } NDIS_802_11_WEP_STATUS, *PNDIS_802_11_WEP_STATUS,
331 NDIS_802_11_ENCRYPTION_STATUS, *PNDIS_802_11_ENCRYPTION_STATUS;
333 typedef enum _NDIS_802_11_RELOAD_DEFAULTS
335 Ndis802_11ReloadWEPKeys
336 } NDIS_802_11_RELOAD_DEFAULTS, *PNDIS_802_11_RELOAD_DEFAULTS;
338 #define NDIS_802_11_AI_REQFI_CAPABILITIES 1
339 #define NDIS_802_11_AI_REQFI_LISTENINTERVAL 2
340 #define NDIS_802_11_AI_REQFI_CURRENTAPADDRESS 4
342 #define NDIS_802_11_AI_RESFI_CAPABILITIES 1
343 #define NDIS_802_11_AI_RESFI_STATUSCODE 2
344 #define NDIS_802_11_AI_RESFI_ASSOCIATIONID 4
346 typedef struct _NDIS_802_11_AI_REQFI
348 USHORT Capabilities;
349 USHORT ListenInterval;
350 NDIS_802_11_MAC_ADDRESS CurrentAPAddress;
351 } NDIS_802_11_AI_REQFI, *PNDIS_802_11_AI_REQFI;
353 typedef struct _NDIS_802_11_AI_RESFI
355 USHORT Capabilities;
356 USHORT StatusCode;
357 USHORT AssociationId;
358 } NDIS_802_11_AI_RESFI, *PNDIS_802_11_AI_RESFI;
360 typedef struct _NDIS_802_11_ASSOCIATION_INFORMATION
362 ULONG Length;
363 USHORT AvailableRequestFixedIEs;
364 NDIS_802_11_AI_REQFI RequestFixedIEs;
365 ULONG RequestIELength;
366 ULONG OffsetRequestIEs;
367 USHORT AvailableResponseFixedIEs;
368 NDIS_802_11_AI_RESFI ResponseFixedIEs;
369 ULONG ResponseIELength;
370 ULONG OffsetResponseIEs;
371 } NDIS_802_11_ASSOCIATION_INFORMATION, *PNDIS_802_11_ASSOCIATION_INFORMATION;
373 struct ndis_pmkid_entry {
374 struct ndis_pmkid_entry *next;
375 u8 bssid[ETH_ALEN];
376 u8 pmkid[16];
379 typedef struct _MLME_DEAUTH_REQ_STRUCT {
380 UCHAR Addr[MAC_ADDR_LEN];
381 USHORT Reason;
382 } MLME_DEAUTH_REQ_STRUCT, *PMLME_DEAUTH_REQ_STRUCT;