Как работает библиотека nl80211 & cfg80211?
Я хочу узнать о том, как nl80211
и cfg80211
работают подробно. Функциональный поток, как nl80211
взаимодействует с сетевыми инструментами, такими как wpa_supplicant
, iw
.
Plz предложите мне полезные ссылки или книги для ссылки.
Ответы
Ответ 1
Чтобы управлять беспроводными драйверами из пользовательского пространства, используются некоторые процессы обмена сообщениями IPC между ядром и пользовательским пространством.
- Сначала использовался
ioctl
с зависимыми от поставщика API.
- В 1996 году Jean Tourrilhes создает беспроводные расширения (WE или WEXT).
Беспроводное расширение (WE) - это общий API, позволяющий драйверу выставить конфигурацию пользовательского пространства и статистику, специфичную для общие беспроводные локальные сети.
-
В 2006 году Джон Линвилл создает mac80211, а Йоханнес Берг создает 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, а затем iw исходный код (потому что iw использует libnl).
Ответ 2
Несколько более подробное изображение того, как nl80211
и cfg80211
работают с другими частями системы (user space
, kernel
и hardware
).
-
nl80211
- это интерфейс между программным обеспечением пользовательского пространства (iw
, wpa_supplicant
и т.д.) и ядрами (cfg80211
и mac80211
ядрами ядра и конкретными драйверами).
- Драйверы и оборудование WiFi могут быть Full-MAC или Soft-MAC (см. Wireless_network_interface_controller).
-
cfg80211_ops
- это набор операций, в которых драйверы Full-MAC и регистр модуля mac80211
находятся в модуле cfg80211
.
-
ieee80211_ops
- это набор операций, которые драйверы Soft-MAC регистрируются в модуле mac80211
.
![введите описание изображения здесь]()
Ответ 3
См. мой ответ на
Как узнать структуру драйверов беспроводной сети Linux (mac80211)?
В wpa_supplicant
вы можете выполнить код в src/drivers/driver_nl80211.c
. Это драйвер wpa_supplicant (не драйвер ядра, а абстракция, используемая в коде wpa_supplicant
), который использует libnl
для связи с модулем ядра cfg80211
. Если wpa_supplicant
выдает сканирование, то вызывает вызов wpa_driver_nl80211_scan
. Он создает сообщение netlink
с помощью команды NL80211_CMD_TRIGGER_SCAN
и со всеми параметрами, необходимыми для сканирования.