From 3388bd9e9b82df6d7fe79fa4eee7c22a3277624e Mon Sep 17 00:00:00 2001 From: Dimitri Staessens Date: Tue, 21 Jul 2026 06:54:55 +0200 Subject: ipcpd: Add flow overshoot protection to mb-ecn The ECN marks were the only source of congestion information, and going into congestion collapse (dropping a lot of ECN packets and causing loss of signal) was unrecoverable. The sender's slow-start ramp clock now tracks a measured RTT to avoid overshooting into congestion collapse on the previously fixed (14ms) doubling on long-delay (e.g. 100ms) links. The flow allocator now carries a periodic heartbeat/ack to keep RTT estimates up-to-date. The heartbeat also serves as a congestion collapse detector: consecutive heartbeat losses will go into loss recovery, halving the window and pausing Additive Increase until the path is clear. The DT component now has a max_rtt config parameter that serves as a hint for the layer RTT to optimize slow-start for low-latency networks. These two mechanisms follow TCP, however only during slow start up to the first ECN signal and to recover from a total collapse until the ECN signal returns. MB-ECN is still fully RTT-independent in the AI/PD region. A shorter RTT path will just reach its equal fair share faster than a longer RTT path. Signed-off-by: Dimitri Staessens Signed-off-by: Sander Vrijders --- src/irmd/configfile.c | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'src/irmd') diff --git a/src/irmd/configfile.c b/src/irmd/configfile.c index 5967e490..e2e1e554 100644 --- a/src/irmd/configfile.c +++ b/src/irmd/configfile.c @@ -477,6 +477,7 @@ static int toml_dt(toml_table_t * table, toml_datum_t addr; toml_datum_t eid; toml_datum_t ttl; + toml_datum_t max_rtt; addr = toml_int_in(table, "addr_size"); if (addr.ok) @@ -490,6 +491,10 @@ static int toml_dt(toml_table_t * table, if (ttl.ok) conf->max_ttl = ttl.u.i; + max_rtt = toml_int_in(table, "max_rtt"); + if (max_rtt.ok) + conf->max_rtt = max_rtt.u.i; + if (toml_routing(table, conf) < 0) { log_err("Invalid routing option."); return -1; -- cgit v1.2.3