¿Cómo funciona nl80211 library & cfg80211?
linux-kernel wifi (3)
Quiero aprender cómo funcionan nl80211
y cfg80211
en detalle. Flujo de función, cómo nl80211
interactúa con herramientas de red como wpa_supplicant
, iw
.
Por favor sugiero algunos enlaces o libros útiles para referirme.
Para poder controlar los controladores inalámbricos desde el espacio de usuario, se utilizan algunos procesos de comunicación IPC entre kernel y espacio de usuario.
- Al principio se usaba
ioctl
con API dependientes del vendedor. - En 1996, Jean Tourrilhes crea extensiones inalámbricas (WE o WEXT).
La extensión inalámbrica (WE) es una API genérica que permite a un controlador exponer a la configuración del espacio de usuario y las estadísticas específicas de LAN inalámbricas comunes.
En 2006, John Linville crea mac80211 y Johannes Berg crea cfg80211 y nl80211 . Juntos, está destinado a reemplazar las extensiones inalámbricas.
+-------------+ | | | Userspace | | | +-------------+ ^ - - - | - - - - | nl80211 v +-------------+ | | | cfg80211 | | | +-------------+ +-------------+ | | | mac80211 | | driver | | | +-------------+
Un punto importante es que nl80211 / cfg80211 / mac80211 ya no usan ioctl, usan netlink .
Por lo tanto, las herramientas como iw , hostapd o wpa_supplicant usan algunas bibliotecas de netlink (como libnl o libnl-tiny ) y el encabezado público de la interfaz de netlink, que por supuesto es nl80211.h .
No hay demasiada documentación, pero te aconsejo que leas la libnl y luego el código fuente iw (porque iw use libnl).
Una imagen un poco más detallada de cómo nl80211
y cfg80211
funcionan con otras partes del sistema ( user space
, kernel
y hardware
).
-
nl80211
es la interfaz entre el software de espacio de usuario (iw
,wpa_supplicant
, etc.) y el kernel (cfg80211
ymac80211
kernel modules, y controladores específicos). - Los controladores y el hardware de WiFi podrían ser Full-MAC o Soft-MAC (ver Wireless_network_interface_controller ).
-
cfg80211_ops
es un conjunto de operaciones que los controladores Full-MAC y el módulomac80211
registran en el módulocfg80211
. -
ieee80211_ops
es un conjunto de operaciones que los controladores de Soft-MAC registran en el módulomac80211
.
Ver mi respuesta a ¿Cómo aprender la estructura de los controladores inalámbricos de Linux (mac80211)?
En wpa_supplicant
, puede seguir el código en src/drivers/driver_nl80211.c
. Este es un controlador wpa_supplicant (no es un controlador del kernel, sino una abstracción utilizada en el código wpa_supplicant
) que utiliza libnl
para comunicarse con el módulo kernel cfg80211
. Cuando wpa_supplicant
emite un escaneo, por ejemplo, se llama a wpa_driver_nl80211_scan
. Construye el mensaje netlink
con un comando llamado NL80211_CMD_TRIGGER_SCAN
y con todos los parámetros requeridos para el escaneo.