From d6f8d804c084e55ec97ca14f66f040afa4093973 Mon Sep 17 00:00:00 2001 From: Lee Smet Date: Mon, 7 Apr 2025 16:01:14 +0200 Subject: [PATCH] Expose method to fetch NoRoute subnets from router Signed-off-by: Lee Smet --- mycelium/src/router.rs | 8 +++++++- mycelium/src/routing_table.rs | 8 +++++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/mycelium/src/router.rs b/mycelium/src/router.rs index 38e1432..57cb858 100644 --- a/mycelium/src/router.rs +++ b/mycelium/src/router.rs @@ -7,7 +7,9 @@ use crate::{ packet::{ControlPacket, DataPacket}, peer::Peer, router_id::RouterId, - routing_table::{QueriedSubnet, RouteEntry, RouteKey, RouteList, Routes, RoutingTable}, + routing_table::{ + NoRouteSubnet, QueriedSubnet, RouteEntry, RouteKey, RouteList, Routes, RoutingTable, + }, seqno_cache::{SeqnoCache, SeqnoRequestCacheKey}, sequence_number::SeqNo, source_table::{FeasibilityDistance, SourceKey, SourceTable}, @@ -314,6 +316,10 @@ where self.routing_table.read().iter_queries().collect() } + pub fn load_no_route_entries(&self) -> Vec { + self.routing_table.read().iter_no_route().collect() + } + /// Task which periodically checks for dead peers in the Router. async fn check_for_dead_peers(self) { loop { diff --git a/mycelium/src/routing_table.rs b/mycelium/src/routing_table.rs index 512d025..003b81e 100644 --- a/mycelium/src/routing_table.rs +++ b/mycelium/src/routing_table.rs @@ -5,7 +5,7 @@ use std::{ }; use ip_network_table_deps_treebitmap::IpLookupTable; -use iter::RoutingTableQueryIter; +use iter::{RoutingTableNoRouteIter, RoutingTableQueryIter}; use subnet_entry::SubnetEntry; use tokio::{select, sync::mpsc, time::Duration}; use tokio_util::sync::CancellationToken; @@ -390,6 +390,12 @@ impl RoutingTableReadGuard<'_> { pub fn iter_queries(&self) -> RoutingTableQueryIter { RoutingTableQueryIter::new(self.guard.table.iter()) } + + /// Create an iterator for all subnets which are currently marked as `NoRoute` in the routing + /// table. + pub fn iter_no_route(&self) -> RoutingTableNoRouteIter { + RoutingTableNoRouteIter::new(self.guard.table.iter()) + } } impl WriteGuard<'_> {