
Suite de protocoles de routage basée sur Rust implémentant BGP, OSPF, IS-IS, RIP et VRRP avec une configuration basée sur YANG, automatisation gNMI/gRPC, et fuzzing intégré pour les réseaux à grande échelle et axés sur l'automatisation.
Holo est une suite de protocoles de routage conçue pour prendre en charge les réseaux à grande échelle et automatisés.
Pour une description de ce qu'est un protocole de routage, veuillez consulter cette page Wikipedia.
L'objectif principal de Holo est de créer une base de code fiable, facile à maintenir et extensible. Avec la complexité croissante des protocoles de routage et de leurs extensions, il est crucial de disposer d'implémentations de protocoles de routage construites sur des fondations solides. À cette fin, la base de code de Holo privilégie la simplicité, la modularité et une documentation approfondie. Grâce à la rigueur du compilateur Rust et aux nombreux tests unitaires, on s'attend à ce que la plupart des régressions soient détectées tôt dans le cycle de développement des nouvelles fonctionnalités. Pour plus de détails, veuillez consulter la page Architecture.
Holo a été développé spécifiquement pour les réseaux à grande échelle et pilotés par l'automatisation qui nécessitent une configuration et une surveillance programmables à l'aide de données structurées et modélisées. Holo implémente nativement les modules YANG standard de l'IETF et prend en charge plusieurs interfaces de gestion, y compris les interfaces natives gRPC et gNMI. De plus, Holo dispose d'une CLI autonome qui génère dynamiquement des commandes à partir des modules YANG et communique avec le démon Holo via gRPC.
Les modifications apportées à la configuration sont traitées comme des transactions, garantissant que soit toutes les modifications sont appliquées, soit aucune. Cette fonctionnalité est un facilitateur important de l'automatisation du réseau car elle élimine le besoin de récupération d'erreur dans les applications de gestion. Holo prend également en charge les transactions à l'échelle du réseau impliquant plusieurs périphériques réseau. Des capacités supplémentaires d'automatisation du réseau incluent les commits confirmés et la prise en charge du rollback de configuration.
Grâce au fait d'être écrit dans un langage sûr pour la mémoire, Holo est immunisé contre une grande variété de bugs liés à la mémoire et de vulnérabilités de sécurité. Outre les garanties de sécurité fournies par Rust, le démon Holo abandonne également ses privilèges au démarrage. Pour certaines opérations, comme la liaison de sockets, les capacités Linux sont utilisées pour obtenir la permission minimale requise pour le moins de temps possible.
Holo offre également une protection robuste contre le vecteur d'attaque le plus courant dans les piles de protocoles de routage : les attaques par déni de service (DoS) via l'entrée de paquets malveillants. Les paquets entrants sont décodés dans des tâches asynchrones isolées et supervisées, permettant aux implémentations de protocole de récupérer gracieusement des paniques, par exemple en ignorant les paquets mal formés ou en fermant uniquement le flux TCP affecté, sans compromettre la stabilité de l'ensemble du démon. De plus, grâce à la conception modulaire de Holo et au support intégré du fuzzing guidé par couverture, la plupart des bugs d'analyse sont censés être détectés et corrigés pendant le développement.
Certains protocoles, tels que OSPF et RIP, ont différentes versions qui sont largement déployées, généralement une pour IPv4 et une autre pour IPv6. Holo exploite les génériques de Rust pour avoir des implémentations de protocoles indépendantes de la version, où la plupart du code est partagé par les différentes versions de protocole. Cette approche réduit le coût de maintenance de ces protocoles et facilite la livraison de nouvelles fonctionnalités qui profitent à toutes les versions du protocole.
Holo utilise abondamment les opérations asynchrones et s'appuie sur le runtime Tokio pour ordonnancer les tâches et les exécuter sur un pool de threads. Afin d'obtenir de meilleures performances, les requêtes d'E/S et les algorithmes gourmands en CPU sont délégués à des tâches séparées, maximisant l'utilisation de tous les cœurs CPU disponibles. Le support d'un code indépendant du runtime est prévu pour l'avenir, une fois que les abstractions nécessaires seront standardisées par l'équipe du langage Rust.
Holo génère des messages de journal contenant des données structurées, qui peuvent être présentés dans divers formats tels que JSON, texte, etc. Comme la journalisation est effectuée via la façade tracing, différents abonnés tracing peuvent être utilisés pour répondre aux besoins des utilisateurs. Par exemple, la journalisation peut être dirigée vers un fichier, journald, un collecteur OpenTelemetry centralisé, ou toute combinaison de ces options avec des niveaux de journalisation potentiellement variables.
Holo offre une fonctionnalité d'enregistrement et de rejeu, permettant une reproduction facile de tout bug signalé par un utilisateur. Le démon Holo peut être configuré pour enregistrer le cycle de vie complet d'une instance de protocole dans un fichier. Ce fichier peut ensuite être rejoué sur une autre machine, reproduisant la même séquence d'événements. Alors qu'une session d'enregistrement peut durer des heures ou des jours, le processus de rejeu ne devrait prendre que quelques secondes. Cela est possible grâce à l'architecture modulaire de Holo, où toutes les opérations liées au temps et aux E/S sont effectuées dans des tâches séparées et abstraites sous forme de messages d'événements.
Pour des instructions détaillées sur l'installation, veuillez consulter le fichier INSTALL.md.
Actuellement, Holo n'est compatible qu'avec les systèmes d'exploitation Linux. Le support de WebAssembly est prévu pour l'avenir.
La manière la plus simple de commencer à utiliser Holo est d'utiliser des conteneurs Docker pré-construits en combinaison avec le logiciel containerlab. Vous pouvez trouver une variété de topologies réseau pré-configurées à ce lien. Ces topologies peuvent être déployées avec une seule commande, vous permettant de tester Holo dans diverses configurations réseau, y compris les tests d'interopérabilité avec d'autres implémentations.
De plus, Holo peut être utilisé partout où une pile de routage est nécessaire, comme dans les routeurs logiciels, à condition que l'ensemble des fonctionnalités corresponde à vos besoins spécifiques.
Holo prend en charge les normes Internet suivantes :
Les résultats des tests de conformité effectués avec le testeur de conformité RFC Ixia IxANVL sont disponibles ici.
Ce projet est financé par NGI Zero Core, un fonds établi par NLnet avec le soutien financier du programme Next Generation Internet de la Commission européenne. En savoir plus sur la page du projet NLnet.
Ce projet est sous licence MIT.
Nous accueillons toutes les contributions, des rapports de bogues aux demandes de tirage (Pull Requests). Veuillez consulter notre Liste de souhaits du projet pour des idées sur où contribuer.
Sauf indication contraire explicite, toute contribution soumise intentionnellement pour inclusion dans Holo par vous sera sous licence MIT, sans conditions supplémentaires.
| Module | Configuration | État | RPCs | Notifications | 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% |