FreeBSD agrega soporte para el protocolo Netlink utilizado en el kernel de Linux

El código base de FreeBSD adopta una implementación del protocolo de comunicación Netlink (RFC 3549), que se usa en Linux para organizar la interacción entre el kernel y los procesos en el espacio del usuario. El proyecto se limita a admitir la familia de operaciones NETLINK_ROUTE para administrar el estado del subsistema de red en el kernel.

En su forma actual, la capa de soporte de Netlink permite que FreeBSD use la utilidad ip de Linux del paquete iproute2 para administrar interfaces de red, establecer direcciones IP, configurar enrutamiento y manipular objetos nexthop que almacenan el estado utilizado para reenviar un paquete al destino deseado. . Después de un ligero cambio en los archivos de encabezado, es posible usar Netlink en el paquete de enrutamiento de Bird.

La implementación de Netlink para FreeBSD está empaquetada como un módulo de kernel cargable que, si es posible, 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.

Netlink 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. Por ejemplo, los subsistemas de FreeBSD como devd, jail y pfilctl se pueden migrar a Netlink, ahora usando sus propias llamadas ioctl, lo que simplificará enormemente la creación de aplicaciones para trabajar con estos subsistemas. Además, el uso de Netlink para modificar los objetos y grupos nexthop en la pila de enrutamiento permitirá una interacción más eficiente con los procesos de enrutamiento del espacio del usuario.

Funciones actualmente implementadas:

  • Obtener información sobre rutas, objetos y grupos nexthops, interfaces de red, direcciones y hosts vecinos (arp/ndp).
  • Formación de notificaciones sobre la aparición y desconexión de interfaces de red, configuración y eliminación de direcciones, adición y eliminación de rutas.
  • Agregar y eliminar rutas, objetos y grupos de próximos saltos, puertas de enlace, interfaces de red.
  • Integración con la interfaz Rtsock para gestionar la tabla de enrutamiento.

Fuente: opennet.ru

Añadir un comentario