我希望了解 nl80211
和 cfg80211
的详细工作原理,包括功能流程以及 nl80211
如何与网络工具(如 wpa_supplicant
和 iw
)进行交互。
我希望了解 nl80211
和 cfg80211
的详细工作原理,包括功能流程以及 nl80211
如何与网络工具(如 wpa_supplicant
和 iw
)进行交互。
In 2006, John Linville creates mac80211 and Johannes Berg creates cfg80211 and nl80211. Together it is intended to replace wireless extensions.
+-------------+
| |
| Userspace |
| |
+-------------+
^
- - - | - - - -
| nl80211
v
+-------------+
| |
| cfg80211 |
| |
+-------------+
+-------------+
| |
| mac80211 |
| driver |
| |
+-------------+
因此,像iw、hostapd或wpa_supplicant这样的工具使用一些netlink库(如libnl或libnl-tiny)和netlink接口公共头文件,当然是nl80211.h。
iw dev wlan0 link
)和/或事件的方式(例如,iw dev wlan0 event
)使用它。 - jmlemetayernl80211
和 cfg80211
如何与系统其他部分(用户空间
、内核
和 硬件
)交互。
nl80211
是用户空间软件(iw
, wpa_supplicant
等)和内核(cfg80211
和 mac80211
内核模块以及特定的驱动程序)之间的接口。cfg80211_ops
是由全MAC驱动程序和 mac80211
模块向 cfg80211
模块注册的一组操作。ieee80211_ops
是由软MAC驱动程序向 mac80211
模块注册的一组操作。我为 Linux 中的无线堆栈创建了一个基本的代码流程图,从 wpa_supplicant > cfg80211 > mac80211 > ath9k_htc 全部包括在内。
该代码追踪适用于 Linux 内核版本 5.4.31。
这是链接:link。
wpa_supplicant
中,您可以跟随src/drivers/driver_nl80211.c
中的代码。这是一个wpa_supplicant
驱动程序(不是内核驱动程序,而是在wpa_supplicant
代码中使用的抽象),它使用libnl
与内核的cfg80211
模块通信。例如,当wpa_supplicant
发出扫描命令时,会调用wpa_driver_nl80211_scan
。它使用名为NL80211_CMD_TRIGGER_SCAN
的命令以及扫描所需的所有参数来构建netlink
消息。