]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
MINOR: trace: add quic_conn argument definition
authorAmaury Denoyelle <adenoyelle@haproxy.com>
Tue, 21 Dec 2021 10:26:02 +0000 (11:26 +0100)
committerAmaury Denoyelle <adenoyelle@haproxy.com>
Tue, 21 Dec 2021 14:53:19 +0000 (15:53 +0100)
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
src/trace.c

index 0ecbaa41470809534e7c9baade1b89f756b0554e..dcdaec3a47641b4ea06310b5396cabeed055f28c 100644 (file)
 #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
index f075787f387a9ff997661f962f734f4197112ff3..15e01487fd6f21931993e9da6a9c35ff8dfa5608 100644 (file)
@@ -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;