~ubuntu-branches/ubuntu/gutsy/wpasupplicant/gutsy

« back to all changes in this revision

Viewing changes to config_ssid.h

  • Committer: Bazaar Package Importer
  • Author(s): Reinhard Tartler, Alexander Sack
  • Date: 2007-08-26 16:06:57 UTC
  • mfrom: (1.1.9 upstream)
  • Revision ID: james.westby@ubuntu.com-20070826160657-2m8pxoweuxe8f93t
Tags: 0.6.0+0.5.8-0ubuntu1
* New upstream release
* remove patch 11_erroneous_manpage_ref, applied upstream
* remove patch 25_wpas_dbus_unregister_iface_fix, applied upstream

[ Alexander Sack ]
* bumping upstream version to replace development version 0.6.0 with
  this package from stable release branch.
* attempt to fix wierd timeout and high latency issues by going
  back to stable upstream version (0.5.9) (LP: #140763,
  LP: #141233).

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * WPA Supplicant / Network configuration structures
 
3
 * Copyright (c) 2003-2006, Jouni Malinen <j@w1.fi>
 
4
 *
 
5
 * This program is free software; you can redistribute it and/or modify
 
6
 * it under the terms of the GNU General Public License version 2 as
 
7
 * published by the Free Software Foundation.
 
8
 *
 
9
 * Alternatively, this software may be distributed under the terms of BSD
 
10
 * license.
 
11
 *
 
12
 * See README and COPYING for more details.
 
13
 */
 
14
 
 
15
#ifndef CONFIG_SSID_H
 
16
#define CONFIG_SSID_H
 
17
 
 
18
#ifndef BIT
 
19
#define BIT(n) (1 << (n))
 
20
#endif
 
21
 
 
22
#define WPA_CIPHER_NONE BIT(0)
 
23
#define WPA_CIPHER_WEP40 BIT(1)
 
24
#define WPA_CIPHER_WEP104 BIT(2)
 
25
#define WPA_CIPHER_TKIP BIT(3)
 
26
#define WPA_CIPHER_CCMP BIT(4)
 
27
#ifdef CONFIG_IEEE80211W
 
28
#define WPA_CIPHER_AES_128_CMAC BIT(5)
 
29
#endif /* CONFIG_IEEE80211W */
 
30
 
 
31
#define WPA_KEY_MGMT_IEEE8021X BIT(0)
 
32
#define WPA_KEY_MGMT_PSK BIT(1)
 
33
#define WPA_KEY_MGMT_NONE BIT(2)
 
34
#define WPA_KEY_MGMT_IEEE8021X_NO_WPA BIT(3)
 
35
#define WPA_KEY_MGMT_WPA_NONE BIT(4)
 
36
 
 
37
#define WPA_PROTO_WPA BIT(0)
 
38
#define WPA_PROTO_RSN BIT(1)
 
39
 
 
40
#define WPA_AUTH_ALG_OPEN BIT(0)
 
41
#define WPA_AUTH_ALG_SHARED BIT(1)
 
42
#define WPA_AUTH_ALG_LEAP BIT(2)
 
43
 
 
44
#define MAX_SSID_LEN 32
 
45
#define PMK_LEN 32
 
46
#define EAP_PSK_LEN_MIN 16
 
47
#define EAP_PSK_LEN_MAX 32
 
48
 
 
49
 
 
50
#define DEFAULT_EAP_WORKAROUND ((unsigned int) -1)
 
51
#define DEFAULT_EAPOL_FLAGS (EAPOL_FLAG_REQUIRE_KEY_UNICAST | \
 
52
                             EAPOL_FLAG_REQUIRE_KEY_BROADCAST)
 
53
#define DEFAULT_PROTO (WPA_PROTO_WPA | WPA_PROTO_RSN)
 
54
#define DEFAULT_KEY_MGMT (WPA_KEY_MGMT_PSK | WPA_KEY_MGMT_IEEE8021X)
 
55
#define DEFAULT_PAIRWISE (WPA_CIPHER_CCMP | WPA_CIPHER_TKIP)
 
56
#define DEFAULT_GROUP (WPA_CIPHER_CCMP | WPA_CIPHER_TKIP | \
 
57
                       WPA_CIPHER_WEP104 | WPA_CIPHER_WEP40)
 
58
#define DEFAULT_FRAGMENT_SIZE 1398
 
59
 
 
60
/**
 
61
 * struct wpa_ssid - Network configuration data
 
62
 *
 
63
 * This structure includes all the configuration variables for a network. This
 
64
 * data is included in the per-interface configuration data as an element of
 
65
 * the network list, struct wpa_config::ssid. Each network block in the
 
66
 * configuration is mapped to a struct wpa_ssid instance.
 
67
 */
 
