The bbr module is a port of the BBR implementation from quinn upstream
(quinn-proto 0.12), adapted to the Controller trait of the bbrv3 branch
(Tipuch/quinn). Compared with the upstream BBR, it has three differences:
-
min RTT tracking uses
rtt.min()instead ofrtt.get()In
on_ack,min_rttis updated whenever the estimator's historical minimum (rtt.min()) is lower, instead of the smoothed RTT (rtt.get()). This tracks the true minimum RTT more aggressively, matching the min_rtt semantics of the BBR spec more closely. -
RNG switched from
StdRngtoPcg32The random number generator used to pick the random gain-cycle offset in ProbeBw is now
Pcg32(fromrand_pcg, seeded viaPcg32::from_rng(&mut rand::rng())) — the same RNG the bbrv3 branch'sbbr3uses — instead ofrand::rngs::StdRng::from_os_rng(). This also moved the crate from rand 0.9 to the rand 0.10 ecosystem (RngExt,rand_pcg). -
Controller trait signature adapted for the bbrv3 branch
on_ack,on_end_acksandon_congestion_eventaccept an extra_space: SpaceIdargument, which is required by theControllertrait of thebbrv3branch but not by upstream quinn.
Everything else — the state machine (Startup / Drain / ProbeBw / ProbeRtt),
recovery logic, ACK aggregation and all tuning constants (K_PACING_GAIN,
K_DEFAULT_HIGH_GAIN, ...) — is identical to the upstream implementation.