Holo is a suite of routing protocols designed to support high-scale and automation-driven networks.

Related tags

Command-line holo
Overview

MIT licensed Build Status codecov Discord

Holo is a suite of routing protocols designed to support high-scale and automation-driven networks.

For a description of what a routing protocol is, please refer to this Wikipedia page.

Features

Focus on simplicity and correctness

Holo's main goal is to create a reliable, easy-to-maintain, and extensible codebase. With the ever increasing complexity of routing protocols and their extensions, it's crucial to have routing protocol implementations built on a robust foundation. To that end, Holo's codebase prioritizes simplicity, modularity, and thorough documentation. Thanks to the strictness of the Rust compiler and extensive unit tests, it's expected that most regressions will be caught early in the development cycle of new features. For more details, please refer to the Architecture page.

Automation-ready

Holo was developed specifically for high-scale, automation-driven networks that require programmable configuration and monitoring using structured and modeled data. Holo natively implements standard YANG modules from IETF and supports multiple management interfaces, including native gRPC and gNMI. Additionally, Holo features a standalone CLI that dynamically renders commands from YANG modules and communicates with the Holo daemon through gRPC.

The changes made to the configuration are processed as transactions, guaranteeing that either all the changes are applied or none at all. This feature is a significant facilitator of network automation as it eliminates the need for error recovery in management applications. Holo also supports network-wide transactions involving multiple network devices. Additional network automation capabilities include confirmed commits and configuration rollback support.

Security

By virtue of being written in a memory-safe language, Holo is immune to a wide variety of memory-related bugs and security vulnerabilities. Besides the safety guarantees provided by Rust, the Holo daemon runs in a chroot jail and drops privileges at startup. For certain operations, like binding sockets, Linux capabilities are used to gain the minimum required permission for the least amount of time.

Integrated protocol implementations

Some protocols, such as OSPF and RIP, have different versions that are widely deployed, typically one for IPv4 and another for IPv6. Holo leverages Rust's generics to have version-agnostic protocol implementations, where most of the code is shared by the different protocol versions. This approach reduces the maintenance cost of these protocols and facilitates shipping new features that benefit all protocol versions.

Parallelism

Holo makes extensive use of asynchronous operations and relies on the Tokio runtime to schedule tasks and run them on a thread pool. In order to achieve better performance, both I/O requests and CPU-intensive algorithms are offloaded to separate tasks, maximizing the utilization of all available CPU cores. Support for runtime-agnostic code is planned for the future, once the necessary abstractions are standardized by the Rust language team.

Structured logging

Holo generates log messages that contain structured data, which can be presented in various formats such as JSON, text, etc. As logging is carried out through the tracing facade, diverse tracing subscribers can be utilized to meet different user requirements. For instance, logging can be directed to a file, journald, a centralized OpenTelemetry collector, or any combination of these options with potentially varying logging levels.

Reproducible bugs

Holo provides record-and-replay functionality, enabling easy reproduction of any user-reported bug. The Holo daemon can be set up to record the complete lifespan of a protocol instance to a file. That file can then be played back on another machine, reproducing the same sequence of events. While a recording session may last for hours or days, the playback process should take only a few seconds. This is feasible thanks to Holo's modular architecture, where all time-related and I/O operations are performed in separate tasks and abstracted as event messages.

Installation

Holo uses unstable Rust features, so building it from the source code requires a nightly version of the Rust compiler.

For detailed instructions on installation, please refer to the INSTALL.md file.

Supported Platforms

At present, Holo is only compatible with Linux operating systems.

WebAssembly support is planned for the future. This addition will enable simulation of large networks from within your browser, making network experimentation more convenient and accessible to everyone.

Compliance

Holo supports the following IETF RFCs and Internet drafts:

BFD
  • RFC 5880 - Bidirectional Forwarding Detection (BFD)
  • RFC 5881 - Bidirectional Forwarding Detection (BFD) for IPv4 and IPv6 (Single Hop)
  • RFC 5882 - Generic Application of Bidirectional Forwarding Detection (BFD)
  • RFC 5883 - Bidirectional Forwarding Detection (BFD) for Multihop Paths
MPLS LDP
  • RFC 5036 - LDP Specification
  • RFC 5561 - LDP Capabilities
  • RFC 5918 - Label Distribution Protocol (LDP) 'Typed Wildcard' Forward Equivalence Class (FEC)
  • RFC 5919 - Signaling LDP Label Advertisement Completion
  • RFC 6720 - The Generalized TTL Security Mechanism (GTSM) for the Label Distribution Protocol (LDP)
OSPF
  • RFC 2328 - OSPF Version 2
  • RFC 5243 - OSPF Database Exchange Summary List Optimization
  • RFC 5250 - The OSPF Opaque LSA Option
  • RFC 5340 - OSPF for IPv6
  • RFC 5838 - Support of Address Families in OSPFv3
  • RFC 6987 - OSPF Stub Router Advertisement
  • RFC 7684 - OSPFv2 Prefix/Link Attribute Advertisement
  • RFC 7770 - Extensions to OSPF for Advertising Optional Router Capabilities
  • RFC 8362 - OSPFv3 Link State Advertisement (LSA) Extensibility
  • RFC 8405 - Shortest Path First (SPF) Back-Off Delay Algorithm for Link-State IGPs
  • RFC 8476 - Signaling Maximum SID Depth (MSD) Using OSPF
  • RFC 8665 - OSPF Extensions for Segment Routing
  • RFC 8666 - OSPFv3 Extensions for Segment Routing
RIP
  • RFC 2080 - RIPng for IPv6
  • RFC 2453 - RIP Version 2
