When a receive stream had flow control credits to issue but then exits
the receiving w/ unknown size state (e.g. due to receiving a STREAM
frame with the FIN bit set) then a previously queued MAX_STREAM_DATA
frame may become unnecessary. Because this was not accounted for by
Retransmits::is_empty, a transmit might be attempted for the benefit
of that frame, potentially yielding an illegal ACK-only packet.
When a stream had outgoing data but is then reset, it could cause
StreamsState to indicate readiness and then fail to encode any
streams, potentially yielding an illegal ACK-only packet.
RFC 9002 §6.2.1: When the PTO is armed for Initial or Handshake packet
number spaces, the max_ack_delay in the PTO period computation is set
to 0, since the peer is expected to not delay these packets
intentionally.
squashed messages:
fixup for docs and removing extra braces
add downcasting hatch
pretty print should be Display, not Debug
un-needed export
fmt and clippy
re-expose CCAs to public API
reorder constants
inline bbr_state
remove extra param
refactor bbr into its own module
refactor bbr into its own module
no threadlocal rng, use genrange
rename fields for review
Update quinn/src/connection.rs
Co-authored-by: Benjamin Saunders <ben.e.saunders@gmail.com>
Update quinn-proto/src/connection/mod.rs
Co-authored-by: Benjamin Saunders <ben.e.saunders@gmail.com>
Update quinn-proto/src/connection/mod.rs
Co-authored-by: Benjamin Saunders <ben.e.saunders@gmail.com>
fill() now supported
clippy in cubic was covered by the rebase
add links to BBR info
refactor to hide internal PathData
clarify BBR usage
reduce struct scope
collapse update_last_sent into on_sent
collapse on_loss into on_congestion_event
remove dead code
Update quinn/src/connection.rs
Co-authored-by: Benjamin Saunders <ben.e.saunders@gmail.com>
Update quinn-proto/src/congestion/bbr.rs
Co-authored-by: Benjamin Saunders <ben.e.saunders@gmail.com>
Update quinn-proto/src/congestion.rs
Co-authored-by: Benjamin Saunders <ben.e.saunders@gmail.com>
Update quinn-proto/src/congestion/cubic.rs
Co-authored-by: Benjamin Saunders <ben.e.saunders@gmail.com>
clippy
safer duration comparison
backwards compatibility fill
add docs, rename stats cca to congestion
remove PacketNumber and bbr_ prefixes
rename constants to rust style
fix packet number typing
enable drain to target bdp mode during probe bw
add ack aggregation for better target growth
fix not entering growth mode
remove extra debug printing
enable rtt probe and track min rtt
track max bandwidth with minmax filter
use minmax filter for max bandwidth estimation
switch minmax filter to use round counts instead of times
port minmax filter to rust
fix: count lost packet size instead of their id
fix bw estimation not updating current bw
expose congestion configs
split bytes acked from end ack method
simplify full bandwidth check
remove some unused variables
add 125% of target full bandwidth condition as per docs
fix loss resetting too early, fix bandwidth target units of measurement
check if full bw reached
calculate recovery window
calculate cwnd
calculate pacing rate
maybe_enter_or_exit_probe_rtt
update gain cycle phase
refactor bandwidth estimation
add cca into stats for debugging
add target window
add recovery state transitions
loss recording
bandwidth estimation
The alternate form, "{:#}", of anyhow errors traverses through
`Error::source` and prints each level. We should therefore avoid
explicitly printing an inner error marked as the source so that
detailed errors can be formatted without confusing duplication.