From baea96400f40964c6a742bd7cf8f520ddb4238af Mon Sep 17 00:00:00 2001 From: Amaury Denoyelle Date: Tue, 21 Dec 2021 11:26:02 +0100 Subject: [PATCH] MINOR: trace: add quic_conn argument definition Prepare trace support for quic_conn instances as argument. This will be used by the xprt-quic layer in replacement of the connection. This commit is part of the rearchitecture of xprt-quic layers and the separation between xprt and connection instances. --- include/haproxy/trace-t.h | 21 +++++++++++++++++++++ src/trace.c | 11 +++++++++++ 2 files changed, 32 insertions(+) diff --git a/include/haproxy/trace-t.h b/include/haproxy/trace-t.h index 0ecbaa4147..dcdaec3a47 100644 --- a/include/haproxy/trace-t.h +++ b/include/haproxy/trace-t.h @@ -43,36 +43,54 @@ #define TRC_ARG_SESS (1 << 1) #define TRC_ARG_STRM (1 << 2) #define TRC_ARG_CHK (1 << 3) +#ifdef USE_QUIC +#define TRC_ARG_QCON (1 << 4) +#endif #define TRC_ARG1_PRIV (TRC_ARG_PRIV << 0) #define TRC_ARG1_CONN (TRC_ARG_CONN << 0) #define TRC_ARG1_SESS (TRC_ARG_SESS << 0) #define TRC_ARG1_STRM (TRC_ARG_STRM << 0) #define TRC_ARG1_CHK (TRC_ARG_CHK << 0) +#ifdef USE_QUIC +#define TRC_ARG1_QCON (TRC_ARG_QCON << 0) +#endif #define TRC_ARG2_PRIV (TRC_ARG_PRIV << 8) #define TRC_ARG2_CONN (TRC_ARG_CONN << 8) #define TRC_ARG2_SESS (TRC_ARG_SESS << 8) #define TRC_ARG2_STRM (TRC_ARG_STRM << 8) #define TRC_ARG2_CHK (TRC_ARG_CHK << 8) +#ifdef USE_QUIC +#define TRC_ARG2_QCON (TRC_ARG_QCON << 8) +#endif #define TRC_ARG3_PRIV (TRC_ARG_PRIV << 16) #define TRC_ARG3_CONN (TRC_ARG_CONN << 16) #define TRC_ARG3_SESS (TRC_ARG_SESS << 16) #define TRC_ARG3_STRM (TRC_ARG_STRM << 16) #define TRC_ARG3_CHK (TRC_ARG_CHK << 16) +#ifdef USE_QUIC +#define TRC_ARG3_QCON (TRC_ARG_QCON << 16) +#endif #define TRC_ARG4_PRIV (TRC_ARG_PRIV << 24) #define TRC_ARG4_CONN (TRC_ARG_CONN << 24) #define TRC_ARG4_SESS (TRC_ARG_SESS << 24) #define TRC_ARG4_STRM (TRC_ARG_STRM << 24) #define TRC_ARG4_CHK (TRC_ARG_CHK << 24) +#ifdef USE_QUIC +#define TRC_ARG4_QCON (TRC_ARG_QCON << 24) +#endif /* usable to detect the presence of any arg of the desired type */ #define TRC_ARGS_CONN (TRC_ARG_CONN * 0x01010101U) #define TRC_ARGS_SESS (TRC_ARG_SESS * 0x01010101U) #define TRC_ARGS_STRM (TRC_ARG_STRM * 0x01010101U) #define TRC_ARGS_CHK (TRC_ARG_CHK * 0x01010101U) +#ifdef USE_QUIC +#define TRC_ARGS_QCON (TRC_ARG_QCON * 0x01010101U) +#endif enum trace_state { @@ -104,6 +122,9 @@ enum trace_lockon { TRACE_LOCKON_SESSION, // lock on the session that started the trace TRACE_LOCKON_STREAM, // lock on the stream that started the trace TRACE_LOCKON_CHECK, // lock on the check that started the trace +#ifdef USE_QUIC + TRACE_LOCKON_QCON, // lock on the QUIC connection that started the trace +#endif TRACE_LOCKON_ARG1, // lock on arg1, totally source-dependent TRACE_LOCKON_ARG2, // lock on arg2, totally source-dependent TRACE_LOCKON_ARG3, // lock on arg3, totally source-dependent diff --git a/src/trace.c b/src/trace.c index f075787f38..15e01487fd 100644 --- a/src/trace.c +++ b/src/trace.c @@ -86,6 +86,9 @@ void __trace(enum trace_level level, uint64_t mask, struct trace_source *src, const struct stream *strm = NULL; const struct connection *conn = NULL; const struct check *check = NULL; +#ifdef USE_QUIC + const struct quic_conn *qc = NULL; +#endif const void *lockon_ptr = NULL; struct ist ist_func = ist(func); char tnum[4]; @@ -112,6 +115,11 @@ void __trace(enum trace_level level, uint64_t mask, struct trace_source *src, if (src->arg_def & TRC_ARGS_CHK) check = trace_pick_arg(src->arg_def & TRC_ARGS_CHK, a1, a2, a3, a4); +#ifdef USE_QUIC + if (src->arg_def & TRC_ARGS_QCON) + qc = trace_pick_arg(src->arg_def & TRC_ARGS_QCON, a1, a2, a3, a4); +#endif + if (!sess && strm) sess = strm->sess; else if (!sess && conn) @@ -171,6 +179,9 @@ void __trace(enum trace_level level, uint64_t mask, struct trace_source *src, case TRACE_LOCKON_STREAM: lockon_ptr = strm; break; case TRACE_LOCKON_CHECK: lockon_ptr = check; break; case TRACE_LOCKON_THREAD: lockon_ptr = ti; break; +#ifdef USE_QUIC + case TRACE_LOCKON_QCON: lockon_ptr = qc; break; +#endif case TRACE_LOCKON_ARG1: lockon_ptr = a1; break; case TRACE_LOCKON_ARG2: lockon_ptr = a2; break; case TRACE_LOCKON_ARG3: lockon_ptr = a3; break;