Skip to content

Project Structure

Renato Westphal edited this page Mar 20, 2024 · 4 revisions

The Holo project is organized into multiple crates to promote modularity and maintainability. Below, you'll find a brief overview of these crates, grouped into categories:

Base crates:

  • holo-routing:
    • Manages protocol instances.
    • Manages the RIB and ensure it's in sync with the FIB.
    • Manages route redistribution among the different protocol instances.
    • Implements the ietf-routing YANG module.
  • holo-interface:
    • Manages system interfaces and their addresses.
    • Implements the ietf-interfaces and ietf-ip YANG modules.
  • holo-keychain:
    • Manages key chains used for protocol authentication.
    • Implements the ietf-key-chain YANG module.
  • holo-policy:
    • Manages policies used by routing protocols.
    • Implements the ietf-routing-policy YANG module.

Protocol crates:

  • holo-bfd: Implements the Bidirectional Forwarding Detection (BFD) protocol.
  • holo-bgp: Implements the Border Gateway Protocol (BGP) protocol.
  • holo-ldp: Implements the Label Distribution Protocol (LDP).
  • holo-ospf: Implements the Open Shortest Path First (OSPF) protocol, including both OSPFv2 and OSPFv3 versions.
  • holo-rip: Implements the Routing Information Protocol (RIP), including both RIPv2 and RIPng versions.

Supportive crates:

  • holo-northbound: Contains the northbound framework and associated traits that each protocol needs to implement.
  • holo-protocol: Contains utility code shared among all protocol implementations.
  • holo-utils: Contains utility code shared among all other crates.
  • holo-yang: Contains all implemented YANG modules, along with essential YANG-related utility code.

Binaries:

  • holo-cli: An external Command Line Interface (CLI) that interacts with the holod daemon through gRPC.
  • holo-daemon: The Holo daemon, a self-contained package that seamlessly integrates with all protocol crates.
  • holo-tools: A collection of development utilities.
    • replay.rs: Replays events from a record file. Useful to reproduce bugs reported by users.
    • yang_callbacks.rs: Parses a YANG module and generates all necessary northbound callbacks for its nodes.
    • yang_coverage.rs: A YANG module coverage calculator, based on the number of loaded "not-supported" deviations.
    • yang_deviations.rs: Parses a YANG module and generates "not-supported" deviations for all of its nodes.