2011-08-23 6 views
11

Hay tantas estructuras en el controlador inalámbrico de Linux mac80211. Cosas como struct net_device, struct ieee80211_hw, struct ieee80211_vif y struct ieee80211_local y así sucesivamente. Tantas estructuras que no entiendo qué información contienen y cuándo se inicializaron.¿Cómo aprender la estructura de los controladores inalámbricos de Linux (mac80211)?

¿Cómo puedo obtener información sobre ellos y toda la arquitectura de los controladores inalámbricos?

+2

Hola, bienvenido a stackoverflow. Las buenas preguntas, que obtienen buenas respuestas, generalmente tienen una pregunta más específica y más específica que la que usted hizo aquí, que es muy amplia y abierta. – Flexo

+1

Lo mejor que puedo sugerir de esta pregunta es leer la fuente (http://lxr.linux.no/#linux+v3.0.3/ es muy útil), al acecho en algunas de las listas de correo (http: // linuxwireless .org/es/developers/MailingLists) y probando algunos cambios propios. Si eres capaz de hacer eso y luego plantear una pregunta más específica, creo que obtendrás respuestas mucho mejores. – Flexo

Respuesta

36

Es posible que desee comprobar hacia fuera (mantenedor mac80211) de Johannes Berg desliza aquí: http://wireless.kernel.org/en/developers/Documentation/mac80211?action=AttachFile&do=get&target=mac80211.pdf

Pueden ser un poco anticuado, pero debe darle un lugar para empezar.

una descripción de alto nivel de la Linux WiFi pila del núcleo:

  1. Es importante entender que hay 2 caminos en el que el espacio de usuario se comunica con el núcleo cuando estamos hablando de Wi-Fi:
    • Ruta de datos: los datos que se reciben pasan del controlador inalámbrico al núcleo de netdev (generalmente usando netif_rx()). A partir de ahí, el núcleo de red pasará por el código de pila TCP/IP y lo pondrá en cola en los sockets relevantes desde donde lo leerá el proceso de espacio de usuario. En la ruta Tx los paquetes se enviarán desde el núcleo de netdev al controlador inalámbrico utilizando la devolución de llamada ndo_start_xmit(). El controlador registra (como otros dispositivos de red como un controlador de ethernet) un conjunto de devoluciones de llamadas de operaciones usando el struct net_device_ops.
    • camino de control: Este camino es como espacio de usuario controla la interfaz WiFi/dispositivo y lleva a cabo operaciones como exploración/autenticación/asociación. La interfaz del espacio de usuario se basa en netlink y se llama al nl80211 (ver include/uapi/linux/nl80211.h). Puede enviar comandos y obtener eventos en respuesta.
  2. Cuando se envía un comando nl80211 se pone inicialmente a cargo de cfg80211 módulo del núcleo (que es código está en net/wireless y los controladores están en net/wireless/nl80211.c). cfg80211 generalmente llamará a un controlador de nivel inferior. En caso de Hardware MAC completo el controlador HW específico está justo debajo de cfg80211. El controlador debajo de cfg80211 registra un conjunto de operaciones con cfg80211 usando cfg80211_ops struct. Por ejemplo, consulte el controlador brcmfmac (drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c)
  3. Para Hardware MAC suave hay mac80211 que es un módulo kernel que implementa la capa MAC 802.11. En este caso, cfg80211 hablará con mac80211, que a su vez utilizará el controlador de nivel inferior específico del hardware. Un ejemplo de esto es iwlwifi (para chips Intel).
  4. mac80211 se registra con cfg80211 usando cfg80211_ops (ver net/mac80211/cfg.c). El controlador HW específico se registra con mac80211 utilizando el ieee80211_ops struct (por ejemplo drivers/net/wireless/iwlwifi/mvm/mac80211.c).
  5. La inicialización de una nueva NIC que ha conectado se produce desde la parte inferior de la pila. El controlador específico de HW llamará al ieee80211_allow_hw() de mac80211 generalmente después de probar el HW. ieee80211_alloc_hw() obtiene el tamaño de la estructura de datos privada utilizada por el controlador HW. A su vez llama a cfg80211 wiphy_new() que hace la asignación real de espacio suficiente para la estructura wiphy, el ieee80211_local struct (que es utilizado por mac80211) y los datos privados del controlador HW (la estratificación se ve en el código ieee80211_alloc_hw). ieee80211_hw es una estructura incrustada dentro de ieee80211_local que es "visible" para el controlador HW. Todos estos (wiphy, ieee80211_local, ieee80211_hw) representan un solo dispositivo físico conectado.
  6. En la parte superior de un único dispositivo físico (también conocido como phy) puede configurar múltiples interfaces virtuales. Estos son esencialmente lo que usted conoce como wlan0 o wlan1 que usted controla con ifconfig. Cada una de tales interfaces virtuales está representada por un ieee80211_vif. Esta estructura también contiene al final las estructuras privadas a las que accede el controlador HW. Se pueden usar múltiples interfaces para ejecutar algo como una estación en wlan0 y un AP en wlan1 (esto es posible dependiendo de las capacidades de HW).
Cuestiones relacionadas