From 5d5afe790016401952117dbaff8a3324260faf8e Mon Sep 17 00:00:00 2001 From: =?utf8?q?Fr=C3=A9d=C3=A9ric=20L=C3=A9caille?= Date: Thu, 30 Mar 2023 15:31:06 +0200 Subject: [PATCH] BUG/MINOR: quic: Wrong rtt variance computing In ->srtt quic_loss struct this is 8*srtt which is stored so that not to have to multiply/devide it to compute the RTT variance (at least). This is where there was a bug in quic_loss_srtt_update(): each time ->srtt must be used, it must be devided by 8 or right shifted by 3. This bug had a very bad impact for network with non negligeable packet loss. Must be backported to 2.6 and 2.7. --- src/quic_loss.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/quic_loss.c b/src/quic_loss.c index 8f19645..eff8e6c 100644 --- a/src/quic_loss.c +++ b/src/quic_loss.c @@ -37,7 +37,7 @@ void quic_loss_srtt_update(struct quic_loss *ql, /* Specific to QUIC (RTT adjustment). */ if (ack_delay && rtt > ql->rtt_min + ack_delay) rtt -= ack_delay; - diff = ql->srtt - rtt; + diff = (ql->srtt >> 3) - rtt; if (diff < 0) diff = -diff; /* 4*rttvar = 3*rttvar + |diff| */ -- 1.7.10.4