nl80211库和cfg80211是如何工作的?

omvjsjqw  于 2023-01-16  发布在  其他
关注(0)|答案(4)|浏览(296)

我想详细了解nl80211cfg80211的工作原理,例如:功能流以及nl80211如何与wpa_supplicantiw等网络工具交互。

0ve6wy6x

0ve6wy6x1#

为了能够从用户空间控制无线驱动程序,在内核和用户空间之间使用了一些IPC通信进程。

  • 最初使用的是带有依赖于供应商的API的ioctl
  • 1996年,Jean Tourrilhes创建了wireless extensions(WE或WEXT)。

无线扩展(WE)是一个通用API,允许驱动程序向用户空间公开特定于常见无线局域网的配置和统计信息。

  • 2006年,John Linville和Johannes贝格分别创建了cfg80211nl80211,旨在取代无线扩展。
+-------------+
|             |
|  Userspace  |
|             |
+-------------+
      ^
- - - | - - - - 
      | nl80211
      v
+-------------+
|             |
|  cfg80211   |
|             |
+-------------+
+-------------+
|             |
|  mac80211   |
|   driver    |
|             |
+-------------+

重要的一点是nl 80211/cfg 80211/mac 80211不再使用ioctl,它们使用netlink
因此,像iwhostapdwpa_supplicant这样的工具使用一些netlink库(如libnllibnl-tiny)和netlink接口公共头,当然是nl80211.h
没有那么多文档,但我建议您阅读libnl documentation,然后阅读iw source code(因为iw使用libnl)。

raogr8fs

raogr8fs2#

这是一个稍微详细一些的图片,说明nl80211cfg80211如何与系统的其他部分(user spacekernelhardware)一起工作。

  • nl80211是用户空间软件(iwwpa_supplicant等)与内核(cfg80211mac80211内核模块以及特定驱动程序)之间的接口。
  • WiFi驱动程序和硬件可以是Full-MAC或Soft-MAC(参见Wireless_network_interface_controller)。
  • cfg80211_ops是全MAC驱动程序和mac80211模块注册到cfg80211模块的一组操作。
  • ieee80211_ops是Soft-MAC驱动程序注册到mac80211模块的一组操作。

ckocjqey

ckocjqey3#

我已经为Linux中的无线堆栈创建了一个基本的代码流程图,
从WPA_请求者〉cfg80211〉mac80211〉ath9k_HTC一路。
这段代码已经在linux内核5.4.31中被跟踪。
这是link

zlhcx6iw

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消息。

相关问题