pub struct TkaLogEntry {
pub aum_hash: [u8; 32],
pub change: String,
pub signer_key_ids: Vec<Vec<u8>>,
pub raw: Vec<u8>,
}Expand description
One entry of the Tailnet-Lock update-chain log, mirroring Go ipnstate.NetworkLockUpdate (the
rows tailscale lock log prints). Produced by Device::tka_log from
the locally-synced AUM chain — a pure local read, no control round-trip.
aum_hash + change + raw are the exact Go NetworkLockUpdate fields (Hash, Change,
Raw). signer_key_ids is an extra convenience this engine extracts from the decoded AUM —
Go’s struct has no Signatures field and recovers the signer only by decoding Raw; we surface
the signer key ids directly so a daemon need not re-decode, while still carrying raw for a
faithful full decode.
Fields§
§aum_hash: [u8; 32]The AUM’s chain-link hash (Go NetworkLockUpdate.Hash): BLAKE2s-256 of its serialization.
change: StringThe human-readable change kind (Go NetworkLockUpdate.Change), e.g. "add-key" /
"remove-key" / "checkpoint" — AumKind::as_str.
signer_key_ids: Vec<Vec<u8>>The id of each trusted key that signed this AUM (each
AumSignature::key_id, the signer’s 32-byte ed25519 public
key for an Ed25519 key). Convenience extraction; absent from Go’s struct.
raw: Vec<u8>The AUM’s canonical CBOR serialization (Go NetworkLockUpdate.Raw = AUM.Serialize()), so a
consumer can decode the full AUM (incl. signatures) faithfully.
Trait Implementations§
Source§impl Clone for TkaLogEntry
impl Clone for TkaLogEntry
Source§fn clone(&self) -> TkaLogEntry
fn clone(&self) -> TkaLogEntry
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 TkaLogEntry
impl Debug for TkaLogEntry
impl Eq for TkaLogEntry
Source§impl PartialEq for TkaLogEntry
impl PartialEq for TkaLogEntry
Source§fn eq(&self, other: &TkaLogEntry) -> bool
fn eq(&self, other: &TkaLogEntry) -> bool
self and other values to be equal, and is used by ==.impl StructuralPartialEq for TkaLogEntry
Auto Trait Implementations§
impl Freeze for TkaLogEntry
impl RefUnwindSafe for TkaLogEntry
impl Send for TkaLogEntry
impl Sync for TkaLogEntry
impl Unpin for TkaLogEntry
impl UnsafeUnpin for TkaLogEntry
impl UnwindSafe for TkaLogEntry
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.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