用户面
1.event loop模块
注册5类时间,读、写、信号、socket、超时。循环等待处理各类时间。
核心数据结构eloop_data。
举例:
超时事件,如扫描事件eloop_register_timeout(sec,usec,wpa_supplicant_scan,wpa_s,NULL)
socket读事件如内核返回事件,注册一个接收内核返回消息的socket到事件队列,接收消息通过wpa_driver_nl80211_event_receive回调函数处理
eloop_register_read_sock(nl_socket_get_fd(global->nl_event),wpa_driver_nl80211_event_receive,global->nl_cb,global->event)
注册读事件,一旦rfkill有新的事件到通过rfkill_receive回调函数处理
eloop_register_read_sock(rfkill->fd,rfkill_receive,rfkill,NULL)
2.driver I/F接口模块
隔离和底层驱动直接交换的driver控制模块。(driver控制模块=wrapper)
核心数据结构struct wpa_driver_ops *wpa_drivers
wpa_drivers数组包含多少个wrapper由编译选项来控制
每个wpa_driver_ops定义多个功能函数指针
3.driver wrapper驱动控制模块
kernel层wlan驱动在用户空间的代理模块,有具体类型
struct wpa_driver_ops wpa_driver_nl80211_ops(.name="nl80211")
功能func:初始化,扫描,关联,断开
获取驱动返回事件
src/drivers/sriver_nl80211_event.c::do_process_drv_event
-->wpa_driver_nl80211_event_receive
-->nl_recv_msg(libnlAPI)
-->process_global_event
-->do_process_drv_event
4.driver event模块
驱动返回的信息给WPAS其他模块
5.ctrl i/f上层
WPAS是C/S结构中的server端,它通过ctrl i/f模块向客户端提供通信接口,常用的client端的wpa_cli
6.l2_packet
收发EAPOL和EAP消息的LLC层数据
7.状态机
遵循协议标准
内核面
kenel
cfg80211无线配置模块,使用netlink
linux网络设备接口
平台驱动
1.HDD接口层:用户面和内核面之间的控制面+数据堆栈接口
北向实现注册用户和cfg80211回调
南向利用SME控制面接口;数据面利用TX/RX接口
2.控制面路径:
SME控制接口层:提供API给HDD,分派HDD的命令到PE
PE协议:MLME MAC子层管理实体,处理wifi连接等功能
WMA适配层:PE和WMI之间的适配层
WMI无线接口层:主机和固件之间的消息接口层
3.数据面路径:
TL shim TX/RX:数据提取
HTT:处理主机发送或接收到SOC的数据帧码流
4.封装/硬件接口:
HTC:封装控制帧/数据帧头
HIF硬件接口: