標籤:
要看明白wpa_supplicant.c的代碼,首先需要搞清楚三個很重要的結構體: struct wpa_supplicant,struct wpa_config和wpa_ssid。下面對struct wpa_supplicant的各個成員代表的含義進行說明。
struct wpa_supplicant {
u8 bssid[ETH_ALEN];//串連到的bssid對應的mac地址,只有在認證時才會設定此值
u8 pending_bssid[ETH_ALEN];//認證時將要進行串連的bssid
struct wpa_bss *current_bss;//當前串連的ssid
unsigned char own_addr[ETH_ALEN];//本機對應的mac地址
int reassociate;//認證失敗後置為1
int new_connection;//連上時值為0,沒連上值為1
int disconnected;//指示當前supplicant是否處於disconnected狀態
int *next_scan_freqs;//掃描特定bss時用特定的freq
enum scan_req_type scan_req;//scan類型,有串連掃描,自動掃描,手動掃描
int normal_scans;//串連掃描優先自動掃描
int prev_scan_wildcard;//分為全掃描還是針對特定ssid的掃描
struct wpa_radio_work *connect_work;//注意struct wpa_radio_work和struct wpa_supplicant相互之間的關係
int group_cipher;//多播密碼
int pairwise_cipher;//單播密碼
int key_mgmt;//單播密鑰管理類型
int mgmt_group_cipher;//多播密鑰管理類型
int wpa_proto;//支援的安全方式,如WPA/WPA2(RSN)
struct l2_packet_data *l2;//資料連結層EAPOL資料包
int eapol_received;//接收到的EAPOL資料包的個數,總共為4個
unsigned int drv_flags;//driver的目前狀態及能承擔的角色
struct eapol_sm *eapol;//對應的struct eapol_sm狀態機器
struct wpa_sm *wpa;//對應的struct wpa_sm狀態機器
struct wpa_config *conf;//struct wpa_supplicant對應wpa_supplicant結構體
char *confname;//對應wpa_supplicant.conf檔案
char *confanother;//對應p2p_supplicant.conf檔案
enum wpa_states wpa_state;//對應WPA_DISCONNECTED等def.h中定義的狀態
struct wpa_supplicant *next;//說明struct wpa_supplicant形成了一個鏈表
struct wpa_supplicant *parent;//對應struct wpa_supplicant鏈表的前端節點
struct wpa_global *global;//全域管理struct wpa_supplicant,包含struct wpa_supplicant前端節點
char ifname[100];//ctrl iface介面的名字,比較ifname和ctrl_iface
struct ctrl_iface_priv *ctrl_iface;
}
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。
android wpa_supplicant.c源碼解析