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§
Sourcefn on_congestion_event(
&mut self,
now: Instant,
sent: Instant,
is_persistent_congestion: bool,
is_ecn: bool,
lost_bytes: u64,
)
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.
Sourcefn on_mtu_update(&mut self, new_mtu: u16)
fn on_mtu_update(&mut self, new_mtu: u16)
The known MTU for the current network path has been updated
Sourcefn clone_box(&self) -> Box<dyn Controller>
fn clone_box(&self) -> Box<dyn Controller>
Duplicate the controller’s state
Sourcefn initial_window(&self) -> u64
fn initial_window(&self) -> u64
Initial congestion window
Provided Methods§
Sourcefn on_sent(&mut self, now: Instant, bytes: u64, last_packet_number: u64)
fn on_sent(&mut self, now: Instant, bytes: u64, last_packet_number: u64)
One or more packets were just sent
Sourcefn on_ack(
&mut self,
now: Instant,
sent: Instant,
bytes: u64,
app_limited: bool,
rtt: &RttEstimator,
)
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.
Sourcefn on_end_acks(
&mut self,
now: Instant,
in_flight: u64,
app_limited: bool,
largest_packet_num_acked: Option<u64>,
)
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.
Sourcefn on_spurious_congestion_event(&mut self)
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.
Sourcefn metrics(&self) -> ControllerMetrics
fn metrics(&self) -> ControllerMetrics
Retrieve implementation-specific metrics used to populate qlog traces when they are enabled