]> git.kaiwu.me - nginx.git/commitdiff
QUIC: reset RTT estimator for the new path.
authorSergey Kandaurov <pluknet@nginx.com>
Tue, 12 Dec 2023 16:20:51 +0000 (20:20 +0400)
committerSergey Kandaurov <pluknet@nginx.com>
Tue, 12 Dec 2023 16:20:51 +0000 (20:20 +0400)
RTT is a property of the path, it must be reset on confirming a peer's
ownership of its new address.

src/event/quic/ngx_event_quic.c
src/event/quic/ngx_event_quic_connection.h
src/event/quic/ngx_event_quic_migration.c

index b0cf056c1ee9e07b7064cd651f0aff0415b4ed9a..4687c849e42e5d1a386fdb3bc549f3b078296672 100644 (file)
@@ -260,14 +260,7 @@ ngx_quic_new_connection(ngx_connection_t *c, ngx_quic_conf_t *conf,
 
     ngx_queue_init(&qc->free_frames);
 
-    qc->avg_rtt = NGX_QUIC_INITIAL_RTT;
-    qc->rttvar = NGX_QUIC_INITIAL_RTT / 2;
-    qc->min_rtt = NGX_TIMER_INFINITE;
-    qc->first_rtt = NGX_TIMER_INFINITE;
-
-    /*
-     * qc->latest_rtt = 0
-     */
+    ngx_quic_init_rtt(qc);
 
     qc->pto.log = c->log;
     qc->pto.data = c;
index 4ff0eae4a3734edc43097b98342d967bdf34857a..ae771bcc59ecfe1e5bd1a6fbc48deab47c5d11cf 100644 (file)
@@ -65,6 +65,13 @@ typedef struct ngx_quic_keys_s        ngx_quic_keys_t;
 
 #define ngx_quic_get_socket(c)               ((ngx_quic_socket_t *)((c)->udp))
 
+#define ngx_quic_init_rtt(qc)                                                 \
+    (qc)->avg_rtt = NGX_QUIC_INITIAL_RTT;                                     \
+    (qc)->rttvar = NGX_QUIC_INITIAL_RTT / 2;                                  \
+    (qc)->min_rtt = NGX_TIMER_INFINITE;                                       \
+    (qc)->first_rtt = NGX_TIMER_INFINITE;                                     \
+    (qc)->latest_rtt = 0;
+
 
 typedef enum {
     NGX_QUIC_PATH_IDLE = 0,
index be8e0e304848cfa4655b9920fa21b2043ea20b25..58f3fc545a8d6689994c64c85b71254df933b321 100644 (file)
@@ -181,6 +181,8 @@ valid:
                                            14720));
         qc->congestion.ssthresh = (size_t) -1;
         qc->congestion.recovery_start = ngx_current_msec;
+
+        ngx_quic_init_rtt(qc);
     }
 
     path->validated = 1;