mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2025-08-09 16:47:18 +02:00
BUG/MINOR: quic: wake up MUX on probing only for 01RTT
On PTO probe timeout expiration, a probe packet must be emitted. quic_pto_pktns() is used to determine for which packet space the timer has expired. However, if MUX is already subscribed for sending, it is woken up without checking first if this happened for the 01RTT packet space. It is unsure that this is really a bug as in most cases, MUX is established only after Initial and Handshake packet spaces are removed. However, the situation is not se clear when 0-RTT is used. For this reason, adjust the code to explicitely check for the 01RTT packet space before waking up the MUX layer. This should be backported up to 2.6. Note that qc_notify_send() does not exists in 2.6 so it should be replaced by the explicit block checking (qc->subs && qc->subs->events & SUB_RETRY_SEND).
This commit is contained in:
parent
465a6c8506
commit
2a19b6e564
@ -5158,40 +5158,38 @@ struct task *qc_process_timer(struct task *task, void *ctx, unsigned int state)
|
||||
|
||||
if (qc->path->in_flight) {
|
||||
pktns = quic_pto_pktns(qc, qc->state >= QUIC_HS_ST_CONFIRMED, NULL);
|
||||
if (qc_notify_send(qc)) {
|
||||
pktns->tx.pto_probe = QUIC_MAX_NB_PTO_DGRAMS;
|
||||
if (pktns == &qc->pktns[QUIC_TLS_PKTNS_INITIAL]) {
|
||||
if (qc_may_probe_ipktns(qc)) {
|
||||
qc->flags |= QUIC_FL_CONN_RETRANS_NEEDED;
|
||||
pktns->flags |= QUIC_FL_PKTNS_PROBE_NEEDED;
|
||||
TRACE_STATE("needs to probe Initial packet number space", QUIC_EV_CONN_TXPKT, qc);
|
||||
}
|
||||
else {
|
||||
TRACE_STATE("Cannot probe Initial packet number space", QUIC_EV_CONN_TXPKT, qc);
|
||||
}
|
||||
if (qc->pktns[QUIC_TLS_PKTNS_HANDSHAKE].tx.in_flight) {
|
||||
qc->flags |= QUIC_FL_CONN_RETRANS_NEEDED;
|
||||
qc->pktns[QUIC_TLS_PKTNS_HANDSHAKE].flags |= QUIC_FL_PKTNS_PROBE_NEEDED;
|
||||
TRACE_STATE("needs to probe Handshake packet number space", QUIC_EV_CONN_TXPKT, qc);
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (pktns == &qc->pktns[QUIC_TLS_PKTNS_INITIAL]) {
|
||||
else if (pktns == &qc->pktns[QUIC_TLS_PKTNS_HANDSHAKE]) {
|
||||
TRACE_STATE("needs to probe Handshake packet number space", QUIC_EV_CONN_TXPKT, qc);
|
||||
qc->flags |= QUIC_FL_CONN_RETRANS_NEEDED;
|
||||
pktns->flags |= QUIC_FL_PKTNS_PROBE_NEEDED;
|
||||
if (qc->pktns[QUIC_TLS_PKTNS_INITIAL].tx.in_flight) {
|
||||
if (qc_may_probe_ipktns(qc)) {
|
||||
qc->flags |= QUIC_FL_CONN_RETRANS_NEEDED;
|
||||
pktns->flags |= QUIC_FL_PKTNS_PROBE_NEEDED;
|
||||
qc->pktns[QUIC_TLS_PKTNS_INITIAL].flags |= QUIC_FL_PKTNS_PROBE_NEEDED;
|
||||
TRACE_STATE("needs to probe Initial packet number space", QUIC_EV_CONN_TXPKT, qc);
|
||||
}
|
||||
else {
|
||||
TRACE_STATE("Cannot probe Initial packet number space", QUIC_EV_CONN_TXPKT, qc);
|
||||
}
|
||||
if (qc->pktns[QUIC_TLS_PKTNS_HANDSHAKE].tx.in_flight) {
|
||||
qc->flags |= QUIC_FL_CONN_RETRANS_NEEDED;
|
||||
qc->pktns[QUIC_TLS_PKTNS_HANDSHAKE].flags |= QUIC_FL_PKTNS_PROBE_NEEDED;
|
||||
TRACE_STATE("needs to probe Handshake packet number space", QUIC_EV_CONN_TXPKT, qc);
|
||||
}
|
||||
}
|
||||
else if (pktns == &qc->pktns[QUIC_TLS_PKTNS_HANDSHAKE]) {
|
||||
TRACE_STATE("needs to probe Handshake packet number space", QUIC_EV_CONN_TXPKT, qc);
|
||||
qc->flags |= QUIC_FL_CONN_RETRANS_NEEDED;
|
||||
pktns->flags |= QUIC_FL_PKTNS_PROBE_NEEDED;
|
||||
if (qc->pktns[QUIC_TLS_PKTNS_INITIAL].tx.in_flight) {
|
||||
if (qc_may_probe_ipktns(qc)) {
|
||||
qc->pktns[QUIC_TLS_PKTNS_INITIAL].flags |= QUIC_FL_PKTNS_PROBE_NEEDED;
|
||||
TRACE_STATE("needs to probe Initial packet number space", QUIC_EV_CONN_TXPKT, qc);
|
||||
}
|
||||
else {
|
||||
TRACE_STATE("Cannot probe Initial packet number space", QUIC_EV_CONN_TXPKT, qc);
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (pktns == &qc->pktns[QUIC_TLS_PKTNS_01RTT]) {
|
||||
}
|
||||
else if (pktns == &qc->pktns[QUIC_TLS_PKTNS_01RTT]) {
|
||||
/* Wake up upper layer if waiting to send new data. */
|
||||
if (!qc_notify_send(qc)) {
|
||||
TRACE_STATE("needs to probe 01RTT packet number space", QUIC_EV_CONN_TXPKT, qc);
|
||||
qc->flags |= QUIC_FL_CONN_RETRANS_NEEDED;
|
||||
pktns->flags |= QUIC_FL_PKTNS_PROBE_NEEDED;
|
||||
|
Loading…
Reference in New Issue
Block a user