#holo #routing #yang #networking #protocols #bgp #models

holo-yang

霍洛路由的YANG模块,包括嵌入式YANG模型和实用代码

9个版本

0.5.5 2024年8月2日
0.5.4 2024年8月2日
0.5.3 2024年7月13日
0.4.2 2024年5月28日
0.4.1 2024年4月16日

#548 in 网络编程

Download history 155/week @ 2024-04-14 2/week @ 2024-04-21 6/week @ 2024-05-19 181/week @ 2024-05-26 12/week @ 2024-06-02 8/week @ 2024-06-09 1/week @ 2024-06-16 374/week @ 2024-07-07 160/week @ 2024-07-14 256/week @ 2024-07-28

每月790次下载

MIT许可证

265KB
350

MIT licensed Build Status codecov Discord

Holo是一套旨在支持高规模和自动化驱动的网络的路由协议。

有关路由协议的描述,请参阅此 维基百科页面.

架构

以下图像显示了霍洛软件堆栈的不同逻辑层

带有灰色背景的项目尚未实现。有关更全面和详细的信息,请参阅架构页面。

特性

注重简洁性和正确性

Holo的主要目标是创建一个可靠、易于维护和可扩展的代码库。随着路由协议及其扩展的复杂性不断增加,基于稳健基础构建的路由协议实现至关重要。为此,Holo的代码库优先考虑简洁性、模块化和详尽的文档。多亏了Rust编译器的严格性和广泛的单元测试,预期大多数回归将在新功能开发周期的早期被捕获。

自动化就绪

Holo专门为需要使用结构化和建模数据编程配置和监控的高规模、自动化驱动的网络而开发。Holo原生实现IETF的标准YANG模块,并支持多种管理接口,包括本地的gRPCgNMI。此外,Holo还提供了一个独立的CLI,该CLI可以动态渲染来自YANG模块的命令,并通过gRPC与Holo守护进程通信。

对配置所做的更改被视为事务处理,确保要么所有更改都得到应用,要么一个都不应用。此功能是网络自动化的显著促进者,因为它消除了管理应用程序中错误恢复的需求。Holo还支持涉及多个网络设备的全局事务。其他网络自动化功能包括确认提交和配置回滚支持。

安全性

由于是用内存安全语言编写的,因此Holo对各种与内存相关的错误和安全漏洞具有免疫力。除了Rust提供的安全性保证外,Holo守护程序在chroot监狱中运行并在启动时降低权限。对于某些操作,如绑定套接字,Linux使用能力来获取最少的所需权限,时间最短。

集成协议实现

某些协议,如OSPF和RIP,有不同版本广泛部署,通常一个是IPv4,另一个是IPv6。Holo利用Rust的泛型来实现版本无关的协议实现,其中大部分代码由不同的协议版本共享。这种方法降低了这些协议的维护成本,并促进了为所有协议版本带来好处的新功能的发布。

并行性

Holo大量使用异步操作,并依赖Tokio运行时来调度任务并在线程池中运行它们。为了实现更好的性能,I/O请求和CPU密集型算法都卸载到单独的任务,最大程度地利用所有可用的CPU核心。计划在未来支持运行时无关的代码,一旦Rust语言团队标准化必要的抽象。

结构化日志

Holo生成包含结构化数据的日志消息,可以以JSON、文本等各种格式表示。由于日志是通过跟踪外观进行的,因此可以利用各种跟踪订阅者来满足不同的用户需求。例如,日志可以定向到文件、journald、集中的OpenTelemetry收集器或这些选项的任何组合,具有可能不同的日志级别。

可重现的错误

Holo提供记录和回放功能,使得重现任何用户报告的错误变得简单。可以将Holo守护程序配置为将协议实例的完整生命周期记录到文件中。然后可以在另一台机器上回放该文件,重现相同的事件序列。虽然记录会话可能持续数小时或数天,但回放过程应只需几秒钟。这得益于Holo的模块化架构,其中所有与时间相关的和I/O操作都在单独的任务中执行,并作为事件消息抽象。

安装

Holo使用不稳定的功能,因此需要使用Rust编译器的nightly版本从源代码构建。

有关安装的详细说明,请参阅INSTALL.md文件。

支持的平台

目前,Holo仅与Linux操作系统兼容。

计划未来支持WebAssembly。此添加将使您可以在浏览器中模拟大型网络,使网络实验对每个人来说都更方便、更易于访问。

入门指南

开始使用Holo的最简单方法是使用预先构建的Docker容器和containerlab软件。您可以在此链接找到各种预配置的网络拓扑。这些拓扑可以一键部署,允许您在包括与其他实现互操作性测试在内的各种网络设置中测试Holo。

此外,Holo可以在需要路由堆栈的地方使用,例如在软件路由器中,只要功能集与您的具体需求一致。

