• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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>
5  *
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.
9  *
10  * Alternatively, this software may be distributed under the terms of BSD
11  * license.
12  *
13  * See README and COPYING for more details.
14  */
15 
16 // Ralink defined OIDs
17 #if WIRELESS_EXT <= 11
18 #ifndef SIOCDEVPRIVATE
19 #define SIOCDEVPRIVATE                              0x8BE0
20 #endif
21 #define SIOCIWFIRSTPRIV								SIOCDEVPRIVATE
22 #endif
23 
24 #define RT_PRIV_IOCTL								(SIOCIWFIRSTPRIV + 0x0E)
25 #define RTPRIV_IOCTL_SET							(SIOCIWFIRSTPRIV + 0x02)
26 
27 // IEEE 802.11 OIDs  &  Ralink defined OIDs  ******
28 
29 // (RaConfig Set/QueryInform) ==>
30 #define OID_GET_SET_TOGGLE							0x8000
31 
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
57 #define RT_OID_WPS_PROBE_REQ_IE						0x0625
58 
59 #define PACKED  __attribute__ ((packed))
60 
61 //wpa_supplicant event flags
62 #define	RT_ASSOC_EVENT_FLAG                         0x0101
63 #define	RT_DISASSOC_EVENT_FLAG                      0x0102
64 #define	RT_REQIE_EVENT_FLAG                         0x0103
65 #define	RT_RESPIE_EVENT_FLAG                        0x0104
66 #define	RT_ASSOCINFO_EVENT_FLAG                     0x0105
67 #define RT_PMKIDCAND_FLAG                           0x0106
68 #define RT_INTERFACE_DOWN                           0x0107
69 #define RT_INTERFACE_UP                           	0x0108
70 
71 //
72 // IEEE 802.11 Structures and definitions
73 //
74 // new types for Media Specific Indications
75 
76 #ifndef ULONG
77 #define CHAR            char
78 #define INT             int
79 #define SHORT           int
80 #define UINT            u32
81 #undef  ULONG
82 //#define ULONG           u32
83 #define ULONG           unsigned long /* 32-bit in 32-bit CPU or 64-bit in 64-bit CPU */
84 #define USHORT          unsigned short
85 #define UCHAR           unsigned char
86 
87 #define uint32		u32
88 #define uint8		u8
89 
90 
91 #define BOOLEAN         u8
92 //#define LARGE_INTEGER s64
93 #define VOID            void
94 #define LONG            long
95 #define LONGLONG        s64
96 #define ULONGLONG       u64
97 typedef VOID            *PVOID;
98 typedef CHAR            *PCHAR;
99 typedef UCHAR           *PUCHAR;
100 typedef USHORT          *PUSHORT;
101 typedef LONG            *PLONG;
102 typedef ULONG           *PULONG;
103 
104 typedef union _LARGE_INTEGER {
105     struct {
106         ULONG LowPart;
107         LONG HighPart;
108     }vv;
109     struct {
110         ULONG LowPart;
111         LONG HighPart;
112     } u;
113     s64 QuadPart;
114 } LARGE_INTEGER;
115 
116 #endif
117 
118 #define NDIS_802_11_LENGTH_SSID         32
119 #define NDIS_802_11_LENGTH_RATES        8
120 #define NDIS_802_11_LENGTH_RATES_EX     16
121 #define MAX_LEN_OF_SSID                 32
122 #define MAC_ADDR_LEN                    6
123 
124 typedef UCHAR   NDIS_802_11_MAC_ADDRESS[6];
125 
126 // mask for authentication/integrity fields
127 #define NDIS_802_11_AUTH_REQUEST_AUTH_FIELDS        0x0f
128 
129 #define NDIS_802_11_AUTH_REQUEST_REAUTH             0x01
130 #define NDIS_802_11_AUTH_REQUEST_KEYUPDATE          0x02
131 #define NDIS_802_11_AUTH_REQUEST_PAIRWISE_ERROR     0x06
132 #define NDIS_802_11_AUTH_REQUEST_GROUP_ERROR        0x0E
133 
134 // Added new types for OFDM 5G and 2.4G
135 typedef enum _NDIS_802_11_NETWORK_TYPE
136 {
137     Ndis802_11FH,
138     Ndis802_11DS,
139     Ndis802_11OFDM5,
140     Ndis802_11OFDM24,
141     Ndis802_11Automode,
142     Ndis802_11NetworkTypeMax    // not a real type, defined as an upper bound
143 } NDIS_802_11_NETWORK_TYPE, *PNDIS_802_11_NETWORK_TYPE;
144 
145 //
146 // Received Signal Strength Indication
147 //
148 typedef LONG    NDIS_802_11_RSSI;           // in dBm
149 
150 typedef struct _NDIS_802_11_CONFIGURATION_FH
151 {
152    ULONG           Length;            // Length of structure
153    ULONG           HopPattern;        // As defined by 802.11, MSB set
154    ULONG           HopSet;            // to one if non-802.11
155    ULONG           DwellTime;         // units are Kusec
156 } NDIS_802_11_CONFIGURATION_FH, *PNDIS_802_11_CONFIGURATION_FH;
157 
158 typedef struct _NDIS_802_11_CONFIGURATION
159 {
160    ULONG                           Length;             // Length of structure
161    ULONG                           BeaconPeriod;       // units are Kusec
162    ULONG                           ATIMWindow;         // units are Kusec
163    ULONG                           DSConfig;           // Frequency, units are kHz
164    NDIS_802_11_CONFIGURATION_FH    FHConfig;
165 } NDIS_802_11_CONFIGURATION, *PNDIS_802_11_CONFIGURATION;
166 
167 typedef  ULONG  NDIS_802_11_KEY_INDEX;
168 typedef ULONGLONG   NDIS_802_11_KEY_RSC;
169 
170 // Key mapping keys require a BSSID
171 typedef struct _NDIS_802_11_KEY
172 {
173     UINT           Length;             // Length of this structure
174     UINT           KeyIndex;
175     UINT           KeyLength;          // length of key in bytes
176     NDIS_802_11_MAC_ADDRESS BSSID;
177     NDIS_802_11_KEY_RSC KeyRSC;
178     UCHAR           KeyMaterial[1];     // variable length depending on above field
179 } NDIS_802_11_KEY, *PNDIS_802_11_KEY;
180 
181 typedef struct _NDIS_802_11_REMOVE_KEY
182 {
183     UINT                   Length;        // Length of this structure
184     UINT                   KeyIndex;
185     NDIS_802_11_MAC_ADDRESS BSSID;
186 } NDIS_802_11_REMOVE_KEY, *PNDIS_802_11_REMOVE_KEY;
187 
188 typedef struct PACKED _NDIS_802_11_WEP
189 {
190    UINT     Length;        // Length of this structure
191    UINT           KeyIndex;           // 0 is the per-client key, 1-N are the
192                                         // global keys
193    UINT     KeyLength;     // length of key in bytes
194    UCHAR     KeyMaterial[1];// variable length depending on above field
195 } NDIS_802_11_WEP, *PNDIS_802_11_WEP;
196 
197 
198 typedef enum _NDIS_802_11_NETWORK_INFRASTRUCTURE
199 {
200    Ndis802_11IBSS,
201    Ndis802_11Infrastructure,
202    Ndis802_11AutoUnknown,
203    Ndis802_11InfrastructureMax     // Not a real value, defined as upper bound
204 } NDIS_802_11_NETWORK_INFRASTRUCTURE, *PNDIS_802_11_NETWORK_INFRASTRUCTURE;
205 
206 // PMKID Structures
207 typedef UCHAR   NDIS_802_11_PMKID_VALUE[16];
208 
209 typedef struct _BSSID_INFO
210 {
211 	NDIS_802_11_MAC_ADDRESS BSSID;
212 	NDIS_802_11_PMKID_VALUE PMKID;
213 } BSSID_INFO, *PBSSID_INFO;
214 
215 typedef struct _NDIS_802_11_PMKID
216 {
217 	ULONG Length;
218 	ULONG BSSIDInfoCount;
219 	BSSID_INFO BSSIDInfo[1];
220 } NDIS_802_11_PMKID, *PNDIS_802_11_PMKID;
221 
222 //Added new types for PMKID Candidate lists.
223 typedef struct _PMKID_CANDIDATE {
224 	NDIS_802_11_MAC_ADDRESS BSSID;
225 	ULONG Flags;
226 } PMKID_CANDIDATE, *PPMKID_CANDIDATE;
227 
228 typedef struct _NDIS_802_11_PMKID_CANDIDATE_LIST
229 {
230 	ULONG Version;       // Version of the structure
231 	ULONG NumCandidates; // No. of pmkid candidates
232 	PMKID_CANDIDATE CandidateList[1];
233 } NDIS_802_11_PMKID_CANDIDATE_LIST, *PNDIS_802_11_PMKID_CANDIDATE_LIST;
234 
235 //Flags for PMKID Candidate list structure
236 #define NDIS_802_11_PMKID_CANDIDATE_PREAUTH_ENABLED	0x01
237 
238 // Add new authentication modes
239 typedef enum _NDIS_802_11_AUTHENTICATION_MODE
240 {
241    Ndis802_11AuthModeOpen,
242    Ndis802_11AuthModeShared,
243    Ndis802_11AuthModeAutoSwitch,
244    Ndis802_11AuthModeWPA,
245    Ndis802_11AuthModeWPAPSK,
246    Ndis802_11AuthModeWPANone,
247    Ndis802_11AuthModeWPA2,
248    Ndis802_11AuthModeWPA2PSK,
249    Ndis802_11AuthModeMax           // Not a real mode, defined as upper bound
250 } NDIS_802_11_AUTHENTICATION_MODE, *PNDIS_802_11_AUTHENTICATION_MODE;
251 
252 typedef UCHAR  NDIS_802_11_RATES[NDIS_802_11_LENGTH_RATES];        // Set of 8 data rates
253 typedef UCHAR  NDIS_802_11_RATES_EX[NDIS_802_11_LENGTH_RATES_EX];  // Set of 16 data rates
254 
255 typedef struct PACKED _NDIS_802_11_SSID
256 {
257     INT   SsidLength;         // length of SSID field below, in bytes;
258                                 // this can be zero.
259     UCHAR   Ssid[NDIS_802_11_LENGTH_SSID];           // SSID information field
260 } NDIS_802_11_SSID, *PNDIS_802_11_SSID;
261 
262 
263 typedef struct PACKED _NDIS_WLAN_BSSID
264 {
265    ULONG                               Length;     // Length of this structure
266    NDIS_802_11_MAC_ADDRESS             MacAddress; // BSSID
267    UCHAR                               Reserved[2];
268    NDIS_802_11_SSID                    Ssid;       // SSID
269    ULONG                               Privacy;    // WEP encryption requirement
270     NDIS_802_11_RSSI                    Rssi;               // receive signal
271                                                             // strength in dBm
272    NDIS_802_11_NETWORK_TYPE            NetworkTypeInUse;
273    NDIS_802_11_CONFIGURATION           Configuration;
274    NDIS_802_11_NETWORK_INFRASTRUCTURE  InfrastructureMode;
275    NDIS_802_11_RATES                   SupportedRates;
276 } NDIS_WLAN_BSSID, *PNDIS_WLAN_BSSID;
277 
278 typedef struct PACKED _NDIS_802_11_BSSID_LIST
279 {
280    UINT             NumberOfItems;      // in list below, at least 1
281    NDIS_WLAN_BSSID Bssid[1];
282 } NDIS_802_11_BSSID_LIST, *PNDIS_802_11_BSSID_LIST;
283 
284 // Added Capabilities, IELength and IEs for each BSSID
285 typedef struct PACKED _NDIS_WLAN_BSSID_EX
286 {
287     ULONG                               Length;             // Length of this structure
288     NDIS_802_11_MAC_ADDRESS             MacAddress;         // BSSID
289     UCHAR                               Reserved[2];
290     NDIS_802_11_SSID                    Ssid;               // SSID
291     UINT                                Privacy;            // WEP encryption requirement
292     NDIS_802_11_RSSI                    Rssi;               // receive signal
293                                                             // strength in dBm
294     NDIS_802_11_NETWORK_TYPE            NetworkTypeInUse;
295     NDIS_802_11_CONFIGURATION           Configuration;
296     NDIS_802_11_NETWORK_INFRASTRUCTURE  InfrastructureMode;
297     NDIS_802_11_RATES_EX                SupportedRates;
298     ULONG                               IELength;
299     UCHAR                               IEs[1];
300 } NDIS_WLAN_BSSID_EX, *PNDIS_WLAN_BSSID_EX;
301 
302 typedef struct PACKED _NDIS_802_11_BSSID_LIST_EX
303 {
304     UINT                   NumberOfItems;      // in list below, at least 1
305     NDIS_WLAN_BSSID_EX      Bssid[1];
306 } NDIS_802_11_BSSID_LIST_EX, *PNDIS_802_11_BSSID_LIST_EX;
307 
308 typedef struct PACKED _NDIS_802_11_FIXED_IEs
309 {
310     UCHAR Timestamp[8];
311     USHORT BeaconInterval;
312     USHORT Capabilities;
313 } NDIS_802_11_FIXED_IEs, *PNDIS_802_11_FIXED_IEs;
314 
315 // Added new encryption types
316 // Also aliased typedef to new name
317 typedef enum _NDIS_802_11_WEP_STATUS
318 {
319    Ndis802_11WEPEnabled,
320    Ndis802_11Encryption1Enabled = Ndis802_11WEPEnabled,
321    Ndis802_11WEPDisabled,
322    Ndis802_11EncryptionDisabled = Ndis802_11WEPDisabled,
323    Ndis802_11WEPKeyAbsent,
324    Ndis802_11Encryption1KeyAbsent = Ndis802_11WEPKeyAbsent,
325    Ndis802_11WEPNotSupported,
326    Ndis802_11EncryptionNotSupported = Ndis802_11WEPNotSupported,
327    Ndis802_11Encryption2Enabled,
328    Ndis802_11Encryption2KeyAbsent,
329    Ndis802_11Encryption3Enabled,
330    Ndis802_11Encryption3KeyAbsent
331 } NDIS_802_11_WEP_STATUS, *PNDIS_802_11_WEP_STATUS,
332   NDIS_802_11_ENCRYPTION_STATUS, *PNDIS_802_11_ENCRYPTION_STATUS;
333 
334 typedef enum _NDIS_802_11_RELOAD_DEFAULTS
335 {
336    Ndis802_11ReloadWEPKeys
337 } NDIS_802_11_RELOAD_DEFAULTS, *PNDIS_802_11_RELOAD_DEFAULTS;
338 
339 #define NDIS_802_11_AI_REQFI_CAPABILITIES      1
340 #define NDIS_802_11_AI_REQFI_LISTENINTERVAL    2
341 #define NDIS_802_11_AI_REQFI_CURRENTAPADDRESS  4
342 
343 #define NDIS_802_11_AI_RESFI_CAPABILITIES      1
344 #define NDIS_802_11_AI_RESFI_STATUSCODE        2
345 #define NDIS_802_11_AI_RESFI_ASSOCIATIONID     4
346 
347 typedef struct _NDIS_802_11_AI_REQFI
348 {
349     USHORT Capabilities;
350     USHORT ListenInterval;
351     NDIS_802_11_MAC_ADDRESS  CurrentAPAddress;
352 } NDIS_802_11_AI_REQFI, *PNDIS_802_11_AI_REQFI;
353 
354 typedef struct _NDIS_802_11_AI_RESFI
355 {
356     USHORT Capabilities;
357     USHORT StatusCode;
358     USHORT AssociationId;
359 } NDIS_802_11_AI_RESFI, *PNDIS_802_11_AI_RESFI;
360 
361 typedef struct _NDIS_802_11_ASSOCIATION_INFORMATION
362 {
363     ULONG                   Length;
364     USHORT                  AvailableRequestFixedIEs;
365     NDIS_802_11_AI_REQFI    RequestFixedIEs;
366     ULONG                   RequestIELength;
367     ULONG                   OffsetRequestIEs;
368     USHORT                  AvailableResponseFixedIEs;
369     NDIS_802_11_AI_RESFI    ResponseFixedIEs;
370     ULONG                   ResponseIELength;
371     ULONG                   OffsetResponseIEs;
372 } NDIS_802_11_ASSOCIATION_INFORMATION, *PNDIS_802_11_ASSOCIATION_INFORMATION;
373 
374 struct ndis_pmkid_entry {
375 	struct ndis_pmkid_entry *next;
376 	u8 bssid[ETH_ALEN];
377 	u8 pmkid[16];
378 };
379 
380 typedef struct _MLME_DEAUTH_REQ_STRUCT {
381     UCHAR        Addr[MAC_ADDR_LEN];
382     USHORT       Reason;
383 } MLME_DEAUTH_REQ_STRUCT, *PMLME_DEAUTH_REQ_STRUCT;
384