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.
- DDM: Delay Driven Multipath
- BGP: Border Gateway Protocol
- BFD: Bidirectional Forwarding Detection
- Static: Static route specifications (e.g. no protocol involved)
- illumos/Helios 2
- Sidecar/Dendrite
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).
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.