summaryrefslogtreecommitdiff
path: root/src/ipcpd/unicast/ca/mb-ecn.h
diff options
context:
space:
mode:
authorDimitri Staessens <dimitri@ouroboros.rocks>2026-07-21 06:54:55 +0200
committerSander Vrijders <sander@ouroboros.rocks>2026-07-22 09:04:47 +0200
commit3388bd9e9b82df6d7fe79fa4eee7c22a3277624e (patch)
tree2c7d17a5d793f91b43b08d891bfc2a8bfdcef067 /src/ipcpd/unicast/ca/mb-ecn.h
parent1ee9c1cfb5ecffbf4766a6c05d333dab712f4e77 (diff)
downloadouroboros-3388bd9e9b82df6d7fe79fa4eee7c22a3277624e.tar.gz
ouroboros-3388bd9e9b82df6d7fe79fa4eee7c22a3277624e.zip
ipcpd: Add flow overshoot protection to mb-ecntestingbe
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 <dimitri@ouroboros.rocks> Signed-off-by: Sander Vrijders <sander@ouroboros.rocks>
Diffstat (limited to 'src/ipcpd/unicast/ca/mb-ecn.h')
-rw-r--r--src/ipcpd/unicast/ca/mb-ecn.h9
1 files changed, 9 insertions, 0 deletions
diff --git a/src/ipcpd/unicast/ca/mb-ecn.h b/src/ipcpd/unicast/ca/mb-ecn.h
index 7bf0b29f..781e25a8 100644
--- a/src/ipcpd/unicast/ca/mb-ecn.h
+++ b/src/ipcpd/unicast/ca/mb-ecn.h
@@ -25,6 +25,8 @@
#include "ops.h"
+void mb_ecn_init(uint32_t rtt_ms);
+
void * mb_ecn_ctx_create(void);
void mb_ecn_ctx_destroy(void * ctx);
@@ -45,6 +47,13 @@ void mb_ecn_ctx_update_ece(void * ctx,
uint16_t ece,
uint8_t cap);
+bool mb_ecn_ctx_hb_due(void * ctx,
+ uint64_t now);
+
+void mb_ecn_ctx_rtt(void * ctx,
+ uint64_t now,
+ uint64_t rtt);
+
int mb_ecn_calc_ecn(size_t queued,
uint8_t * ecn,
qoscube_t qc,