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固件,该部分通常不对外部开源。这边暂不做分析

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Android wpa_supplicant是Android系统中负责管理Wi-Fi连接的关键组件之一。它是基于Linux系统的wpa_supplicant软件的Android定制版本。 wpa_supplicant是一个开源的Wi-Fi客户端,它支持WPA(Wi-Fi Protected Access)和WPA2安全协议,允许设备与Wi-Fi网络进行安全连接。Android的wpa_supplicant提供了与Android框架和硬件驱动程序的集成,以实现无线网络功能。 Android wpa_supplicant的主要功能包括: 1. 扫描网络:wpa_supplicant可以扫描附近的Wi-Fi网络,并获取网络的SSID(网络名称)和BSSID(网络MAC地址)等信息。 2. 连接网络:它可以与Wi-Fi网络进行连接,并使用预共享密钥(PSK)或企业级证书进行身份验证。 3. 管理网络配置:wpa_supplicant可以管理设备保存的Wi-Fi网络配置文件,包括SSID、密码、安全协议等。它可以自动选择最佳的网络进行连接。 4. 监听事件:wpa_supplicant可以监听Wi-Fi状态变化和连接事件,例如连接成功、连接断开等,以便及时通知应用程序。 5. 支持高级功能:它还支持一些高级功能,如Wi-Fi直连(Wi-Fi Direct)、WPS(Wi-Fi Protected Setup)等。 Android系统通过wpa_supplicant与驱动程序进行通信,驱动程序负责处理硬件层面的Wi-Fi操作。wpa_supplicant将Wi-Fi相关的命令发送给驱动程序,并接收来自驱动程序的事件和状态更新。 总之,Android wpa_supplicant是Android系统中的一个关键组件,负责管理Wi-Fi连接和相关配置。它提供了与Android框架和硬件驱动程序的集成,使设备能够安全地连接到Wi-Fi网络。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值