合规性

Holo支持以下IETF RFC和Internet草案

BFD
  • RFC 5880 - 双向转发检测 (BFD)
  • RFC 5881 - IPv4 和 IPv6 的双向转发检测 (BFD)(单跳)
  • RFC 5882 - 双向转发检测 (BFD) 的通用应用
  • RFC 5883 - 多跳路径的双向转发检测 (BFD)
BGP
  • RFC 1997 - BGP 社区属性
  • RFC 2385 - 通过 TCP MD5 签名选项保护 BGP 会话
  • RFC 2545 - 使用 BGP-4 多协议扩展进行 IPv6 跨域路由
  • RFC 2918 - BGP-4 的路由刷新能力
  • RFC 4271 - 边界网关协议 4 (BGP-4)
  • RFC 4360 - BGP 扩展社区属性
  • RFC 4486 - BGP 停止通知消息的子代码
  • RFC 4760 - BGP-4 的多协议扩展
  • RFC 5082 - 广义 TTL 安全机制 (GTSM)
  • RFC 5492 - BGP-4 的能力通告
  • RFC 5668 - 4 字节 AS 特定 BGP 扩展社区
  • RFC 5701 - IPv6 地址特定 BGP 扩展社区属性
  • RFC 6286 - BGP-4 的自治系统级唯一 BGP 标识符
  • RFC 6608 - BGP 有限状态机错误的子代码
  • RFC 6793 - BGP 支持 4 字节自治系统 (AS) 编号空间
  • RFC 7606 - 修订 BGP UPDATE 消息的错误处理
  • RFC 7607 - AS 0 处理的规范
  • RFC 8092 - BGP 大社区属性
  • RFC 8212 - 没有策略的默认外部 BGP (EBGP) 路由传播行为
  • RFC 8642 - 已知 BGP 社区的策略行为
MPLS LDP
  • RFC 5036 - LDP 规范
  • RFC 5561 - LDP 能力
  • RFC 5918 - 标签分发协议 (LDP) '类型通配符' 前向等价类 (FEC)
  • RFC 5919 - 信号 LDP 标签通告完成
  • RFC 6720 - 标签分发协议 (LDP) 的广义 TTL 安全机制 (GTSM)
OSPF
  • RFC 2328 - OSPF 版本 2
  • RFC 3623 - OSPF 优雅重启
  • RFC 5187 - OSPFv3 优雅重启
  • RFC 5243 - OSPF 数据库交换摘要列表优化
  • RFC 5250 - OSPF 不透明 LSA 选项
  • RFC 5340 - OSPF for IPv6
  • RFC 5709 - OSPFv2 HMAC-SHA 加密认证
  • RFC 5838 - OSPFv3 地址族的支持
  • RFC 6987 - OSPF 混杂路由器通告
  • RFC 7684 - OSPFv2 前缀/链路属性通告
  • RFC 7166 - 支持 OSPFv3 认证尾部的支持
  • RFC 7770 - OSPF 为广告可选路由器能力的扩展
  • RFC 8362 - OSPFv3 链路状态通告 (LSA) 扩展性
  • RFC 8405 - 链路状态 IGP 的最短路径优先 (SPF) 回退延迟算法
  • RFC 8476 - 使用 OSPF 信号最大 SID 深度 (MSD)
  • RFC 8665 - OSPF 的分段路由扩展
  • RFC 8666 - OSPFv3 的分段路由扩展
RIP
  • RFC 2080 - IPv6 的 RIPng
  • RFC 2453 - RIP 版本 2
  • RFC 4822 - RIPv2 加密认证
IETF YANG 实现覆盖
模块 配置 状态 RPCs 通知 总数
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-if-extensions@2023-01-26 100.00% 0.00% - - 50.00%
ietf-if-vlan-encapsulation@2023-01-26 42.86% - - - 42.86%
ietf-interfaces@2018-01-09 100.00% 0.00% - - 22.22%
ietf-ip@2018-01-09 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-key-chain@2017-04-18 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-sr-mpls@2024-01-18 25.00% 53.95% - - 52.81%
ietf-ospf@2022-10-19 75.00% 59.64% 100.00% 41.94% 59.57%
ietf-ospfv3-extended-lsa@2024-01-16 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%

资金

本项目由NGI Zero Core资助,该基金由NLnet设立,并获得欧盟委员会下一代互联网项目的资金支持。更多信息请访问NLnet项目页面

NLnet foundation logo NGI Zero Logo

许可证

本项目采用MIT许可证

贡献

我们欢迎任何形式的贡献,从错误报告到拉取请求。请参阅我们的项目愿望清单,以获取贡献的想法。

除非您明确声明,否则您提交给Holo的任何有意贡献,均按MIT许可证授权,不附加任何额外条款或条件。

依赖项

~8.5MB
~180K SLoC