Skip to main content

DynamicRouter

Struct DynamicRouter 

Source
pub struct DynamicRouter { /* private fields */ }
Expand description

A routing table whose size is chosen when it is built, rather than at compile time.

Router fixes its capacity in the type, which suits a microcontroller that knows its own limits. A gateway, or any caller reaching this through a language binding, does not know the size until it runs, and a const generic cannot cross a foreign function boundary at all. This is the same table with its slots on the heap, so both share one implementation and answer identically.

Requires the alloc feature.

§Examples

use pamoja_routing::{DynamicRouter, Forward};

// A gateway sizes its table for the mesh it is actually serving.
let mut router = DynamicRouter::new(0x01, 512);
router.observe(0x09, 0x05, 2);
assert_eq!(router.forward(0x09), Forward::Relay(0x05));
assert_eq!(router.capacity(), 512);

Implementations§

Source§

impl DynamicRouter

Source

pub fn new(me: u32, capacity: usize) -> Self

Creates an empty router holding up to capacity routes.

§Arguments
  • me - this node’s address.
  • capacity - how many routes to make room for. A capacity of zero is allowed and makes every unknown destination flood, which is the behaviour with no table.
§Returns

A router holding no routes.

Source

pub fn address(&self) -> u32

Returns this node’s address.

§Returns

The address the router was created with.

Source

pub fn capacity(&self) -> usize

Returns how many routes this table can hold.

§Returns

The capacity it was created with.

Source

pub fn observe(&mut self, origin: u32, via: u32, cost: u16) -> bool

Learns the way to a node from a packet heard from it.

§Arguments
  • origin - the node the packet came from, the destination this route reaches.
  • via - the neighbour the packet arrived through, the next hop for this route.
  • cost - the cost the packet reports for reaching origin through via.
§Returns

true if the table changed, false if the observation taught it nothing new.

Source

pub fn next_hop(&self, dst: u32) -> Option<u32>

Returns the next hop to reach a destination, if a route is known.

§Arguments
  • dst - the destination to reach.
§Returns

The next-hop address, or None if no route is known.

Source

pub fn cost(&self, dst: u32) -> Option<u16>

Returns the cost of the known route to a destination, if any.

§Arguments
  • dst - the destination to reach.
§Returns

The route cost, or None if no route is known.

Source

pub fn route(&self, dst: u32) -> Option<Route>

Returns the known route to a destination, if any.

§Arguments
  • dst - the destination to reach.
§Returns

The Route, or None if no route is known.

Source

pub fn forward(&self, dst: u32) -> Forward

Decides what to do with a packet bound for a destination.

§Arguments
  • dst - the packet’s destination.
§Returns

Forward::Deliver if the packet is for this node, Forward::Relay with the next hop if a route is known, or Forward::Flood otherwise.

Source

pub fn forget(&mut self, dst: u32)

Forgets the route to a destination, if one is held.

§Arguments
  • dst - the destination whose route to drop.
Source

pub fn len(&self) -> usize

Returns how many routes the table currently holds.

§Returns

The number of routes.

Source

pub fn is_empty(&self) -> bool

Reports whether the table holds no routes.

§Returns

true if no routes are held.

Trait Implementations§

Source§

impl Clone for DynamicRouter

Source§

fn clone(&self) -> DynamicRouter

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for DynamicRouter

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.