Rafael
quiero aprender como nl80211
y cfg80211
trabajar en detalle, tales como: flujo de funciones y cómo nl80211
interactúa con herramientas de red como wpa_supplicant
y iw
.
jmlemetayer
Para poder controlar los controladores inalámbricos desde el espacio de usuario, se utilizan algunos procesos de comunicación IPC entre el kernel y el espacio de usuario.
- Primero
ioctl
con API dependientes del proveedor. - En 1996, Jean Tourrilhes crea extensiones inalámbricas (NOSOTROS o WEXT).
La extensión inalámbrica (WE) es una API genérica que permite que un controlador exponga la configuración del espacio del usuario y las estadísticas específicas de las LAN inalámbricas comunes.
-
En 2006, John Linville crea mac80211 y Johannes Berg crea cfg80211 y nl80211. En conjunto, 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 enlace de red.
Entonces, herramientas como yo, hostapd o el wpa_supplicant use algunas bibliotecas de enlace de red (como libélula o libnl-pequeño) y el encabezado público de la interfaz de enlace de red que, por supuesto, es nl80211.h.
No hay tanta documentación, pero te aconsejo que leas el documentación de libnl y luego el codigo fuente (porque uso libnl).
-
nl80211 actúa como una interfaz entre el espacio del usuario y el espacio del núcleo… tengo dificultades para entender en qué punto el flujo de control pasa del espacio del usuario al espacio del núcleo
– Rafael
3 de febrero de 2014 a las 4:15
-
Has leído esto. Netlink se puede comparar con un socket entre el kernel y el espacio del usuario. De modo que el usuario puede usarlo de forma de solicitud-respuesta (por ejemplo,
iw dev wlan0 link
) y/o en forma de evento (p. ej.iw dev wlan0 event
).– jmlemetayer
3 de febrero de 2014 a las 10:33
-
gracias por el enlace, pero revisé esa página… para la interacción entre el usuario y el espacio del kernel, se crea un socket… pero cuando se trata de rastrear el código, no puedo rastrearlo desde el espacio del usuario hasta el espacio del kernel. …. si alguien puede ayudar, por favor responda pronto
– Rafael
4 de febrero de 2014 a las 4:58
-
Puedes buscar en el lista de correo de linux-wireless o incluso intenta preguntarles. Si recibiste una respuesta, publícala, estoy muy interesado y no tengo suficiente tiempo para hacerlo ahora.
– jmlemetayer
4 de febrero de 2014 a las 6:35
-
^ El enlace está muerto, aquí hay una versión archivada: web.archive.org/web/20160316163624/http://…
– Sinvergüenza
29 de abril de 2019 a las 15:49
Una imagen un poco más detallada de cómo nl80211
y cfg80211
trabajar 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
módulos del núcleo y controladores específicos).- Los controladores WiFi y el hardware pueden ser Full-MAC o Soft-MAC (ver Controlador_de_interfaz_de_red_inalámbrica).
cfg80211_ops
es un conjunto de operaciones que los controladores Full-MAC ymac80211
registro de módulo paracfg80211
módulo.ieee80211_ops
es un conjunto de operaciones que los controladores Soft-MAC registran paramac80211
módulo.
-
lspci -k | grep -A 3 -i “red” me devuelve “Controlador del kernel en uso: iwlwifi”. Entonces modinfo iwlwifi | grep depende me devuelve “cfg80211”. Pero, ¿cómo puedo comprobar acerca de nl80211 y mac80211. Además, ¿cómo sé si el controlador admite el modo AP o no?
– infoobstruido
19 de marzo de 2017 a las 12:56
Creé un diagrama de flujo de código básico para la pila inalámbrica en Linux,
desde wpa_supplicant > cfg80211 > mac80211 > ath9k_htc.
El código ha sido rastreado para Linux kernel 5.4.31.
Aquí está el Enlace.
-
Guau, es increíble. ¿Qué software usaste para crear este diagrama?
– Itachi Tensi
22 de junio de 2020 a las 4:22
-
@ItachiTensie No usé ningún software, solo lo hice con Dibujos de Google…
– Akshdeep Singh
22 de junio de 2020 a las 7:43
eyalsh
Vea mi respuesta a ¿Cómo aprender la estructura de los controladores inalámbricos de Linux (mac80211)?
En wpa_supplicant
puedes seguir el código en src/drivers/driver_nl80211.c
. Este es un controlador wpa_supplicant (no un controlador de kernel sino una abstracción utilizada en wpa_supplicant
código) que utiliza libnl
para comunicarse con el núcleo cfg80211
módulo. Cuándo wpa_supplicant
emite un escaneo, por ejemplo, entonces wpa_driver_nl80211_scan
se llama Construye el netlink
mensaje con un comando llamado NL80211_CMD_TRIGGER_SCAN
y con todos los parámetros necesarios para el escaneo.
Esta pregunta está fuera de tema. Ver centro de ayuda
– jugo de sig
18 de marzo de 2017 a las 6:27