Skip to main content

MmpMetrics

Struct MmpMetrics 

Source
pub struct MmpMetrics {
    pub srtt: SrttEstimator,
    pub rtt_trend: DualEwma,
    pub loss_trend: DualEwma,
    pub goodput_trend: DualEwma,
    pub jitter_trend: DualEwma,
    pub etx_trend: DualEwma,
    pub delivery_ratio_forward: f64,
    pub delivery_ratio_reverse: f64,
    pub etx: f64,
    pub goodput_bps: f64,
    /* private fields */
}
Expand description

Derived MMP metrics, updated from incoming ReceiverReports.

This lives on the sender side: when we receive a ReceiverReport from our peer describing what they observed about our traffic, we process it here to compute RTT, loss, goodput, and trend indicators.

Fields§

§srtt: SrttEstimator

Smoothed RTT from timestamp echo.

§rtt_trend: DualEwma

Dual EWMA trend detectors.

§loss_trend: DualEwma§goodput_trend: DualEwma§jitter_trend: DualEwma§etx_trend: DualEwma§delivery_ratio_forward: f64

Forward delivery ratio (what fraction of our frames the peer received).

§delivery_ratio_reverse: f64

Reverse delivery ratio (set when we compute from our own receiver state).

§etx: f64

ETX computed from bidirectional delivery ratios.

§goodput_bps: f64

Smoothed goodput in bytes/sec (forward direction: what the peer received from us).

Implementations§

Source§

impl MmpMetrics

Source

pub fn reset_for_rekey(&mut self)

Reset state derived from ReceiverReport counters for rekey cutover.

The new session starts with counter 0, so the prev_rr deltas must be reset to avoid computing bogus loss/goodput from the counter discontinuity. RTT (SRTT) is preserved since it remains valid.

Source

pub fn new() -> Self

Source

pub fn process_receiver_report( &mut self, rr: &ReceiverReport, our_timestamp_ms: u32, now: Instant, ) -> bool

Process an incoming ReceiverReport (from the peer about our traffic).

our_timestamp_ms is the current session-relative time in ms (for RTT). now is the current monotonic time (for goodput rate computation).

Returns true if this report produced the first SRTT measurement (transition from uninitialized to initialized).

Source

pub fn update_reverse_delivery( &mut self, our_recv_packets: u64, peer_highest: u64, )

Update the reverse delivery ratio from our own receiver state.

Computes a per-interval delta (same as forward ratio) rather than a lifetime cumulative ratio, so ETX responds to recent conditions.

Source

pub fn srtt_ms(&self) -> Option<f64>

Current smoothed RTT in milliseconds, or None if not yet measured.

Source

pub fn srtt_age_ms(&self, now: Instant) -> Option<u64>

Age of the current SRTT sample in milliseconds.

Source

pub fn loss_rate(&self) -> f64

Current loss rate (0.0 = no loss, 1.0 = total loss).

Source

pub fn smoothed_loss(&self) -> Option<f64>

Smoothed loss rate (long-term EWMA), or None if not yet initialized.

Source

pub fn last_forward_loss_sample(&self) -> Option<(u64, f64)>

Most recent forward-loss sample from a ReceiverReport delta.

Source

pub fn take_forward_loss_evidence( &mut self, min_span: u64, ) -> Option<(u64, f64)>

Return route-quality loss evidence once enough packets have been observed. High-rate reports are emitted as-is; low-rate reports, such as interactive pings, accumulate until they have the same weight.

Source

pub fn smoothed_etx(&self) -> Option<f64>

Smoothed ETX (long-term EWMA), or None if not yet initialized.

Source

pub fn goodput_bps(&self) -> f64

Current smoothed goodput in bytes/sec, or 0 if not yet measured.

Source

pub fn last_ecn_ce_count(&self) -> u32

Cumulative ECN CE count from the most recent ReceiverReport.

Trait Implementations§

Source§

impl Default for MmpMetrics

Source§

fn default() -> Self

Returns the “default value” for a type. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more