xarxa

Crates

git

Versions

default

Flavors

Skip to main content

NeighborCache

Struct NeighborCache 

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

The neighbor cache: the stack’s map of IP addresses to hardware addresses.

It holds one entry per neighbor, keyed by the interface it is reachable through plus its IP address. Entries are filled in by ARP and neighbor discovery, and expire after 60 s unless traffic from the neighbor refreshes them.

Access it with Stack::neighbor_cache and Stack::neighbor_cache_mut.

Implementations§

Source§

impl NeighborCache

Source

pub fn get(&self, iface: IfaceHandle, addr: IpAddress) -> Option<Neighbor>

Get the entry for a neighbor.

Expired entries are still reported until the stack reuses their slot. Compare expires_at against the current time if that matters.

Source

pub fn iter(&self) -> impl Iterator<Item = Neighbor> + '_

Iterate over all entries.

Source

pub fn insert( &mut self, iface: IfaceHandle, addr: IpAddress, hardware_addr: HardwareAddress, expires_at: Instant, )

Add or replace an entry, mapping addr on iface to hardware_addr.

expires_at is when the entry stops being used. Pass Instant::MAX for a static entry that never expires. Note that ARP or neighbor discovery can still replace it if the neighbor answers with a different hardware address.

If the cache is full, another entry is evicted to make room.

§Panics

Panics if addr or hardware_addr is not unicast.

Source

pub fn remove( &mut self, iface: IfaceHandle, addr: IpAddress, ) -> Option<Neighbor>

Remove the entry for a neighbor, returning it if there was one.

Removing an entry whose resolution is still in progress leaves the packets parked on it waiting: they are dropped when their own timeout expires, a few seconds later.

Source

pub fn retain(&mut self, f: impl FnMut(&Neighbor) -> bool)

Keep only the entries for which f returns true.

Same caveat as NeighborCache::remove for entries being resolved.

Source

pub fn clear_iface(&mut self, iface: IfaceHandle)

Remove all entries for one interface.

Same caveat as NeighborCache::remove for entries being resolved.

Source

pub fn clear(&mut self)

Remove all entries.

Same caveat as NeighborCache::remove for entries being resolved.

Source

pub fn len(&self) -> usize

Number of entries.

Source

pub fn is_empty(&self) -> bool

Whether the cache is empty.

Trait Implementations§

Source§

impl Debug for NeighborCache

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> 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, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

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.