]> git.ipfire.org Git - thirdparty/openssl.git/commitdiff
QUIC ACKM: Add function to get PTO
authorHugo Landau <hlandau@openssl.org>
Tue, 1 Nov 2022 16:39:09 +0000 (16:39 +0000)
committerHugo Landau <hlandau@openssl.org>
Fri, 13 Jan 2023 13:20:14 +0000 (13:20 +0000)
Reviewed-by: Tomas Mraz <tomas@openssl.org>
Reviewed-by: Matt Caswell <matt@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/19703)

include/internal/quic_ackm.h
ssl/quic/quic_ackm.c

index 866213cb73091556a8d95bdac6f939999ac1d3dc..ee5f06cf342abce65d684448792285c50b5ed346 100644 (file)
@@ -225,4 +225,10 @@ int ossl_ackm_get_largest_unacked(OSSL_ACKM *ackm, int pkt_space, QUIC_PN *pn);
 int ossl_ackm_mark_packet_pseudo_lost(OSSL_ACKM *ackm,
                                       int pkt_space, QUIC_PN pn);
 
+/*
+ * Returns the PTO duration as currently calculated. This is a quantity of time.
+ * This duration is used in various parts of QUIC besides the ACKM.
+ */
+OSSL_TIME ossl_ackm_get_pto_duration(OSSL_ACKM *ackm);
+
 #endif
index 54298b54c41f64923d3933c0c4335ebd9d5a1aa2..53eb51cfc8b63f90ab70e5096ad8085f3e1dc5c7 100644 (file)
@@ -1663,3 +1663,19 @@ int ossl_ackm_mark_packet_pseudo_lost(OSSL_ACKM *ackm,
     ackm_on_pkts_lost(ackm, pkt_space, pkt, /*pseudo=*/1);
     return 1;
 }
+
+OSSL_TIME ossl_ackm_get_pto_duration(OSSL_ACKM *ackm)
+{
+    OSSL_TIME duration;
+    OSSL_RTT_INFO rtt;
+
+    ossl_statm_get_rtt_info(ackm->statm, &rtt);
+
+    duration = ossl_time_add(rtt.smoothed_rtt,
+                             ossl_time_max(ossl_time_multiply(rtt.rtt_variance, 4),
+                                           ossl_ticks2time(K_GRANULARITY)));
+    if (!ossl_time_is_infinite(rtt.max_ack_delay))
+        duration = ossl_time_add(duration, rtt.max_ack_delay);
+
+    return duration;
+}