Controller

Trait Controller 

Source
pub trait Controller:
    Send
    + Sync
    + Debug {
    // Required methods
    fn on_congestion_event(
        &mut self,
        now: Instant,
        sent: Instant,
        is_persistent_congestion: bool,
        is_ecn: bool,
        lost_bytes: u64,
    );
    fn on_mtu_update(&mut self, new_mtu: u16);
    fn window(&self) -> u64;
    fn clone_box(&self) -> Box<dyn Controller>;
    fn initial_window(&self) -> u64;
    fn into_any(self: Box<Self>) -> Box<dyn Any>;

    // Provided methods
    fn on_sent(&mut self, now: Instant, bytes: u64, last_packet_number: u64) { ... }
    fn on_ack(
        &mut self,
        now: Instant,
        sent: Instant,
        bytes: u64,
        app_limited: bool,
        rtt: &RttEstimator,
    ) { ... }
    fn on_end_acks(
        &mut self,
        now: Instant,
        in_flight: u64,
        app_limited: bool,
        largest_packet_num_acked: Option<u64>,
    ) { ... }
    fn on_spurious_congestion_event(&mut self) { ... }
    fn metrics(&self) -> ControllerMetrics { ... }
}
Expand description

Common interface for different congestion controllers

Required Methods§

Source

fn on_congestion_event( &mut self, now: Instant, sent: Instant, is_persistent_congestion: bool, is_ecn: bool, lost_bytes: u64, )

Packets were deemed lost or marked congested

in_persistent_congestion indicates whether all packets sent within the persistent congestion threshold period ending when the most recent packet in this batch was sent were lost. lost_bytes indicates how many bytes were lost. This value will be 0 for ECN triggers.

Source

fn on_mtu_update(&mut self, new_mtu: u16)

The known MTU for the current network path has been updated

Source

fn window(&self) -> u64

Number of ack-eliciting bytes that may be in flight

Source

fn clone_box(&self) -> Box<dyn Controller>

Duplicate the controller’s state

Source

fn initial_window(&self) -> u64

Initial congestion window

Source

fn into_any(self: Box<Self>) -> Box<dyn Any>

Returns Self for use in down-casting to extract implementation details

Provided Methods§

Source

fn on_sent(&mut self, now: Instant, bytes: u64, last_packet_number: u64)

One or more packets were just sent

Source

fn on_ack( &mut self, now: Instant, sent: Instant, bytes: u64, app_limited: bool, rtt: &RttEstimator, )

Packet deliveries were confirmed

app_limited indicates whether the connection was blocked on outgoing application data prior to receiving these acknowledgements.

Source

fn on_end_acks( &mut self, now: Instant, in_flight: u64, app_limited: bool, largest_packet_num_acked: Option<u64>, )

Packets are acked in batches, all with the same now argument. This indicates one of those batches has completed.

Source

fn on_spurious_congestion_event(&mut self)

Packets were incorrectly deemed lost

This function is called when all packets that were deemed lost (for instance because of packet reordering) are acknowledged after the congestion event was raised.

Source

fn metrics(&self) -> ControllerMetrics

Retrieve implementation-specific metrics used to populate qlog traces when they are enabled

Implementors§