Skip to main content

Crate irtt_client

Crate irtt_client 

Source
Expand description

Reusable client/session/event layer for IRTT-compatible probes.

irtt-client opens IRTT-compatible sessions, sends echo probes, receives replies, classifies loss/late/duplicate packets, and emits ClientEvent values for callers to consume directly or aggregate with irtt-stats. With the tokio feature enabled, AsyncClient provides the same low-level lifecycle for callers that own a Tokio runtime and drive readiness directly.

Timing values intentionally preserve signed measurement semantics. When server timing is available, RttSample::effective is adjusted for server processing and can be negative if the reported server processing time exceeds the raw client-observed RTT. Directional OneWayDelaySample values are also signed when the required wall-clock timestamps are available; negative values usually indicate client/server clock skew.

Client is the runtime-free low-level blocking adapter and requires no Tokio dependency at all; it is what a caller without a runtime, or that wants full control over its own event loop, should start from. With the tokio feature, AsyncClient provides the corresponding low-level Tokio adapter for a caller that owns a runtime and drives socket readiness itself. Both adapters send one probe whenever called; callers own cadence and run duration, using negotiation() after Open. Sends return a SendReceipt after socket acceptance and session commitment; SendProbeError distinguishes uncommitted failures from post-commit failures carrying that receipt. Convert a receipt to ClientEvent for presentation or statistics. managed owns negotiated-interval scheduling, finite runs, and staggered/burst pacing: ManagedClientTask / ManagedClientHandle (tokio feature) run and control one or more targets under a Tokio runtime, and BlockingManagedClient (tokio feature) wraps that in a synchronous owner backed by its own dedicated current-thread runtime for callers that want managed multi-target behavior without touching Tokio themselves.

A successful OpenOutcome carries either SessionStarted (with a live token) or NoTestCompleted (terminal, with no probe session). Lifecycle events use these same payload types. Their NegotiationResult separates typed AcceptedSessionParameters from the exact decoded peer Params and accepted NegotiationChange records. Use accepted.interval and accepted.duration for cadence and lifetime, accepted.dscp for the public DSCP codepoint, and peer_params for wire diagnostics. Strict/Loose policy compares the actual request and reply wire values before deriving accepted semantics. Both adapters’ negotiation() accessors return only a live session’s result; no-test completion leaves no current session.

See examples/ in the repository for a runnable example of each tier.

Modules§

managed

Structs§

AcceptedSessionParameters
Validated session semantics accepted after a successful Open exchange.
AsyncClient
Low-level Tokio IRTT client for one connected UDP target.
Client
Low-level synchronous IRTT client.
ClientConfig
Configuration for opening and running an IRTT client session.
ClientTimestamp
Client-side timestamp captured in both wall-clock and monotonic time.
HmacKey
Shared HMAC key bytes. Debug output never includes the bytes or a fingerprint.
NegotiationResult
Accepted session semantics, exact protocol evidence, and accepted changes.
NoTestCompleted
Successful negotiation-only exchange with no live probe session or token.
OneWayDelaySample
Directional one-way delay samples computed from wall-clock timestamps.
OpenPolicy
Opening behavior shared by blocking, async, and managed clients.
PacketMeta
Receive-side packet metadata observed outside the IRTT wire protocol.
ReceivedStatsSample
Server-reported receive counters decoded from an echo reply.
RecvBudget
Bound for a single receive-drain operation.
RttSample
Round-trip timing for one echo reply.
SendReceipt
An Echo datagram accepted by the UDP socket and committed in session state.
ServerTiming
Server-reported timing fields decoded from an echo reply.
SessionRequest
Requested IRTT protocol and session semantics, reusable across endpoints.
SessionStarted
Successful negotiation with a live session ready for echo probes.
SignedDuration
Signed nanosecond-backed duration used for derived timing values.
SocketConfig
Local UDP socket options used by ClientConfig.

Enums§

AddressFamily
Allowed remote address families. IPv6-only selection also sets IPV6_V6ONLY.
Authentication
Concrete authentication for a low-level client session.
ClientError
Failure reported while configuring, opening, running, receiving, closing, or joining an IRTT client session.
ClientEvent
Event emitted by an IRTT client session.
NegotiationChange
A semantic parameter change accepted during negotiation.
NegotiationPolicy
How strictly to handle server-side negotiation restrictions.
OpenOutcome
Result of the IRTT Open exchange, before any echo probes are driven.
RunMode
Mode requested during the IRTT open exchange.
SendProbeError
Probe-send failure with an explicit socket-acceptance commitment boundary.
WarningKind
Category for a non-fatal ClientEvent::Warning.

Constants§

MAX_DSCP_CODEPOINT
Largest valid DSCP codepoint accepted by client configuration.
MAX_SERVER_FILL_BYTES
Protocol compatibility bound for a requested server_fill value, in UTF-8 bytes.
MAX_TTL
Largest IPv4 TTL or IPv6 hop-limit value accepted by client configuration.
MAX_UDP_PAYLOAD_LENGTH
Largest UDP payload length accepted by client configuration, in bytes.