Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Congestion uses a back-to-back Errored Interval counter and a latched Congestion Confirmed state

RFC 9946 §5.1 requires Congestion to be inferred from Errored Intervals “in all of the consecutive intervals”, while the Y.1540 Amd2 / TR-471 flowcharts (and OB-UDPST, which follows them) keep a single SlowAdjCount that is reset only on a fast increase, so “errored, hold, errored, hold, errored” also confirms congestion. We follow the RFC’s strict reading, but not by resetting SlowAdjCount on every non-errored interval: doing that would let algorithm B re-enter Fast Mode after Congestion was confirmed and oscillate, which RFC 9946 §7 forbids (“the single-step mode continues after the first inference of ‘congestion’”). Instead a separate counter of back-to-back Errored Intervals, reset by any non-errored interval, sets a latched Congestion Confirmed state when it reaches SlowAdjThresh; algorithm B never clears the latch, and algorithm C clears it only on a Fast-Mode Retry. A Lost Status Backoff event counts as an Errored Interval (amended 2026-09-25, see below).

Consequences

  • Our Server confirms Congestion later than OB-UDPST on paths with intermittent errors, so the two can report different capacities on the same path; this is a recorded OB-UDPST Difference, and interop tests compare each result against a known bottleneck rather than against each other.

Amendment (2026-09-25): Lost Status Backoff counts as an Errored Interval

This ADR first had a Lost Status Backoff event take one row off without counting as an Errored Interval, which departed from RFC 9097 §8.1: the rate decreases “following the same process” as for errored feedback, “with the same load rate adjustment algorithm variables in their current state”, so that “lost status feedback messages … can result in rate reduction and congestion confirmation”. The maintainer chose to avoid the deviation. A backoff now adds to the back-to-back Errored Interval counter, so the third in a row (about 290 ms without a Status PDU at the defaults) confirms Congestion with the one-time drop of 3 × highSpeedDelta rows. The cost is that a short burst of lost feedback can confirm Congestion early and lower the result. Proved by crates/udpstp-core/tests/lost_status_backoff.rs.