pub enum Event {
Beat {
pid: u32,
status: Status,
payload: u32,
nonce: u64,
origin: BeatOrigin,
pid_ns_inode: Option<u64>,
observer_ns: u64,
},
Stall {
pid: u32,
last_nonce: u64,
last_ns: u64,
origin: BeatOrigin,
pid_ns_inode: Option<u64>,
observer_ns: u64,
},
Decode(DecodeError, u64),
AuthFailure {
claimed_pid: u32,
observer_ns: u64,
},
OriginConflict {
claimed_pid: u32,
observed_origin: BeatOrigin,
slot_origin: BeatOrigin,
observer_ns: u64,
},
NamespaceConflict {
claimed_pid: u32,
observed_ns_inode: Option<u64>,
observer_ns_inode: Option<u64>,
observer_ns: u64,
},
Io(Error, u64),
CtrlTruncated(Error, u64),
}Expand description
Event surfaced by Observer::poll.
Each call to poll returns at most one event. Unknown-pid overflow and
out-of-order beats are silently dropped at this layer; the bench / metrics
sessions can layer counters on top without changing this enum.
Variants§
Beat
A well-formed beat was accepted for a tracked pid.
Fields
origin: BeatOriginTransport-class classification of the beat (see BeatOrigin).
Recovery commands consult this to refuse firing on non-kernel-attested origins.
Stall
A tracked pid has not beaten within the configured threshold and the observer has not yet surfaced a stall event for this silence run.
Fields
last_ns: u64Observer-local timestamp (ns since Observer start) of the
last accepted beat for this pid.
origin: BeatOriginTransport origin pinned by the slot’s first beat. Recovery
refuses to spawn for NetworkUnverified unless the operator has
explicitly opted in via
--i-accept-recovery-on-unauthenticated-transport.
Decode(DecodeError, u64)
A 32-byte payload arrived but failed VLP decoding.
AuthFailure
Frame decoded but the frame.pid does not match the kernel-verified
peer PID of the sender. The claimed pid is preserved so exporters can
record what the frame claimed to be.
Fields
OriginConflict
A beat arrived for an already-tracked pid, but its transport origin disagreed with the origin pinned by the slot’s first beat. The slot was not mutated; the beat was dropped. First-origin-wins prevents an attacker on an untrusted transport from “tainting” a slot that legitimately belongs to a kernel-attested agent.
Fields
observed_origin: BeatOriginTransport origin observed on this datagram.
slot_origin: BeatOriginOrigin pinned by the slot (the one that “won” the conflict).
NamespaceConflict
A kernel-attested beat arrived whose peer PID-namespace inode differs
from the observer’s namespace (Linux only). Recovery for the
associated pid cannot safely fire because the pid is in a different
namespace — kill(2) and systemctl would target the wrong process.
The beat was dropped at receive; the tracker was not modified.
Fields
observed_ns_inode: Option<u64>PID-namespace inode of the sender (Linux only; None when
/proc/<peer_pid>/ns/pid was unreadable).
Io(Error, u64)
Receiving from a listener failed with an error other than
WouldBlock / TimedOut.
CtrlTruncated(Error, u64)
Ancillary data truncated by the kernel (MSG_CTRUNC on Linux).
Indicates the kernel’s ancillary-data buffer was too small for the
per-message metadata — a kernel-level buffer sizing issue.