2014-01-30 5 views
34

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

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

+2

Этот вопрос не по теме. См. [Help/on-topic] – sigjuice

ответ

46

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

  • Сначала использовался ioctl с зависимыми от поставщика API.
  • В 1996 году Jean Tourrilhes создает wireless extensions (МЫ или WEXT).

беспроводного Extension (мы) является общим API, что позволяет водитель подвергать конфигурации пространства пользователя и статистику, характерные для общих беспроводных локальных сетей.

  • В 2006 году Джон Linville создает 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 documentation, а затем iw source code (поскольку iw использует libnl).

+0

спасибо за краткий обзор. – Rafal

+0

nl80211 действует как интерфейс между пользовательским пространством и пространством ядра ..... им трудно понять, в какой точке поток управления переходит из пользовательского пространства в пространство ядра – Rafal

+0

Вы читали [это] (http: //www.carisma.slowglass .com/~ TGR/libnl/DOC/core.html # core_netlink_fundamentals). Netlink можно сравнить с сокетом между ядром и пользовательским пространством. Таким образом, пользователь может использовать его в способе запроса-ответа (например, 'iw dev wlan0 link') и/или в способе события (например,' iw dev wlan0 event'). – jml

25

Чуть более подробная картина того, как 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.

enter image description here

+0

lspci -k | grep -A 3 -i «network» возвращает мне «Используемый драйвер ядра: iwlwifi». Тогда modinfo iwlwifi | grep зависит, возвращается мне «cfg80211». Но как я могу проверить nl80211 и mac80211. Также, как узнать, поддерживает ли драйвер режим AP или нет? – infoclogged

4

Смотрите мой ответ на How to learn the structure of Linux wireless drivers (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 и со всеми параметрами, необходимыми для сканирования.

 Смежные вопросы

  • Нет связанных вопросов^_^