Подтвердить что ты не робот

Как работает библиотека nl80211 & cfg80211?

Я хочу узнать о том, как nl80211 и cfg80211 работают подробно. Функциональный поток, как nl80211 взаимодействует с сетевыми инструментами, такими как wpa_supplicant, iw.

Plz предложите мне полезные ссылки или книги для ссылки.

4b9b3361

Ответ 1

Чтобы управлять беспроводными драйверами из пользовательского пространства, используются некоторые процессы обмена сообщениями IPC между ядром и пользовательским пространством.

Беспроводное расширение (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 и со всеми параметрами, необходимыми для сканирования.