wpa_supplicant讲解

1 背景

wpa_supplicant作为sta设备wifi常依赖的开源库,学习、了解wpa_supplicant对wifi相关知识会有很大的提升。在近期工作中接触了多个版本的wpas,不同版本wpas占用的资源相差很大。基于节省设备资源的目的,本文主要记录在完成该目标过程中的一些心得。(下述文中统一用wpas代替wpa_supplicant)(2023/4/7 17:00) -----再牛逼的梦想,也抵不住傻逼般的坚持!

2 前提

本次基于wpas2.9版本进行介绍
推荐两篇文档:
wpa_supplicant交叉编译:https://blog.csdn.net/Bgm_Nilbb/article/details/120724443
wpa_supplicant深入理解:《深入理解Android:Wi-Fi、NFC和GPS卷》

3 可裁剪点

(下述裁剪点验证完成后,会写出裁剪方法、实际减小占用的资源大小、裁剪后的影响)
3.1 CONFIG_NO_STDOUT_DEBUG 日志裁剪
3.2 CONFIG_P2P p2p功能裁剪
3.3 CONFIG_AP & CONFIG_HS20 AP相关功能裁剪

4源码介绍

4.1代码框架

/third_party/wpa_supplicant
|-- CONTRIBUTIONS # 贡献说明
|-- COPYING # 版权说明
|-- wpa_supplicant-2.9 # 标准系统的wpa_supplicant
| |-- hs20 # 热点2.0(Hotspot2.0)相关功能
| |-- src # Wi-Fi热点与Wi-Fi接入点共用的代码
| | |-- ap # hostapd 相关功能代码
| | |-- common # 通用函数
| | |-- crypto # 加密功能
| | |-- drivers # 底层驱动对接,如wext,nl80211
| | |-- eap_common # eap相关部分
| | |-- eap_peer # eap相关部分
| | |-- eap_server # eap相关部分
| | |-- eapol_auth # eap相关部分
| | |-- eapol_supp # eap相关部分
| | |-- fst # fst模块
| | |-- l2_packet # 链路层访问封装
| | |-- p2p # WIFI P2P协议
| | |-- pae # ieeeee802协议
| | |-- radius # RADIUS:Remote Authentication Dial In User Service 消息处理
| | |-- rsn_supp # RSN协议, Robust Secure Network,强健安全网络),即通常所说的WPA2安全模式,是WPA 的第二个版本
| | |-- tls # TLS协议
| | |-- utils # 包括 RFC1341编解码, 通用的辅助函数, 双链表, UUID, debug, epool
| | |-- wps # wps功能实现
| | |-- lib.rule
| | |-- Makefile
| |-- wpa_supplicant # Wi-Fi接入相关功能(Station)
| | |-- Makefile

4.2几个重要功能源码位置介绍

a.wpa_cli工具下发的命令解析集合
在wpa_cli.c ctrl_iface.c中可以找到wpa_cli工具能够下发的所有命令对应的字段解析;
b.日志登记打印调整
在两个地方修改均可,调整wpa_debug.c中wpa_debug_level或者main.c中main函数params.wpa_debug_level
c.事件回调
wpas的事件回调是通过wpa_msg中wpa_msg_cb送上来的,包含assoction、scan、worng_key、connected等等,详情可查看wpa_ctrl.h
d.连接过程各种报文处理
四次握手接收处理及发送在wpa.c中(包含1/3 eapol包的接收处理,接2/4 eapol包的发送处理)
assoc在wpa_supplicant.c(四次握手接收eapol也在这里,详细处理在wpa.c)
e.异常断开处理
断开连接分为主动断开和被动断开
主动断开通常是向wpa_supplicant下发DISABLE_NETWORK和REMOVE_NETWORK命令
被动断开通常指被AP踢掉,接收到了Deauthentication or Disassociation frame,可以根据NL80211_ATTR_REASON_CODE来大概分析断开原因,源码分析在ieee802_11.c,NL80211_ATTR_REASON_CODE的解析可以参考另外一篇博客https://blog.csdn.net/Bgm_Nilbb/article/details/123269684

5.总结

针对开源库,在使用过程中,一定要花一些时间细细研究一下。

6.备注

该文章暂时做如上更新,如有描述错误之处,欢迎指正
(ps:在wpa_supplicant之下还有libnl,openssl两个子模块,在向下cfg80211, mac80211(soft mac架构支持,full mac架构驱动无需此模块),wifi驱动。细细思考了一下,自己作为多年工作的wifi工程师,一直没有详细梳理过这部分代码,有些说不过去,因此决定对如上几个模块分别做一篇讲解文章,欢迎大家对文章进行点评)
libnl 讲解:已完成50%,计划12.5号完成并公布链接
openssl 讲解:暂无
cfg80211 讲解:已完成30%,计划12.8号完成并公布链接
mac80211 讲解:暂无
wifi 驱动讲解:由于wifi驱动不同厂商实现不同,因此后面讲解的时候会选择一些主流厂商,如realtek(瑞昱)、broadcom(博通)等进行架构及功能模块进行讲解。
wifi fw:在wifi驱动之下通常还会涉及到厂商的wifi固件,该部分通常不对外部开源。这边暂不做分析

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鸡蛋炒肉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值