2
* WPA Supplicant / Configuration file structures
3
* Copyright (c) 2003-2005, Jouni Malinen <j@w1.fi>
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.
9
* Alternatively, this software may be distributed under the terms of BSD
12
* See README and COPYING for more details.
18
#define DEFAULT_EAPOL_VERSION 1
19
#ifdef CONFIG_NO_SCAN_PROCESSING
20
#define DEFAULT_AP_SCAN 2
21
#else /* CONFIG_NO_SCAN_PROCESSING */
22
#define DEFAULT_AP_SCAN 1
23
#endif /* CONFIG_NO_SCAN_PROCESSING */
24
#define DEFAULT_FAST_REAUTH 1
26
#include "config_ssid.h"
30
* struct wpa_config - wpa_supplicant configuration data
32
* This data structure is presents the per-interface (radio) configuration
33
* data. In many cases, there is only one struct wpa_config instance, but if
34
* more than one network interface is being controlled, one instance is used
39
* ssid - Head of the global network list
41
* This is the head for the list of all the configured networks.
43
struct wpa_ssid *ssid;
46
* pssid - Per-priority network lists (in priority order)
48
struct wpa_ssid **pssid;
51
* num_prio - Number of different priorities used in the pssid lists
53
* This indicates how many per-priority network lists are included in
59
* eapol_version - IEEE 802.1X/EAPOL version number
61
* wpa_supplicant is implemented based on IEEE Std 802.1X-2004 which
62
* defines EAPOL version 2. However, there are many APs that do not
63
* handle the new version number correctly (they seem to drop the
64
* frames completely). In order to make wpa_supplicant interoperate
65
* with these APs, the version number is set to 1 by default. This
66
* configuration value can be used to set it to the new version (2).
71
* ap_scan - AP scanning/selection
73
* By default, wpa_supplicant requests driver to perform AP
74
* scanning and then uses the scan results to select a
75
* suitable AP. Another alternative is to allow the driver to
76
* take care of AP scanning and selection and use
77
* wpa_supplicant just to process EAPOL frames based on IEEE
78
* 802.11 association information from the driver.
80
* 1: wpa_supplicant initiates scanning and AP selection (default).
82
* 0: Driver takes care of scanning, AP selection, and IEEE 802.11
83
* association parameters (e.g., WPA IE generation); this mode can
84
* also be used with non-WPA drivers when using IEEE 802.1X mode;
85
* do not try to associate with APs (i.e., external program needs
86
* to control association). This mode must also be used when using
87
* wired Ethernet drivers.
89
* 2: like 0, but associate with APs using security policy and SSID
90
* (but not BSSID); this can be used, e.g., with ndiswrapper and NDIS
91
* drivers to enable operation with hidden SSIDs and optimized roaming;
92
* in this mode, the network blocks in the configuration are tried
93
* one by one until the driver reports successful association; each
94
* network block should have explicit security policy (i.e., only one
95
* option in the lists) for key_mgmt, pairwise, group, proto variables.
100
* ctrl_interface - Parameters for the control interface
102
* If this is specified, %wpa_supplicant will open a control interface
103
* that is available for external programs to manage %wpa_supplicant.
104
* The meaning of this string depends on which control interface
105
* mechanism is used. For all cases, the existance of this parameter
106
* in configuration is used to determine whether the control interface
109
* For UNIX domain sockets (default on Linux and BSD): This is a
110
* directory that will be created for UNIX domain sockets for listening
111
* to requests from external programs (CLI/GUI, etc.) for status
112
* information and configuration. The socket file will be named based
113
* on the interface name, so multiple %wpa_supplicant processes can be
114
* run at the same time if more than one interface is used.
115
* /var/run/wpa_supplicant is the recommended directory for sockets and
116
* by default, wpa_cli will use it when trying to connect with
119
* Access control for the control interface can be configured
120
* by setting the directory to allow only members of a group
121
* to use sockets. This way, it is possible to run
122
* %wpa_supplicant as root (since it needs to change network
123
* configuration and open raw sockets) and still allow GUI/CLI
124
* components to be run as non-root users. However, since the
125
* control interface can be used to change the network
126
* configuration, this access needs to be protected in many
127
* cases. By default, %wpa_supplicant is configured to use gid
128
* 0 (root). If you want to allow non-root users to use the
129
* control interface, add a new group and change this value to
130
* match with that group. Add users that should have control
131
* interface access to this group.
133
* When configuring both the directory and group, use following format:
134
* DIR=/var/run/wpa_supplicant GROUP=wheel
135
* DIR=/var/run/wpa_supplicant GROUP=0
136
* (group can be either group name or gid)
138
* For UDP connections (default on Windows): The value will be ignored.
139
* This variable is just used to select that the control interface is
140
* to be created. The value can be set to, e.g., udp
141
* (ctrl_interface=udp).
143
* For Windows Named Pipe: This value can be used to set the security
144
* descriptor for controlling access to the control interface. Security
145
* descriptor can be set using Security Descriptor String Format (see
146
* http://msdn.microsoft.com/library/default.asp?url=/library/en-us/secauthz/security/security_descriptor_string_format.asp).
147
* The descriptor string needs to be prefixed with SDDL=. For example,
148
* ctrl_interface=SDDL=D: would set an empty DACL (which will reject
151
char *ctrl_interface;
154
* ctrl_interface_group - Control interface group (DEPRECATED)
156
* This variable is only used for backwards compatibility. Group for
157
* UNIX domain sockets should now be specified using GROUP=<group> in
158
* ctrl_interface variable.
160
char *ctrl_interface_group;
163
* fast_reauth - EAP fast re-authentication (session resumption)
165
* By default, fast re-authentication is enabled for all EAP methods
166
* that support it. This variable can be used to disable fast
167
* re-authentication (by setting fast_reauth=0). Normally, there is no
168
* need to disable fast re-authentication.
172
#ifdef EAP_TLS_OPENSSL
174
* opensc_engine_path - Path to the OpenSSL engine for opensc
176
* This is an OpenSSL specific configuration option for loading OpenSC
177
* engine (engine_opensc.so); if %NULL, this engine is not loaded.
179
char *opensc_engine_path;
182
* pkcs11_engine_path - Path to the OpenSSL engine for PKCS#11
184
* This is an OpenSSL specific configuration option for loading PKCS#11
185
* engine (engine_pkcs11.so); if %NULL, this engine is not loaded.
187
char *pkcs11_engine_path;
190
* pkcs11_module_path - Path to the OpenSSL OpenSC/PKCS#11 module
192
* This is an OpenSSL specific configuration option for configuring
193
* path to OpenSC/PKCS#11 engine (opensc-pkcs11.so); if %NULL, this
194
* module is not loaded.
196
char *pkcs11_module_path;
197
#endif /* EAP_TLS_OPENSSL */
200
* driver_param - Driver interface parameters
202
* This text string is passed to the selected driver interface with the
203
* optional struct wpa_driver_ops::set_param() handler. This can be
204
* used to configure driver specific options without having to add new
205
* driver interface functionality.
210
* dot11RSNAConfigPMKLifetime - Maximum lifetime of a PMK
212
* dot11 MIB variable for the maximum lifetime of a PMK in the PMK
213
* cache (unit: seconds).
215
unsigned int dot11RSNAConfigPMKLifetime;
218
* dot11RSNAConfigPMKReauthThreshold - PMK re-authentication threshold
220
* dot11 MIB variable for the percentage of the PMK lifetime
221
* that should expire before an IEEE 802.1X reauthentication occurs.
223
unsigned int dot11RSNAConfigPMKReauthThreshold;
226
* dot11RSNAConfigSATimeout - Security association timeout
228
* dot11 MIB variable for the maximum time a security association
229
* shall take to set up (unit: seconds).
231
unsigned int dot11RSNAConfigSATimeout;
234
* update_config - Is wpa_supplicant allowed to update configuration
236
* This variable control whether wpa_supplicant is allow to re-write
237
* its configuration with wpa_config_write(). If this is zero,
238
* configuration data is only changed in memory and the external data
239
* is not overriden. If this is non-zero, wpa_supplicant will update
240
* the configuration data (e.g., a file) whenever configuration is
241
* changed. This update may replace the old configuration which can
242
* remove comments from it in case of a text file configuration.
247
* blobs - Configuration blobs
249
struct wpa_config_blob *blobs;
253
/* Prototypes for common functions from config.c */
255
void wpa_config_free(struct wpa_config *ssid);
256
void wpa_config_free_ssid(struct wpa_ssid *ssid);
257
struct wpa_ssid * wpa_config_get_network(struct wpa_config *config, int id);
258
struct wpa_ssid * wpa_config_add_network(struct wpa_config *config);
259
int wpa_config_remove_network(struct wpa_config *config, int id);
260
void wpa_config_set_network_defaults(struct wpa_ssid *ssid);
261
int wpa_config_set(struct wpa_ssid *ssid, const char *var, const char *value,
263
char * wpa_config_get(struct wpa_ssid *ssid, const char *var);
264
char * wpa_config_get_no_key(struct wpa_ssid *ssid, const char *var);
265
void wpa_config_update_psk(struct wpa_ssid *ssid);
266
int wpa_config_add_prio_network(struct wpa_config *config,
267
struct wpa_ssid *ssid);
268
const struct wpa_config_blob * wpa_config_get_blob(struct wpa_config *config,
270
void wpa_config_set_blob(struct wpa_config *config,
271
struct wpa_config_blob *blob);
272
void wpa_config_free_blob(struct wpa_config_blob *blob);
273
int wpa_config_remove_blob(struct wpa_config *config, const char *name);
275
struct wpa_config * wpa_config_alloc_empty(const char *ctrl_interface,
276
const char *driver_param);
277
#ifndef CONFIG_NO_STDOUT_DEBUG
278
void wpa_config_debug_dump_networks(struct wpa_config *config);
279
#else /* CONFIG_NO_STDOUT_DEBUG */
280
#define wpa_config_debug_dump_networks(c) do { } while (0)
281
#endif /* CONFIG_NO_STDOUT_DEBUG */
284
/* Prototypes for backend specific functions from the selected config_*.c */
287
* wpa_config_read - Read and parse configuration database
288
* @name: Name of the configuration (e.g., path and file name for the
289
* configuration file)
290
* Returns: Pointer to allocated configuration data or %NULL on failure
292
* This function reads configuration data, parses its contents, and allocates
293
* data structures needed for storing configuration information. The allocated
294
* data can be freed with wpa_config_free().
296
* Each configuration backend needs to implement this function.
298
struct wpa_config * wpa_config_read(const char *name);
301
* wpa_config_write - Write or update configuration data
302
* @name: Name of the configuration (e.g., path and file name for the
303
* configuration file)
304
* @config: Configuration data from wpa_config_read()
305
* Returns: 0 on success, -1 on failure
307
* This function write all configuration data into an external database (e.g.,
308
* a text file) in a format that can be read with wpa_config_read(). This can
309
* be used to allow wpa_supplicant to update its configuration, e.g., when a
310
* new network is added or a password is changed.
312
* Each configuration backend needs to implement this function.
314
int wpa_config_write(const char *name, struct wpa_config *config);
316
#endif /* CONFIG_H */