pub struct NetcheckReport {
pub preferred_derp: Option<u32>,
pub region_latencies: Vec<RegionLatency>,
}Expand description
A snapshot of this node’s latest network conditions report — the Rust analog of Go’s
netcheck.Report as tailscale netcheck surfaces it.
§Surfaced subset (do not fabricate)
Go’s netcheck.Report also carries UDP/IPv4/IPv6 reachability, port-mapping support
(UPnP/PMP/PCP), MappingVariesByDestIP, global-address discovery, etc. This fork’s net-report
path measures only DERP-region latency (the data that drives home-region selection), so the
report carries exactly that — the preferred (lowest-latency) region and the per-region latency
map — rather than inventing fields we never probe. Empty before the first measurement.
Fields§
§preferred_derp: Option<u32>The id of the preferred DERP region — the lowest-latency region this node measured, the one it
homes to (Go Report.PreferredDERP). None before the first measurement / when no region
was reachable.
region_latencies: Vec<RegionLatency>Per-region measured latencies, sorted by latency ascending (Go Report.RegionLatency, here as
an ordered list). The first entry, when present, is the preferred_derp
region.
Trait Implementations§
Source§impl Clone for NetcheckReport
impl Clone for NetcheckReport
Source§fn clone(&self) -> NetcheckReport
fn clone(&self) -> NetcheckReport
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for NetcheckReport
impl Debug for NetcheckReport
Source§impl Default for NetcheckReport
impl Default for NetcheckReport
Source§fn default() -> NetcheckReport
fn default() -> NetcheckReport
impl Eq for NetcheckReport
Source§impl PartialEq for NetcheckReport
impl PartialEq for NetcheckReport
Source§fn eq(&self, other: &NetcheckReport) -> bool
fn eq(&self, other: &NetcheckReport) -> bool
self and other values to be equal, and is used by ==.Source§impl Reply for NetcheckReport
impl Reply for NetcheckReport
Source§type Ok = NetcheckReport
type Ok = NetcheckReport
Source§type Error = Infallible
type Error = Infallible
Source§type Value = NetcheckReport
type Value = NetcheckReport
Source§fn into_any_err(self) -> Option<Box<dyn ReplyError>>
fn into_any_err(self) -> Option<Box<dyn ReplyError>>
Box<any::Any + Send> if it’s an Err, otherwise None.Source§fn into_value(self) -> Self::Value
fn into_value(self) -> Self::Value
impl StructuralPartialEq for NetcheckReport
Auto Trait Implementations§
impl Freeze for NetcheckReport
impl RefUnwindSafe for NetcheckReport
impl Send for NetcheckReport
impl Sync for NetcheckReport
impl Unpin for NetcheckReport
impl UnsafeUnpin for NetcheckReport
impl UnwindSafe for NetcheckReport
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
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>, which can then be
downcast into Box<dyn ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>, which can then be further
downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.Source§impl<T> DowncastSend for T
impl<T> DowncastSend for T
Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
Source§impl<A, T> DynMessage<A> for T
impl<A, T> DynMessage<A> for T
Source§fn handle_dyn<'a>(
self: Box<T>,
state: &'a mut A,
actor_ref: ActorRef<A>,
tx: Option<Sender<Result<Box<dyn Any + Send>, SendError<Box<dyn Any + Send>, Box<dyn Any + Send>>>>>,
stop: &'a mut bool,
) -> Pin<Box<dyn Future<Output = Result<(), Box<dyn ReplyError>>> + Send + 'a>>
fn handle_dyn<'a>( self: Box<T>, state: &'a mut A, actor_ref: ActorRef<A>, tx: Option<Sender<Result<Box<dyn Any + Send>, SendError<Box<dyn Any + Send>, Box<dyn Any + Send>>>>>, stop: &'a mut bool, ) -> Pin<Box<dyn Future<Output = Result<(), Box<dyn ReplyError>>> + Send + 'a>>
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
impl<T> ErasedDestructor for Twhere
T: 'static,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
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