pub struct RoutingManager { /* private fields */ }Expand description
Manages a set of concurrently-running routing protocols.
§How it works
Each protocol is assigned a unique origin value. When enabled, the
manager starts the protocol as an independent Tokio task with a child
cancellation token. When disabled, the child token is cancelled (stopping
the task at its next cancel.cancelled().await) and all routes the
protocol registered are flushed from the RIB; the FIB is recomputed for
affected prefixes from any remaining protocols’ routes.
§Multiple protocols
Running two protocols simultaneously is the normal case: for example, DVR
(origin 128) discovering routes for /ndn/edu/… and autoconf (origin 66)
advertising link-local routes. Both write to the RIB under their origin;
the RIB selects the lowest-cost nexthop per face when building FIB entries.
Implementations§
Source§impl RoutingManager
impl RoutingManager
pub fn new( rib: Arc<Rib>, fib: Arc<Fib>, faces: Arc<FaceTable>, neighbors: Arc<NeighborTable>, engine_cancel: CancellationToken, ) -> Self
Sourcepub fn enable(&self, proto: Arc<dyn RoutingProtocol>)
pub fn enable(&self, proto: Arc<dyn RoutingProtocol>)
Start a routing protocol.
Creates a child cancellation token from the engine token so the protocol is automatically stopped when the engine shuts down. If a protocol with the same origin is already running, it is stopped and its routes flushed before the new one starts.
Sourcepub fn disable(&self, origin: u64) -> bool
pub fn disable(&self, origin: u64) -> bool
Stop a routing protocol and flush all routes it registered.
Cancels the protocol’s task (the task exits at its next cancellation
checkpoint) and removes all routes registered under origin from the
RIB. FIB entries for affected prefixes are recomputed from any remaining
protocols’ routes.
Returns true if a protocol with that origin was running.
Sourcepub fn running_origins(&self) -> Vec<u64>
pub fn running_origins(&self) -> Vec<u64>
Returns the origin values of all currently-running protocols.
Sourcepub fn running_count(&self) -> usize
pub fn running_count(&self) -> usize
Returns the number of currently-running protocols.