wpa_supplicant 源码简析——初始化(二)

上一篇大致介绍了wpa_supplicant的初始化的过程,这一篇将重点放在具体的函数上看看这些初始化的函数具体做了什么。

首先看global = wpa_supplicant_init(&params)。wpa_supplicant_init函数主要初始化wpa_global全局变量以及随机数资源、eloop事件循环机制以及设置消息全局回调函数等。该函数中有几个重要的重要的函数或概念要做简单介绍。

1.eap_register_methods 函数

该函数根据编译时的配置项注册EAP method, EAP method 是client 和server在认证过程中使用的认证方法。该函数实际是为每个支持的EAP method填充一个struct eap_method *eap 结构。将所有的eap_method 用链表连接起来,链表头指针保存在全局变量eap_methods中。

2.eloop_init 函数

该函数初始化eloop data数据。wpa_supplicant使用eloop event机制,单线程polling timeout,signal,socket等事件。

3. wpa_drivers数组

for (i = 0; wpa_drivers[i]; i++)
        global->drv_count++;

这里统计支持的driver类型的数量,具体支持哪些driver类型由编译选项设置。wpa_drivers数组的定义如下,数组的每个成员均为wpa_driver_ops结构,其定义了很多函数。应用程序正是使用wpa driver wrapper hook的这些函数和底层进行通信,wpa_supplicant和hostapd完全只是应用程序,因此这里的wpa driver并不是什么设备或kernel的驱动,而是上层和底层驱动进行通信的接口。

const struct wpa_driver_ops *const wpa_drivers[] =
{
#ifdef CONFIG_DRIVER_NL80211
    &wpa_driver_nl80211_ops,
#endif /* CONFIG_DRIVER_NL80211 */
#ifdef CONFIG_DRIVER_WEXT
    &wpa_driver_wext_ops,
#endif /* CONFIG_DRIVER_WEXT */
#ifdef CONFIG_DRIVER_HOSTAP
    &wpa_driver_hostap_ops,
#endif /* CONFIG_DRIVER_HOSTAP */
#ifdef CONFIG_DRIVER_BSD
    &wpa_driver_bsd_ops,
#endif /* CONFIG_DRIVER_BSD */
#ifdef CONFIG_DRIVER_OPENBSD
    &wpa_driver_openbsd_ops,
#endif /* CONFIG_DRIVER_OPENBSD */
#ifdef CONFIG_DRIVER_NDIS
    &wpa_driver_ndis_ops,
#endif /* CONFIG_DRIVER_NDIS */
#ifdef CONFIG_DRIVER_WIRED
    &wpa_driver_wired_ops,
#endif /* CONFIG_DRIVER_WIRED */
#ifdef CONFIG_DRIVER_MACSEC_LINUX
    &wpa_driver_macsec_linux_ops,
#endif /* CONFIG_DRIVER_MACSEC_LINUX */
#ifdef CONFIG_DRIVER_MACSEC_QCA
    &wpa_driver_macsec_qca_ops,
#endif /* CONFIG_DRIVER_MACSEC_QCA */
#ifdef CONFIG_DRIVER_ROBOSWITCH
    &wpa_driver_roboswitch_ops,
#endif /* CONFIG_DRIVER_ROBOSWITCH */
#ifdef CONFIG_DRIVER_ATHEROS
    &wpa_driver_atheros_ops,
#endif /* CONFIG_DRIVER_ATHEROS */
#ifdef CONFIG_DRIVER_NONE
    &wpa_driver_none_ops,
#endif /* CONFIG_DRIVER_NONE */
    NULL
};
 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值