Estructura general y registro del dispositivo
Para este controlador virtual simple, la arquitectura del dispositivo gira en torno a tres pilares conceptuales:
1. Definición e Inicialización de la Interfaz
Usaremos la abstracción de red Ethernet estándar del kernel.
El kernel asigna el objeto
struct net_devicejunto con un bloque de memoria privada (private data) contiguo para el controlador mediante la función de soportealloc_etherdev().En esta memoria privada guardaremos el estado local del controlador (por ejemplo, contadores o cerrojos de sincronización) sin necesidad de asignaciones adicionales.
2. Operaciones del Dispositivo (struct net_device_ops)
Definiremos una tabla de operaciones esenciales que la pila de red del kernel llamará cuando interactúe con la interfaz:
ndo_open: Se ejecuta al activar la interfaz (ip link set <iface> up). Aquí habilitamos la cola de transmisión (netif_start_queue).ndo_stop: Se ejecuta al desactivar la interfaz (ip link set <iface> down). Aquí detenemos la cola de transmisión (netif_stop_queue).ndo_start_xmit: El punto neurálgico de la transmisión, donde la pila de red nos entrega unsk_buff.
3. Registrar y apagado
Registro (
register_netdev): Se realiza durante elinitdel módulo. A partir de este momento, la interfaz es visible para el sistema operativo.Apagado (
unregister_netdev+free_netdev): Se ejecuta en elexitdel módulo o si algo falla durante la carga. Elimina la interfaz del sistema y libera la memoria asignada.