admin管理员组

文章数量:1531760

2024年5月5日发(作者:)

WPA_supplicant架构及wext接口

1. 启动命令

wpa supplicant 在启动时,启动命令可以带有很多参数,目前我们的启动命令如

下:

wpa_supplicant /system/bin/wpa_supplicant -Dwext -ieth0

-c/data/wifi/wpa_ -f/data/wifi/wpa_

wpa_supplicant对于启动命令带的参数,用了两个数据结构来保存,

一个是 wpa_params, 另一个是wpa_interface.

这主要是考虑到wpa_supplicant是可以同时支持多个网络接口的。

wpa_params数据结构主要记录与网络接口无关的一些参数设置。

而每一个网络接口就用一个wpa_interface数据结构来记录。

在启动命令行中,可以用-N来指定将要描述一个新的网络接口,对于一个新的

网络接口,可以用下面六个参数描述:

-i : 网络接口名称

-c: 配置文件名称

-C: 控制接口名称

-D: 驱动类型

-p: 驱动参数

-b: 桥接口名称

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,它是一个二级指针,指向一个指

本文标签: 网络接口数据结构接口参数命令行