diff options
| author | Dimitri Staessens <dimitri@ouroboros.rocks> | 2026-07-21 06:54:55 +0200 |
|---|---|---|
| committer | Sander Vrijders <sander@ouroboros.rocks> | 2026-07-22 09:04:47 +0200 |
| commit | 3388bd9e9b82df6d7fe79fa4eee7c22a3277624e (patch) | |
| tree | 2c7d17a5d793f91b43b08d891bfc2a8bfdcef067 /src/ipcpd/unicast/ca/tests/ca_test.c | |
| parent | 1ee9c1cfb5ecffbf4766a6c05d333dab712f4e77 (diff) | |
| download | ouroboros-testing.tar.gz ouroboros-testing.zip | |
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/tests/ca_test.c')
| -rw-r--r-- | src/ipcpd/unicast/ca/tests/ca_test.c | 14 |
1 files changed, 7 insertions, 7 deletions
diff --git a/src/ipcpd/unicast/ca/tests/ca_test.c b/src/ipcpd/unicast/ca/tests/ca_test.c index 4c44d29e..1b86eab8 100644 --- a/src/ipcpd/unicast/ca/tests/ca_test.c +++ b/src/ipcpd/unicast/ca/tests/ca_test.c @@ -44,7 +44,7 @@ static int test_ca_init_fini(enum pol_cong_avoid pol, { TEST_START("(%s)", name); - if (ca_init(pol) < 0) { + if (ca_init(pol, 100) < 0) { printf("Failed to init ca for %s.\n", name); goto fail; } @@ -74,7 +74,7 @@ static int test_ca_init_invalid(void) { TEST_START(); - if (ca_init(CA_INVALID) == 0) { + if (ca_init(CA_INVALID, 100) == 0) { printf("Init accepted an invalid policy.\n"); ca_fini(); goto fail; @@ -96,7 +96,7 @@ static int test_ca_ctx_share(enum pol_cong_avoid pol, TEST_START("(%s)", name); - if (ca_init(pol) < 0) { + if (ca_init(pol, 100) < 0) { printf("Failed to init ca for %s.\n", name); goto fail; } @@ -162,7 +162,7 @@ static int test_ca_ctx_distinct(void) TEST_START(); - if (ca_init(CA_NONE) < 0) { + if (ca_init(CA_NONE, 100) < 0) { printf("Failed to init ca.\n"); goto fail; } @@ -226,7 +226,7 @@ static int test_ca_ctx_refcount(void) TEST_START(); - if (ca_init(CA_NONE) < 0) { + if (ca_init(CA_NONE, 100) < 0) { printf("Failed to init ca.\n"); goto fail; } @@ -283,7 +283,7 @@ static int test_ca_ctx_recreate(void) TEST_START(); - if (ca_init(CA_NONE) < 0) { + if (ca_init(CA_NONE, 100) < 0) { printf("Failed to init ca.\n"); goto fail; } @@ -340,7 +340,7 @@ static int test_ca_fini_drains(void) TEST_START(); - if (ca_init(CA_NONE) < 0) { + if (ca_init(CA_NONE, 100) < 0) { printf("Failed to init ca.\n"); goto fail; } |
