QUIC: reset RTT estimator for the new path.

RTT is a property of the path, it must be reset on confirming a peer's
ownership of its new address.
This commit is contained in:
Sergey Kandaurov 2023-12-12 20:20:51 +04:00
parent c1efb3a725
commit 4ee2a48f3f
3 changed files with 10 additions and 8 deletions

View File

@ -260,14 +260,7 @@ ngx_quic_new_connection(ngx_connection_t *c, ngx_quic_conf_t *conf,
ngx_queue_init(&qc->free_frames); ngx_queue_init(&qc->free_frames);
qc->avg_rtt = NGX_QUIC_INITIAL_RTT; ngx_quic_init_rtt(qc);
qc->rttvar = NGX_QUIC_INITIAL_RTT / 2;
qc->min_rtt = NGX_TIMER_INFINITE;
qc->first_rtt = NGX_TIMER_INFINITE;
/*
* qc->latest_rtt = 0
*/
qc->pto.log = c->log; qc->pto.log = c->log;
qc->pto.data = c; qc->pto.data = c;

View 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_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 { typedef enum {
NGX_QUIC_PATH_IDLE = 0, NGX_QUIC_PATH_IDLE = 0,

View File

@ -181,6 +181,8 @@ valid:
14720)); 14720));
qc->congestion.ssthresh = (size_t) -1; qc->congestion.ssthresh = (size_t) -1;
qc->congestion.recovery_start = ngx_current_msec; qc->congestion.recovery_start = ngx_current_msec;
ngx_quic_init_rtt(qc);
} }
path->validated = 1; path->validated = 1;