Skip to content

interop handshakeloss/corruption tests currently unsupported #971

@andrewkdinh

Description

@andrewkdinh

This is a follow-up issue for #953 and #954 which are effectively testing the same thing of dropping/corrupting 30% of packets going each way. @nhorman has a branch here with some fixes for these tests to be supported in our runner. We also updated the interop test runner to allow more than 50 handshakes, as we decided that a peer should be able to do a new handshake if needed (currently being discussed with the maintainer). However, these 2 tests still failed.

After some investigation, @Sashan noticed that the timeout seemed to be calculated incorrectly (too high). Using the following change (reducing the kInitialRtt time described in RFC 9002 from the recommended value of 333ms to 1ms), I was able to pass these 2 tests at least 50% of the time. An issue with these tests are that they are non-deterministic.

diff --git a/ssl/quic/quic_statm.c b/ssl/quic/quic_statm.c
index f1e0f65914..18d450fe94 100644
--- a/ssl/quic/quic_statm.c
+++ b/ssl/quic/quic_statm.c
@@ -50,7 +50,8 @@ void ossl_statm_update_rtt(OSSL_STATM *statm,
 }
 
 /* RFC 9002 kInitialRtt value. RFC recommended value. */
-#define K_INITIAL_RTT               ossl_ms2time(333)
+#define K_INITIAL_RTT               ossl_ms2time(1)
 
 int ossl_statm_init(OSSL_STATM *statm)
 {

From RFC 9002:

When no previous RTT is available, the initial RTT SHOULD be set to 333 milliseconds. This results in handshakes starting with a PTO of 1 second, as recommended for TCP's initial RTO

To help us pass these 2 tests, we could consider always setting kInitialRTT to a lower value (need to be discussed what a reasonable value is) and/or decrease our time threshold loss detection (i.e. decreasing kTimeThreshold).

This was decided to not be required for QUIC server MVP. Instead, we should focus on this after 3.5, particularly by writing a test to drop exact packets and where we can control the time using FAKE_TIME.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    Status

    Pre-Refinement

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions