Eliminate unsafe code blocks and manual pointer arithmetic in Linux-specific receive paths by utilizing nix for socket options and control message parsing. This improves safety and maintainability while preserving the existing kernel RX timestamp and traffic class functionality.
52 lines
2.0 KiB
Rust
52 lines
2.0 KiB
Rust
//! 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. With the
|
|
//! `tokio` feature, `AsyncClient` provides the corresponding Tokio adapter;
|
|
//! [`managed`] contains the unified managed task/handle implementation,
|
|
//! including the dedicated-runtime blocking frontend for synchronous callers.
|
|
//!
|
|
#![forbid(unsafe_code)]
|
|
|
|
#[cfg(feature = "tokio")]
|
|
mod async_client;
|
|
mod client;
|
|
mod config;
|
|
mod error;
|
|
mod event;
|
|
pub mod managed;
|
|
mod metadata;
|
|
mod probe;
|
|
mod receive;
|
|
mod session;
|
|
mod socket;
|
|
mod socket_options;
|
|
mod timing;
|
|
|
|
#[cfg(feature = "tokio")]
|
|
pub use async_client::AsyncClient;
|
|
pub use client::Client;
|
|
pub use config::{
|
|
ClientAuthConfig, ClientConfig, NegotiationPolicy, RecvBudget, RunMode, SocketConfig,
|
|
MAX_DSCP_CODEPOINT, MAX_SERVER_FILL_BYTES, MAX_TTL, MAX_UDP_PAYLOAD_LENGTH,
|
|
};
|
|
pub use error::ClientError;
|
|
pub use event::{
|
|
ClientEvent, OneWayDelaySample, OpenOutcome, PacketMeta, ReceivedStatsSample, RttSample,
|
|
ServerTiming, SignedDuration, WarningKind,
|
|
};
|
|
pub use session::{NegotiatedParams, NegotiationRestriction};
|
|
pub use timing::ClientTimestamp;
|