| /* |
| * WPA Supplicant / Configuration file structures |
| * Copyright (c) 2003-2005, Jouni Malinen <[email protected]> |
| * |
| * This program is free software; you can redistribute it and/or modify |
| * it under the terms of the GNU General Public License version 2 as |
| * published by the Free Software Foundation. |
| * |
| * Alternatively, this software may be distributed under the terms of BSD |
| * license. |
| * |
| * See README and COPYING for more details. |
| */ |
| |
| #ifndef CONFIG_H |
| #define CONFIG_H |
| |
| #define DEFAULT_EAPOL_VERSION 1 |
| #define DEFAULT_AP_SCAN 1 |
| #define DEFAULT_FAST_REAUTH 1 |
| |
| #include "config_ssid.h" |
| |
| /** |
| * struct wpa_config_blob - Named configuration blob |
| * |
| * This data structure is used to provide storage for binary objects to store |
| * abstract information like certificates and private keys inlined with the |
| * configuration data. |
| */ |
| struct wpa_config_blob { |
| /** |
| * name - Blob name |
| */ |
| char *name; |
| |
| /** |
| * data - Pointer to binary data |
| */ |
| u8 *data; |
| |
| /** |
| * len - Length of binary data |
| */ |
| size_t len; |
| |
| /** |
| * next - Pointer to next blob in the configuration |
| */ |
| struct wpa_config_blob *next; |
| }; |
| |
| |
| /** |
| * struct wpa_config - wpa_supplicant configuration data |
| * |
| * This data structure is presents the per-interface (radio) configuration |
| * data. In many cases, there is only one struct wpa_config instance, but if |
| * more than one network interface is being controlled, one instance is used |
| * for each. |
| */ |
| struct wpa_config { |
| /** |
| * ssid - Head of the global network list |
| * |
| * This is the head for the list of all the configured networks. |
| */ |
| struct wpa_ssid *ssid; |
| |
| /** |
| * pssid - Per-priority network lists (in priority order) |
| */ |
| struct wpa_ssid **pssid; |
| |
| /** |
| * num_prio - Number of different priorities used in the pssid lists |
| * |
| * This indicates how many per-priority network lists are included in |
| * pssid. |
| */ |
| int num_prio; |
| |
| /** |
| * eapol_version - IEEE 802.1X/EAPOL version number |
| * |
| * wpa_supplicant is implemented based on IEEE Std 802.1X-2004 which |
| * defines EAPOL version 2. However, there are many APs that do not |
| * handle the new version number correctly (they seem to drop the |
| * frames completely). In order to make wpa_supplicant interoperate |
| * with these APs, the version number is set to 1 by default. This |
| * configuration value can be used to set it to the new version (2). |
| */ |
| int eapol_version; |
| |
| /** |
| * ap_scan - AP scanning/selection |
| * |
| * By default, wpa_supplicant requests driver to perform AP |
| * scanning and then uses the scan results to select a |
| * suitable AP. Another alternative is to allow the driver to |
| * take care of AP scanning and selection and use |
| * wpa_supplicant just to process EAPOL frames based on IEEE |
| * 802.11 association information from the driver. |
| * |
| * 1: wpa_supplicant initiates scanning and AP selection (default). |
| * |
| * 0: Driver takes care of scanning, AP selection, and IEEE 802.11 |
| * association parameters (e.g., WPA IE generation); this mode can |
| * also be used with non-WPA drivers when using IEEE 802.1X mode; |
| * do not try to associate with APs (i.e., external program needs |
| * to control association). This mode must also be used when using |
| * wired Ethernet drivers. |
| * |
| * 2: like 0, but associate with APs using security policy and SSID |
| * (but not BSSID); this can be used, e.g., with ndiswrapper and NDIS |
| * drivers to enable operation with hidden SSIDs and optimized roaming; |
| * in this mode, the network blocks in the configuration are tried |
| * one by one until the driver reports successful association; each |
| * network block should have explicit security policy (i.e., only one |
| * option in the lists) for key_mgmt, pairwise, group, proto variables. |
| */ |
| int ap_scan; |
| |
| /** |
| * ctrl_interface - Parameters for the control interface |
| * |
| * If this is specified, %wpa_supplicant will open a control interface |
| * that is available for external programs to manage %wpa_supplicant. |
| * The meaning of this string depends on which control interface |
| * mechanism is used. For all cases, the existance of this parameter |
| * in configuration is used to determine whether the control interface |
| * is enabled. |
| * |
| * For UNIX domain sockets (default on Linux and BSD): This is a |
| * directory that will be created for UNIX domain sockets for listening |
| * to requests from external programs (CLI/GUI, etc.) for status |
| * information and configuration. The socket file will be named based |
| * on the interface name, so multiple %wpa_supplicant processes can be |
| * run at the same time if more than one interface is used. |
| * /var/run/wpa_supplicant is the recommended directory for sockets and |
| * by default, wpa_cli will use it when trying to connect with |
| * %wpa_supplicant. |
| * |
| * Access control for the control interface can be configured |
| * by setting the directory to allow only members of a group |
| * to use sockets. This way, it is possible to run |
| * %wpa_supplicant as root (since it needs to change network |
| * configuration and open raw sockets) and still allow GUI/CLI |
| * components to be run as non-root users. However, since the |
| * control interface can be used to change the network |
| * configuration, this access needs to be protected in many |
| * cases. By default, %wpa_supplicant is configured to use gid |
| * 0 (root). If you want to allow non-root users to use the |
| * control interface, add a new group and change this value to |
| * match with that group. Add users that should have control |
| * interface access to this group. |
| * |
| * When configuring both the directory and group, use following format: |
| * DIR=/var/run/wpa_supplicant GROUP=wheel |
| * DIR=/var/run/wpa_supplicant GROUP=0 |
| * (group can be either group name or gid) |
| * |
| * For UDP connections (default on Windows): The value will be ignored. |
| * This variable is just used to select that the control interface is |
| * to be created. The value can be set to, e.g., udp |
| * (ctrl_interface=udp). |
| * |
| * For Windows Named Pipe: This value can be used to set the security |
| * descriptor for controlling access to the control interface. Security |
| * descriptor can be set using Security Descriptor String Format (see |
| * http://msdn.microsoft.com/library/default.asp?url=/library/en-us/secauthz/security/security_descriptor_string_format.asp). |
| * The descriptor string needs to be prefixed with SDDL=. For example, |
| * ctrl_interface=SDDL=D: would set an empty DACL (which will reject |
| * all connections). |
| */ |
| char *ctrl_interface; |
| |
| /** |
| * ctrl_interface_group - Control interface group (DEPRECATED) |
| * |
| * This variable is only used for backwards compatibility. Group for |
| * UNIX domain sockets should now be specified using GROUP=<group> in |
| * ctrl_interface variable. |
| */ |
| char *ctrl_interface_group; |
| |
| /** |
| * fast_reauth - EAP fast re-authentication (session resumption) |
| * |
| * By default, fast re-authentication is enabled for all EAP methods |
| * that support it. This variable can be used to disable fast |
| * re-authentication (by setting fast_reauth=0). Normally, there is no |
| * need to disable fast re-authentication. |
| */ |
| int fast_reauth; |
| |
| /** |
| * opensc_engine_path - Path to the OpenSSL engine for opensc |
| * |
| * This is an OpenSSL specific configuration option for loading OpenSC |
| * engine (engine_opensc.so); if %NULL, this engine is not loaded. |
| */ |
| char *opensc_engine_path; |
| |
| /** |
| * pkcs11_engine_path - Path to the OpenSSL engine for PKCS#11 |
| * |
| * This is an OpenSSL specific configuration option for loading PKCS#11 |
| * engine (engine_pkcs11.so); if %NULL, this engine is not loaded. |
| */ |
| char *pkcs11_engine_path; |
| |
| /** |
| * pkcs11_module_path - Path to the OpenSSL OpenSC/PKCS#11 module |
| * |
| * This is an OpenSSL specific configuration option for configuring |
| * path to OpenSC/PKCS#11 engine (opensc-pkcs11.so); if %NULL, this |
| * module is not loaded. |
| */ |
| char *pkcs11_module_path; |
| |
| /** |
| * driver_param - Driver interface parameters |
| * |
| * This text string is passed to the selected driver interface with the |
| * optional struct wpa_driver_ops::set_param() handler. This can be |
| * used to configure driver specific options without having to add new |
| * driver interface functionality. |
| */ |
| char *driver_param; |
| |
| /** |
| * dot11RSNAConfigPMKLifetime - Maximum lifetime of a PMK |
| * |
| * dot11 MIB variable for the maximum lifetime of a PMK in the PMK |
| * cache (unit: seconds). |
| */ |
| unsigned int dot11RSNAConfigPMKLifetime; |
| |
| /** |
| * dot11RSNAConfigPMKReauthThreshold - PMK re-authentication threshold |
| * |
| * dot11 MIB variable for the percentage of the PMK lifetime |
| * that should expire before an IEEE 802.1X reauthentication occurs. |
| */ |
| unsigned int dot11RSNAConfigPMKReauthThreshold; |
| |
| /** |
| * dot11RSNAConfigSATimeout - Security association timeout |
| * |
| * dot11 MIB variable for the maximum time a security association |
| * shall take to set up (unit: seconds). |
| */ |
| unsigned int dot11RSNAConfigSATimeout; |
| |
| /** |
| * update_config - Is wpa_supplicant allowed to update configuration |
| * |
| * This variable control whether wpa_supplicant is allow to re-write |
| * its configuration with wpa_config_write(). If this is zero, |
| * configuration data is only changed in memory and the external data |
| * is not overriden. If this is non-zero, wpa_supplicant will update |
| * the configuration data (e.g., a file) whenever configuration is |
| * changed. This update may replace the old configuration which can |
| * remove comments from it in case of a text file configuration. |
| */ |
| int update_config; |
| |
| /** |
| * blobs - Configuration blobs |
| */ |
| struct wpa_config_blob *blobs; |
| }; |
| |
| |
| /* Prototypes for common functions from config.c */ |
| |
| void wpa_config_free(struct wpa_config *ssid); |
| void wpa_config_free_ssid(struct wpa_ssid *ssid); |
| struct wpa_ssid * wpa_config_get_network(struct wpa_config *config, int id); |
| struct wpa_ssid * wpa_config_add_network(struct wpa_config *config); |
| int wpa_config_remove_network(struct wpa_config *config, int id); |
| void wpa_config_set_network_defaults(struct wpa_ssid *ssid); |
| int wpa_config_set(struct wpa_ssid *ssid, const char *var, const char *value, |
| int line); |
| char * wpa_config_get(struct wpa_ssid *ssid, const char *var); |
| char * wpa_config_get_no_key(struct wpa_ssid *ssid, const char *var); |
| void wpa_config_update_psk(struct wpa_ssid *ssid); |
| int wpa_config_add_prio_network(struct wpa_config *config, |
| struct wpa_ssid *ssid); |
| |
| const struct wpa_config_blob * wpa_config_get_blob(struct wpa_config *config, |
| const char *name); |
| void wpa_config_set_blob(struct wpa_config *config, |
| struct wpa_config_blob *blob); |
| void wpa_config_free_blob(struct wpa_config_blob *blob); |
| int wpa_config_remove_blob(struct wpa_config *config, const char *name); |
| struct wpa_config * wpa_config_alloc_empty(const char *ctrl_interface, |
| const char *driver_param); |
| #ifndef CONFIG_NO_STDOUT_DEBUG |
| void wpa_config_debug_dump_networks(struct wpa_config *config); |
| #else /* CONFIG_NO_STDOUT_DEBUG */ |
| #define wpa_config_debug_dump_networks(c) do { } while (0) |
| #endif /* CONFIG_NO_STDOUT_DEBUG */ |
| |
| |
| /* Prototypes for backend specific functions from the selected config_*.c */ |
| |
| /** |
| * wpa_config_read - Read and parse configuration database |
| * @name: Name of the configuration (e.g., path and file name for the |
| * configuration file) |
| * Returns: Pointer to allocated configuration data or %NULL on failure |
| * |
| * This function reads configuration data, parses its contents, and allocates |
| * data structures needed for storing configuration information. The allocated |
| * data can be freed with wpa_config_free(). |
| * |
| * Each configuration backend needs to implement this function. |
| */ |
| struct wpa_config * wpa_config_read(const char *name); |
| |
| /** |
| * wpa_config_write - Write or update configuration data |
| * @name: Name of the configuration (e.g., path and file name for the |
| * configuration file) |
| * @config: Configuration data from wpa_config_read() |
| * Returns: 0 on success, -1 on failure |
| * |
| * This function write all configuration data into an external database (e.g., |
| * a text file) in a format that can be read with wpa_config_read(). This can |
| * be used to allow wpa_supplicant to update its configuration, e.g., when a |
| * new network is added or a password is changed. |
| * |
| * Each configuration backend needs to implement this function. |
| */ |
| int wpa_config_write(const char *name, struct wpa_config *config); |
| |
| #endif /* CONFIG_H */ |