要看明白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;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。