日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

深入理解 wpa_supplicant(三)

發(fā)布時間:2023/11/27 生活经验 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 深入理解 wpa_supplicant(三) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

本文為《深入理解Android Wi-Fi、NFC和GPS卷》讀書筆記,Android源碼為Android 5.1

android-5.1/external/wpa_supplicant_8/wpa_supplicant/wps_supplicant.c

struct wpa_supplicant * wpa_supplicant_add_iface(struct wpa_global *global,struct wpa_interface *iface)
{struct wpa_supplicant *wpa_s;struct wpa_interface t_iface;struct wpa_ssid *ssid;if (global == NULL || iface == NULL)return NULL;wpa_s = wpa_supplicant_alloc();if (wpa_s == NULL)return NULL;wpa_s->global = global;t_iface = *iface;if (global->params.override_driver) {wpa_printf(MSG_DEBUG, "Override interface parameter: driver ""('%s' -> '%s')",iface->driver, global->params.override_driver);t_iface.driver = global->params.override_driver;}if (global->params.override_ctrl_interface) {wpa_printf(MSG_DEBUG, "Override interface parameter: ""ctrl_interface ('%s' -> '%s')",iface->ctrl_interface,global->params.override_ctrl_interface);t_iface.ctrl_interface =global->params.override_ctrl_interface;}if (wpa_supplicant_init_iface(wpa_s, &t_iface)) {wpa_printf(MSG_DEBUG, "Failed to add interface %s",iface->ifname);wpa_supplicant_deinit_iface(wpa_s, 0, 0);return NULL;}/* Notify the control interfaces about new iface *///通過 dbus 通知外界有新的 iface 加入if (wpas_notify_iface_added(wpa_s)) {wpa_supplicant_deinit_iface(wpa_s, 1, 0);return NULL;}for (ssid = wpa_s->conf->ssid; ssid; ssid = ssid->next)//通過 dbus 通知外界有新的無線網(wǎng)絡加入wpas_notify_network_added(wpa_s, ssid);//wpa_supplicant 通過 next 變量形成一個單向鏈表wpa_s->next = global->ifaces;global->ifaces = wpa_s;wpa_dbg(wpa_s, MSG_DEBUG, "Added interface %s", wpa_s->ifname);wpa_supplicant_set_state(wpa_s, WPA_DISCONNECTED);return wpa_s;
}
wpa_ssid結構體用于存儲某個無線網(wǎng)絡的配置信息
該文件只有這一個結構體
android-5.1/external/wpa_supplicant_8/wpa_supplicant/config_ssid.h

