Closed huitema closed 1 year ago
In the first failure case, the "bad" packet has the same length as a previous 1RTT packet:
a8c72861ce43fd60: Sending packet type: 6 (1rtt protected), S0, Q1,
a8c72861ce43fd60: <e29097573939c979>, Seq: 1 (1), Phi: 0,
a8c72861ce43fd60: Prepared 285 bytes
a8c72861ce43fd60: NEW CONNECTION ID[1]: 0x712e5b7d1ec96bc3, 787546ab64b34aed1a6efbcffcc61995
a8c72861ce43fd60: NEW CONNECTION ID[2]: 0x7d5596bae23ade86, 2025f74d032f97497b474c12bf7b9023
a8c72861ce43fd60: NEW CONNECTION ID[3]: 0x5759aabf550e9abb, 55aa89f334fd6375f0701038edfeadfd
a8c72861ce43fd60: NEW CONNECTION ID[4]: 0x91fe1c00c5241ff3, aa785e54ea55d1493a1bf86dbe7b7134
a8c72861ce43fd60: NEW CONNECTION ID[5]: 0x85fc6cd014c8e40b, 2e60f6753a9caf90dba309060b7ec150
a8c72861ce43fd60: NEW CONNECTION ID[6]: 0xe377aede7558ab2f, c24086f4966c0c92375bf28575b25ebe
a8c72861ce43fd60: NEW CONNECTION ID[7]: 0x2ebbcd8014461adc, 3628e673e04ed99dbe3d9b6c35942515
a8c72861ce43fd60: padding, 89 bytes
The first content bytes of that packet would be 0x18010008712e5b7d1ec96bc3. If the first byte is replaced by "01", ping, this becomes 0x01010008712e5b7d1ec96bc3, which decodes as:
This much suggests that the packet was repeated, and that the first byte was overwritten by a "ping" byte.
The other two cases show the same pattern.
Verified fixed after PR #1524
The issue was caused by improper integration of "preemptive repeat" in the sender flow.
The interop L1 test consists of 50 connection attempts using hq-interop, which succeed if a 1024 bytes file is successfully received despite 30% packet loss. We see failures caused by malformed packets, such as
1- Test with happroxy. Ping, followed by a hallucinated stream frame (no reason to send anything on stream 15), occurs twice, see text log:
2- Test with ngtcp2. Ping, followed by a hallucinated stream frame, see text log:
3- Test with s2n-quic. Two occurrences of Ping, followed by hallucinated frames, see text log:
In all cases, the packets are sent while previously sent packets are not acknowledged.