Controller

Trait Controller 

pub trait Controller:
    Send
    + Sync
    + Debug {
Show 14 methods // Required methods fn on_congestion_event( &mut self, now: Instant, sent: Instant, is_persistent_congestion: bool, is_ecn: bool, lost_bytes: u64, largest_lost_pn: 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, largest_pn: u64) { ... } fn on_packet_sent(&mut self, now: Instant, bytes: u16, pn: u64) { ... } fn on_ack( &mut self, now: Instant, sent: Instant, bytes: u64, pn: 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_packet_lost(&mut self, lost_bytes: u16, pn: u64, now: Instant) { ... } fn on_spurious_congestion_event(&mut self) { ... } fn on_ack_frequency_update( &mut self, ack_eliciting_threshold: u64, requested_max_ack_delay: Duration, ) { ... } fn metrics(&self) -> ControllerMetrics { ... }
}
Expand description

Common interface for different congestion controllers

Required Methods§

fn on_congestion_event( &mut self, now: Instant, sent: Instant, is_persistent_congestion: bool, is_ecn: bool, lost_bytes: u64, largest_lost_pn: 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. largest_lost_pn indicates the packet number of the packet with the highest packet number in the congestion event.

fn on_mtu_update(&mut self, new_mtu: u16)

The known MTU for the current network path has been updated

fn window(&self) -> u64

Number of ack-eliciting bytes that may be in flight

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

Duplicate the controller’s state

fn initial_window(&self) -> u64

Initial congestion window

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

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

Provided Methods§

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

One or more packets were just sent

fn on_packet_sent(&mut self, now: Instant, bytes: u16, pn: u64)

One packet was just sent

fn on_ack( &mut self, now: Instant, sent: Instant, bytes: u64, pn: 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.

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.

fn on_packet_lost(&mut self, lost_bytes: u16, pn: u64, now: Instant)

One packet was just lost

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.

fn on_ack_frequency_update( &mut self, ack_eliciting_threshold: u64, requested_max_ack_delay: Duration, )

The peer’s ACK-frequency parameters have changed

ack_eliciting_threshold is the number of ack-eliciting packets the peer may receive before being required to send an immediate ACK (per the QUIC ACK frequency extension). requested_max_ack_delay is the maximum delay we asked the peer to wait before sending an ACK when the threshold hasn’t been reached.

Controllers can use this to refine estimates that depend on peer ACK behavior (e.g. BBR’s offload budget).

fn metrics(&self) -> ControllerMetrics

Retrieve implementation-specific metrics used to populate qlog traces when they are enabled This is also used to alter the pacing of the connection with pacing_rate and send_quantum

Implementors§