============================================= 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_device`` junto con un bloque de memoria privada (*private data*) contiguo para el controlador mediante la función de soporte ``alloc_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 up``). Aquí habilitamos la cola de transmisión (``netif_start_queue``). * ``ndo_stop``: Se ejecuta al desactivar la interfaz (``ip link set 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 un ``sk_buff``. 3. Registrar y apagado ====================== * **Registro** (``register_netdev``): Se realiza durante el ``init`` del módulo. A partir de este momento, la interfaz es visible para el sistema operativo. * **Apagado** (``unregister_netdev`` + ``free_netdev``): Se ejecuta en el ``exit`` del módulo o si algo falla durante la carga. Elimina la interfaz del sistema y libera la memoria asignada.