]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
MINOR: quic: Dump version_information transport parameter
authorFrédéric Lécaille <flecaille@haproxy.com>
Mon, 20 Jun 2022 17:39:26 +0000 (19:39 +0200)
committerAmaury Denoyelle <adenoyelle@haproxy.com>
Tue, 21 Jun 2022 09:07:39 +0000 (11:07 +0200)
Implement quic_tp_version_info_dump() to dump such a transport parameter (only remote).
Call it from quic_transport_params_dump() which dump all the transport parameters.

Can be backported to 2.6 as it's useful for debugging.

include/haproxy/quic_tp-t.h
include/haproxy/quic_tp.h
src/quic_tp.c
src/xprt_quic.c

index 5180dfcd833f8b16842cf0be85df47ec1485bd4d..77b05e32a6d914cf1c9bc4f19b766cb9ea531867 100644 (file)
@@ -29,6 +29,7 @@ struct tp_preferred_address {
 struct tp_version_information {
        uint32_t choosen;
        const uint32_t *others;
+       size_t nb_others;
        const struct quic_version *negotiated_version;
 };
 
index b96c9f9c7042000be178efc77fb6074fad144cd2..192460217bb31f1c321c69cfa823b66115484347 100644 (file)
@@ -43,9 +43,35 @@ static inline void quic_tp_cid_dump(struct buffer *buf,
        chunk_appendf(buf, ")");
 }
 
+static inline void quic_tp_version_info_dump(struct buffer *b,
+                                             const struct tp_version_information *tp, int local)
+{
+       if (!tp->choosen)
+               return;
+
+       chunk_appendf(b, "\n\tversion_information:(choosen=0x%08x", tp->choosen);
+       if (tp->nb_others) {
+               int i = 0;
+               const uint32_t *ver;
+               chunk_appendf(b, ",others=");
+               for (ver = tp->others; i < tp->nb_others; i++, ver++) {
+                       if (i != 0)
+                               chunk_appendf(b, ",");
+                       if (local)
+                               chunk_appendf(b, "0x%08x", *ver);
+                       else
+                               chunk_appendf(b, "0x%08x", ntohl(*ver));
+               }
+               chunk_appendf(b, ")\n");
+       }
+}
+
 static inline void quic_transport_params_dump(struct buffer *b,
+                                              const struct quic_conn *qc,
                                               const struct quic_transport_params *p)
 {
+       int local = p == &qc->rx.params;
+
        chunk_appendf(b, "\n\toriginal_destination_connection_id:");
        quic_tp_cid_dump(b, &p->original_destination_connection_id);
        chunk_appendf(b, "\n\tinitial_source_connection_id:");
@@ -70,6 +96,7 @@ static inline void quic_transport_params_dump(struct buffer *b,
        chunk_appendf(b, "\n\tdisable_active_migration? %s", p->disable_active_migration ? "yes" : "no");
        chunk_appendf(b, "\n\twith_stateless_reset_token? %s", p->with_stateless_reset_token ? "yes" : "no");
        chunk_appendf(b, "\n\twith_preferred_address? %s", p->with_preferred_address ? "yes" : "no");
+       quic_tp_version_info_dump(b, &p->version_information, local);
 }
 
 #endif /* USE_QUIC */
index f7f8d7ddd622b5cd276da6f97ca90ee303e141ce..f83ed86811d4bcf1c68d6215a78a0ea9117dee1f 100644 (file)
@@ -191,6 +191,7 @@ static int quic_transport_param_dec_version_info(struct tp_version_information *
                /* TODO: not supported */
                return 0;
 
+       tp->nb_others = (end - (const unsigned char *)tp->others) / sizeof *tp->others;
        for (ver = tp->others; ver < (const uint32_t *)end; ver++) {
                if (!tp->negotiated_version) {
                        int i;
index 7c314346058e10f933200772343aa001aeb48d1d..5fae59b3bee9bfbe07436771797d3fd49749f33b 100644 (file)
@@ -264,7 +264,7 @@ static void quic_trace(enum trace_level level, uint64_t mask, const struct trace
 
                if (mask & QUIC_EV_TRANSP_PARAMS) {
                        const struct quic_transport_params *p = a2;
-                       quic_transport_params_dump(&trace_buf, p);
+                       quic_transport_params_dump(&trace_buf, qc, p);
                }
 
                if (mask & QUIC_EV_CONN_ADDDATA) {