LCOV - code coverage report
Current view: top level - wpa_supplicant - wpa_supplicant_i.h (source / functions) Hit Total Coverage
Test: wpa_supplicant/hostapd combined for hwsim test run 1388338050 Lines: 2 2 100.0 %
Date: 2013-12-29 Functions: 1 1 100.0 %
Branches: 3 4 75.0 %

           Branch data     Line data    Source code
       1                 :            : /*
       2                 :            :  * wpa_supplicant - Internal definitions
       3                 :            :  * Copyright (c) 2003-2012, Jouni Malinen <j@w1.fi>
       4                 :            :  *
       5                 :            :  * This software may be distributed under the terms of the BSD license.
       6                 :            :  * See README for more details.
       7                 :            :  */
       8                 :            : 
       9                 :            : #ifndef WPA_SUPPLICANT_I_H
      10                 :            : #define WPA_SUPPLICANT_I_H
      11                 :            : 
      12                 :            : #include "utils/list.h"
      13                 :            : #include "common/defs.h"
      14                 :            : #include "common/sae.h"
      15                 :            : #include "config_ssid.h"
      16                 :            : 
      17                 :            : extern const char *wpa_supplicant_version;
      18                 :            : extern const char *wpa_supplicant_license;
      19                 :            : #ifndef CONFIG_NO_STDOUT_DEBUG
      20                 :            : extern const char *wpa_supplicant_full_license1;
      21                 :            : extern const char *wpa_supplicant_full_license2;
      22                 :            : extern const char *wpa_supplicant_full_license3;
      23                 :            : extern const char *wpa_supplicant_full_license4;
      24                 :            : extern const char *wpa_supplicant_full_license5;
      25                 :            : #endif /* CONFIG_NO_STDOUT_DEBUG */
      26                 :            : 
      27                 :            : struct wpa_sm;
      28                 :            : struct wpa_supplicant;
      29                 :            : struct ibss_rsn;
      30                 :            : struct scan_info;
      31                 :            : struct wpa_bss;
      32                 :            : struct wpa_scan_results;
      33                 :            : struct hostapd_hw_modes;
      34                 :            : struct wpa_driver_associate_params;
      35                 :            : 
      36                 :            : /*
      37                 :            :  * Forward declarations of private structures used within the ctrl_iface
      38                 :            :  * backends. Other parts of wpa_supplicant do not have access to data stored in
      39                 :            :  * these structures.
      40                 :            :  */
      41                 :            : struct ctrl_iface_priv;
      42                 :            : struct ctrl_iface_global_priv;
      43                 :            : struct wpas_dbus_priv;
      44                 :            : 
      45                 :            : /**
      46                 :            :  * struct wpa_interface - Parameters for wpa_supplicant_add_iface()
      47                 :            :  */
      48                 :            : struct wpa_interface {
      49                 :            :         /**
      50                 :            :          * confname - Configuration name (file or profile) name
      51                 :            :          *
      52                 :            :          * This can also be %NULL when a configuration file is not used. In
      53                 :            :          * that case, ctrl_interface must be set to allow the interface to be
      54                 :            :          * configured.
      55                 :            :          */
      56                 :            :         const char *confname;
      57                 :            : 
      58                 :            :         /**
      59                 :            :          * confanother - Additional configuration name (file or profile) name
      60                 :            :          *
      61                 :            :          * This can also be %NULL when the additional configuration file is not
      62                 :            :          * used.
      63                 :            :          */
      64                 :            :         const char *confanother;
      65                 :            : 
      66                 :            :         /**
      67                 :            :          * ctrl_interface - Control interface parameter
      68                 :            :          *
      69                 :            :          * If a configuration file is not used, this variable can be used to
      70                 :            :          * set the ctrl_interface parameter that would have otherwise been read
      71                 :            :          * from the configuration file. If both confname and ctrl_interface are
      72                 :            :          * set, ctrl_interface is used to override the value from configuration
      73                 :            :          * file.
      74                 :            :          */
      75                 :            :         const char *ctrl_interface;
      76                 :            : 
      77                 :            :         /**
      78                 :            :          * driver - Driver interface name, or %NULL to use the default driver
      79                 :            :          */
      80                 :            :         const char *driver;
      81                 :            : 
      82                 :            :         /**
      83                 :            :          * driver_param - Driver interface parameters
      84                 :            :          *
      85                 :            :          * If a configuration file is not used, this variable can be used to
      86                 :            :          * set the driver_param parameters that would have otherwise been read
      87                 :            :          * from the configuration file. If both confname and driver_param are
      88                 :            :          * set, driver_param is used to override the value from configuration
      89                 :            :          * file.
      90                 :            :          */
      91                 :            :         const char *driver_param;
      92                 :            : 
      93                 :            :         /**
      94                 :            :          * ifname - Interface name
      95                 :            :          */
      96                 :            :         const char *ifname;
      97                 :            : 
      98                 :            :         /**
      99                 :            :          * bridge_ifname - Optional bridge interface name
     100                 :            :          *
     101                 :            :          * If the driver interface (ifname) is included in a Linux bridge
     102                 :            :          * device, the bridge interface may need to be used for receiving EAPOL
     103                 :            :          * frames. This can be enabled by setting this variable to enable
     104                 :            :          * receiving of EAPOL frames from an additional interface.
     105                 :            :          */
     106                 :            :         const char *bridge_ifname;
     107                 :            : 
     108                 :            :         /**
     109                 :            :          * p2p_mgmt - Interface used for P2P management (P2P Device operations)
     110                 :            :          *
     111                 :            :          * Indicates whether wpas_p2p_init() must be called for this interface.
     112                 :            :          * This is used only when the driver supports a dedicated P2P Device
     113                 :            :          * interface that is not a network interface.
     114                 :            :          */
     115                 :            :         int p2p_mgmt;
     116                 :            : };
     117                 :            : 
     118                 :            : /**
     119                 :            :  * struct wpa_params - Parameters for wpa_supplicant_init()
     120                 :            :  */
     121                 :            : struct wpa_params {
     122                 :            :         /**
     123                 :            :          * daemonize - Run %wpa_supplicant in the background
     124                 :            :          */
     125                 :            :         int daemonize;
     126                 :            : 
     127                 :            :         /**
     128                 :            :          * wait_for_monitor - Wait for a monitor program before starting
     129                 :            :          */
     130                 :            :         int wait_for_monitor;
     131                 :            : 
     132                 :            :         /**
     133                 :            :          * pid_file - Path to a PID (process ID) file
     134                 :            :          *
     135                 :            :          * If this and daemonize are set, process ID of the background process
     136                 :            :          * will be written to the specified file.
     137                 :            :          */
     138                 :            :         char *pid_file;
     139                 :            : 
     140                 :            :         /**
     141                 :            :          * wpa_debug_level - Debugging verbosity level (e.g., MSG_INFO)
     142                 :            :          */
     143                 :            :         int wpa_debug_level;
     144                 :            : 
     145                 :            :         /**
     146                 :            :          * wpa_debug_show_keys - Whether keying material is included in debug
     147                 :            :          *
     148                 :            :          * This parameter can be used to allow keying material to be included
     149                 :            :          * in debug messages. This is a security risk and this option should
     150                 :            :          * not be enabled in normal configuration. If needed during
     151                 :            :          * development or while troubleshooting, this option can provide more
     152                 :            :          * details for figuring out what is happening.
     153                 :            :          */
     154                 :            :         int wpa_debug_show_keys;
     155                 :            : 
     156                 :            :         /**
     157                 :            :          * wpa_debug_timestamp - Whether to include timestamp in debug messages
     158                 :            :          */
     159                 :            :         int wpa_debug_timestamp;
     160                 :            : 
     161                 :            :         /**
     162                 :            :          * ctrl_interface - Global ctrl_iface path/parameter
     163                 :            :          */
     164                 :            :         char *ctrl_interface;
     165                 :            : 
     166                 :            :         /**
     167                 :            :          * ctrl_interface_group - Global ctrl_iface group
     168                 :            :          */
     169                 :            :         char *ctrl_interface_group;
     170                 :            : 
     171                 :            :         /**
     172                 :            :          * dbus_ctrl_interface - Enable the DBus control interface
     173                 :            :          */
     174                 :            :         int dbus_ctrl_interface;
     175                 :            : 
     176                 :            :         /**
     177                 :            :          * wpa_debug_file_path - Path of debug file or %NULL to use stdout
     178                 :            :          */
     179                 :            :         const char *wpa_debug_file_path;
     180                 :            : 
     181                 :            :         /**
     182                 :            :          * wpa_debug_syslog - Enable log output through syslog
     183                 :            :          */
     184                 :            :         int wpa_debug_syslog;
     185                 :            : 
     186                 :            :         /**
     187                 :            :          * wpa_debug_tracing - Enable log output through Linux tracing
     188                 :            :          */
     189                 :            :         int wpa_debug_tracing;
     190                 :            : 
     191                 :            :         /**
     192                 :            :          * override_driver - Optional driver parameter override
     193                 :            :          *
     194                 :            :          * This parameter can be used to override the driver parameter in
     195                 :            :          * dynamic interface addition to force a specific driver wrapper to be
     196                 :            :          * used instead.
     197                 :            :          */
     198                 :            :         char *override_driver;
     199                 :            : 
     200                 :            :         /**
     201                 :            :          * override_ctrl_interface - Optional ctrl_interface override
     202                 :            :          *
     203                 :            :          * This parameter can be used to override the ctrl_interface parameter
     204                 :            :          * in dynamic interface addition to force a control interface to be
     205                 :            :          * created.
     206                 :            :          */
     207                 :            :         char *override_ctrl_interface;
     208                 :            : 
     209                 :            :         /**
     210                 :            :          * entropy_file - Optional entropy file
     211                 :            :          *
     212                 :            :          * This parameter can be used to configure wpa_supplicant to maintain
     213                 :            :          * its internal entropy store over restarts.
     214                 :            :          */
     215                 :            :         char *entropy_file;
     216                 :            : };
     217                 :            : 
     218                 :            : struct p2p_srv_bonjour {
     219                 :            :         struct dl_list list;
     220                 :            :         struct wpabuf *query;
     221                 :            :         struct wpabuf *resp;
     222                 :            : };
     223                 :            : 
     224                 :            : struct p2p_srv_upnp {
     225                 :            :         struct dl_list list;
     226                 :            :         u8 version;
     227                 :            :         char *service;
     228                 :            : };
     229                 :            : 
     230                 :            : /**
     231                 :            :  * struct wpa_global - Internal, global data for all %wpa_supplicant interfaces
     232                 :            :  *
     233                 :            :  * This structure is initialized by calling wpa_supplicant_init() when starting
     234                 :            :  * %wpa_supplicant.
     235                 :            :  */
     236                 :            : struct wpa_global {
     237                 :            :         struct wpa_supplicant *ifaces;
     238                 :            :         struct wpa_params params;
     239                 :            :         struct ctrl_iface_global_priv *ctrl_iface;
     240                 :            :         struct wpas_dbus_priv *dbus;
     241                 :            :         void **drv_priv;
     242                 :            :         size_t drv_count;
     243                 :            :         struct os_time suspend_time;
     244                 :            :         struct p2p_data *p2p;
     245                 :            :         struct wpa_supplicant *p2p_init_wpa_s;
     246                 :            :         struct wpa_supplicant *p2p_group_formation;
     247                 :            :         struct wpa_supplicant *p2p_invite_group;
     248                 :            :         u8 p2p_dev_addr[ETH_ALEN];
     249                 :            :         struct os_reltime p2p_go_wait_client;
     250                 :            :         struct dl_list p2p_srv_bonjour; /* struct p2p_srv_bonjour */
     251                 :            :         struct dl_list p2p_srv_upnp; /* struct p2p_srv_upnp */
     252                 :            :         int p2p_disabled;
     253                 :            :         int cross_connection;
     254                 :            :         struct wpa_freq_range_list p2p_disallow_freq;
     255                 :            :         enum wpa_conc_pref {
     256                 :            :                 WPA_CONC_PREF_NOT_SET,
     257                 :            :                 WPA_CONC_PREF_STA,
     258                 :            :                 WPA_CONC_PREF_P2P
     259                 :            :         } conc_pref;
     260                 :            :         unsigned int p2p_cb_on_scan_complete:1;
     261                 :            :         unsigned int p2p_per_sta_psk:1;
     262                 :            : 
     263                 :            : #ifdef CONFIG_WIFI_DISPLAY
     264                 :            :         int wifi_display;
     265                 :            : #define MAX_WFD_SUBELEMS 10
     266                 :            :         struct wpabuf *wfd_subelem[MAX_WFD_SUBELEMS];
     267                 :            : #endif /* CONFIG_WIFI_DISPLAY */
     268                 :            : 
     269                 :            :         struct psk_list_entry *add_psk; /* From group formation */
     270                 :            : };
     271                 :            : 
     272                 :            : 
     273                 :            : /**
     274                 :            :  * struct wpa_radio - Internal data for per-radio information
     275                 :            :  *
     276                 :            :  * This structure is used to share data about configured interfaces
     277                 :            :  * (struct wpa_supplicant) that share the same physical radio, e.g., to allow
     278                 :            :  * better coordination of offchannel operations.
     279                 :            :  */
     280                 :            : struct wpa_radio {
     281                 :            :         char name[16]; /* from driver_ops get_radio_name() or empty if not
     282                 :            :                         * available */
     283                 :            :         struct dl_list ifaces; /* struct wpa_supplicant::radio_list entries */
     284                 :            : };
     285                 :            : 
     286                 :            : /**
     287                 :            :  * offchannel_send_action_result - Result of offchannel send Action frame
     288                 :            :  */
     289                 :            : enum offchannel_send_action_result {
     290                 :            :         OFFCHANNEL_SEND_ACTION_SUCCESS /**< Frame was send and acknowledged */,
     291                 :            :         OFFCHANNEL_SEND_ACTION_NO_ACK /**< Frame was sent, but not acknowledged
     292                 :            :                                        */,
     293                 :            :         OFFCHANNEL_SEND_ACTION_FAILED /**< Frame was not sent due to a failure
     294                 :            :                                        */
     295                 :            : };
     296                 :            : 
     297                 :            : struct wps_ap_info {
     298                 :            :         u8 bssid[ETH_ALEN];
     299                 :            :         enum wps_ap_info_type {
     300                 :            :                 WPS_AP_NOT_SEL_REG,
     301                 :            :                 WPS_AP_SEL_REG,
     302                 :            :                 WPS_AP_SEL_REG_OUR
     303                 :            :         } type;
     304                 :            :         unsigned int tries;
     305                 :            :         struct os_reltime last_attempt;
     306                 :            : };
     307                 :            : 
     308                 :            : struct wpa_ssid_value {
     309                 :            :         u8 ssid[32];
     310                 :            :         size_t ssid_len;
     311                 :            : };
     312                 :            : 
     313                 :            : /**
     314                 :            :  * struct wpa_supplicant - Internal data for wpa_supplicant interface
     315                 :            :  *
     316                 :            :  * This structure contains the internal data for core wpa_supplicant code. This
     317                 :            :  * should be only used directly from the core code. However, a pointer to this
     318                 :            :  * data is used from other files as an arbitrary context pointer in calls to
     319                 :            :  * core functions.
     320                 :            :  */
     321                 :            : struct wpa_supplicant {
     322                 :            :         struct wpa_global *global;
     323                 :            :         struct wpa_radio *radio; /* shared radio context */
     324                 :            :         struct dl_list radio_list; /* list head: struct wpa_radio::ifaces */
     325                 :            :         struct wpa_supplicant *parent;
     326                 :            :         struct wpa_supplicant *next;
     327                 :            :         struct l2_packet_data *l2;
     328                 :            :         struct l2_packet_data *l2_br;
     329                 :            :         unsigned char own_addr[ETH_ALEN];
     330                 :            :         char ifname[100];
     331                 :            : #ifdef CONFIG_CTRL_IFACE_DBUS
     332                 :            :         char *dbus_path;
     333                 :            : #endif /* CONFIG_CTRL_IFACE_DBUS */
     334                 :            : #ifdef CONFIG_CTRL_IFACE_DBUS_NEW
     335                 :            :         char *dbus_new_path;
     336                 :            :         char *dbus_groupobj_path;
     337                 :            : #ifdef CONFIG_AP
     338                 :            :         char *preq_notify_peer;
     339                 :            : #endif /* CONFIG_AP */
     340                 :            : #endif /* CONFIG_CTRL_IFACE_DBUS_NEW */
     341                 :            :         char bridge_ifname[16];
     342                 :            : 
     343                 :            :         char *confname;
     344                 :            :         char *confanother;
     345                 :            :         struct wpa_config *conf;
     346                 :            :         int countermeasures;
     347                 :            :         struct os_reltime last_michael_mic_error;
     348                 :            :         u8 bssid[ETH_ALEN];
     349                 :            :         u8 pending_bssid[ETH_ALEN]; /* If wpa_state == WPA_ASSOCIATING, this
     350                 :            :                                      * field contains the target BSSID. */
     351                 :            :         int reassociate; /* reassociation requested */
     352                 :            :         int disconnected; /* all connections disabled; i.e., do no reassociate
     353                 :            :                            * before this has been cleared */
     354                 :            :         struct wpa_ssid *current_ssid;
     355                 :            :         struct wpa_bss *current_bss;
     356                 :            :         int ap_ies_from_associnfo;
     357                 :            :         unsigned int assoc_freq;
     358                 :            : 
     359                 :            :         /* Selected configuration (based on Beacon/ProbeResp WPA IE) */
     360                 :            :         int pairwise_cipher;
     361                 :            :         int group_cipher;
     362                 :            :         int key_mgmt;
     363                 :            :         int wpa_proto;
     364                 :            :         int mgmt_group_cipher;
     365                 :            : 
     366                 :            :         void *drv_priv; /* private data used by driver_ops */
     367                 :            :         void *global_drv_priv;
     368                 :            : 
     369                 :            :         u8 *bssid_filter;
     370                 :            :         size_t bssid_filter_count;
     371                 :            : 
     372                 :            :         u8 *disallow_aps_bssid;
     373                 :            :         size_t disallow_aps_bssid_count;
     374                 :            :         struct wpa_ssid_value *disallow_aps_ssid;
     375                 :            :         size_t disallow_aps_ssid_count;
     376                 :            : 
     377                 :            :         enum { WPA_SETBAND_AUTO, WPA_SETBAND_5G, WPA_SETBAND_2G } setband;
     378                 :            : 
     379                 :            :         /* previous scan was wildcard when interleaving between
     380                 :            :          * wildcard scans and specific SSID scan when max_ssids=1 */
     381                 :            :         int prev_scan_wildcard;
     382                 :            :         struct wpa_ssid *prev_scan_ssid; /* previously scanned SSID;
     383                 :            :                                           * NULL = not yet initialized (start
     384                 :            :                                           * with wildcard SSID)
     385                 :            :                                           * WILDCARD_SSID_SCAN = wildcard
     386                 :            :                                           * SSID was used in the previous scan
     387                 :            :                                           */
     388                 :            : #define WILDCARD_SSID_SCAN ((struct wpa_ssid *) 1)
     389                 :            : 
     390                 :            :         struct wpa_ssid *prev_sched_ssid; /* last SSID used in sched scan */
     391                 :            :         int sched_scan_timeout;
     392                 :            :         int sched_scan_interval;
     393                 :            :         int first_sched_scan;
     394                 :            :         int sched_scan_timed_out;
     395                 :            : 
     396                 :            :         void (*scan_res_handler)(struct wpa_supplicant *wpa_s,
     397                 :            :                                  struct wpa_scan_results *scan_res);
     398                 :            :         struct dl_list bss; /* struct wpa_bss::list */
     399                 :            :         struct dl_list bss_id; /* struct wpa_bss::list_id */
     400                 :            :         size_t num_bss;
     401                 :            :         unsigned int bss_update_idx;
     402                 :            :         unsigned int bss_next_id;
     403                 :            : 
     404                 :            :          /*
     405                 :            :           * Pointers to BSS entries in the order they were in the last scan
     406                 :            :           * results.
     407                 :            :           */
     408                 :            :         struct wpa_bss **last_scan_res;
     409                 :            :         unsigned int last_scan_res_used;
     410                 :            :         unsigned int last_scan_res_size;
     411                 :            :         struct os_reltime last_scan;
     412                 :            : 
     413                 :            :         struct wpa_driver_ops *driver;
     414                 :            :         int interface_removed; /* whether the network interface has been
     415                 :            :                                 * removed */
     416                 :            :         struct wpa_sm *wpa;
     417                 :            :         struct eapol_sm *eapol;
     418                 :            : 
     419                 :            :         struct ctrl_iface_priv *ctrl_iface;
     420                 :            : 
     421                 :            :         enum wpa_states wpa_state;
     422                 :            :         int scanning;
     423                 :            :         int sched_scanning;
     424                 :            :         int new_connection;
     425                 :            : 
     426                 :            :         int eapol_received; /* number of EAPOL packets received after the
     427                 :            :                              * previous association event */
     428                 :            : 
     429                 :            :         struct scard_data *scard;
     430                 :            :         char imsi[20];
     431                 :            :         int mnc_len;
     432                 :            : 
     433                 :            :         unsigned char last_eapol_src[ETH_ALEN];
     434                 :            : 
     435                 :            :         int keys_cleared;
     436                 :            : 
     437                 :            :         struct wpa_blacklist *blacklist;
     438                 :            : 
     439                 :            :         /**
     440                 :            :          * extra_blacklist_count - Sum of blacklist counts after last connection
     441                 :            :          *
     442                 :            :          * This variable is used to maintain a count of temporary blacklisting
     443                 :            :          * failures (maximum number for any BSS) over blacklist clear
     444                 :            :          * operations. This is needed for figuring out whether there has been
     445                 :            :          * failures prior to the last blacklist clear operation which happens
     446                 :            :          * whenever no other not-blacklisted BSS candidates are available. This
     447                 :            :          * gets cleared whenever a connection has been established successfully.
     448                 :            :          */
     449                 :            :         int extra_blacklist_count;
     450                 :            : 
     451                 :            :         /**
     452                 :            :          * scan_req - Type of the scan request
     453                 :            :          */
     454                 :            :         enum scan_req_type {
     455                 :            :                 /**
     456                 :            :                  * NORMAL_SCAN_REQ - Normal scan request
     457                 :            :                  *
     458                 :            :                  * This is used for scans initiated by wpa_supplicant to find an
     459                 :            :                  * AP for a connection.
     460                 :            :                  */
     461                 :            :                 NORMAL_SCAN_REQ,
     462                 :            : 
     463                 :            :                 /**
     464                 :            :                  * INITIAL_SCAN_REQ - Initial scan request
     465                 :            :                  *
     466                 :            :                  * This is used for the first scan on an interface to force at
     467                 :            :                  * least one scan to be run even if the configuration does not
     468                 :            :                  * include any enabled networks.
     469                 :            :                  */
     470                 :            :                 INITIAL_SCAN_REQ,
     471                 :            : 
     472                 :            :                 /**
     473                 :            :                  * MANUAL_SCAN_REQ - Manual scan request
     474                 :            :                  *
     475                 :            :                  * This is used for scans where the user request a scan or
     476                 :            :                  * a specific wpa_supplicant operation (e.g., WPS) requires scan
     477                 :            :                  * to be run.
     478                 :            :                  */
     479                 :            :                 MANUAL_SCAN_REQ
     480                 :            :         } scan_req, last_scan_req;
     481                 :            :         struct os_reltime scan_trigger_time, scan_start_time;
     482                 :            :         int scan_runs; /* number of scan runs since WPS was started */
     483                 :            :         int *next_scan_freqs;
     484                 :            :         int *manual_scan_freqs;
     485                 :            :         unsigned int manual_scan_passive:1;
     486                 :            :         unsigned int manual_scan_use_id:1;
     487                 :            :         unsigned int own_scan_requested:1;
     488                 :            :         unsigned int own_scan_running:1;
     489                 :            :         unsigned int external_scan_running:1;
     490                 :            :         unsigned int manual_scan_id;
     491                 :            :         int scan_interval; /* time in sec between scans to find suitable AP */
     492                 :            :         int normal_scans; /* normal scans run before sched_scan */
     493                 :            :         int scan_for_connection; /* whether the scan request was triggered for
     494                 :            :                                   * finding a connection */
     495                 :            : 
     496                 :            :         unsigned int drv_flags;
     497                 :            :         unsigned int drv_enc;
     498                 :            : 
     499                 :            :         /*
     500                 :            :          * A bitmap of supported protocols for probe response offload. See
     501                 :            :          * struct wpa_driver_capa in driver.h
     502                 :            :          */
     503                 :            :         unsigned int probe_resp_offloads;
     504                 :            : 
     505                 :            :         /* extended capabilities supported by the driver */
     506                 :            :         const u8 *extended_capa, *extended_capa_mask;
     507                 :            :         unsigned int extended_capa_len;
     508                 :            : 
     509                 :            :         int max_scan_ssids;
     510                 :            :         int max_sched_scan_ssids;
     511                 :            :         int sched_scan_supported;
     512                 :            :         unsigned int max_match_sets;
     513                 :            :         unsigned int max_remain_on_chan;
     514                 :            :         unsigned int max_stations;
     515                 :            : 
     516                 :            :         int pending_mic_error_report;
     517                 :            :         int pending_mic_error_pairwise;
     518                 :            :         int mic_errors_seen; /* Michael MIC errors with the current PTK */
     519                 :            : 
     520                 :            :         struct wps_context *wps;
     521                 :            :         int wps_success; /* WPS success event received */
     522                 :            :         struct wps_er *wps_er;
     523                 :            :         int blacklist_cleared;
     524                 :            : 
     525                 :            :         struct wpabuf *pending_eapol_rx;
     526                 :            :         struct os_reltime pending_eapol_rx_time;
     527                 :            :         u8 pending_eapol_rx_src[ETH_ALEN];
     528                 :            :         unsigned int last_eapol_matches_bssid:1;
     529                 :            : 
     530                 :            :         struct ibss_rsn *ibss_rsn;
     531                 :            : 
     532                 :            :         int set_sta_uapsd;
     533                 :            :         int sta_uapsd;
     534                 :            :         int set_ap_uapsd;
     535                 :            :         int ap_uapsd;
     536                 :            : 
     537                 :            : #ifdef CONFIG_SME
     538                 :            :         struct {
     539                 :            :                 u8 ssid[32];
     540                 :            :                 size_t ssid_len;
     541                 :            :                 int freq;
     542                 :            :                 u8 assoc_req_ie[200];
     543                 :            :                 size_t assoc_req_ie_len;
     544                 :            :                 int mfp;
     545                 :            :                 int ft_used;
     546                 :            :                 u8 mobility_domain[2];
     547                 :            :                 u8 *ft_ies;
     548                 :            :                 size_t ft_ies_len;
     549                 :            :                 u8 prev_bssid[ETH_ALEN];
     550                 :            :                 int prev_bssid_set;
     551                 :            :                 int auth_alg;
     552                 :            :                 int proto;
     553                 :            : 
     554                 :            :                 int sa_query_count; /* number of pending SA Query requests;
     555                 :            :                                      * 0 = no SA Query in progress */
     556                 :            :                 int sa_query_timed_out;
     557                 :            :                 u8 *sa_query_trans_id; /* buffer of WLAN_SA_QUERY_TR_ID_LEN *
     558                 :            :                                         * sa_query_count octets of pending
     559                 :            :                                         * SA Query transaction identifiers */
     560                 :            :                 struct os_reltime sa_query_start;
     561                 :            :                 u8 sched_obss_scan;
     562                 :            :                 u16 obss_scan_int;
     563                 :            :                 u16 bss_max_idle_period;
     564                 :            : #ifdef CONFIG_SAE
     565                 :            :                 struct sae_data sae;
     566                 :            :                 struct wpabuf *sae_token;
     567                 :            :                 int sae_group_index;
     568                 :            : #endif /* CONFIG_SAE */
     569                 :            :         } sme;
     570                 :            : #endif /* CONFIG_SME */
     571                 :            : 
     572                 :            : #ifdef CONFIG_AP
     573                 :            :         struct hostapd_iface *ap_iface;
     574                 :            :         void (*ap_configured_cb)(void *ctx, void *data);
     575                 :            :         void *ap_configured_cb_ctx;
     576                 :            :         void *ap_configured_cb_data;
     577                 :            : #endif /* CONFIG_AP */
     578                 :            : 
     579                 :            :         unsigned int off_channel_freq;
     580                 :            :         struct wpabuf *pending_action_tx;
     581                 :            :         u8 pending_action_src[ETH_ALEN];
     582                 :            :         u8 pending_action_dst[ETH_ALEN];
     583                 :            :         u8 pending_action_bssid[ETH_ALEN];
     584                 :            :         unsigned int pending_action_freq;
     585                 :            :         int pending_action_no_cck;
     586                 :            :         int pending_action_without_roc;
     587                 :            :         void (*pending_action_tx_status_cb)(struct wpa_supplicant *wpa_s,
     588                 :            :                                             unsigned int freq, const u8 *dst,
     589                 :            :                                             const u8 *src, const u8 *bssid,
     590                 :            :                                             const u8 *data, size_t data_len,
     591                 :            :                                             enum offchannel_send_action_result
     592                 :            :                                             result);
     593                 :            :         unsigned int roc_waiting_drv_freq;
     594                 :            :         int action_tx_wait_time;
     595                 :            : 
     596                 :            :         int p2p_mgmt;
     597                 :            : 
     598                 :            : #ifdef CONFIG_P2P
     599                 :            :         struct p2p_go_neg_results *go_params;
     600                 :            :         int create_p2p_iface;
     601                 :            :         u8 pending_interface_addr[ETH_ALEN];
     602                 :            :         char pending_interface_name[100];
     603                 :            :         int pending_interface_type;
     604                 :            :         int p2p_group_idx;
     605                 :            :         unsigned int pending_listen_freq;
     606                 :            :         unsigned int pending_listen_duration;
     607                 :            :         enum {
     608                 :            :                 NOT_P2P_GROUP_INTERFACE,
     609                 :            :                 P2P_GROUP_INTERFACE_PENDING,
     610                 :            :                 P2P_GROUP_INTERFACE_GO,
     611                 :            :                 P2P_GROUP_INTERFACE_CLIENT
     612                 :            :         } p2p_group_interface;
     613                 :            :         struct p2p_group *p2p_group;
     614                 :            :         int p2p_long_listen; /* remaining time in long Listen state in ms */
     615                 :            :         char p2p_pin[10];
     616                 :            :         int p2p_wps_method;
     617                 :            :         u8 p2p_auth_invite[ETH_ALEN];
     618                 :            :         int p2p_sd_over_ctrl_iface;
     619                 :            :         int p2p_in_provisioning;
     620                 :            :         int pending_invite_ssid_id;
     621                 :            :         int show_group_started;
     622                 :            :         u8 go_dev_addr[ETH_ALEN];
     623                 :            :         int pending_pd_before_join;
     624                 :            :         u8 pending_join_iface_addr[ETH_ALEN];
     625                 :            :         u8 pending_join_dev_addr[ETH_ALEN];
     626                 :            :         int pending_join_wps_method;
     627                 :            :         int p2p_join_scan_count;
     628                 :            :         int auto_pd_scan_retry;
     629                 :            :         int force_long_sd;
     630                 :            :         u16 pending_pd_config_methods;
     631                 :            :         enum {
     632                 :            :                 NORMAL_PD, AUTO_PD_GO_NEG, AUTO_PD_JOIN
     633                 :            :         } pending_pd_use;
     634                 :            : 
     635                 :            :         /*
     636                 :            :          * Whether cross connection is disallowed by the AP to which this
     637                 :            :          * interface is associated (only valid if there is an association).
     638                 :            :          */
     639                 :            :         int cross_connect_disallowed;
     640                 :            : 
     641                 :            :         /*
     642                 :            :          * Whether this P2P group is configured to use cross connection (only
     643                 :            :          * valid if this is P2P GO interface). The actual cross connect packet
     644                 :            :          * forwarding may not be configured depending on the uplink status.
     645                 :            :          */
     646                 :            :         int cross_connect_enabled;
     647                 :            : 
     648                 :            :         /* Whether cross connection forwarding is in use at the moment. */
     649                 :            :         int cross_connect_in_use;
     650                 :            : 
     651                 :            :         /*
     652                 :            :          * Uplink interface name for cross connection
     653                 :            :          */
     654                 :            :         char cross_connect_uplink[100];
     655                 :            : 
     656                 :            :         unsigned int sta_scan_pending:1;
     657                 :            :         unsigned int p2p_auto_join:1;
     658                 :            :         unsigned int p2p_auto_pd:1;
     659                 :            :         unsigned int p2p_persistent_group:1;
     660                 :            :         unsigned int p2p_fallback_to_go_neg:1;
     661                 :            :         unsigned int p2p_pd_before_go_neg:1;
     662                 :            :         unsigned int p2p_go_ht40:1;
     663                 :            :         unsigned int p2p_go_vht:1;
     664                 :            :         unsigned int user_initiated_pd:1;
     665                 :            :         unsigned int p2p_go_group_formation_completed:1;
     666                 :            :         int p2p_first_connection_timeout;
     667                 :            :         int p2p_persistent_go_freq;
     668                 :            :         int p2p_persistent_id;
     669                 :            :         int p2p_go_intent;
     670                 :            :         int p2p_connect_freq;
     671                 :            :         struct os_reltime p2p_auto_started;
     672                 :            :         struct wpa_ssid *p2p_last_4way_hs_fail;
     673                 :            : #endif /* CONFIG_P2P */
     674                 :            : 
     675                 :            :         struct wpa_ssid *bgscan_ssid;
     676                 :            :         const struct bgscan_ops *bgscan;
     677                 :            :         void *bgscan_priv;
     678                 :            : 
     679                 :            :         const struct autoscan_ops *autoscan;
     680                 :            :         struct wpa_driver_scan_params *autoscan_params;
     681                 :            :         void *autoscan_priv;
     682                 :            : 
     683                 :            :         struct wpa_ssid *connect_without_scan;
     684                 :            : 
     685                 :            :         struct wps_ap_info *wps_ap;
     686                 :            :         size_t num_wps_ap;
     687                 :            :         int wps_ap_iter;
     688                 :            : 
     689                 :            :         int after_wps;
     690                 :            :         int known_wps_freq;
     691                 :            :         unsigned int wps_freq;
     692                 :            :         u16 wps_ap_channel;
     693                 :            :         int wps_fragment_size;
     694                 :            :         int auto_reconnect_disabled;
     695                 :            : 
     696                 :            :          /* Channel preferences for AP/P2P GO use */
     697                 :            :         int best_24_freq;
     698                 :            :         int best_5_freq;
     699                 :            :         int best_overall_freq;
     700                 :            : 
     701                 :            :         struct gas_query *gas;
     702                 :            : 
     703                 :            : #ifdef CONFIG_INTERWORKING
     704                 :            :         unsigned int fetch_anqp_in_progress:1;
     705                 :            :         unsigned int network_select:1;
     706                 :            :         unsigned int auto_select:1;
     707                 :            :         unsigned int auto_network_select:1;
     708                 :            :         unsigned int fetch_all_anqp:1;
     709                 :            :         struct wpa_bss *interworking_gas_bss;
     710                 :            : #endif /* CONFIG_INTERWORKING */
     711                 :            :         unsigned int drv_capa_known;
     712                 :            : 
     713                 :            :         struct {
     714                 :            :                 struct hostapd_hw_modes *modes;
     715                 :            :                 u16 num_modes;
     716                 :            :                 u16 flags;
     717                 :            :         } hw;
     718                 :            : 
     719                 :            :         int pno;
     720                 :            : 
     721                 :            :         /* WLAN_REASON_* reason codes. Negative if locally generated. */
     722                 :            :         int disconnect_reason;
     723                 :            : 
     724                 :            :         struct ext_password_data *ext_pw;
     725                 :            : 
     726                 :            :         struct wpabuf *last_gas_resp;
     727                 :            :         u8 last_gas_addr[ETH_ALEN];
     728                 :            :         u8 last_gas_dialog_token;
     729                 :            : 
     730                 :            :         unsigned int no_keep_alive:1;
     731                 :            : 
     732                 :            : #ifdef CONFIG_WNM
     733                 :            :         u8 wnm_dialog_token;
     734                 :            :         u8 wnm_reply;
     735                 :            :         u8 wnm_num_neighbor_report;
     736                 :            :         u8 wnm_mode;
     737                 :            :         u16 wnm_dissoc_timer;
     738                 :            :         u8 wnm_validity_interval;
     739                 :            :         u8 wnm_bss_termination_duration[12];
     740                 :            :         struct neighbor_report *wnm_neighbor_report_elements;
     741                 :            : #endif /* CONFIG_WNM */
     742                 :            : 
     743                 :            : #ifdef CONFIG_TESTING_GET_GTK
     744                 :            :         u8 last_gtk[32];
     745                 :            :         size_t last_gtk_len;
     746                 :            : #endif /* CONFIG_TESTING_GET_GTK */
     747                 :            : 
     748                 :            :         unsigned int num_multichan_concurrent;
     749                 :            : };
     750                 :            : 
     751                 :            : 
     752                 :            : /* wpa_supplicant.c */
     753                 :            : void wpa_supplicant_apply_ht_overrides(
     754                 :            :         struct wpa_supplicant *wpa_s, struct wpa_ssid *ssid,
     755                 :            :         struct wpa_driver_associate_params *params);
     756                 :            : void wpa_supplicant_apply_vht_overrides(
     757                 :            :         struct wpa_supplicant *wpa_s, struct wpa_ssid *ssid,
     758                 :            :         struct wpa_driver_associate_params *params);
     759                 :            : 
     760                 :            : int wpa_set_wep_keys(struct wpa_supplicant *wpa_s, struct wpa_ssid *ssid);
     761                 :            : int wpa_supplicant_set_wpa_none_key(struct wpa_supplicant *wpa_s,
     762                 :            :                                     struct wpa_ssid *ssid);
     763                 :            : 
     764                 :            : int wpa_supplicant_reload_configuration(struct wpa_supplicant *wpa_s);
     765                 :            : 
     766                 :            : const char * wpa_supplicant_state_txt(enum wpa_states state);
     767                 :            : int wpa_supplicant_update_mac_addr(struct wpa_supplicant *wpa_s);
     768                 :            : int wpa_supplicant_driver_init(struct wpa_supplicant *wpa_s);
     769                 :            : int wpa_supplicant_set_suites(struct wpa_supplicant *wpa_s,
     770                 :            :                               struct wpa_bss *bss, struct wpa_ssid *ssid,
     771                 :            :                               u8 *wpa_ie, size_t *wpa_ie_len);
     772                 :            : void wpa_supplicant_associate(struct wpa_supplicant *wpa_s,
     773                 :            :                               struct wpa_bss *bss,
     774                 :            :                               struct wpa_ssid *ssid);
     775                 :            : void wpa_supplicant_set_non_wpa_policy(struct wpa_supplicant *wpa_s,
     776                 :            :                                        struct wpa_ssid *ssid);
     777                 :            : void wpa_supplicant_initiate_eapol(struct wpa_supplicant *wpa_s);
     778                 :            : void wpa_clear_keys(struct wpa_supplicant *wpa_s, const u8 *addr);
     779                 :            : void wpa_supplicant_req_auth_timeout(struct wpa_supplicant *wpa_s,
     780                 :            :                                      int sec, int usec);
     781                 :            : void wpa_supplicant_reinit_autoscan(struct wpa_supplicant *wpa_s);
     782                 :            : void wpa_supplicant_set_state(struct wpa_supplicant *wpa_s,
     783                 :            :                               enum wpa_states state);
     784                 :            : struct wpa_ssid * wpa_supplicant_get_ssid(struct wpa_supplicant *wpa_s);
     785                 :            : const char * wpa_supplicant_get_eap_mode(struct wpa_supplicant *wpa_s);
     786                 :            : void wpa_supplicant_cancel_auth_timeout(struct wpa_supplicant *wpa_s);
     787                 :            : void wpa_supplicant_deauthenticate(struct wpa_supplicant *wpa_s,
     788                 :            :                                    int reason_code);
     789                 :            : 
     790                 :            : void wpa_supplicant_enable_network(struct wpa_supplicant *wpa_s,
     791                 :            :                                    struct wpa_ssid *ssid);
     792                 :            : void wpa_supplicant_disable_network(struct wpa_supplicant *wpa_s,
     793                 :            :                                     struct wpa_ssid *ssid);
     794                 :            : void wpa_supplicant_select_network(struct wpa_supplicant *wpa_s,
     795                 :            :                                    struct wpa_ssid *ssid);
     796                 :            : int wpas_set_pkcs11_engine_and_module_path(struct wpa_supplicant *wpa_s,
     797                 :            :                                            const char *pkcs11_engine_path,
     798                 :            :                                            const char *pkcs11_module_path);
     799                 :            : int wpa_supplicant_set_ap_scan(struct wpa_supplicant *wpa_s,
     800                 :            :                                int ap_scan);
     801                 :            : int wpa_supplicant_set_bss_expiration_age(struct wpa_supplicant *wpa_s,
     802                 :            :                                           unsigned int expire_age);
     803                 :            : int wpa_supplicant_set_bss_expiration_count(struct wpa_supplicant *wpa_s,
     804                 :            :                                             unsigned int expire_count);
     805                 :            : int wpa_supplicant_set_scan_interval(struct wpa_supplicant *wpa_s,
     806                 :            :                                      int scan_interval);
     807                 :            : int wpa_supplicant_set_debug_params(struct wpa_global *global,
     808                 :            :                                     int debug_level, int debug_timestamp,
     809                 :            :                                     int debug_show_keys);
     810                 :            : void free_hw_features(struct wpa_supplicant *wpa_s);
     811                 :            : 
     812                 :            : void wpa_show_license(void);
     813                 :            : 
     814                 :            : struct wpa_supplicant * wpa_supplicant_add_iface(struct wpa_global *global,
     815                 :            :                                                  struct wpa_interface *iface);
     816                 :            : int wpa_supplicant_remove_iface(struct wpa_global *global,
     817                 :            :                                 struct wpa_supplicant *wpa_s,
     818                 :            :                                 int terminate);
     819                 :            : struct wpa_supplicant * wpa_supplicant_get_iface(struct wpa_global *global,
     820                 :            :                                                  const char *ifname);
     821                 :            : struct wpa_global * wpa_supplicant_init(struct wpa_params *params);
     822                 :            : int wpa_supplicant_run(struct wpa_global *global);
     823                 :            : void wpa_supplicant_deinit(struct wpa_global *global);
     824                 :            : 
     825                 :            : int wpa_supplicant_scard_init(struct wpa_supplicant *wpa_s,
     826                 :            :                               struct wpa_ssid *ssid);
     827                 :            : void wpa_supplicant_terminate_proc(struct wpa_global *global);
     828                 :            : void wpa_supplicant_rx_eapol(void *ctx, const u8 *src_addr,
     829                 :            :                              const u8 *buf, size_t len);
     830                 :            : enum wpa_key_mgmt key_mgmt2driver(int key_mgmt);
     831                 :            : void wpa_supplicant_update_config(struct wpa_supplicant *wpa_s);
     832                 :            : void wpa_supplicant_clear_status(struct wpa_supplicant *wpa_s);
     833                 :            : void wpas_connection_failed(struct wpa_supplicant *wpa_s, const u8 *bssid);
     834                 :            : int wpas_driver_bss_selection(struct wpa_supplicant *wpa_s);
     835                 :            : int wpas_is_p2p_prioritized(struct wpa_supplicant *wpa_s);
     836                 :            : void wpas_auth_failed(struct wpa_supplicant *wpa_s);
     837                 :            : void wpas_clear_temp_disabled(struct wpa_supplicant *wpa_s,
     838                 :            :                               struct wpa_ssid *ssid, int clear_failures);
     839                 :            : int disallowed_bssid(struct wpa_supplicant *wpa_s, const u8 *bssid);
     840                 :            : int disallowed_ssid(struct wpa_supplicant *wpa_s, const u8 *ssid,
     841                 :            :                     size_t ssid_len);
     842                 :            : void wpas_request_connection(struct wpa_supplicant *wpa_s);
     843                 :            : int wpas_build_ext_capab(struct wpa_supplicant *wpa_s, u8 *buf);
     844                 :            : int wpas_wpa_is_in_progress(struct wpa_supplicant *wpa_s, int include_current);
     845                 :            : 
     846                 :            : /**
     847                 :            :  * wpa_supplicant_ctrl_iface_ctrl_rsp_handle - Handle a control response
     848                 :            :  * @wpa_s: Pointer to wpa_supplicant data
     849                 :            :  * @ssid: Pointer to the network block the reply is for
     850                 :            :  * @field: field the response is a reply for
     851                 :            :  * @value: value (ie, password, etc) for @field
     852                 :            :  * Returns: 0 on success, non-zero on error
     853                 :            :  *
     854                 :            :  * Helper function to handle replies to control interface requests.
     855                 :            :  */
     856                 :            : int wpa_supplicant_ctrl_iface_ctrl_rsp_handle(struct wpa_supplicant *wpa_s,
     857                 :            :                                               struct wpa_ssid *ssid,
     858                 :            :                                               const char *field,
     859                 :            :                                               const char *value);
     860                 :            : 
     861                 :            : /* events.c */
     862                 :            : void wpa_supplicant_mark_disassoc(struct wpa_supplicant *wpa_s);
     863                 :            : int wpa_supplicant_connect(struct wpa_supplicant *wpa_s,
     864                 :            :                            struct wpa_bss *selected,
     865                 :            :                            struct wpa_ssid *ssid);
     866                 :            : void wpa_supplicant_stop_countermeasures(void *eloop_ctx, void *sock_ctx);
     867                 :            : void wpa_supplicant_delayed_mic_error_report(void *eloop_ctx, void *sock_ctx);
     868                 :            : void wnm_bss_keep_alive_deinit(struct wpa_supplicant *wpa_s);
     869                 :            : int wpa_supplicant_fast_associate(struct wpa_supplicant *wpa_s);
     870                 :            : struct wpa_bss * wpa_supplicant_pick_network(struct wpa_supplicant *wpa_s,
     871                 :            :                                              struct wpa_ssid **selected_ssid);
     872                 :            : 
     873                 :            : /* eap_register.c */
     874                 :            : int eap_register_methods(void);
     875                 :            : 
     876                 :            : /**
     877                 :            :  * Utility method to tell if a given network is a persistent group
     878                 :            :  * @ssid: Network object
     879                 :            :  * Returns: 1 if network is a persistent group, 0 otherwise
     880                 :            :  */
     881                 :        554 : static inline int network_is_persistent_group(struct wpa_ssid *ssid)
     882                 :            : {
     883 [ +  + ][ -  + ]:        554 :         return ((ssid->disabled == 2) || ssid->p2p_persistent_group);
     884                 :            : }
     885                 :            : 
     886                 :            : int wpas_network_disabled(struct wpa_supplicant *wpa_s, struct wpa_ssid *ssid);
     887                 :            : 
     888                 :            : int wpas_init_ext_pw(struct wpa_supplicant *wpa_s);
     889                 :            : 
     890                 :            : void dump_freq_array(struct wpa_supplicant *wpa_s, const char *title,
     891                 :            :                      int *freq_array, unsigned int len);
     892                 :            : int get_shared_radio_freqs(struct wpa_supplicant *wpa_s,
     893                 :            :                            int *freq_array, unsigned int len);
     894                 :            : 
     895                 :            : #endif /* WPA_SUPPLICANT_I_H */

Generated by: LCOV version 1.9