Hace ya varios días se dio a conocer la noticia de que el código base de FreeBSD a été adopté une nouvelle implémentation du protocole de communication Lien réseau (RFC 3549) el cual es utilizado in Linux para comunicarse between el kernel and los procesos in el espacio del usuario.
La famille des prises Lien réseau est une interface du noyau de Linux que se utiliza para la comunicación entre procesos (IPC) entre los procesos del kernel y del espacio de usuario y entre différents processus de l’espace de l’utilisateur, de manière similaire à los sockets de dominio de Unix.
De manière similaire aux sockets du domaine Unix, il y a une différence entre les sockets d’INET et la communication de Netlink qui ne peuvent pas atteindre les limites de l’hôte. Sans embargo, les sockets de dominio de Unix utilisent l’espace de nombres del sistema de archivos, los procesos de Netlink generalmente se bordan mediante identificadores de proceso (PID).
Netlink est diseñado y se utiliza para transferir información de red miscelánea entre el espacio del núcleo y los procesos del espacio de usuario. Las utilidades de red, como la familia iproute2 y las utilidades utilizadas para configurar controladores inalámbricos basados en mac80211, usan Netlink para comunicarse with el kernel of Linux desde el espacio del usuario. Netlink proporciona un interfaz basada en socket estándar para procesos de espacio de usuario y a API del lado del kernel para uso interno de los módulos del kernel. À l’origine, Netlink utilise la famille de sockets AF_NETLINK.
Hasta el momento en su forma actual, la capacité de prise en charge de Netlink permet à FreeBSD d’utiliser l’ip d’utilisation de Linux del paquete iproute2 para administrar interfaces de red, establecer direcciones IP, configure enrutamiento and manipular objetsos nexthop qu’almacenan el estado utilizado para reenviar un paquete al destino deseado. Après avoir cambiar ligeramente los archivos de encabezado, il est possible d’utiliser Netlink dans le paquet d’enrutamiento de Bird.
La mise en œuvre de Netlink pour FreeBSD está empaquetada como un módulo de kernel cargable que, si possible, no afecta a otros subsistemas del kernel y crea colas de tareas separadas (tasqueue) para procesar los mensajes entrantes a través del protocolo y realizar operaciones en modo asíncrono. La razón para portar Netlink es la falta de un mecanismo estándar para interactuar con los subsistemas del kernel, lo que lleva a que diferentes subsistemas y controladores inventen sus propios protocolos.
Lien réseau ofrece una capa de comunicación unificada y un formato de mensaje extensible que puede actuar como un intermediario que combina automáticamente datos dispares de diferentes fuentes en una sola solicitud. Par exemple, los subsistemas de FreeBSD como devd, jail y pfilctl se pueden migrar a Netlink, ahora usando sus propias llamadas ioctl, lo que simplificará ennormemente la creation de aplicaciones para trabajar con estos subsistemas. De plus, l’utilisation de Netlink pour modifier les objets et les groupes nexthop dans la pile d’enrutamiento permet une interaction plus efficace avec les processus d’enrutamiento del espacio del usuario.
Las interfaces, direcciones, rutas, firewall, fibs, vnets, etc. se controlan a través de netlink. Es un protocole asincrónico basado en TLV que proporciona comunicaciones 1-1 y 1-muchos. La mise en œuvre effective admet le sous-ensemble de la famille NETLINK_ROUTE. La mise en œuvre est également compatible avec le marco de la famille NETLINK_GENERIC.
Fonctions actuellement mises en œuvre :
- Obtener des informations sur les routes, les objets et les groupes nexthops, les interfaces de red, les directions et les hôtes vecinos (arp/ndp).
- Formación de notificaciones sobre la aparición y desconexión d’interfaces de red, configuración y eliminación de direcciones, adición y eliminación de rutas.
- Agregar y eliminar rutas, objetsos y grupos de próximos saltos, puertas de enlace, interfaces de red.
- Intégration avec l’interfaz Rtsock pour la gestion du tableau d’enrutamiento.
Cabe mencionar que hasta el momento el proyecto se limita a admitir la familia de operaciones NETLINK_ROUTE para administrar el estado del subsistema de red en el núcleo.
Finalmente si estás interesado en poder conocer más al respecto, puedes consultar los detalles en el siguiente enlace.