From: Frédéric Lécaille Date: Tue, 3 May 2022 08:32:21 +0000 (+0200) Subject: MINOR: quic: Add a debug counter for sendto() errors X-Git-Tag: v2.6-dev10~58 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=8726d633d433e9937315b3a3b898706b1ebdf992;p=thirdparty%2Fhaproxy.git MINOR: quic: Add a debug counter for sendto() errors As we do not have any task to be wake up by the poller after sendto() error, we add an sendto() error counter to the quic_conn struct. Dump its values from qc_send_ppkts(). --- diff --git a/include/haproxy/xprt_quic-t.h b/include/haproxy/xprt_quic-t.h index a983733941..504294f121 100644 --- a/include/haproxy/xprt_quic-t.h +++ b/include/haproxy/xprt_quic-t.h @@ -778,6 +778,7 @@ struct quic_conn { unsigned int nb_pkt_since_cc; const struct qcc_app_ops *app_ops; + unsigned int sendto_err; }; #endif /* USE_QUIC */ diff --git a/src/quic_sock.c b/src/quic_sock.c index a0f8129f49..2cc5a7f033 100644 --- a/src/quic_sock.c +++ b/src/quic_sock.c @@ -341,11 +341,11 @@ size_t qc_snd_buf(struct quic_conn *qc, const struct buffer *buf, size_t count, } else if (ret == 0 || errno == EAGAIN || errno == EWOULDBLOCK || errno == ENOTCONN || errno == EINPROGRESS) { /* TODO must be handle properly. It is justified for UDP ? */ - ABORT_NOW(); + qc->sendto_err++; } else if (errno != EINTR) { /* TODO must be handle properly. It is justified for UDP ? */ - ABORT_NOW(); + qc->sendto_err++; } } diff --git a/src/xprt_quic.c b/src/xprt_quic.c index 524c42d2e1..ffdbe771a7 100644 --- a/src/xprt_quic.c +++ b/src/xprt_quic.c @@ -552,7 +552,7 @@ static void quic_trace(enum trace_level level, uint64_t mask, const struct trace if (mask & QUIC_EV_CONN_SPPKTS) { const struct quic_tx_packet *pkt = a2; - chunk_appendf(&trace_buf, " cwnd=%llu ppif=%llu pif=%llu", + chunk_appendf(&trace_buf, " err=%u cwnd=%llu ppif=%llu pif=%llu", qc->sendto_err, (unsigned long long)qc->path->cwnd, (unsigned long long)qc->path->prep_in_flight, (unsigned long long)qc->path->in_flight); @@ -3180,6 +3180,7 @@ int qc_send_ppkts(struct qring *qr, struct ssl_sock_ctx *ctx) qc = ctx->qc; cbuf = qr->cbuf; + TRACE_ENTER(QUIC_EV_CONN_SPPKTS, qc); while (cb_contig_data(cbuf)) { unsigned char *pos; struct buffer tmpbuf = { }; @@ -3256,6 +3257,8 @@ int qc_send_ppkts(struct qring *qr, struct ssl_sock_ctx *ctx) } } + TRACE_LEAVE(QUIC_EV_CONN_SPPKTS, qc); + return 1; } @@ -4392,6 +4395,7 @@ static struct quic_conn *qc_new_conn(unsigned int version, int ipv4, qc->streams_by_id = EB_ROOT_UNIQUE; qc->stream_buf_count = 0; + qc->sendto_err = 0; TRACE_LEAVE(QUIC_EV_CONN_INIT, qc);