pub trait Controller: Send {
    // Required methods
    fn on_congestion_event(
        &mut self,
        now: Instant,
        sent: Instant,
        is_persistent_congestion: 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>
    ) { ... }
}
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, 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.

Implementors§