struct wpa_ssid {/*** next - Next network in global list** This pointer can be used to iterate over all networks. The head of* this list is stored in the ssid field of struct wpa_config.*/struct wpa_ssid *next;	//所有 wpa_ssid 都保存在一個單向鏈表中,鏈表頭保存在結構體 wpa_config 的 ssid 變量中/*** pnext - Next network in per-priority list** This pointer can be used to iterate over all networks in the same* priority class. The heads of these list are stored in the pssid* fields of struct wpa_config.*/struct wpa_ssid *pnext;	//wpa_ssid 可按優(yōu)先級保存在另一個鏈表中,頭指針為 wpa_config 的 pssid 變量/*** id - Unique id for the network** This identifier is used as a unique identifier for each network* block when using the control interface. Each network is allocated an* id when it is being created, either when reading the configuration* file or when a new network is added through the control interface.*/int id;	//每個無線網(wǎng)絡都有一個唯一的id/*** priority - Priority group** By default, all networks will get same priority group (0). If some* of the networks are more desirable, this field can be used to change* the order in which wpa_supplicant goes through the networks when* selecting a BSS. The priority groups will be iterated in decreasing* priority (i.e., the larger the priority value, the sooner the* network is matched against the scan results). Within each priority* group, networks will be selected based on security policy, signal* strength, etc.** Please note that AP scanning with scan_ssid=1 and ap_scan=2 mode are* not using this priority to select the order for scanning. Instead,* they try the networks in the order that used in the configuration* file.*/int priority;	//優(yōu)先級,默認為0/*** ssid - Service set identifier (network name)** This is the SSID for the network. For wireless interfaces, this is* used to select which network will be used. If set to %NULL (or* ssid_len=0), any SSID can be used. For wired interfaces, this must* be set to %NULL. Note: SSID may contain any characters, even nul* (ASCII 0) and as such, this should not be assumed to be a nul* terminated string. ssid_len defines how many characters are valid* and the ssid field is not guaranteed to be nul terminated.*/u8 *ssid;	//無線網(wǎng)絡的ssid,即無線網(wǎng)絡名/*** ssid_len - Length of the SSID*/size_t ssid_len;	//ssid變量的長度/*** bssid - BSSID** If set, this network block is used only when associating with the AP* using the configured BSSID** If this is a persistent P2P group (disabled == 2), this is the GO* Device Address.*/u8 bssid[ETH_ALEN];	//ETH_ALEN=6/*** bssid_set - Whether BSSID is configured for this network*/int bssid_set;	//該無線網(wǎng)絡是否設置了 bssid 變量/*** psk - WPA pre-shared key (256 bits)*/u8 psk[32];/*** psk_set - Whether PSK field is configured*/int psk_set;	//是否設置了上述參數(shù)/*** passphrase - WPA ASCII passphrase** If this is set, psk will be generated using the SSID and passphrase* configured for the network. ASCII passphrase must be between 8 and* 63 characters (inclusive).*/char *passphrase;	//為 WPA 設置的ASCII字符密碼/*** ext_psk - PSK/passphrase name in external storage** If this is set, PSK/passphrase will be fetched from external storage* when requesting association with the network.*/char *ext_psk;/*** pairwise_cipher - Bitfield of allowed pairwise ciphers, WPA_CIPHER_**/int pairwise_cipher;	//用于單播數(shù)據(jù)加密的密鑰對類型/*** group_cipher - Bitfield of allowed group ciphers, WPA_CIPHER_**/int group_cipher;	//用于組播數(shù)據(jù)加密的密鑰對類型/*** key_mgmt - Bitfield of allowed key management protocols** WPA_KEY_MGMT_**/int key_mgmt;	//密匙管理類型/*** bg_scan_period - Background scan period in seconds, 0 to disable, or* -1 to indicate no change to default driver configuration*/int bg_scan_period;/*** proto - Bitfield of allowed protocols, WPA_PROTO_**/int proto;	//該無線網(wǎng)絡支持的安全保護類型/*** auth_alg -  Bitfield of allowed authentication algorithms** WPA_AUTH_ALG_**/int auth_alg;	//該無線網(wǎng)絡支持的身份驗證類型/*** scan_ssid - Scan this SSID with Probe Requests** scan_ssid can be used to scan for APs using hidden SSIDs.* Note: Many drivers do not support this. ap_mode=2 can be used with* such drivers to use hidden SSIDs.*/int scan_ssid;	//是否利用 Probe request 幀掃描此 ssid 對應的無線網(wǎng)絡#ifdef IEEE8021X_EAPOL
#define EAPOL_FLAG_REQUIRE_KEY_UNICAST BIT(0)
#define EAPOL_FLAG_REQUIRE_KEY_BROADCAST BIT(1)/*** eapol_flags - Bit field of IEEE 802.1X/EAPOL options (EAPOL_FLAG_*)*/int eapol_flags;	//EAPOL 選項/*** eap - EAP peer configuration for this network*/struct eap_peer_config eap;	//eap peer端設置信息
#endif /* IEEE8021X_EAPOL */#define NUM_WEP_KEYS 4
#define MAX_WEP_KEY_LEN 16/*** wep_key - WEP keys*/u8 wep_key[NUM_WEP_KEYS][MAX_WEP_KEY_LEN];/*** wep_key_len - WEP key lengths*/size_t wep_key_len[NUM_WEP_KEYS];/*** wep_tx_keyidx - Default key index for TX frames using WEP*/int wep_tx_keyidx;/*** proactive_key_caching - Enable proactive key caching** This field can be used to enable proactive key caching which is also* known as opportunistic PMKSA caching for WPA2. This is disabled (0)* by default. Enable by setting this to 1.** Proactive key caching is used to make supplicant assume that the APs* are using the same PMK and generate PMKSA cache entries without* doing RSN pre-authentication. This requires support from the AP side* and is normally used with wireless switches that co-locate the* authenticator.*/int proactive_key_caching;/*** mixed_cell - Whether mixed cells are allowed** This option can be used to configure whether so called mixed cells,* i.e., networks that use both plaintext and encryption in the same* SSID, are allowed. This is disabled (0) by default. Enable by* setting this to 1.*/int mixed_cell;#ifdef IEEE8021X_EAPOL/*** leap - Number of EAP methods using LEAP** This field should be set to 1 if LEAP is enabled. This is used to* select IEEE 802.11 authentication algorithm.*/int leap;/*** non_leap - Number of EAP methods not using LEAP** This field should be set to >0 if any EAP method other than LEAP is* enabled. This is used to select IEEE 802.11 authentication* algorithm.*/int non_leap;/*** eap_workaround - EAP workarounds enabled** wpa_supplicant supports number of "EAP workarounds" to work around* interoperability issues with incorrectly behaving authentication* servers. This is recommended to be enabled by default because some* of the issues are present in large number of authentication servers.** Strict EAP conformance mode can be configured by disabling* workarounds with eap_workaround = 0.*/unsigned int eap_workaround;#endif /* IEEE8021X_EAPOL *//*** mode - IEEE 802.11 operation mode (Infrastucture/IBSS)** 0 = infrastructure (Managed) mode, i.e., associate with an AP.** 1 = IBSS (ad-hoc, peer-to-peer)** 2 = AP (access point)** 3 = P2P Group Owner (can be set in the configuration file)** 4 = P2P Group Formation (used internally; not in configuration* files)** Note: IBSS can only be used with key_mgmt NONE (plaintext and* static WEP) and key_mgmt=WPA-NONE (fixed group key TKIP/CCMP). In* addition, ap_scan has to be set to 2 for IBSS. WPA-None requires* following network block options: proto=WPA, key_mgmt=WPA-NONE,* pairwise=NONE, group=TKIP (or CCMP, but not both), and psk must also* be set (either directly or using ASCII passphrase).*/enum wpas_mode {	//枚舉變量WPAS_MODE_INFRA = 0,	//代表基礎結構型網(wǎng)絡中的STAWPAS_MODE_IBSS = 1,		//代表IBSS網(wǎng)絡的模式WPAS_MODE_AP = 2,		//代表基礎結構型網(wǎng)絡中的APWPAS_MODE_P2P_GO = 3,	//P2P 相關WPAS_MODE_P2P_GROUP_FORMATION = 4,} mode;/*** disabled - Whether this network is currently disabled** 0 = this network can be used (default).* 1 = this network block is disabled (can be enabled through* ctrl_iface, e.g., with wpa_cli or wpa_gui).* 2 = this network block includes parameters for a persistent P2P* group (can be used with P2P ctrl_iface commands)*/int disabled;/*** peerkey -  Whether PeerKey handshake for direct links is allowed** This is only used when both RSN/WPA2 and IEEE 802.11e (QoS) are* enabled.** 0 = disabled (default)* 1 = enabled*/int peerkey;/*** id_str - Network identifier string for external scripts** This value is passed to external ctrl_iface monitors in* WPA_EVENT_CONNECTED event and wpa_cli sets this as WPA_ID_STR* environment variable for action scripts.*/char *id_str;#ifdef CONFIG_IEEE80211W/*** ieee80211w - Whether management frame protection is enabled** This value is used to configure policy for management frame* protection (IEEE 802.11w). 0 = disabled, 1 = optional, 2 = required.*/enum mfp_options ieee80211w;
#endif /* CONFIG_IEEE80211W *//*** frequency - Channel frequency in megahertz (MHz) for IBSS** This value is used to configure the initial channel for IBSS (adhoc)* networks, e.g., 2412 = IEEE 802.11b/g channel 1. It is ignored in* the infrastructure mode. In addition, this value is only used by the* station that creates the IBSS. If an IBSS network with the* configured SSID is already present, the frequency of the network* will be used instead of this configured value.*/int frequency;int ht40;/*** wpa_ptk_rekey - Maximum lifetime for PTK in seconds** This value can be used to enforce rekeying of PTK to mitigate some* attacks against TKIP deficiencies.*/int wpa_ptk_rekey;/*** scan_freq - Array of frequencies to scan or %NULL for all** This is an optional zero-terminated array of frequencies in* megahertz (MHz) to include in scan requests when searching for this* network. This can be used to speed up scanning when the network is* known to not use all possible channels.*/int *scan_freq;/*** bgscan - Background scan and roaming parameters or %NULL if none** This is an optional set of parameters for background scanning and* roaming within a network (ESS) in following format:* <bgscan module name>:<module parameters>*/char *bgscan;/*** ignore_broadcast_ssid - Hide SSID in AP mode** Send empty SSID in beacons and ignore probe request frames that do* not specify full SSID, i.e., require stations to know SSID.* default: disabled (0)* 1 = send empty (length=0) SSID in beacon and ignore probe request* for broadcast SSID* 2 = clear SSID (ASCII 0), but keep the original length (this may be* required with some clients that do not support empty SSID) and* ignore probe requests for broadcast SSID*/int ignore_broadcast_ssid;/*** freq_list - Array of allowed frequencies or %NULL for all** This is an optional zero-terminated array of frequencies in* megahertz (MHz) to allow for selecting the BSS. If set, scan results* that do not match any of the specified frequencies are not* considered when selecting a BSS.*/int *freq_list;/*** p2p_client_list - List of P2P Clients in a persistent group (GO)** This is a list of P2P Clients (P2P Device Address) that have joined* the persistent group. This is maintained on the GO for persistent* group entries (disabled == 2).*/u8 *p2p_client_list;/*** num_p2p_clients - Number of entries in p2p_client_list*/size_t num_p2p_clients;#ifndef P2P_MAX_STORED_CLIENTS
#define P2P_MAX_STORED_CLIENTS 100
#endif /* P2P_MAX_STORED_CLIENTS *//*** p2p_group - Network generated as a P2P group (used internally)*/int p2p_group;/*** p2p_persistent_group - Whether this is a persistent group*/int p2p_persistent_group;/*** temporary - Whether this network is temporary and not to be saved*/int temporary;/*** export_keys - Whether keys may be exported** This attribute will be set when keys are determined through* WPS or similar so that they may be exported.*/int export_keys;#ifdef ANDROID_P2P/*** assoc_retry - Number of times association should be retried.*/int assoc_retry;
#endif#ifdef CONFIG_HT_OVERRIDES/*** disable_ht - Disable HT (IEEE 802.11n) for this network** By default, use it if it is available, but this can be configured* to 1 to have it disabled.*/int disable_ht;/*** disable_ht40 - Disable HT40 for this network** By default, use it if it is available, but this can be configured* to 1 to have it disabled.*/int disable_ht40;/*** disable_max_amsdu - Disable MAX A-MSDU** A-MDSU will be 3839 bytes when disabled, or 7935* when enabled (assuming it is otherwise supported)* -1 (default) means do not apply any settings to the kernel.*/int disable_max_amsdu;/*** ampdu_factor - Maximum A-MPDU Length Exponent** Value: 0-3, see 7.3.2.56.3 in IEEE Std 802.11n-2009.*/int ampdu_factor;/*** ampdu_density - Minimum A-MPDU Start Spacing** Value: 0-7, see 7.3.2.56.3 in IEEE Std 802.11n-2009.*/int ampdu_density;/*** ht_mcs - Allowed HT-MCS rates, in ASCII hex: ffff0000...** By default (empty string): Use whatever the OS has configured.*/char *ht_mcs;
#endif /* CONFIG_HT_OVERRIDES *//*** ap_max_inactivity - Timeout in seconds to detect STA's inactivity** This timeout value is used in AP mode to clean up inactive stations.* By default: 300 seconds.*/int ap_max_inactivity;/*** dtim_period - DTIM period in Beacon intervals* By default: 2*/int dtim_period;/*** auth_failures - Number of consecutive authentication failures*/unsigned int auth_failures;/*** disabled_until - Network block disabled until this time if non-zero*/struct os_time disabled_until;
};
android-5.1/external/wpa_supplicant_8/wpa_supplicant/wpa_supplicant_i.h

