【发布时间】:2020-05-09 06:46:07
【问题描述】:
我想详细了解nl80211 和cfg80211 的工作原理。函数流,nl80211 如何与wpa_supplicant、iw 等网络工具交互。
请给我一些有用的链接或参考书籍。
【问题讨论】:
-
这个问题跑题了。见help center
标签: c linux-kernel linux-device-driver wifi
我想详细了解nl80211 和cfg80211 的工作原理。函数流,nl80211 如何与wpa_supplicant、iw 等网络工具交互。
请给我一些有用的链接或参考书籍。
【问题讨论】:
标签: c linux-kernel linux-device-driver wifi
为了能够从用户空间控制无线驱动程序,使用了内核和用户空间之间的一些 IPC 通信过程。
ioctl 和供应商相关的 API。无线扩展 (WE) 是一个通用 API,允许驱动程序 暴露给特定的用户空间配置和统计信息 常见的无线局域网。
2006 年,John Linville 创建了mac80211,Johannes Berg 创建了cfg80211 和nl80211。它旨在共同取代无线扩展。
+-------------+
| |
| Userspace |
| |
+-------------+
^
- - - | - - - -
| nl80211
v
+-------------+
| |
| cfg80211 |
| |
+-------------+
+-------------+
| |
| mac80211 |
| driver |
| |
+-------------+
重要的一点是nl80211/cfg80211/mac80211不再使用ioctl,他们使用netlink。
因此,iw、hostapd 或 wpa_supplicant 等工具使用一些 netlink 库(如 libnl 或 libnl-tiny)和 netlink 接口公共标头,当然是 nl80211.h。
没有那么多文档,但我建议你阅读libnl documentation,然后阅读iw source code(因为我使用libnl)。
【讨论】:
iw dev wlan0 link)和/或以事件方式(例如iw dev wlan0 event)使用它。
关于nl80211 和cfg80211 如何与系统的其他部分(user space、kernel 和hardware)一起工作的更详细的图片。
nl80211 是用户空间软件(iw、wpa_supplicant 等)和内核(cfg80211 和 mac80211 内核模块和特定驱动程序)之间的接口。 cfg80211_ops 是一组全 MAC 驱动程序和 mac80211 模块注册到 cfg80211 模块的操作。ieee80211_ops 是 Soft-MAC 驱动程序注册到 mac80211 模块的一组操作。【讨论】:
查看我的回复 How to learn the structure of Linux wireless drivers (mac80211)?
在wpa_supplicant,您可以按照src/drivers/driver_nl80211.c中的代码。这是一个 wpa_supplicant 驱动程序(不是内核驱动程序,而是wpa_supplicant 代码中使用的抽象),它使用libnl 与内核cfg80211 模块进行通信。例如,当wpa_supplicant 发出扫描时,wpa_driver_nl80211_scan 会被调用。它使用名为NL80211_CMD_TRIGGER_SCAN 的命令和扫描所需的所有参数构建netlink 消息。
【讨论】:
我已经为 linux 中的无线堆栈创建了一个基本的代码流程图,
一路从 wpa_supplicant > cfg80211 > mac80211 > ath9k_htc。
已针对 linux 内核 5.4.31 跟踪代码。
这里是link。
【讨论】: