pub struct StatusNode {
pub stable_id: StableId,
pub display_name: String,
pub ipv4: IpAddr,
pub ipv6: IpAddr,
pub online: Option<bool>,
pub last_seen: Option<DateTime<Utc>>,
pub allowed_routes: Vec<IpNet>,
pub is_exit_node: bool,
}Expand description
A single node entry in a Status snapshot.
Analogous to tsnet’s ipnstate.PeerStatus.
Fields§
§stable_id: StableIdThe node’s stable id (stable across re-registration).
display_name: StringA display name for the node: its fqdn if a tailnet component is known, else its bare hostname.
ipv4: IpAddrThe node’s tailnet IPv4 address.
ipv6: IpAddrThe node’s tailnet IPv6 address.
online: Option<bool>Whether the node is online, if known (ipnstate.PeerStatus.Online). Tri-state: Some(true)
connected to control, Some(false) offline, None unknown (control sent no online status or
the local node lacks permission to know). Reflects control’s liveness state, retained from the
netmap node + its online deltas — None is unknown, never fabricated to false.
last_seen: Option<DateTime<Utc>>When control last saw this node online (ipnstate.PeerStatus.LastSeen). Per Go, only
meaningful while the node is not currently online. None when unknown or never seen.
allowed_routes: Vec<IpNet>The routes this node accepts traffic for (its own /32 and /128, plus any advertised
subnet routes and possibly the exit-node default route).
is_exit_node: boolWhether this node advertises a default route (0.0.0.0/0 or ::/0), making it eligible to
be selected as an exit node.
Implementations§
Source§impl StatusNode
impl StatusNode
Sourcepub fn from_node(node: &Node) -> StatusNode
pub fn from_node(node: &Node) -> StatusNode
Build a StatusNode from a domain Node.
Trait Implementations§
Source§impl Clone for StatusNode
impl Clone for StatusNode
Source§fn clone(&self) -> StatusNode
fn clone(&self) -> StatusNode
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 StatusNode
impl Debug for StatusNode
impl Eq for StatusNode
Source§impl PartialEq for StatusNode
impl PartialEq for StatusNode
Source§fn eq(&self, other: &StatusNode) -> bool
fn eq(&self, other: &StatusNode) -> bool
self and other values to be equal, and is used by ==.impl StructuralPartialEq for StatusNode
Auto Trait Implementations§
impl Freeze for StatusNode
impl RefUnwindSafe for StatusNode
impl Send for StatusNode
impl Sync for StatusNode
impl Unpin for StatusNode
impl UnsafeUnpin for StatusNode
impl UnwindSafe for StatusNode
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,
impl<A, B, T> HttpServerConnExec<A, B> for Twhere
B: Body,
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