pub struct OverlayNetworkManager { /* private fields */ }Expand description
Manages a logical overlay network of nodes with topology-aware routing.
The manager is intentionally synchronous and allocation-light: it keeps
a flat HashMap of nodes and computes routes on demand without spawning
tasks or doing I/O.
§Example
use ipfrs_network::{OverlayNetworkManager, OverlayTopology, OverlayNode};
let mut mgr = OverlayNetworkManager::new(1, OverlayTopology::FullMesh, 128);
let node = OverlayNode::new(2, "127.0.0.1:4001", 0);
mgr.join(node).expect("join should succeed in example");
let route = mgr.route(1, 2, 0).expect("route should succeed in example");
assert_eq!(route.hop_count, 1);Implementations§
Source§impl OverlayNetworkManager
impl OverlayNetworkManager
Sourcepub fn new(local_id: u64, topology: OverlayTopology, max_nodes: usize) -> Self
pub fn new(local_id: u64, topology: OverlayTopology, max_nodes: usize) -> Self
Create a new overlay network manager.
The local node (identified by local_id) is implicitly part of the
overlay but is not inserted into nodes; callers should join
it if they want it visible to routing queries.
Sourcepub fn join(&mut self, node: OverlayNode) -> Result<(), OverlayError>
pub fn join(&mut self, node: OverlayNode) -> Result<(), OverlayError>
Add a node to the overlay.
Returns OverlayError::NetworkFull if max_nodes has been reached.
If the node is already present its record is silently updated.
Sourcepub fn leave(&mut self, node_id: u64) -> Result<(), OverlayError>
pub fn leave(&mut self, node_id: u64) -> Result<(), OverlayError>
Remove a node from the overlay.
Returns OverlayError::NodeNotFound if the node is not present.
Sourcepub fn heartbeat(&mut self, node_id: u64, now: u64) -> Result<(), OverlayError>
pub fn heartbeat(&mut self, node_id: u64, now: u64) -> Result<(), OverlayError>
Record a heartbeat for a node, updating its last_heartbeat timestamp.
Sourcepub fn evict_stale(&mut self, max_age_ms: u64, now: u64) -> usize
pub fn evict_stale(&mut self, max_age_ms: u64, now: u64) -> usize
Remove nodes whose last_heartbeat is older than max_age_ms milliseconds.
Returns the number of nodes evicted.
Sourcepub fn node_count(&self) -> usize
pub fn node_count(&self) -> usize
Return the total number of nodes in the overlay.
Sourcepub fn route(
&self,
from: u64,
to: u64,
now: u64,
) -> Result<OverlayRoute, OverlayError>
pub fn route( &self, from: u64, to: u64, now: u64, ) -> Result<OverlayRoute, OverlayError>
Compute a route from from to to using the active topology.
Returns OverlayError::SelfRoute when from == to, and
OverlayError::NodeNotFound when either endpoint is absent.
Sourcepub fn neighbors(&self, node_id: u64) -> Vec<u64>
pub fn neighbors(&self, node_id: u64) -> Vec<u64>
Return the set of logical neighbors for node_id under the active topology.
Returns an empty Vec if the node is not present.
Sourcepub fn diameter_estimate(&self) -> f64
pub fn diameter_estimate(&self) -> f64
Estimate the maximum path length (diameter) across the overlay.
| Topology | Formula |
|---|---|
| FullMesh | 1.0 |
| Chord / Kademlia / Pastry | log₂(max(n, 2)) |
| Tree | log_{bf}(max(n, 2)) |
Sourcepub fn stats(&self, now: u64) -> OverlayStats
pub fn stats(&self, now: u64) -> OverlayStats
Return a snapshot of statistics at the given wall-clock timestamp now.
Sourcepub fn get_node(&self, node_id: u64) -> Option<&OverlayNode>
pub fn get_node(&self, node_id: u64) -> Option<&OverlayNode>
Return a reference to the node record for node_id, if present.
Sourcepub fn topology(&self) -> &OverlayTopology
pub fn topology(&self) -> &OverlayTopology
Return a reference to the active topology.
Trait Implementations§
Auto Trait Implementations§
impl Freeze for OverlayNetworkManager
impl RefUnwindSafe for OverlayNetworkManager
impl Send for OverlayNetworkManager
impl Sync for OverlayNetworkManager
impl Unpin for OverlayNetworkManager
impl UnsafeUnpin for OverlayNetworkManager
impl UnwindSafe for OverlayNetworkManager
Blanket Implementations§
impl<T> Allocation for T
Source§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
Source§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more