Skip to content

oxidecomputer/maghemite

Folders and files

NameName
Last commit message
Last commit date

Latest commit

8c6e23f · Apr 4, 2024
Jul 28, 2023
Apr 4, 2024
Mar 19, 2024
Mar 19, 2024
Mar 19, 2024
Mar 27, 2024
Mar 19, 2024
Mar 27, 2024
Dec 22, 2023
Mar 19, 2024
Mar 27, 2024
Dec 22, 2023
Mar 26, 2024
Mar 19, 2024
Mar 27, 2024
Mar 19, 2024
Feb 2, 2024
Mar 27, 2024
Mar 19, 2024
Mar 27, 2024
Mar 19, 2024
Dec 22, 2023
Oct 20, 2023
Mar 30, 2024
Mar 30, 2024
Dec 22, 2023
Feb 2, 2024
Mar 27, 2024
Mar 30, 2024
Dec 24, 2022

Repository files navigation

Maghemite

A suite of routing protocol implementations written in Rust.

Routing protocols are commonly broken up into an upper half and a lower half. The upper half is responsible for discovering other routers, forming peering relationships, and exchanging routes. The lower half is responsible for making packet forwarding decisions based on the routing tables established by an upper half. Maghemite implements upper halves for the protocols listed below with support for the lower-half data planes listed below.

Protocols

  • DDM: Delay Driven Multipath
  • BGP: Border Gateway Protocol
  • BFD: Bidirectional Forwarding Detection
  • Static: Static route specifications (e.g. no protocol involved)

Supported Data Planes

  • illumos/Helios 2
  • Sidecar/Dendrite

Tooling

APIs

Delay Driven Multipath (DDM)

DDM is the protocol that implements routing between sleds within a rack and across racks. DDM is a simple path-vector routing protocol. It's described in detail in RFD 347. DDM is the sole routing protocol that runs on the network interconnecting sleds and racks, commonly referred to as the underlay network. Because of that, it has its own standalone routing information base (RIB).

External Routing Protocols

Unlike DDM, external routing is a coordination among several protocols and configuration mechanisms. Currently, these include BGP, BFD, and static routing. These all share a common RIB. They also live in a common daemon mgd. Each protocol is implemented as a library and mgd manages execution for each protocol. The RIB for these protocols lives in rib and the lower half responsible for synchronizing RIB state to the underlying forwarding platform lives in mg-lower. The lower half is also written as a library whose execution is managed by mgd. This compile-time library-centric architecture is by design.

Testing