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
impl NeighborCache
Sourcepub fn get(&self, iface: IfaceHandle, addr: IpAddress) -> Option<Neighbor>
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.
Sourcepub fn insert(
&mut self,
iface: IfaceHandle,
addr: IpAddress,
hardware_addr: HardwareAddress,
expires_at: Instant,
)
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.
Sourcepub fn remove(
&mut self,
iface: IfaceHandle,
addr: IpAddress,
) -> Option<Neighbor>
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.
Sourcepub fn retain(&mut self, f: impl FnMut(&Neighbor) -> bool)
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.
Sourcepub fn clear_iface(&mut self, iface: IfaceHandle)
pub fn clear_iface(&mut self, iface: IfaceHandle)
Remove all entries for one interface.
Same caveat as NeighborCache::remove for entries being resolved.
Sourcepub fn clear(&mut self)
pub fn clear(&mut self)
Remove all entries.
Same caveat as NeighborCache::remove for entries being resolved.