68
struct wpa_ssid {
 
69
        /**
 
70
         * next - Next network in global list
 
71
         *
 
72
         * This pointer can be used to iterate over all networks. The head of
 
73
         * this list is stored in the ssid field of struct wpa_config.
 
74
         */
 
75
        struct wpa_ssid *next;
 
76
 
 
77
        /**
 
78
         * pnext - Next network in per-priority list
 
79
         *
 
80
         * This pointer can be used to iterate over all networks in the same
 
81
         * priority class. The heads of these list are stored in the pssid
 
82
         * fields of struct wpa_config.
 
83
         */
 
84
        struct wpa_ssid *pnext;
 
85
 
 
86
        /**
 
87
         * id - Unique id for the network
 
88
         *
 
89
         * This identifier is used as a unique identifier for each network
 
90
         * block when using the control interface. Each network is allocated an
 
91
         * id when it is being created, either when reading the configuration
 
92
         * file or when a new network is added through the control interface.
 
93
         */
 
94
        int id;
 
95
 
 
96
        /**
 
97
         * priority - Priority group
 
98
         *
 
99
         * By default, all networks will get same priority group (0). If some
 
100
         * of the networks are more desirable, this field can be used to change
 
101
         * the order in which wpa_supplicant goes through the networks when
 
102
         * selecting a BSS. The priority groups will be iterated in decreasing
 
103
         * priority (i.e., the larger the priority value, the sooner the
 
104
         * network is matched against the scan results). Within each priority
 
105
         * group, networks will be selected based on security policy, signal
 
106
         * strength, etc.
 
107
         *
 
108
         * Please note that AP scanning with scan_ssid=1 and ap_scan=2 mode are
 
109
         * not using this priority to select the order for scanning. Instead,
 
110
         * they try the networks in the order that used in the configuration
 
111
         * file.
 
112
         */
 
113
        int priority;
 
114
 
 
115
        /**
 
116
         * ssid - Service set identifier (network name)
 
117
         *
 
118
         * This is the SSID for the network. For wireless interfaces, this is
 
119
         * used to select which network will be used. If set to %NULL (or
 
120
         * ssid_len=0), any SSID can be used. For wired interfaces, this must
 
121
         * be set to %NULL. Note: SSID may contain any characters, even nul
 
122
         * (ASCII 0) and as such, this should not be assumed to be a nul
 
123
         * terminated string. ssid_len defines how many characters are valid
 
124
         * and the ssid field is not guaranteed to be nul terminated.
 
125
         */
 
126
        u8 *ssid;
 
127
 
 
128
        /**
 
129
         * ssid_len - Length of the SSID
 
130
         */
 
131
        size_t ssid_len;
 
132
 
 
133
        /**
 
134
         * bssid - BSSID
 
135
         *
 
136
         * If set, this network block is used only when associating with the AP
 
137
         * using the configured BSSID
 
138
         */
 
139
        u8 bssid[ETH_ALEN];
 
140
 
 
141
        /**
 
142
         * bssid_set - Whether BSSID is configured for this network
 
143
         */
 
144
        int bssid_set;
 
145
 
 
146
        /**
 
147
         * psk - WPA pre-shared key (256 bits)
 
148
         */
 
149
        u8 psk[PMK_LEN];
 
150
 
 
151
        /**
 
152
         * psk_set - Whether PSK field is configured
 
153
         */
 
154
        int psk_set;
 
155
 
 
156
        /**
 
157
         * passphrase - WPA ASCII passphrase
 
158
         *
 
159
         * If this is set, psk will be generated using the SSID and passphrase
 
160
         * configured for the network. ASCII passphrase must be between 8 and
 
161
         * 63 characters (inclusive).
 
162
         */
 
163
        char *passphrase;
 
164
 
 
165
        /**
 
166
         * pairwise_cipher - Bitfield of allowed pairwise ciphers, WPA_CIPHER_*
 
167
         */
 
168
        int pairwise_cipher;
 
169
 
 
170
        /**
 
171
         * group_cipher - Bitfield of allowed group ciphers, WPA_CIPHER_*
 
172
         */
 
173
        int group_cipher;
 
174
 
 
175
        /**
 
176
         * key_mgmt - Bitfield of allowed key management protocols
 
177
         *
 
178
         * WPA_KEY_MGMT_*
 
179
         */
 
180
        int key_mgmt;
 
181
 
 
182
        /**
 
183
         * proto - Bitfield of allowed protocols, WPA_PROTO_*
 
184
         */
 
185
        int proto;
 
186
 
 
187
        /**
 
188
         * auth_alg -  Bitfield of allowed authentication algorithms
 
189
         *
 
190
         * WPA_AUTH_ALG_*
 
191
         */
 
192
        int auth_alg;
 
193
 
 
194
        /**
 
195
         * scan_ssid - Scan this SSID with Probe Requests
 
196
         *
 
197
         * scan_ssid can be used to scan for APs using hidden SSIDs.
 
198
         * Note: Many drivers do not support this. ap_mode=2 can be used with
 
199
         * such drivers to use hidden SSIDs.
 
200
         */
 
201
        int scan_ssid;
 
202
 
 
203
#ifdef IEEE8021X_EAPOL
 
204
 
 
205
        /**
 
206
         * identity - EAP Identity
 
207
         */
 
208
        u8 *identity;
 
209
 
 
210
        /**
 
211
         * identity_len - EAP Identity length
 
212
         */
 
213
        size_t identity_len;
 
214
 
 
215
        /**
 
216
         * anonymous_identity -  Anonymous EAP Identity
 
217
         *
 
218
         * This field is used for unencrypted use with EAP types that support
 
219
         * different tunnelled identity, e.g., EAP-TTLS, in order to reveal the
 
220
         * real identity (identity field) only to the authentication server.
 
221
         */
 
222
        u8 *anonymous_identity;
 
223
 
 
224
        /**
 
225
         * anonymous_identity_len - Length of anonymous_identity
 
226
         */
 
227
        size_t anonymous_identity_len;
 
228
 
 
229
        /**
 
230
         * eappsk - EAP-PSK/PAX/SAKE pre-shared key
 
231
         */
 
232
        u8 *eappsk;
 
233
 
 
234
        /**
 
235
         * eappsk_len - EAP-PSK/PAX/SAKE pre-shared key length
 
236
         *
 
237
         * This field is always 16 for the current version of EAP-PSK/PAX and
 
238
         * 32 for EAP-SAKE.
 
239
         */
 
240
        size_t eappsk_len;
 
241
 
 
242
        /**
 
243
         * nai - User NAI (for EAP-PSK/PAX/SAKE)
 
244
         */
 
245
        u8 *nai;
 
246
 
 
247
        /**
 
248
         * nai_len - Length of nai field
 
249
         */
 
250
        size_t nai_len;
 
251
 
 
252
        /**
 
253
         * password - Password string for EAP
 
254
         */
 
255
        u8 *password;
 
256
 
 
257
        /**
 
258
         * password_len - Length of password field
 
259
         */
 
260
        size_t password_len;
 
261
 
 
262
        /**
 
263
         * ca_cert - File path to CA certificate file (PEM/DER)
 
264
         *
 
265
         * This file can have one or more trusted CA certificates. If ca_cert
 
266
         * and ca_path are not included, server certificate will not be
 
267
         * verified. This is insecure and a trusted CA certificate should
 
268
         * always be configured when using EAP-TLS/TTLS/PEAP. Full path to the
 
269
         * file should be used since working directory may change when
 
270
         * wpa_supplicant is run in the background.
 
271
         *
 
272
         * Alternatively, a named configuration blob can be used by setting
 
273
         * this to blob://<blob name>.
 
274
         *
 
275
         * On Windows, trusted CA certificates can be loaded from the system
 
276
         * certificate store by setting this to cert_store://<name>, e.g.,
 
277
         * ca_cert="cert_store://CA" or ca_cert="cert_store://ROOT".
 
278
         * Note that when running wpa_supplicant as an application, the user
 
279
         * certificate store (My user account) is used, whereas computer store
 
280
         * (Computer account) is used when running wpasvc as a service.
 
281
         */
 
282
        u8 *ca_cert;
 
283
 
 
284
        /**
 
285
         * ca_path - Directory path for CA certificate files (PEM)
 
286
         *
 
287
         * This path may contain multiple CA certificates in OpenSSL format.
 
288
         * Common use for this is to point to system trusted CA list which is
 
289
         * often installed into directory like /etc/ssl/certs. If configured,
 
290
         * these certificates are added to the list of trusted CAs. ca_cert
 
291
         * may also be included in that case, but it is not required.
 
292
         */
 
293
        u8 *ca_path;
 
294
 
 
295
        /**
 
296
         * client_cert - File path to client certificate file (PEM/DER)
 
297
         *
 
298
         * This field is used with EAP method that use TLS authentication.
 
299
         * Usually, this is only configured for EAP-TLS, even though this could
 
300
         * in theory be used with EAP-TTLS and EAP-PEAP, too. Full path to the
 
301
         * file should be used since working directory may change when
 
302
         * wpa_supplicant is run in the background.
 
303
         *
 
304
         * Alternatively, a named configuration blob can be used by setting
 
305
         * this to blob://<blob name>.
 
306
         */
 
307
        u8 *client_cert;
 
308
 
 
309
        /**
 
310
         * private_key - File path to client private key file (PEM/DER/PFX)
 
311
         *
 
312
         * When PKCS#12/PFX file (.p12/.pfx) is used, client_cert should be
 
313
         * commented out. Both the private key and certificate will be read
 
314
         * from the PKCS#12 file in this case. Full path to the file should be
 
315
         * used since working directory may change when wpa_supplicant is run
 
316
         * in the background.
 
317
         *
 
318
         * Windows certificate store can be used by leaving client_cert out and
 
319
         * configuring private_key in one of the following formats:
 
320
         *
 
321
         * cert://substring_to_match
 
322
         *
 
323
         * hash://certificate_thumbprint_in_hex
 
324
         *
 
325
         * For example: private_key="hash://63093aa9c47f56ae88334c7b65a4"
 
326
         *
 
327
         * Note that when running wpa_supplicant as an application, the user
 
328
         * certificate store (My user account) is used, whereas computer store
 
329
         * (Computer account) is used when running wpasvc as a service.
 
330
         *
 
331
         * Alternatively, a named configuration blob can be used by setting
 
332
         * this to blob://<blob name>.
 
333
         */
 
334
        u8 *private_key;
 
335
 
 
336
        /**
 
337
         * private_key_passwd - Password for private key file
 
338
         *
 
339
         * If left out, this will be asked through control interface.
 
340
         */
 
341
        u8 *private_key_passwd;
 
342
 
 
343
        /**
 
344
         * dh_file - File path to DH/DSA parameters file (in PEM format)
 
345
         *
 
346
         * This is an optional configuration file for setting parameters for an
 
347
         * ephemeral DH key exchange. In most cases, the default RSA
 
348
         * authentication does not use this configuration. However, it is
 
349
         * possible setup RSA to use ephemeral DH key exchange. In addition,
 
350
         * ciphers with DSA keys always use ephemeral DH keys. This can be used
 
351
         * to achieve forward secrecy. If the file is in DSA parameters format,
 
352
         * it will be automatically converted into DH params. Full path to the
 
353
         * file should be used since working directory may change when
 
354
         * wpa_supplicant is run in the background.
 
355
         *
 
356
         * Alternatively, a named configuration blob can be used by setting
 
357
         * this to blob://<blob name>.
 
358
         */
 
359
        u8 *dh_file;
 
360
 
 
361
        /**
 
362
         * subject_match - Constraint for server certificate subject
 
363
         *
 
364
         * This substring is matched against the subject of the authentication
 
365
         * server certificate. If this string is set, the server sertificate is
 
366
         * only accepted if it contains this string in the subject. The subject
 
367
         * string is in following format:
 
368
         *
 
369
         * /C=US/ST=CA/L=San Francisco/CN=Test AS/emailAddress=as@n.example.com
 
370
         */
 
371
        u8 *subject_match;
 
372
 
 
373
        /**
 
374
         * altsubject_match - Constraint for server certificate alt. subject
 
375
         *
 
376
         * Semicolon separated string of entries to be matched against the
 
377
         * alternative subject name of the authentication server certificate.
 
378
         * If this string is set, the server sertificate is only accepted if it
 
379
         * contains one of the entries in an alternative subject name
 
380
         * extension.
 
381
         *
 
382
         * altSubjectName string is in following format: TYPE:VALUE
 
383
         *
 
384
         * Example: EMAIL:server@example.com
 
385
         * Example: DNS:server.example.com;DNS:server2.example.com
 
386
         *
 
387
         * Following types are supported: EMAIL, DNS, URI
 
388
         */
 
389
        u8 *altsubject_match;
 
390
 
 
391
        /**
 
392
         * ca_cert2 - File path to CA certificate file (PEM/DER) (Phase 2)
 
393
         *
 
394
         * This file can have one or more trusted CA certificates. If ca_cert2
 
395
         * and ca_path2 are not included, server certificate will not be
 
396
         * verified. This is insecure and a trusted CA certificate should
 
397
         * always be configured. Full path to the file should be used since
 
398
         * working directory may change when wpa_supplicant is run in the
 
399
         * background.
 
400
         *
 
401
         * This field is like ca_cert, but used for phase 2 (inside
 
402
         * EAP-TTLS/PEAP/FAST tunnel) authentication.
 
403
         *
 
404
         * Alternatively, a named configuration blob can be used by setting
 
405
         * this to blob://<blob name>.
 
406
         */
 
407
        u8 *ca_cert2;
 
408
 
 
409
        /**
 
410
         * ca_path2 - Directory path for CA certificate files (PEM) (Phase 2)
 
411
         *
 
412
         * This path may contain multiple CA certificates in OpenSSL format.
 
413
         * Common use for this is to point to system trusted CA list which is
 
414
         * often installed into directory like /etc/ssl/certs. If configured,
 
415
         * these certificates are added to the list of trusted CAs. ca_cert
 
416
         * may also be included in that case, but it is not required.
 
417
         *
 
418
         * This field is like ca_path, but used for phase 2 (inside
 
419
         * EAP-TTLS/PEAP/FAST tunnel) authentication.
 
420
         */
 
421
        u8 *ca_path2;
 
422
 
 
423
        /**
 
424
         * client_cert2 - File path to client certificate file
 
425
         *
 
426
         * This field is like client_cert, but used for phase 2 (inside
 
427
         * EAP-TTLS/PEAP/FAST tunnel) authentication. Full path to the
 
428
         * file should be used since working directory may change when
 
429
         * wpa_supplicant is run in the background.
 
430
         *
 
431
         * Alternatively, a named configuration blob can be used by setting
 
432
         * this to blob://<blob name>.
 
433
         */
 
434
        u8 *client_cert2;
 
435
 
 
436
        /**
 
437
         * private_key2 - File path to client private key file
 
438
         *
 
439
         * This field is like private_key, but used for phase 2 (inside
 
440
         * EAP-TTLS/PEAP/FAST tunnel) authentication. Full path to the
 
441
         * file should be used since working directory may change when
 
442
         * wpa_supplicant is run in the background.
 
443
         *
 
444
         * Alternatively, a named configuration blob can be used by setting
 
445
         * this to blob://<blob name>.
 
446
         */
 
447
        u8 *private_key2;
 
448
 
 
449
        /**
 
450
         * private_key2_passwd -  Password for private key file
 
451
         *
 
452
         * This field is like private_key_passwd, but used for phase 2 (inside
 
453
         * EAP-TTLS/PEAP/FAST tunnel) authentication.
 
454
         */
 
455
        u8 *private_key2_passwd;
 
456
 
 
457
        /**
 
458
         * dh_file2 - File path to DH/DSA parameters file (in PEM format)
 
459
         *
 
460
         * This field is like dh_file, but used for phase 2 (inside
 
461
         * EAP-TTLS/PEAP/FAST tunnel) authentication. Full path to the
 
462
         * file should be used since working directory may change when
 
463
         * wpa_supplicant is run in the background.
 
464
         *
 
465
         * Alternatively, a named configuration blob can be used by setting
 
466
         * this to blob://<blob name>.
 
467
         */
 
468
        u8 *dh_file2;
 
469
 
 
470
        /**
 
471
         * subject_match2 - Constraint for server certificate subject
 
472
         *
 
473
         * This field is like subject_match, but used for phase 2 (inside
 
474
         * EAP-TTLS/PEAP/FAST tunnel) authentication.
 
475
         */
 
476
        u8 *subject_match2;
 
477
 
 
478
        /**
 
479
         * altsubject_match2 - Constraint for server certificate alt. subject
 
480
         *
 
481
         * This field is like altsubject_match, but used for phase 2 (inside
 
482
         * EAP-TTLS/PEAP/FAST tunnel) authentication.
 
483
         */
 
484
        u8 *altsubject_match2;
 
485
 
 
486
        /**
 
487
         * eap_methods - Allowed EAP methods
 
488
         *
 
489
         * (vendor=EAP_VENDOR_IETF,method=EAP_TYPE_NONE) terminated list of
 
490
         * allowed EAP methods or %NULL if all methods are accepted.
 
491
         */
 
492
        struct eap_method_type *eap_methods;
 
493
 
 
494
        /**
 
495
         * phase1 - Phase 1 (outer authentication) parameters
 
496
         *
 
497
         * String with field-value pairs, e.g., "peapver=0" or
 
498
         * "peapver=1 peaplabel=1".
 
499
         *
 
500
         * 'peapver' can be used to force which PEAP version (0 or 1) is used.
 
501
         *
 
502
         * 'peaplabel=1' can be used to force new label, "client PEAP
 
503
         * encryption", to be used during key derivation when PEAPv1 or newer.
 
504
         *
 
505
         * Most existing PEAPv1 implementation seem to be using the old label,
 
506
         * "client EAP encryption", and wpa_supplicant is now using that as the
 
507
         * default value.
 
508
         *
 
509
         * Some servers, e.g., Radiator, may require peaplabel=1 configuration
 
510
         * to interoperate with PEAPv1; see eap_testing.txt for more details.
 
511
         *
 
512
         * 'peap_outer_success=0' can be used to terminate PEAP authentication
 
513
         * on tunneled EAP-Success. This is required with some RADIUS servers
 
514
         * that implement draft-josefsson-pppext-eap-tls-eap-05.txt (e.g.,
 
515
         * Lucent NavisRadius v4.4.0 with PEAP in "IETF Draft 5" mode).
 
516
         *
 
517
         * include_tls_length=1 can be used to force wpa_supplicant to include
 
518
         * TLS Message Length field in all TLS messages even if they are not
 
519
         * fragmented.
 
520
         *
 
521
         * sim_min_num_chal=3 can be used to configure EAP-SIM to require three
 
522
         * challenges (by default, it accepts 2 or 3).
 
523
         *
 
524
         * fast_provisioning=1 can be used to enable in-line provisioning of
 
525
         * EAP-FAST credentials (PAC)
 
526
         */
 
527
        char *phase1;
 
528
 
 
529
        /**
 
530
         * phase2 - Phase2 (inner authentication with TLS tunnel) parameters
 
531
         *
 
532
         * String with field-value pairs, e.g., "auth=MSCHAPV2" for EAP-PEAP or
 
533
         * "autheap=MSCHAPV2 autheap=MD5" for EAP-TTLS.
 
534
         */
 
535
        char *phase2;
 
536
 
 
537
        /**
 
538
         * pcsc - Parameters for PC/SC smartcard interface for USIM and GSM SIM
 
539
         *
 
540
         * This field is used to configure PC/SC smartcard interface.
 
541
         * Currently, the only configuration is whether this field is %NULL (do
 
542
         * not use PC/SC) or non-NULL (e.g., "") to enable PC/SC.
 
543
         *
 
544
         * This field is used for EAP-SIM and EAP-AKA.
 
545
         */
 
546
        char *pcsc;
 
547
 
 
548
        /**
 
549
         * pin - PIN for USIM, GSM SIM, and smartcards
 
550
         *
 
551
         * This field is used to configure PIN for SIM and smartcards for
 
552
         * EAP-SIM and EAP-AKA. In addition, this is used with EAP-TLS if a
 
553
         * smartcard is used for private key operations.
 
554
         *
 
555
         * If left out, this will be asked through control interface.
 
556
         */
 
557
        char *pin;
 
558
 
 
559
        /**
 
560
         * engine - Enable OpenSSL engine (e.g., for smartcard access)
 
561
         *
 
562
         * This is used if private key operations for EAP-TLS are performed
 
563
         * using a smartcard.
 
564
         */
 
565
        int engine;
 
566
 
 
567
        /**
 
568
         * engine_id - Engine ID for OpenSSL engine
 
569
         *
 
570
         * "opensc" to select OpenSC engine or "pkcs11" to select PKCS#11
 
571
         * engine.
 
572
         *
 
573
         * This is used if private key operations for EAP-TLS are performed
 
574
         * using a smartcard.
 
575
         */
 
576
        char *engine_id;
 
577
 
 
578
        /**
 
579
         * key_id - Key ID for OpenSSL engine
 
580
         *
 
581
         * This is used if private key operations for EAP-TLS are performed
 
582
         * using a smartcard.
 
583
         */
 
584
        char *key_id;
 
585
 
 
586
#define EAPOL_FLAG_REQUIRE_KEY_UNICAST BIT(0)
 
587
#define EAPOL_FLAG_REQUIRE_KEY_BROADCAST BIT(1)
 
588
        /**
 
589
         * eapol_flags - Bit field of IEEE 802.1X/EAPOL options (EAPOL_FLAG_*)
 
590
         */
 
591
        int eapol_flags;
 
592
 
 
593
#endif /* IEEE8021X_EAPOL */
 
594
 
 
595
#define NUM_WEP_KEYS 4
 
596
#define MAX_WEP_KEY_LEN 16
 
597
        /**
 
598
         * wep_key - WEP keys
 
599
         */
 
600
        u8 wep_key[NUM_WEP_KEYS][MAX_WEP_KEY_LEN];
 
601
 
 
602
        /**
 
603
         * wep_key_len - WEP key lengths
 
604
         */
 
605
        size_t wep_key_len[NUM_WEP_KEYS];
 
606
 
 
607
        /**
 
608
         * wep_tx_keyidx - Default key index for TX frames using WEP
 
609
         */
 
610
        int wep_tx_keyidx;
 
611
 
 
612
        /**
 
613
         * proactive_key_caching - Enable proactive key caching
 
614
         *
 
615
         * This field can be used to enable proactive key caching which is also
 
616
         * known as opportunistic PMKSA caching for WPA2. This is disabled (0)
 
617
         * by default. Enable by setting this to 1.
 
618
         *
 
619
         * Proactive key caching is used to make supplicant assume that the APs
 
620
         * are using the same PMK and generate PMKSA cache entries without
 
621
         * doing RSN pre-authentication. This requires support from the AP side
 
622
         * and is normally used with wireless switches that co-locate the
 
623
         * authenticator.
 
624
         */
 
625
        int proactive_key_caching;
 
626
 
 
627
        /**
 
628
         * mixed_cell - Whether mixed cells are allowed
 
629
         *
 
630
         * This option can be used to configure whether so called mixed cells,
 
631
         * i.e., networks that use both plaintext and encryption in the same
 
632
         * SSID, are allowed. This is disabled (0) by default. Enable by
 
633
         * setting this to 1.
 
634
         */
 
635
        int mixed_cell;
 
636
 
 
637
#ifdef IEEE8021X_EAPOL
 
638
 
 
639
        /**
 
640
         * otp - One-time-password
 
641
         *
 
642
         * This field should not be set in configuration step. It is only used
 
643
         * internally when OTP is entered through the control interface.
 
644
         */
 
645
        u8 *otp;
 
646
 
 
647
        /**
 
648
         * otp_len - Length of the otp field
 
649
         */
 
650
        size_t otp_len;
 
651
 
 
652
        /**
 
653
         * pending_req_identity - Whether there is a pending identity request
 
654
         *
 
655
         * This field should not be set in configuration step. It is only used
 
656
         * internally when control interface is used to request needed
 
657
         * information.
 
658
         */
 
659
        int pending_req_identity;
 
660
 
 
661
        /**
 
662
         * pending_req_password - Whether there is a pending password request
 
663
         *
 
664
         * This field should not be set in configuration step. It is only used
 
665
         * internally when control interface is used to request needed
 
666
         * information.
 
667
         */
 
668
        int pending_req_password;
 
669
 
 
670
        /**
 
671
         * pending_req_pin - Whether there is a pending PIN request
 
672
         *
 
673
         * This field should not be set in configuration step. It is only used
 
674
         * internally when control interface is used to request needed
 
675
         * information.
 
676
         */
 
677
        int pending_req_pin;
 
678
 
 
679
        /**
 
680
         * pending_req_new_password - Pending password update request
 
681
         *
 
682
         * This field should not be set in configuration step. It is only used
 
683
         * internally when control interface is used to request needed
 
684
         * information.
 
685
         */
 
686
        int pending_req_new_password;
 
687
 
 
688
        /**
 
689
         * pending_req_passphrase - Pending passphrase request
 
690
         *
 
691
         * This field should not be set in configuration step. It is only used
 
692
         * internally when control interface is used to request needed
 
693
         * information.
 
694
         */
 
695
        int pending_req_passphrase;
 
696
 
 
697
        /**
 
698
         * pending_req_otp - Whether there is a pending OTP request
 
699
         *
 
700
         * This field should not be set in configuration step. It is only used
 
701
         * internally when control interface is used to request needed
 
702
         * information.
 
703
         */
 
704
        char *pending_req_otp;
 
705
 
 
706
        /**
 
707
         * pending_req_otp_len - Length of the pending OTP request
 
708
         */
 
709
        size_t pending_req_otp_len;
 
710
 
 
711
        /**
 
712
         * leap - Number of EAP methods using LEAP
 
713
         *
 
714
         * This field should be set to 1 if LEAP is enabled. This is used to
 
715
         * select IEEE 802.11 authentication algorithm.
 
716
         */
 
717
        int leap;
 
718
 
 
719
        /**
 
720
         * non_leap - Number of EAP methods not using LEAP
 
721
         *
 
722
         * This field should be set to >0 if any EAP method other than LEAP is
 
723
         * enabled. This is used to select IEEE 802.11 authentication
 
724
         * algorithm.
 
725
         */
 
726
        int non_leap;
 
727
 
 
728
        /**
 
729
         * eap_workaround - EAP workarounds enabled
 
730
         *
 
731
         * wpa_supplicant supports number of "EAP workarounds" to work around
 
732
         * interoperability issues with incorrectly behaving authentication
 
733
         * servers. This is recommended to be enabled by default because some
 
734
         * of the issues are present in large number of authentication servers.
 
735
         *
 
736
         * Strict EAP conformance mode can be configured by disabling
 
737
         * workarounds with eap_workaround = 0.
 
738
         */
 
739
        unsigned int eap_workaround;
 
740
 
 
741
        /**
 
742
         * pac_file - File path or blob name for the PAC entries (EAP-FAST)
 
743
         *
 
744
         * wpa_supplicant will need to be able to create this file and write
 
745
         * updates to it when PAC is being provisioned or refreshed. Full path
 
746
         * to the file should be used since working directory may change when
 
747
         * wpa_supplicant is run in the background.
 
748
         * Alternatively, a named configuration blob can be used by setting
 
749
         * this to blob://<blob name>.
 
750
         */
 
751
        char *pac_file;
 
752
 
 
753
#endif /* IEEE8021X_EAPOL */
 
754
 
 
755
        /**
 
756
         * mode - IEEE 802.11 operation mode (Infrastucture/IBSS)
 
757
         *
 
758
         * 0 = infrastructure (Managed) mode, i.e., associate with an AP.
 
759
         *
 
760
         * 1 = IBSS (ad-hoc, peer-to-peer)
 
761
         *
 
762
         * Note: IBSS can only be used with key_mgmt NONE (plaintext and
 
763
         * static WEP) and key_mgmt=WPA-NONE (fixed group key TKIP/CCMP). In
 
764
         * addition, ap_scan has to be set to 2 for IBSS. WPA-None requires
 
765
         * following network block options: proto=WPA, key_mgmt=WPA-NONE,
 
766
         * pairwise=NONE, group=TKIP (or CCMP, but not both), and psk must also
 
767
         * be set (either directly or using ASCII passphrase).
 
768
         */
 
769
        int mode;
 
770
 
 
771
#ifdef IEEE8021X_EAPOL
 
772
 
 
773
        /**
 
774
         * mschapv2_retry - MSCHAPv2 retry in progress
 
775
         *
 
776
         * This field is used internally by EAP-MSCHAPv2 and should not be set
 
777
         * as part of configuration.
 
778
         */
 
779
        int mschapv2_retry;
 
780
 
 
781
        /**
 
782
         * new_password - New password for password update
 
783
         *
 
784
         * This field is used during MSCHAPv2 password update. This is normally
 
785
         * requested from the user through the control interface and not set
 
786
         * from configuration.
 
787
         */
 
788
        u8 *new_password;
 
789
 
 
790
        /**
 
791
         * new_password_len - Length of new_password field
 
792
         */
 
793
        size_t new_password_len;
 
794
 
 
795
#endif /* IEEE8021X_EAPOL */
 
796
 
 
797
        /**
 
798
         * disabled - Whether this network is currently disabled
 
799
         *
 
800
         * 0 = this network can be used (default).
 
801
         * 1 = this network block is disabled (can be enabled through
 
802
         * ctrl_iface, e.g., with wpa_cli or wpa_gui).
 
803
         */
 
804
        int disabled;
 
805
 
 
806
        /**
 
807
         * peerkey -  Whether PeerKey handshake for direct links is allowed
 
808
         *
 
809
         * This is only used when both RSN/WPA2 and IEEE 802.11e (QoS) are
 
810
         * enabled.
 
811
         *
 
812
         * 0 = disabled (default)
 
813
         * 1 = enabled
 
814
         */
 
815
        int peerkey;
 
816
 
 
817
#ifdef IEEE8021X_EAPOL
 
818
 
 
819
        /**
 
820
         * fragment_size - Maximum EAP fragment size in bytes (default 1398)
 
821
         *
 
822
         * This value limits the fragment size for EAP methods that support
 
823
         * fragmentation (e.g., EAP-TLS and EAP-PEAP). This value should be set
 
824
         * small enough to make the EAP messages fit in MTU of the network
 
825
         * interface used for EAPOL. The default value is suitable for most
 
826
         * cases.
 
827
         */
 
828
        int fragment_size;
 
829
 
 
830
#endif /* IEEE8021X_EAPOL */
 
831
 
 
832
        /**
 
833
         * id_str - Network identifier string for external scripts
 
834
         *
 
835
         * This value is passed to external ctrl_iface monitors in
 
836
         * WPA_EVENT_CONNECTED event and wpa_cli sets this as WPA_ID_STR
 
837
         * environment variable for action scripts.
 
838
         */
 
839
        char *id_str;
 
840
 
 
841
#ifdef CONFIG_IEEE80211W
 
842
        /**
 
843
         * ieee80211w - Whether management frame protection is enabled
 
844
         *
 
845
         * This value is used to configure policy for management frame
 
846
         * protection (IEEE 802.11w). 0 = disabled, 1 = optional, 2 = required.
 
847
         */
 
848
        enum {
 
849
                NO_IEEE80211W = 0,
 
850
                IEEE80211W_OPTIONAL = 1,
 
851
                IEEE80211W_REQUIRED = 2
 
852
        } ieee80211w;
 
853
#endif /* CONFIG_IEEE80211W */
 
854
};
 
855
 
 
856
int wpa_config_allowed_eap_method(struct wpa_ssid *ssid, int vendor,
 
857
                                  u32 method);
 
858
 
 
859
#endif /* CONFIG_SSID_H */