Enum netstack3_ip::nud::DynamicNeighborState

source ·
pub enum DynamicNeighborState<D: LinkDevice, BT: NudBindingsTypes<D>> {
    Incomplete(Incomplete<D, BT::Notifier>),
    Reachable(Reachable<D, BT::Instant>),
    Stale(Stale<D>),
    Delay(Delay<D>),
    Probe(Probe<D>),
    Unreachable(Unreachable<D>),
}
Expand description

The state of a dynamic entry in the neighbor cache within the Neighbor Unreachability Detection state machine, defined in RFC 4861 section 7.3.2 and RFC 7048 section 3.

Variants§

§

Incomplete(Incomplete<D, BT::Notifier>)

Address resolution is being performed on the entry.

Specifically, a probe has been sent to the solicited-node multicast address of the target, but the corresponding confirmation has not yet been received.

§

Reachable(Reachable<D, BT::Instant>)

Positive confirmation was received within the last ReachableTime milliseconds that the forward path to the neighbor was functioning properly. While Reachable, no special action takes place as packets are sent.

§

Stale(Stale<D>)

More than ReachableTime milliseconds have elapsed since the last positive confirmation was received that the forward path was functioning properly. While stale, no action takes place until a packet is sent.

The Stale state is entered upon receiving an unsolicited neighbor message that updates the cached link-layer address. Receipt of such a message does not confirm reachability, and entering the Stale state ensures reachability is verified quickly if the entry is actually being used. However, reachability is not actually verified until the entry is actually used.

§

Delay(Delay<D>)

A packet has been recently sent to the neighbor, which has stale reachability information (i.e. we have not received recent positive confirmation that the forward path is functioning properly).

The Delay state is an optimization that gives upper-layer protocols additional time to provide reachability confirmation in those cases where ReachableTime milliseconds have passed since the last confirmation due to lack of recent traffic. Without this optimization, the opening of a TCP connection after a traffic lull would initiate probes even though the subsequent three-way handshake would provide a reachability confirmation almost immediately.

§

Probe(Probe<D>)

A reachability confirmation is actively sought by retransmitting probes every RetransTimer milliseconds until a reachability confirmation is received.

§

Unreachable(Unreachable<D>)

Similarly to the Probe state, a reachability confirmation is actively sought by retransmitting probes; however, probes are multicast to the solicited-node multicast address, using a timeout with exponential backoff, rather than unicast to the cached link address. Also, probes are only transmitted as long as packets continue to be sent to the neighbor.

Trait Implementations§

source§

impl<D: LinkDevice, BT: NudBindingsTypes<D>> Debug for DynamicNeighborState<D, BT>

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<CC, BC, Meta> RecvFrameContext<Meta, BC> for CC
where Meta: ReceivableFrameMeta<CC, BC>,

source§

fn receive_frame<B>(&mut self, bindings_ctx: &mut BC, metadata: Meta, frame: B)
where B: BufferMut + Debug,

Receive a frame. Read more
source§

impl<T> Same for T

§

type Output = T

Should always be Self
source§

impl<CC, BC, Meta> SendFrameContext<BC, Meta> for CC
where Meta: SendableFrameMeta<CC, BC>,

source§

fn send_frame<S>( &mut self, bindings_ctx: &mut BC, metadata: Meta, frame: S, ) -> Result<(), ErrorAndSerializer<SendFrameErrorReason, S>>
where S: Serializer, <S as Serializer>::Buffer: BufferMut,

Send a frame. Read more
source§

impl<Id, CC, BC> TimerHandler<BC, Id> for CC
where BC: TimerBindingsTypes, Id: HandleableTimer<CC, BC>,

source§

fn handle_timer( &mut self, bindings_ctx: &mut BC, dispatch: Id, timer: <BC as TimerBindingsTypes>::UniqueTimerId, )

Handle a timer firing. Read more
source§

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

§

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>,

§

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.
§

impl<L, T> UnlockedAccess<L> for T
where L: UnlockedAccessMarkerFor<T>,

§

type Data = <L as UnlockedAccessMarkerFor<T>>::Data

The type of state being accessed.
§

type Guard<'l> = &'l <L as UnlockedAccessMarkerFor<T>>::Data where T: 'l

A guard providing read access to the data.
§

fn access(&self) -> <T as UnlockedAccess<L>>::Guard<'_>

How to access the state.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<B, A> LockBefore<B> for A
where B: LockAfter<A>,