Controller

Trait Controller 

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

Source

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.

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, largest_pn: u64)

One or more packets were just sent

Source

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

One packet was just sent

Source

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.

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_packet_lost(&mut self, lost_bytes: u16, pn: u64, now: Instant)

One packet was just lost

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 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).

Source

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§