我想详细了解nl80211和cfg80211的工作原理,例如:功能流以及nl80211如何与wpa_supplicant和iw等网络工具交互。
nl80211
cfg80211
wpa_supplicant
iw
0ve6wy6x1#
为了能够从用户空间控制无线驱动程序,在内核和用户空间之间使用了一些IPC通信进程。
ioctl
无线扩展(WE)是一个通用API,允许驱动程序向用户空间公开特定于常见无线局域网的配置和统计信息。
+-------------+ | | | Userspace | | | +-------------+ ^ - - - | - - - - | nl80211 v +-------------+ | | | cfg80211 | | | +-------------+ +-------------+ | | | mac80211 | | driver | | | +-------------+
重要的一点是nl 80211/cfg 80211/mac 80211不再使用ioctl,它们使用netlink。因此,像iw、hostapd或wpa_supplicant这样的工具使用一些netlink库(如libnl或libnl-tiny)和netlink接口公共头,当然是nl80211.h。没有那么多文档,但我建议您阅读libnl documentation,然后阅读iw source code(因为iw使用libnl)。
raogr8fs2#
这是一个稍微详细一些的图片,说明nl80211和cfg80211如何与系统的其他部分(user space、kernel和hardware)一起工作。
user space
kernel
hardware
mac80211
cfg80211_ops
ieee80211_ops
ckocjqey3#
我已经为Linux中的无线堆栈创建了一个基本的代码流程图,从WPA_请求者〉cfg80211〉mac80211〉ath9k_HTC一路。这段代码已经在linux内核5.4.31中被跟踪。这是link。
zlhcx6iw4#
看到我的回复如何学习Linux无线驱动程序的结构(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消息。
src/drivers/driver_nl80211.c
libnl
wpa_driver_nl80211_scan
NL80211_CMD_TRIGGER_SCAN
netlink
4条答案
按热度按时间0ve6wy6x1#
为了能够从用户空间控制无线驱动程序,在内核和用户空间之间使用了一些IPC通信进程。
ioctl
。无线扩展(WE)是一个通用API,允许驱动程序向用户空间公开特定于常见无线局域网的配置和统计信息。
重要的一点是nl 80211/cfg 80211/mac 80211不再使用ioctl,它们使用netlink。
因此,像iw、hostapd或wpa_supplicant这样的工具使用一些netlink库(如libnl或libnl-tiny)和netlink接口公共头,当然是nl80211.h。
没有那么多文档,但我建议您阅读libnl documentation,然后阅读iw source code(因为iw使用libnl)。
raogr8fs2#
这是一个稍微详细一些的图片,说明
nl80211
和cfg80211
如何与系统的其他部分(user space
、kernel
和hardware
)一起工作。nl80211
是用户空间软件(iw
、wpa_supplicant
等)与内核(cfg80211
和mac80211
内核模块以及特定驱动程序)之间的接口。cfg80211_ops
是全MAC驱动程序和mac80211
模块注册到cfg80211
模块的一组操作。ieee80211_ops
是Soft-MAC驱动程序注册到mac80211
模块的一组操作。ckocjqey3#
我已经为Linux中的无线堆栈创建了一个基本的代码流程图,
从WPA_请求者〉cfg80211〉mac80211〉ath9k_HTC一路。
这段代码已经在linux内核5.4.31中被跟踪。
这是link。
zlhcx6iw4#
看到我的回复如何学习Linux无线驱动程序的结构(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
消息。