From a56054e438d6ec8cda222592b2ce16e5153d4a7d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20L=C3=A9caille?= Date: Fri, 31 Dec 2021 16:35:28 +0100 Subject: [PATCH] MINOR: quic: Probe several packet number space upon timer expiration When the loss detection timer expires, we SHOULD include new data in our probing packets (RFC 9002 par 6.2.4. Sending Probe Packets). --- src/xprt_quic.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/xprt_quic.c b/src/xprt_quic.c index 3152f27d3..9ab675c1d 100644 --- a/src/xprt_quic.c +++ b/src/xprt_quic.c @@ -3302,7 +3302,7 @@ static struct task *process_timer(struct task *task, void *ctx, unsigned int sta struct ssl_sock_ctx *conn_ctx; struct quic_conn *qc; struct quic_pktns *pktns; - int st; + int i, st; conn_ctx = task->context; qc = conn_ctx->qc; @@ -3338,6 +3338,17 @@ static struct task *process_timer(struct task *task, void *ctx, unsigned int sta if (iel->tls_ctx.rx.flags == QUIC_FL_TLS_SECRETS_SET) iel->pktns->tx.pto_probe = 1; } + + for (i = QUIC_TLS_ENC_LEVEL_INITIAL; i < QUIC_TLS_ENC_LEVEL_MAX; i++) { + int j; + + if (i == QUIC_TLS_ENC_LEVEL_APP && !quic_peer_validated_addr(qc)) + continue; + + for (j = 0; j < qc->els[i].pktns->tx.pto_probe; j++) + qc_prep_fast_retrans(&qc->els[i], qc); + } + tasklet_wakeup(conn_ctx->wait_event.tasklet); qc->path->loss.pto_count++;