IETF YANG implementation coverage
Module Configuration State 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-interfaces@2018-01-09 100.00% 0.00% - - 22.22%
ietf-ip@2018-01-09 17.39% 0.00% - - 13.33%
ietf-key-chain@2017-04-18 25.00% 0.00% - - 21.05%
ietf-mpls-ldp@2022-03-14 73.91% 92.31% 100.00% 100.00% 89.52%
ietf-ospf-sr@2023-01-01 16.67% 56.52% - - 53.33%
ietf-ospf@2019-10-17 73.24% 59.36% 100.00% 31.18% 58.20%
ietf-ospfv3-extended-lsa@2022-03-06 50.00% 84.82% - - 84.46%
ietf-ospfv3-sr@2022-10-21 - 51.63% - - 51.63%
ietf-rip@2020-02-20 24.42% 93.33% 100.00% - 53.38%
ietf-routing@2018-03-13 50.00% 0.00% - - 23.08%
ietf-segment-routing-mpls@2021-05-26 62.50% 0.00% - 0.00% 25.86%
ietf-segment-routing@2021-05-26 100.00% - - - 100.00%

License

This project is licensed under the MIT license.

Contribution

We welcome any contributions, from bug reports to Pull Requests. Please refer to our Project Wishlist for ideas on where to contribute.

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in Holo by you, shall be licensed as MIT, without any additional terms or conditions.

You might also like...
A CI inspired approach for local job automation.

nauman A CI inspired approach for local job automation. Features • Installation • Usage • FAQ • Examples • Job Syntax About nauman is an easy-to-use j

A file management automation tool.
A file management automation tool.

organize A file management automation tool. Current Status This is in really early development. Please come back later! Background The Python organize

Fragmented Classless Inter-Domain Routing (FCIDR)

fcidr Fragmented Classless Inter-Domain Routing (FCIDR) A library exposing a data structure to represent a set of CIDR ranges as well as an interface

Codemod - Codemod is a tool/library to assist you with large-scale codebase refactors that can be partially automated but still require human oversight and occasional intervention

Codemod - Codemod is a tool/library to assist you with large-scale codebase refactors that can be partially automated but still require human oversight and occasional intervention. Codemod was developed at Facebook and released as open source.

Cost saving K8s controller to scale down and up of resources during non-business hours

Kube-Saver Motivation Scale down cluster nodes by scaling down Deployments, StatefulSet, CronJob, Hpa during non-business hours and save $$, but if yo

Encode and decode dynamically constructed values of arbitrary shapes to/from SCALE bytes

scale-value · This crate provides a Value type, which is a runtime representation that is compatible with scale_info::TypeDef. It somewhat analogous t

A high-performance Rust library designed to seamlessly integrate with the Discord API.

Rucord - Rust Library for Discord API Interactions Note: This library is currently under development and is not yet recommended for production use. Ov

The Amp programming language: a language designed for building high performance systems.

A language designed for building high performance systems. Platform Support x86_64-pc-windows ✅ x86_64-unknown-linux ⚠️ untested x86_64-unknown-darwin

Local-first high performance codebase index engine designed for AI

CodeIndex CodeIndex is a local-first high performance codebase index engine designed for AI. It helps your LLM understand the structure and semantics

Owner
Renato Westphal
Renato Westphal
Coppers is a custom test harnass for Rust that measures the energy usage of your test suite.

Coppers Coppers is a test harness for Rust that can measure the evolution of power consumptions of a Rust program between different versions with the

Thijs Raymakers 175 Dec 4, 2022
🦚 A web-app pentesting suite written in rust .

Kanha - A web-app pentesting suite written in rust ?? Installation ⦾ Subcommands ⦾ Contribute Kanha is a tool that can help you perform, a variety of

Nabeen Tiwaree 79 Sep 19, 2023
JA4+ is a suite of network fingerprinting standards

JA4+ Network Fingerprinting JA4+ is a suite of network fingerprinting methods that are easy to use and easy to share. These methods are both human and

FoxIO 94 Oct 5, 2023
Command line tool for cheap and efficient email automation written in Rust

Pigeon Pigeon is a command line tool for automating your email workflow in a cheap and efficient way. Utilize your most efficient dev tools you are al

null 57 Nov 20, 2022
botwork is a single-binary, generic and open-source automation framework written in Rust for acceptance testing & RPA

botwork botwork is a single-binary, generic and open-source automation framework written in Rust for acceptance testing, acceptance test driven develo

Nitimis 8 Apr 17, 2023
A simple to use and efficient Web Automation Tool.

teemo A simple to use and efficient Web Automation Tool. teemo allows you to do some web automation action(such as click and so on) and crawl some inf

null 3 Nov 22, 2023
Free and open public transport routing.

Transitous Free and open public transport routing. Goal A community-run provider-neutral international public transport routing service. Using openly

Public Transport 108 Mar 24, 2024
A lightweight and high-performance order-book designed to process level 2 and trades data. Available in Rust and Python

ninjabook A lightweight and high-performance order-book implemented in Rust, designed to process level 2 and trades data. Available in Python and Rust

Ninja Quant 134 Jul 22, 2024
(Pre-Release Software) Secure, Encrypted, P2P chat written atop Warp, IPFS, LibP2P, Dioxus and many more awesome projects and protocols.

Uplink Privacy First, Modular, P2P messaging client built atop Warp. Uplink is written in pure Rust with a UI in Dioxus (which is also written in Rust

Satellite 13 Jan 25, 2023
Uses the cardano mini-protocols to receive every block and transaction, and save them to a configurable destination

cardano-slurp Connects to one or more cardano-node's, streams all available transactions, and saves them to disk (or to S3) in raw cbor format. Usage

Pi Lanningham 16 Jan 31, 2023