struct wpa_supplicant {struct wpa_global *global;	//指向 wpa_global 對象struct wpa_radio *radio; /* shared radio context */struct dl_list radio_list; /* list head: struct wpa_radio::ifaces */struct wpa_supplicant *parent;struct wpa_supplicant *next;	//所有的 wpa_supplicant 對象都保存在一個單向鏈表中struct l2_packet_data *l2;	//用于處理 EAP 和 EAPOL 消息, L2 是 Link Layer的簡寫struct l2_packet_data *l2_br;unsigned char own_addr[ETH_ALEN];	//ETH_ALEN=16unsigned char perm_addr[ETH_ALEN];char ifname[100];
#ifdef CONFIG_CTRL_IFACE_DBUSchar *dbus_path;
#endif /* CONFIG_CTRL_IFACE_DBUS */
#ifdef CONFIG_CTRL_IFACE_DBUS_NEWchar *dbus_new_path;char *dbus_groupobj_path;
#ifdef CONFIG_APchar *preq_notify_peer;
#endif /* CONFIG_AP */
#endif /* CONFIG_CTRL_IFACE_DBUS_NEW */char bridge_ifname[16];char *confname;	//配置文件名char *confanother;struct wpa_config *conf;	//解析配置文件后得到的配置信息int countermeasures;struct os_reltime last_michael_mic_error;u8 bssid[ETH_ALEN];	//表示此 supplicant 鏈接到的無線網(wǎng)絡的 BSSIDu8 pending_bssid[ETH_ALEN]; /* If wpa_state == WPA_ASSOCIATING, this * field contains the target BSSID. 當supplicant還處于關聯(lián)過程中時,該變量保存目標無線網(wǎng)絡的BSSID */int reassociate; /* reassociation requested 是否重新關聯(lián)*/int disconnected; /* all connections disabled; i.e., do no reassociate* before this has been cleared 此supplicant 是否被禁止鏈接無線網(wǎng)絡*/struct wpa_ssid *current_ssid;	//當前使用的 wpa_ssid 對象struct wpa_ssid *last_ssid;struct wpa_bss *current_bss;	//當前使用的 wpa_bss 對象int ap_ies_from_associnfo;unsigned int assoc_freq;/* Selected configuration (based on Beacon/ProbeResp WPA IE) */int pairwise_cipher;	//此 supplicant 選擇的單播數(shù)據(jù)加密類型int group_cipher;int key_mgmt;int wpa_proto;int mgmt_group_cipher;void *drv_priv; /* private data used by driver_ops 驅動對應的上下文信息*/void *global_drv_priv;	//驅動對應的全局上下文信息*/u8 *bssid_filter;size_t bssid_filter_count;u8 *disallow_aps_bssid;size_t disallow_aps_bssid_count;struct wpa_ssid_value *disallow_aps_ssid;size_t disallow_aps_ssid_count;enum { WPA_SETBAND_AUTO, WPA_SETBAND_5G, WPA_SETBAND_2G } setband;/* Preferred network for the next connection attempt */struct wpa_ssid *next_ssid;/* previous scan was wildcard when interleaving between* wildcard scans and specific SSID scan when max_ssids=1 */int prev_scan_wildcard;struct wpa_ssid *prev_scan_ssid; /* previously scanned SSID;* NULL = not yet initialized (start* with wildcard SSID)* WILDCARD_SSID_SCAN = wildcard* SSID was used in the previous scan*/
#define WILDCARD_SSID_SCAN ((struct wpa_ssid *) 1)struct wpa_ssid *prev_sched_ssid; /* last SSID used in sched scan */int sched_scan_timeout;int sched_scan_interval;int first_sched_scan;int sched_scan_timed_out;void (*scan_res_handler)(struct wpa_supplicant *wpa_s,struct wpa_scan_results *scan_res);struct dl_list bss; /* struct wpa_bss::list 保存此 supplicant 搜索到的周圍的無線網(wǎng)絡*/struct dl_list bss_id; /* struct wpa_bss::list_id */size_t num_bss;unsigned int bss_update_idx;unsigned int bss_next_id;/** Pointers to BSS entries in the order they were in the last scan* results.*/struct wpa_bss **last_scan_res;unsigned int last_scan_res_used;unsigned int last_scan_res_size;struct os_reltime last_scan;struct wpa_driver_ops *driver;	//此 supplicant 對應的驅動對象int interface_removed; /* whether the network interface has been* removed */struct wpa_sm *wpa;	//WPA 狀態(tài)機struct eapol_sm *eapol;	//eapol 狀態(tài)機struct ctrl_iface_priv *ctrl_iface;	//此 supplicant 對應的控制接口對象enum wpa_states wpa_state;	//supplicant 當前的狀態(tài)struct wpa_radio_work *scan_work;int scanning;int sched_scanning;int new_connection;int eapol_received; /* number of EAPOL packets received after the* previous association event */struct scard_data *scard;char imsi[20];int mnc_len;unsigned char last_eapol_src[ETH_ALEN];unsigned int keys_cleared; /* bitfield of key indexes that the driver is* known not to be configured with a key */struct wpa_blacklist *blacklist;	//黑名單,將不會連接黑名單中的無線網(wǎng)絡/*** extra_blacklist_count - Sum of blacklist counts after last connection** This variable is used to maintain a count of temporary blacklisting* failures (maximum number for any BSS) over blacklist clear* operations. This is needed for figuring out whether there has been* failures prior to the last blacklist clear operation which happens* whenever no other not-blacklisted BSS candidates are available. This* gets cleared whenever a connection has been established successfully.*/int extra_blacklist_count;/*** scan_req - Type of the scan request*/enum scan_req_type {/*** NORMAL_SCAN_REQ - Normal scan request** This is used for scans initiated by wpa_supplicant to find an* AP for a connection.*/NORMAL_SCAN_REQ,/*** INITIAL_SCAN_REQ - Initial scan request** This is used for the first scan on an interface to force at* least one scan to be run even if the configuration does not* include any enabled networks.*/INITIAL_SCAN_REQ,/*** MANUAL_SCAN_REQ - Manual scan request** This is used for scans where the user request a scan or* a specific wpa_supplicant operation (e.g., WPS) requires scan* to be run.*/MANUAL_SCAN_REQ} scan_req, last_scan_req;struct os_reltime scan_trigger_time, scan_start_time;int scan_runs; /* number of scan runs since WPS was started */int *next_scan_freqs;int *manual_scan_freqs;int *manual_sched_scan_freqs;unsigned int manual_scan_passive:1;unsigned int manual_scan_use_id:1;unsigned int manual_scan_only_new:1;unsigned int own_scan_requested:1;unsigned int own_scan_running:1;unsigned int external_scan_running:1;unsigned int clear_driver_scan_cache:1;unsigned int manual_scan_id;int scan_interval; /* time in sec between scans to find suitable AP */int normal_scans; /* normal scans run before sched_scan */int scan_for_connection; /* whether the scan request was triggered for* finding a connection */
#define MAX_SCAN_ID 16int scan_id[MAX_SCAN_ID];unsigned int scan_id_count;unsigned int drv_flags;unsigned int drv_enc;/** A bitmap of supported protocols for probe response offload. See* struct wpa_driver_capa in driver.h*/unsigned int probe_resp_offloads;/* extended capabilities supported by the driver */const u8 *extended_capa, *extended_capa_mask;unsigned int extended_capa_len;int max_scan_ssids;int max_sched_scan_ssids;int sched_scan_supported;unsigned int max_match_sets;unsigned int max_remain_on_chan;unsigned int max_stations;int pending_mic_error_report;int pending_mic_error_pairwise;int mic_errors_seen; /* Michael MIC errors with the current PTK */struct wps_context *wps;int wps_success; /* WPS success event received */struct wps_er *wps_er;unsigned int wps_run;int blacklist_cleared;struct wpabuf *pending_eapol_rx;struct os_reltime pending_eapol_rx_time;u8 pending_eapol_rx_src[ETH_ALEN];unsigned int last_eapol_matches_bssid:1;unsigned int eap_expected_failure:1;unsigned int reattach:1; /* reassociation to the same BSS requested */unsigned int mac_addr_changed:1;struct os_reltime last_mac_addr_change;int last_mac_addr_style;struct ibss_rsn *ibss_rsn;int set_sta_uapsd;int sta_uapsd;int set_ap_uapsd;int ap_uapsd;#ifdef CONFIG_SMEstruct {u8 ssid[32];size_t ssid_len;int freq;u8 assoc_req_ie[200];size_t assoc_req_ie_len;int mfp;int ft_used;u8 mobility_domain[2];u8 *ft_ies;size_t ft_ies_len;u8 prev_bssid[ETH_ALEN];int prev_bssid_set;int auth_alg;int proto;int sa_query_count; /* number of pending SA Query requests;* 0 = no SA Query in progress */int sa_query_timed_out;u8 *sa_query_trans_id; /* buffer of WLAN_SA_QUERY_TR_ID_LEN ** sa_query_count octets of pending* SA Query transaction identifiers */struct os_reltime sa_query_start;struct os_reltime last_unprot_disconnect;u8 sched_obss_scan;u16 obss_scan_int;u16 bss_max_idle_period;
#ifdef CONFIG_SAEstruct sae_data sae;struct wpabuf *sae_token;int sae_group_index;
#endif /* CONFIG_SAE */} sme;
#endif /* CONFIG_SME */#ifdef CONFIG_APstruct hostapd_iface *ap_iface;void (*ap_configured_cb)(void *ctx, void *data);void *ap_configured_cb_ctx;void *ap_configured_cb_data;
#endif /* CONFIG_AP */unsigned int off_channel_freq;struct wpabuf *pending_action_tx;u8 pending_action_src[ETH_ALEN];u8 pending_action_dst[ETH_ALEN];u8 pending_action_bssid[ETH_ALEN];unsigned int pending_action_freq;int pending_action_no_cck;int pending_action_without_roc;unsigned int pending_action_tx_done:1;void (*pending_action_tx_status_cb)(struct wpa_supplicant *wpa_s,unsigned int freq, const u8 *dst,const u8 *src, const u8 *bssid,const u8 *data, size_t data_len,enum offchannel_send_action_resultresult);unsigned int roc_waiting_drv_freq;int action_tx_wait_time;int p2p_mgmt;#ifdef CONFIG_P2Pstruct p2p_go_neg_results *go_params;int create_p2p_iface;u8 pending_interface_addr[ETH_ALEN];char pending_interface_name[100];int pending_interface_type;int p2p_group_idx;unsigned int pending_listen_freq;unsigned int pending_listen_duration;enum {NOT_P2P_GROUP_INTERFACE,P2P_GROUP_INTERFACE_PENDING,P2P_GROUP_INTERFACE_GO,P2P_GROUP_INTERFACE_CLIENT} p2p_group_interface;struct p2p_group *p2p_group;int p2p_long_listen; /* remaining time in long Listen state in ms */char p2p_pin[10];int p2p_wps_method;u8 p2p_auth_invite[ETH_ALEN];int p2p_sd_over_ctrl_iface;int p2p_in_provisioning;int p2p_in_invitation;int p2p_invite_go_freq;int pending_invite_ssid_id;int show_group_started;u8 go_dev_addr[ETH_ALEN];int pending_pd_before_join;u8 pending_join_iface_addr[ETH_ALEN];u8 pending_join_dev_addr[ETH_ALEN];int pending_join_wps_method;u8 p2p_join_ssid[32];size_t p2p_join_ssid_len;int p2p_join_scan_count;int auto_pd_scan_retry;int force_long_sd;u16 pending_pd_config_methods;enum {NORMAL_PD, AUTO_PD_GO_NEG, AUTO_PD_JOIN} pending_pd_use;/** Whether cross connection is disallowed by the AP to which this* interface is associated (only valid if there is an association).*/int cross_connect_disallowed;/** Whether this P2P group is configured to use cross connection (only* valid if this is P2P GO interface). The actual cross connect packet* forwarding may not be configured depending on the uplink status.*/int cross_connect_enabled;/* Whether cross connection forwarding is in use at the moment. */int cross_connect_in_use;/** Uplink interface name for cross connection*/char cross_connect_uplink[100];unsigned int p2p_auto_join:1;unsigned int p2p_auto_pd:1;unsigned int p2p_persistent_group:1;unsigned int p2p_fallback_to_go_neg:1;unsigned int p2p_pd_before_go_neg:1;unsigned int p2p_go_ht40:1;unsigned int p2p_go_vht:1;unsigned int user_initiated_pd:1;unsigned int p2p_go_group_formation_completed:1;unsigned int waiting_presence_resp;int p2p_first_connection_timeout;unsigned int p2p_nfc_tag_enabled:1;unsigned int p2p_peer_oob_pk_hash_known:1;unsigned int p2p_disable_ip_addr_req:1;int p2p_persistent_go_freq;int p2p_persistent_id;int p2p_go_intent;int p2p_connect_freq;struct os_reltime p2p_auto_started;struct wpa_ssid *p2p_last_4way_hs_fail;struct wpa_radio_work *p2p_scan_work;struct wpa_radio_work *p2p_listen_work;struct wpa_radio_work *p2p_send_action_work;u16 p2p_oob_dev_pw_id; /* OOB Device Password Id for group formation */struct wpabuf *p2p_oob_dev_pw; /* OOB Device Password for group* formation */u8 p2p_peer_oob_pubkey_hash[WPS_OOB_PUBKEY_HASH_LEN];u8 p2p_ip_addr_info[3 * 4];
#endif /* CONFIG_P2P */struct wpa_ssid *bgscan_ssid;const struct bgscan_ops *bgscan;	//background 掃描功能void *bgscan_priv;const struct autoscan_ops *autoscan;struct wpa_driver_scan_params *autoscan_params;void *autoscan_priv;struct wpa_ssid *connect_without_scan;struct wps_ap_info *wps_ap;size_t num_wps_ap;int wps_ap_iter;int after_wps;int known_wps_freq;unsigned int wps_freq;int wps_fragment_size;int auto_reconnect_disabled;/* Channel preferences for AP/P2P GO use */int best_24_freq;int best_5_freq;int best_overall_freq;struct gas_query *gas;#ifdef CONFIG_INTERWORKINGunsigned int fetch_anqp_in_progress:1;unsigned int network_select:1;unsigned int auto_select:1;unsigned int auto_network_select:1;unsigned int fetch_all_anqp:1;unsigned int fetch_osu_info:1;unsigned int fetch_osu_icon_in_progress:1;struct wpa_bss *interworking_gas_bss;unsigned int osu_icon_id;struct osu_provider *osu_prov;size_t osu_prov_count;struct os_reltime osu_icon_fetch_start;unsigned int num_osu_scans;unsigned int num_prov_found;
#endif /* CONFIG_INTERWORKING */unsigned int drv_capa_known;struct {struct hostapd_hw_modes *modes;u16 num_modes;u16 flags;} hw;
#ifdef CONFIG_MACSECstruct ieee802_1x_kay *kay;
#endif /* CONFIG_MACSEC */int pno;int pno_sched_pending;/* WLAN_REASON_* reason codes. Negative if locally generated. */int disconnect_reason;struct ext_password_data *ext_pw;struct wpabuf *last_gas_resp, *prev_gas_resp;u8 last_gas_addr[ETH_ALEN], prev_gas_addr[ETH_ALEN];u8 last_gas_dialog_token, prev_gas_dialog_token;unsigned int no_keep_alive:1;unsigned int ext_mgmt_frame_handling:1;#ifdef CONFIG_WNMu8 wnm_dialog_token;u8 wnm_reply;u8 wnm_num_neighbor_report;u8 wnm_mode;u16 wnm_dissoc_timer;u8 wnm_validity_interval;u8 wnm_bss_termination_duration[12];struct neighbor_report *wnm_neighbor_report_elements;
#endif /* CONFIG_WNM */#ifdef CONFIG_TESTING_GET_GTKu8 last_gtk[32];size_t last_gtk_len;
#endif /* CONFIG_TESTING_GET_GTK */unsigned int num_multichan_concurrent;struct wpa_radio_work *connect_work;unsigned int ext_work_id;struct wpabuf *vendor_elem[NUM_VENDOR_ELEM_FRAMES];
};

總結

以上是生活随笔為你收集整理的深入理解 wpa_supplicant(三)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。