pub trait Controller: Send {
    fn on_congestion_event(
        &mut self,
        now: Instant,
        sent: Instant,
        is_persistent_congestion: bool,
        lost_bytes: u64
    ); 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>; 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

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.

Number of ack-eliciting bytes that may be in flight

Duplicate the controller’s state

Initial congestion window

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

Provided Methods

One or more packets were just sent

Packet deliveries were confirmed

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

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

Implementors