Holo 是一套路由协议套件,旨在支持高规模和自动化驱动的网络。
如需了解路由协议的定义,请参阅此 Wikipedia 页面。
Holo 的主要目标是创建一个可靠、易于维护且可扩展的代码库。随着路由协议及其扩展的复杂度不断增加,基于稳健的基础实现路由协议至关重要。为此,Holo 的代码库优先考虑简洁性、模块化和完善的文档。得益于 Rust 编译器的严格性和广泛的单元测试,大多数回归问题有望在新功能的开发周期早期被捕获。更多详情请参阅 架构 页面。
Holo 专为需要基于结构和模型化数据进行可编程配置和监控的高规模、自动化驱动网络而设计。Holo 原生实现了 IETF 的标准 YANG 模块,并支持多种管理接口,包括原生 gRPC 和 gNMI。此外,Holo 配备了一个独立的 CLI,该 CLI 根据 YANG 模块动态渲染命令,并通过 gRPC 与 Holo 守护进程通信。
所有配置变更均作为事务处理,确保要么全部应用,要么全部撤销。这一特性极大地简化了网络自动化,因为它消除了管理应用程序中进行错误恢复的需求。Holo 还支持涉及多个网络设备的全网事务。其他网络自动化功能包括确认提交和配置回滚支持。
由于采用内存安全语言编写,Holo 对各种内存相关漏洞和安全漏洞具有天然免疫力。除了 Rust 提供的安全保障外,Holo 守护进程在启动时还会放弃权限。对于某些操作(如绑定套接字),会使用 Linux 能力 在最短时间内获取所需的最小权限。
Holo 还针对路由协议栈中最常见的攻击向量——通过恶意数据包输入发起的拒绝服务(DoS)攻击——提供了稳健的保护。传入的数据包在隔离的、受监督的异步任务中进行解码,使得协议实现能够在恐慌时优雅地恢复,例如忽略畸形数据包或仅关闭受影响的 TCP 流,而不会影响整个守护进程的稳定性。此外,得益于 Holo 的模块化设计和内置的覆盖引导模糊测试支持,大多数解析错误有望在开发过程中被检测和处理。
某些协议(如 OSPF 和 RIP)存在广泛部署的不同版本,通常一个用于 IPv4,另一个用于 IPv6。Holo 利用 Rust 的泛型实现协议版本无关的实现,其中大部分代码被不同协议版本共享。这种方法降低了这些协议的维护成本,并便于提供惠及所有协议版本的新特性。
Holo 广泛使用异步操作,并依赖 Tokio 运行时来调度任务并在线程池上运行。为获得更好的性能,I/O 请求和 CPU 密集型算法都被卸载到单独的任务中,从而最大化所有可用 CPU 核心的利用率。计划在未来支持运行时无关的代码,一旦 Rust 语言团队标准化了必要的抽象。
Holo 生成包含结构化数据的日志消息,这些消息可以以多种格式呈现,如 JSON、文本等。由于日志记录通过 tracing 门面进行,因此可以使用不同的 tracing 订阅者来满足不同用户的需求。例如,日志可以定向到文件、journald、集中式 OpenTelemetry 收集器,或这些选项的任意组合,并可能具有不同的日志级别。
Holo 提供录制与回放功能,能够轻松复现用户报告的任何 Bug。可以将 Holo 守护进程设置为将协议实例的完整生命周期记录到文件中。该文件随后可在另一台机器上回放,重现相同的事件序列。录制会话可能持续数小时或数天,但回放过程只需几秒钟。这得益于 Holo 的模块化架构,其中所有与时间相关和 I/O 操作都在单独的任务中执行,并抽象为事件消息。
有关安装的详细说明,请参阅 INSTALL.md 文件。
目前,Holo 仅兼容 Linux 操作系统。未来计划支持 WebAssembly。
开始使用 Holo 的最简单方法是使用预构建的 Docker 容器并结合 containerlab 软件。您可以在 此链接 找到各种预配置的网络拓扑。这些拓扑可通过一条命令部署,使您能够在各种网络设置中测试 Holo,包括与其他实现进行互操作性测试。
此外,只要功能集符合您的特定需求,Holo 也可用于任何需要路由协议栈的场景,例如软件路由器。
Holo 支持以下互联网标准:
使用 Ixia IxANVL RFC 一致性测试仪进行的一致性测试结果可在 此处 获取。
本项目由 NGI Zero Core 资助,该基金由 NLnet 设立,并得到欧盟委员会 Next Generation Internet 计划的财政支持。了解更多信息请访问 NLnet 项目页面。
本项目采用 MIT 许可证。
我们欢迎任何形式的贡献,从错误报告到拉取请求。请访问我们的 项目愿望清单 了解贡献方向。
除非您明确声明,否则您有意提交以包含在 Holo 中的任何贡献,均应按照 MIT 许可证授权,不附加任何额外条款或条件。
| 模块 | 配置 | 状态 | RPC | 通知 | 总计 |
|---|
| 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% |