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().
This commit is contained in:
Frédéric Lécaille 2022-05-03 10:32:21 +02:00
parent cfabb3526b
commit 8726d633d4
3 changed files with 8 additions and 3 deletions

View File

@ -778,6 +778,7 @@ struct quic_conn {
unsigned int nb_pkt_since_cc; unsigned int nb_pkt_since_cc;
const struct qcc_app_ops *app_ops; const struct qcc_app_ops *app_ops;
unsigned int sendto_err;
}; };
#endif /* USE_QUIC */ #endif /* USE_QUIC */

View File

@ -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) { else if (ret == 0 || errno == EAGAIN || errno == EWOULDBLOCK || errno == ENOTCONN || errno == EINPROGRESS) {
/* TODO must be handle properly. It is justified for UDP ? */ /* TODO must be handle properly. It is justified for UDP ? */
ABORT_NOW(); qc->sendto_err++;
} }
else if (errno != EINTR) { else if (errno != EINTR) {
/* TODO must be handle properly. It is justified for UDP ? */ /* TODO must be handle properly. It is justified for UDP ? */
ABORT_NOW(); qc->sendto_err++;
} }
} }

View File

@ -552,7 +552,7 @@ static void quic_trace(enum trace_level level, uint64_t mask, const struct trace
if (mask & QUIC_EV_CONN_SPPKTS) { if (mask & QUIC_EV_CONN_SPPKTS) {
const struct quic_tx_packet *pkt = a2; 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->cwnd,
(unsigned long long)qc->path->prep_in_flight, (unsigned long long)qc->path->prep_in_flight,
(unsigned long long)qc->path->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; qc = ctx->qc;
cbuf = qr->cbuf; cbuf = qr->cbuf;
TRACE_ENTER(QUIC_EV_CONN_SPPKTS, qc);
while (cb_contig_data(cbuf)) { while (cb_contig_data(cbuf)) {
unsigned char *pos; unsigned char *pos;
struct buffer tmpbuf = { }; 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; 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->streams_by_id = EB_ROOT_UNIQUE;
qc->stream_buf_count = 0; qc->stream_buf_count = 0;
qc->sendto_err = 0;
TRACE_LEAVE(QUIC_EV_CONN_INIT, qc); TRACE_LEAVE(QUIC_EV_CONN_INIT, qc);