Skip to content

oxidecomputer/maghemite

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