wpa_supplicant
1 wpa_supplicant_init
该函数用于初始化wpa_supplicant。初始化成功后,返回的数据指针可用于添加或删除网络接口,以及最后释放wpa_supplicant。
-
调用wpa_debug_open_file,打开log文件。
-
调用eap_peer_register_methods,注册与EAP_PEER相关的方法,如EAP_MD5、EAP_TLS、EAP_MSCHAPv2、EAP_PEAP、EAP_TTLS、EAP_GTC、EAP_OTP、EAP_SIM、EAP_LEAP、EAP_PSK、EAP_AKA、EAP_AKA_PRIME、EAP_FAST、EAP_PAX、EAP_SAKE、EAP_GPSK、EAP_WSC、EAP_IKEV2、EAP_VENDOR_TEST、EAP_TNC等,后面会对EAPPEER方法进行详细说明。
-
调用eloop_init,初始化守护进程所使用到的参数,如daemonize,wait_for_monitor,dbus_ctrl_interface,ctrl_interface,wpa_debug_level,wpa_debug_show_keys等。
-
调用wpa_supplicant_global_ctrl_iface_init,创建priv->sock并绑定地址os_strlcpy(addr.sun_path,global->params.ctrl_interface,
-
sizeof(addr.sun_path));
-
如果有dbus接口,则调用wpa_supplicant_dbus_ctrl_iface_init函数进行初始化。
-
对所支持的wpa_supplicant驱动进行初始化。
-
for(i = 0; wpa_supplicant_drivers[i]; i++)
global->drv_priv[i]= wpa_supplicant_drivers[i]->global_init();
2wpa_supplicant_add_iface
该函数的功能是为wpa_supplicant添加一个网络接口。该函数在wpa_supplicant_run之前调用。另外,wpa_supplicant运行后也可动态添加一个网络接口,比如,一个热插拔网卡插入时。
global参数:wpa_supplicant_init返回的全局数据
iface参数:接口配置选项
返回值:如果添加成功,则返回接口否则返回NULL。
-
调用wpa_supplicant_alloc(),申请一个新的wpa_supplicant
-
调用wpa_supplicant_init_iface和wpa_supplicant_init_iface2初始化新接口,wpa_supplicant_init_iface功能是将iface去付给新申请的wpa_supplicant;wpa_supplicant_init_iface2功能是初始化驱动接口,注册驱动事件以及设置驱动参数,初始化状态机,初始化控制接口。
-
调用wpas_dbus_register_iface注册dbus控制接口。
3 wpa_supplicant_run
该函数的功能是跑主事件循环。
-
调用eloop_register_signal_terminate注册主循环调用的终止处理函数。
-
调用eloop_register_signal_reconfig注册主循环调用的重配置函数。
-
调用eloop_run跑循环体,对各种事件消息进行分配。