wpa_supplicant软件架构分析.doc

  1. 1、本文档共9页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
1.启动命令 wpa supplicant在启动时,启动命令可以带有很多参数,目前我们的启动命令如下: wpa_supplicant /system/bin/wpa_supplicant -Dwext -ieth0 -c/data/wifi/wpa_supplicant.conf -f/data/wifi/wpa_log.txt wpa_supplicant对于启动命令带的参数,用了两个数据结构来保存, 一个是wpa_params,另一个是wpa_interface. 这主要是考虑到wpa_supplicant是可以同时支持多个网络接口的。 wpa_params数据结构主要记录与网络接口无关的一些参数设置。 而每一个网络接口就用一个wpa_interface数据结构来记录。 在启动命令行中,可以用-N来指定将要描述一个新的网络接口,对于一个新的网络接口,可以用下面六个参数描述: -iifname :网络接口名称 -cconf:配置文件名称 -Cctrl_intf:控制接口名称 -Ddriver:驱动类型 -pdriver_param:驱动参数 -bbr_ifname:桥接口名称 2. wpa_supplicant初始化流程 2.1. main()函数: 在这个函数中,主要做了四件事。 a.解析命令行传进的参数。 b.调用wpa_supplicant_init()函数,做wpa_supplicant的初始化工作。 c.调用wpa_supplicant_add_iface()函数,增加网络接口。 d.调用wpa_supplicant_run()函数,让wpa_supplicant真正的run起来。 2.2. wpa_supplicant_init()函数: a.打开debug文件。 b.注册EAP peer方法。 c.申请wpa_global内存,该数据结构作为统领其他数据结构的一个核心, 主要包括四个部分: wpa_supplicant *ifaces /*每个网络接口都有一个对应的wpa_supplicant数据结构,该指针指向最近加入的一个,在wpa_supplicant数据结构中有指针指向next*/ wpa_params params /*启动命令行中带的通用的参数*/ ctrl_iface_global_priv *ctrl_iface /*global的控制接口*/ ctrl_iface_dbus_priv *dbus_ctrl_iface /*dbus的控制接口*/ d.设置wpa_global中的wpa_params中的参数。 e.调用eloop_init函数将全局变量eloop中的user_data指针指向wpa_global。 f.调用wpa_supplicant_global_ctrl_iface_init函数初始化global控制接口。 g.调用wpa_supplicant_dbus_ctrl_iface_init函数初始化dbus控制接口。 h.将该daemon的pid写入pid_file中。 2.3. wpa_supplicant_add_iface()函数: 该函数根据启动命令行中带有的参数增加网络接口,有几个就增加几个。 a.因为wpa_supplicant是与网络接口对应的重要的数据结构,所以,首先分配一个wpa_supplicant数据结构的内存。 b.调用wpa_supplicant_init_iface()函数来做网络接口的初始工作,主要包括: 设置驱动类型,默认是wext; 读取配置文件,并将其中的信息设置到wpa_supplicant数据结构中的conf指针指向的数据结构,它是一个wpa_config类型; 命令行设置的控制接口ctrl_interface和驱动参数driver_param覆盖配置文件里设置,命令行中的优先; 拷贝网络接口名称和桥接口名称到wpa_config数据结构; 对于网络配置块有两个链表描述它,一个是config-ssid,它按照配置文件中的顺序依次挂载在这个链表上,还有一个是pssid,它是一个二级指针,指向一个指针数组,该指针数组按照优先级从高到底的顺序依次保存wpa_ssid指针,相同优先级的在同一链表中挂载。 c.调用wpa_supplicant_init_iface2()函数,主要包括: 调用wpa_supplicant_init_eapol()函数来初始化eapol; 调用相应类型的driver的init()函数; 设置driver的param参数; 调用wpa_drv_get_ifname()函数获得网络接口的名称,对于wext类型的driver,没有这个接口函数; 调用wpa_supplicant_init_wpa()函数来初

文档评论(0)

188****8742 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档