
Suite de protocolos de enrutamiento basada en Rust que implementa BGP, OSPF, IS-IS, RIP y VRRP con configuración modelada en YANG, automatización gNMI/gRPC y fuzzing integrado para redes de alta escala impulsadas por automatización.
Holo es un conjunto de protocolos de enrutamiento diseñados para soportar redes de alta escala y orientadas a la automatización.
Para una descripción de qué es un protocolo de enrutamiento, consulte esta página de Wikipedia.
El objetivo principal de Holo es crear una base de código fiable, fácil de mantener y extensible. Con la creciente complejidad de los protocolos de enrutamiento y sus extensiones, es crucial tener implementaciones de protocolos de enrutamiento construidas sobre una base sólida. Para ello, la base de código de Holo prioriza la simplicidad, la modularidad y una documentación exhaustiva. Gracias al rigor del compilador de Rust y a las extensas pruebas unitarias, se espera que la mayoría de las regresiones se detecten tempranamente en el ciclo de desarrollo de nuevas funciones. Para más detalles, consulte la página de Arquitectura.
Holo fue desarrollado específicamente para redes de alta escala y orientadas a la automatización que requieren configuración y monitorización programables utilizando datos estructurados y modelados. Holo implementa de forma nativa módulos YANG estándar del IETF y soporta múltiples interfaces de gestión, incluyendo gRPC y gNMI nativos. Además, Holo cuenta con una CLI independiente que renderiza dinámicamente comandos desde módulos YANG y se comunica con el demonio Holo a través de gRPC.
Los cambios realizados en la configuración se procesan como transacciones, garantizando que todos los cambios se apliquen o ninguno. Esta característica es un facilitador significativo de la automatización de redes, ya que elimina la necesidad de recuperación de errores en las aplicaciones de gestión. Holo también soporta transacciones a nivel de red que involucran múltiples dispositivos de red. Capacidades adicionales de automatización de red incluyen commits confirmados y soporte de reversión de configuración.
Debido a estar escrito en un lenguaje seguro en cuanto a memoria, Holo es inmune a una amplia variedad de errores de memoria y vulnerabilidades de seguridad. Además de las garantías de seguridad proporcionadas por Rust, el demonio Holo también elimina privilegios al iniciarse. Para ciertas operaciones, como la vinculación de sockets, se utilizan capacidades de Linux para obtener el permiso mínimo requerido durante el menor tiempo posible.
Holo también proporciona una protección robusta contra el vector de ataque más común en las pilas de protocolos de enrutamiento: los ataques de denegación de servicio (DoS) mediante entrada de paquetes maliciosos. Los paquetes entrantes se decodifican en tareas asíncronas aisladas y supervisadas, lo que permite que las implementaciones de protocolos se recuperen correctamente de pánicos, por ejemplo, ignorando paquetes mal formados o cerrando solo el flujo TCP afectado, sin comprometer la estabilidad de todo el demonio. Además, gracias al diseño modular de Holo y al soporte integrado para fuzzing guiado por cobertura, se espera que la mayoría de los errores de análisis se detecten y solucionen durante el desarrollo.
Algunos protocolos, como OSPF y RIP, tienen diferentes versiones que se despliegan ampliamente, típicamente una para IPv4 y otra para IPv6. Holo aprovecha los genéricos de Rust para tener implementaciones de protocolos independientes de la versión, donde la mayor parte del código es compartida por las diferentes versiones del protocolo. Este enfoque reduce el coste de mantenimiento de estos protocolos y facilita el lanzamiento de nuevas funciones que beneficien a todas las versiones del protocolo.
Holo hace un uso extensivo de operaciones asíncronas y se basa en el runtime Tokio para programar tareas y ejecutarlas en un pool de hilos. Para lograr un mejor rendimiento, tanto las solicitudes de E/S como los algoritmos intensivos en CPU se descargan a tareas separadas, maximizando la utilización de todos los núcleos de CPU disponibles. Se planea soporte para código independiente del runtime en el futuro, una vez que el equipo de lenguaje Rust estandarice las abstracciones necesarias.
Holo genera mensajes de registro que contienen datos estructurados, que se pueden presentar en varios formatos como JSON, texto, etc. Dado que el registro se realiza a través de la fachada tracing, se pueden utilizar diversos suscriptores tracing para satisfacer diferentes requisitos del usuario. Por ejemplo, el registro puede dirigirse a un archivo, journald, un recolector centralizado de OpenTelemetry, o cualquier combinación de estas opciones con niveles de registro potencialmente variables.
Holo proporciona funcionalidad de grabación y reproducción, lo que permite reproducir fácilmente cualquier error reportado por el usuario. El demonio Holo se puede configurar para grabar el ciclo de vida completo de una instancia de protocolo en un archivo. Ese archivo se puede reproducir luego en otra máquina, reproduciendo la misma secuencia de eventos. Mientras que una sesión de grabación puede durar horas o días, el proceso de reproducción debería tomar solo unos segundos. Esto es factible gracias a la arquitectura modular de Holo, donde todas las operaciones relacionadas con el tiempo y E/S se realizan en tareas separadas y se abstraen como mensajes de evento.
Para instrucciones detalladas sobre la instalación, consulte el archivo INSTALL.md.
Actualmente, Holo solo es compatible con sistemas operativos Linux. Se planea soporte para WebAssembly en el futuro.
La forma más sencilla de empezar a usar Holo es utilizando contenedores Docker preconstruidos en combinación con el software containerlab. Puede encontrar una variedad de topologías de red preconfiguradas en este enlace. Estas topologías se pueden desplegar con un solo comando, permitiéndole probar Holo en varios escenarios de red, incluyendo pruebas de interoperabilidad con otras implementaciones.
Además, Holo se puede usar donde sea necesario una pila de enrutamiento, como en routers de software, siempre que el conjunto de funciones se alinee con sus necesidades específicas.
Holo soporta los siguientes estándares de Internet:
Los resultados de las pruebas de conformidad realizadas con el Ixia IxANVL RFC Compliance Tester están disponibles aquí.
Este proyecto está financiado a través de NGI Zero Core, un fondo establecido por NLnet con el apoyo financiero del programa Next Generation Internet de la Comisión Europea. Obtenga más información en la página del proyecto NLnet.
Este proyecto está licenciado bajo la [licencia MIT].
Agradecemos cualquier contribución, desde informes de errores hasta solicitudes de extracción (Pull Requests). Consulte nuestra Lista de deseos del proyecto para ideas sobre dónde contribuir.
A menos que usted indique explícitamente lo contrario, cualquier contribución enviada intencionalmente para su inclusión en Holo por su parte, se licenciará como MIT, sin términos ni condiciones adicionales.
| Módulo | Configuración | Estado | RPC | Notificaciones | Total |
|---|
| ietf-bfd-ip-mh@2022-09-22 | 100.00% | 100.00% | - | 100.00% | 100.00% |
| ietf-bfd-ip-sh@2022-09-22 | 100.00% | 100.00% | - | 100.00% | 100.00% |
| ietf-bfd@2022-09-22 | 100.00% | 100.00% | - | - | 100.00% |
| ietf-bgp-policy@2023-07-05 | 100.00% | - | - | - | 100.00% |
| ietf-bgp@2023-07-05 | 32.38% | 85.95% | - | - | 60.40% |
| ietf-bier@2023-09-12 | 100.00% | - | - | 0.00% | 72.50% |
| ietf-if-extensions@2023-01-26 | 100.00% | 0.00% | - | - | 50.00% |
| ietf-if-vlan-encapsulation@2023-01-26 | 42.86% | - | - | - | 42.86% |
| ietf-igmp-mld@2019-11-01 | 84.62% | 100.00% | - | - | 95.83% |
| ietf-interfaces@2018-02-20 | 100.00% | 0.00% | - | - | 22.22% |
| ietf-ip@2018-02-22 | 52.17% | 0.00% | - | - | 40.00% |
| ietf-ipv4-unicast-routing@2018-03-13 | 100.00% | 100.00% | - | - | 100.00% |
| ietf-ipv6-unicast-routing@2018-03-13 | 40.62% | 100.00% | - | - | 45.71% |
| ietf-isis-flex-algo@2026-06-26 | 0.00% | 100.00% | - | 0.00% | 74.00% |
| ietf-isis-link-attr@2026-06-26 | 81.82% | 78.43% | - | - | 78.76% |
| ietf-isis-msd@2024-09-02 | - | 100.00% | - | - | 100.00% |
| ietf-isis-sr-mpls@2025-12-09 | 15.38% | 57.27% | - | - | 52.85% |
| ietf-isis@2022-10-19 | 93.62% | 80.09% | 100.00% | 100.00% | 86.77% |
| ietf-key-chain@2017-06-15 | 100.00% | 100.00% | - | - | 100.00% |
| ietf-mpls-ldp@2022-03-14 | 86.96% | 92.31% | 100.00% | 100.00% | 92.38% |
| ietf-mpls@2020-12-18 | 0.00% | 57.14% | - | - | 35.29% |
| ietf-ospf-anycast-flag@2026-05-19 | 100.00% | - | - | - | 100.00% |
| ietf-ospf-sr-mpls@2025-12-09 | 21.43% | 51.36% | - | - | 49.82% |
| ietf-ospf@2022-10-19 | 95.70% | 85.04% | 100.00% | 58.06% | 83.89% |
| ietf-ospfv3-extended-lsa@2024-06-07 | 50.00% | 85.28% | - | - | 84.85% |
| ietf-rip@2020-02-20 | 27.91% | 93.33% | 100.00% | - | 55.41% |
| ietf-routing-policy@2021-10-11 | 100.00% | 0.00% | - | - | 98.11% |
| ietf-routing@2018-03-13 | 100.00% | 85.71% | - | - | 92.31% |
| ietf-segment-routing-mpls@2021-05-26 | 62.50% | 0.00% | - | 23.53% | 32.76% |
| ietf-segment-routing@2021-05-26 | 100.00% | - | - | - | 100.00% |
| ietf-system@2014-08-06 | 26.67% | 60.00% | 0.00% | - | 38.24% |
| ietf-vrrp@2018-03-13 | 53.19% | 80.00% | - | 66.67% | 66.35% |