pub trait Controller: Send + Sync {
// 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§
Sourcefn on_congestion_event(
&mut self,
now: Instant,
sent: Instant,
is_persistent_congestion: bool,
lost_bytes: u64,
)
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.
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