pub enum DadState<I: DadIpExt, BT: DadBindingsTypes> {
Assigned {
ran_dad: bool,
},
Announcing {
timer: BT::Timer,
ip_specific_state: I::AnnouncingState,
},
Tentative {
dad_transmits_remaining: Option<NonZeroU16>,
timer: BT::Timer,
ip_specific_state: I::TentativeState,
probe_wait: Option<Duration>,
},
Uninitialized,
}
Expand description
The various states DAD may be in for an address.
Variants§
Assigned
The address is assigned to an interface and can be considered bound to it (all packets destined to the address will be accepted).
Fields
Announcing
Like Self::Assigned
, but the DAD engine is announcing to the network
that we are using this address.
This state corresponds to the announcing described in RFC 5227 section 2.3 and as such only applies to IPv4 addresses. The IPv6 DAD specification (RFC 4862 section 5.4) does not define an announcement period.
Fields
ip_specific_state: I::AnnouncingState
Announcing state specific to the given IP version.
Tentative
The address is considered unassigned to an interface for normal operations, but has the intention of being assigned in the future (e.g. once Duplicate Address Detection is completed).
Fields
dad_transmits_remaining: Option<NonZeroU16>
The number of probes that still need to be sent. When None
, there
are no more probes to send and DAD may resolve.
ip_specific_state: I::TentativeState
Probing state specific to the given IP version.
Uninitialized
The address has not yet been initialized.
Trait Implementations§
Source§impl<I: IpDeviceStateIpExt, BT: IpDeviceStateBindingsTypes> OrderedLockAccess<DadState<I, BT>> for IpAddressEntry<I, BT>
impl<I: IpDeviceStateIpExt, BT: IpDeviceStateBindingsTypes> OrderedLockAccess<DadState<I, BT>> for IpAddressEntry<I, BT>
Auto Trait Implementations§
impl<I, BT> Freeze for DadState<I, BT>where
<BT as TimerBindingsTypes>::Timer: Freeze,
<I as DadIpExt>::AnnouncingState: Freeze,
<I as DadIpExt>::TentativeState: Freeze,
impl<I, BT> RefUnwindSafe for DadState<I, BT>where
<BT as TimerBindingsTypes>::Timer: RefUnwindSafe,
<I as DadIpExt>::AnnouncingState: RefUnwindSafe,
<I as DadIpExt>::TentativeState: RefUnwindSafe,
impl<I, BT> Send for DadState<I, BT>
impl<I, BT> Sync for DadState<I, BT>
impl<I, BT> Unpin for DadState<I, BT>where
<BT as TimerBindingsTypes>::Timer: Unpin,
<I as DadIpExt>::AnnouncingState: Unpin,
<I as DadIpExt>::TentativeState: Unpin,
impl<I, BT> UnwindSafe for DadState<I, BT>where
<BT as TimerBindingsTypes>::Timer: UnwindSafe,
<I as DadIpExt>::AnnouncingState: UnwindSafe,
<I as DadIpExt>::TentativeState: UnwindSafe,
Blanket Implementations§
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<T, D> Encode<Ambiguous1, D> for Twhere
D: ResourceDialect,
impl<T, D> Encode<Ambiguous1, D> for Twhere
D: ResourceDialect,
§impl<T, D> Encode<Ambiguous2, D> for Twhere
D: ResourceDialect,
impl<T, D> Encode<Ambiguous2, D> for Twhere
D: ResourceDialect,
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