Я хочу узнать о том, как nl80211
и cfg80211
работают подробно. Функциональный поток, как nl80211
взаимодействует с сетевыми инструментами, такими как wpa_supplicant
, iw
.
Plz предложите мне полезные ссылки или книги для ссылки.
Я хочу узнать о том, как nl80211
и cfg80211
работают подробно. Функциональный поток, как nl80211
взаимодействует с сетевыми инструментами, такими как wpa_supplicant
, iw
.
Plz предложите мне полезные ссылки или книги для ссылки.
Чтобы управлять беспроводными драйверами из пользовательского пространства, используются некоторые процессы обмена сообщениями IPC между ядром и пользовательским пространством.
ioctl
с зависимыми от поставщика API.Беспроводное расширение (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).
Несколько более подробное изображение того, как nl80211
и cfg80211
работают с другими частями системы (user space
, kernel
и hardware
).
nl80211
- это интерфейс между программным обеспечением пользовательского пространства (iw
, wpa_supplicant
и т.д.) и ядрами (cfg80211
и mac80211
ядрами ядра и конкретными драйверами).cfg80211_ops
- это набор операций, в которых драйверы Full-MAC и регистр модуля mac80211
находятся в модуле cfg80211
.ieee80211_ops
- это набор операций, которые драйверы Soft-MAC регистрируются в модуле mac80211
.См. мой ответ на Как узнать структуру драйверов беспроводной сети 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
и со всеми параметрами, необходимыми для сканирования.