mac80211源码分析
- 概述
- 体系结构
- 代码结构
- 数据结构
- 主要流程
- 切换点
- 主要函数
- 速率控制
1、概述
- mac80211:是一个Linux内核子系统,是驱动开发者可用于为SoftMAC无线设备写驱动的框架。mac80211在内核空间实现STA模式,在用户空间实现AP模式(hostapd)。
- cfg80211:用于对无线设备进行配置管理,与FullMAC,mac80211和nl80211一起工作。
- nl80211:用于对无线设备进行配置管理,它是一个基本Netlink的用户态协议。
- MLME:即MAC (Media Access Control) Layer Management Entity,它管理物理层MAC状态机。
- SoftMAC:其MLME由软件实现,mac80211为SoftMAC实现提供了一个API。 即:SoftMAC设备允许对硬件执行更好地控制,允许用软件实现对802.11的帧管理,包括解析和产生802.11无线帧。目前大多数802.11设备为SoftMAC,而FullMAC设备较少。
- FullMAC:其MLME由硬件管理,当写FullMAC无线驱动时,不需要使用mac80211。
- wpa_supplicant:是用户空间一个应用程序,主要发起MLME命令,然后处理相关结果。
- hostpad:是用户空间一个应用程序,主要实现station接入认证管理。
2、体系结构
图2-1 系统框架
3、代码结构
- ieee80211_i.h(主要数据结构)
- main.c(主函数入口)
- iface.c(虚拟接口处理)
- key.c,key.h(密钥管理)
- sta_info.c,sta_info.h(用户管理)
- pm.c(功率管理)
- rate.c,rate.h(速率控制函数)
- rc80211*(速率控制算法)
- rx.c(帧接收路径代码)
- tx.c(帧发送路径代码)
- scan.c(软件扫描代码)
- mlme.c(station/managed模式MLME)
- ibss.c(IBSS MLME)
- cfg.c,cfg.h,wext.c(配置入口代码)
- aes*,tkip*,wep*,michael*,wpa*(WPA/RSN/WEP代码)
- wme.c,wme.h(QoS代码)
- util.c(公共函数)
4、数据结构
ieee80211_local/ieee80211_hw
- 每个数据结构代表一个无线设备(ieee80211_hw嵌入到ieee80211_local)
- ieee80211_hw是ieee80211_local在驱动中的可见部分
- 包含无线设备的所有操作信息