]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
MINOR: quic: Wrong ack_delay compution before calling quic_loss_srtt_update()
authorFrédéric Lécaille <flecaille@haproxy.com>
Tue, 28 Dec 2021 13:27:43 +0000 (14:27 +0100)
committerFrédéric Lécaille <flecaille@haproxy.com>
Tue, 4 Jan 2022 16:30:00 +0000 (17:30 +0100)
RFC 9002 5.3. Estimating smoothed_rtt and rttvar:
MUST use the lesser of the acknowledgment delay and the peer's max_ack_delay
after the handshake is confirmed.

include/haproxy/quic_loss.h
src/xprt_quic.c

index 6105ceaeb4375a538a753739c943452840e0b97c..cc48f0df58b7ff1ce5b4f6e83e5fa3561f0dc621 100644 (file)
@@ -42,8 +42,8 @@ static inline void quic_loss_init(struct quic_loss *ql)
 }
 
 /* Update <ql> QUIC loss information with new <rtt> measurement and <ack_delay>
- * on ACK frame receipt which MUST be min(ack->ack_delay, max_ack_delay) for
- * non handshake packets.
+ * on ACK frame receipt which MUST be min(ack->ack_delay, max_ack_delay)
+ * before the handshake is confirmed.
  */
 static inline void quic_loss_srtt_update(struct quic_loss *ql,
                                          unsigned int rtt, unsigned int ack_delay,
index 0a1ef8e0fcc65be9ab3b06ba031577e84bce046c..f81d044a7c16787dfd79e00d59f7382d85667cd2 100644 (file)
@@ -2208,7 +2208,9 @@ static int qc_parse_pkt_frms(struct quic_rx_packet *pkt, struct ssl_sock_ctx *ct
                                unsigned int ack_delay;
 
                                ack_delay = !quic_application_pktns(qel->pktns, qc) ? 0 :
-                                       MS_TO_TICKS(QUIC_MIN(quic_ack_delay_ms(&frm.ack, qc), qc->max_ack_delay));
+                                       HA_ATOMIC_LOAD(&qc->state) >= QUIC_HS_ST_CONFIRMED ?
+                                       MS_TO_TICKS(QUIC_MIN(quic_ack_delay_ms(&frm.ack, qc), qc->max_ack_delay)) :
+                                       MS_TO_TICKS(quic_ack_delay_ms(&frm.ack, qc));
                                quic_loss_srtt_update(&qc->path->loss, rtt_sample, ack_delay, qc);
                        }
                        break;