genetlink (Generic Netlink) es un framework dentro del subsistema Netlink del kernel de Linux que ofrece una interfaz estandarizada y extensible para la comunicación bidireccional entre procesos en el espacio de usuario y módulos en el kernel. A diferencia de los protocolos Netlink tradicionales que requieren un nuevo protocolo para cada funcionalidad (lo que implica asignar un nuevo número de protocolo y modificar el kernel), genetlink permite definir 'familias' de protocolos genéricos. Cada familia puede tener múltiples 'comandos' y 'atributos', lo que proporciona una gran flexibilidad sin la necesidad de registrar nuevos tipos de socket Netlink para cada caso de uso.
En el mundo real, genetlink es ampliamente utilizado por varios subsistemas del kernel de Linux para exponer su funcionalidad al espacio de usuario de una manera estructurada. Ejemplos notables incluyen el subsistema 'nl80211' para la configuración de redes inalámbricas (Wi-Fi), 'nf_conntrack' para la gestión de conexiones de firewall, 'ipsec' para la configuración de políticas de seguridad IP, y 'virtio-net' para la configuración de dispositivos de red virtualizados. Herramientas como 'iw' (para Wi-Fi) y 'conntrack' (para el firewall) interactúan con el kernel a través de genetlink para realizar sus operaciones.
Para un arquitecto de sistemas, genetlink es crucial porque ofrece una vía robusta y extensible para la interacción con el kernel, permitiendo la creación de herramientas de gestión y monitoreo personalizadas sin modificar el código fuente del kernel para cada nueva funcionalidad. Al diseñar sistemas que requieren interacción profunda con el kernel (por ejemplo, soluciones de redes avanzadas, seguridad, virtualización o telemetría de bajo nivel), genetlink es la opción preferida sobre ioctl o sysfs debido a su flexibilidad, capacidad de multiplexación y soporte para mensajes complejos. La elección de genetlink simplifica la evolución de la interfaz entre el espacio de usuario y el kernel, reduciendo la fricción en el desarrollo y mantenimiento de sistemas complejos que operan en entornos Linux.