mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2025-11-17 00:41:00 +01:00
Dump variables displayed by TRACE_ENTER() or TRACE_LEAVE() by calls to TRACE_PROTO(). No more variables are displayed by the two former macros. For now on, these information are accessible from proto level. Add new calls to TRACE_PROTO() at important locations in relation whith QUIC transport protocol. When relevant, try to prefix such traces with TX or RX keyword to identify the concerned subpart (transmission or reception) of the protocol. Must be backported to 2.7.
130 lines
4.2 KiB
C
130 lines
4.2 KiB
C
#ifndef _HAPROXY_QUIC_TP_H
|
|
#define _HAPROXY_QUIC_TP_H
|
|
#ifdef USE_QUIC
|
|
#ifndef USE_OPENSSL
|
|
#error "Must define USE_OPENSSL"
|
|
#endif
|
|
|
|
#include <haproxy/chunk.h>
|
|
#include <haproxy/quic_conn-t.h>
|
|
#include <haproxy/quic_tp-t.h>
|
|
|
|
void quic_transport_params_init(struct quic_transport_params *p, int server);
|
|
int quic_transport_params_encode(unsigned char *buf,
|
|
const unsigned char *end,
|
|
struct quic_transport_params *p,
|
|
const struct quic_version *chosen_version,
|
|
int server);
|
|
|
|
int quic_transport_params_store(struct quic_conn *conn, int server,
|
|
const unsigned char *buf,
|
|
const unsigned char *end);
|
|
|
|
int qc_lstnr_params_init(struct quic_conn *qc,
|
|
const struct quic_transport_params *listener_params,
|
|
const unsigned char *stateless_reset_token,
|
|
const unsigned char *dcid, size_t dcidlen,
|
|
const unsigned char *scid, size_t scidlen,
|
|
const struct quic_cid *token_odcid);
|
|
|
|
/* Dump <cid> transport parameter connection ID value if present (non null length).
|
|
* Used only for debugging purposes.
|
|
*/
|
|
static inline void quic_tp_cid_dump(struct buffer *buf,
|
|
const struct tp_cid *cid)
|
|
{
|
|
int i;
|
|
|
|
for (i = 0; i < cid->len; i++)
|
|
chunk_appendf(buf, "%02x", cid->data[i]);
|
|
}
|
|
|
|
static inline void quic_tp_version_info_dump(struct buffer *b,
|
|
const struct tp_version_information *tp, int local)
|
|
{
|
|
if (!tp->chosen)
|
|
return;
|
|
|
|
chunk_appendf(b, " version_information:(chosen=0x%08x", tp->chosen);
|
|
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, ")");
|
|
}
|
|
|
|
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;
|
|
|
|
if (p->original_destination_connection_id.len) {
|
|
chunk_appendf(b, " odcid=");
|
|
quic_tp_cid_dump(b, &p->original_destination_connection_id);
|
|
}
|
|
chunk_appendf(b, " iscid=");
|
|
quic_tp_cid_dump(b, &p->initial_source_connection_id);
|
|
if (p->retry_source_connection_id.len) {
|
|
chunk_appendf(b, " rscid=");
|
|
quic_tp_cid_dump(b, &p->retry_source_connection_id);
|
|
}
|
|
chunk_appendf(b, "\n");
|
|
|
|
chunk_appendf(b, " midle_timeout=%llums", (ull)p->max_idle_timeout);
|
|
chunk_appendf(b, " mudp_payload_sz=%llu", (ull)p->max_udp_payload_size);
|
|
chunk_appendf(b, " ack_delay_exp=%llu", (ull)p->ack_delay_exponent);
|
|
chunk_appendf(b, " mack_delay=%llums", (ull)p->max_ack_delay);
|
|
chunk_appendf(b, " act_cid_limit=%llu\n", (ull)p->active_connection_id_limit);
|
|
|
|
chunk_appendf(b, " md=%llu", (ull)p->initial_max_data);
|
|
chunk_appendf(b, " msd_bidi_l=%llu",
|
|
(ull)p->initial_max_stream_data_bidi_local);
|
|
chunk_appendf(b, " msd_bidi_r=%llu",
|
|
(ull)p->initial_max_stream_data_bidi_remote);
|
|
chunk_appendf(b, " msd_uni=%llu",
|
|
(ull)p->initial_max_stream_data_uni);
|
|
chunk_appendf(b, " ms_bidi=%llu", (ull)p->initial_max_streams_bidi);
|
|
chunk_appendf(b, " ms_uni=%llu\n", (ull)p->initial_max_streams_uni);
|
|
|
|
if (p->disable_active_migration || p->with_stateless_reset_token ||
|
|
p->with_preferred_address) {
|
|
int prev = 0;
|
|
|
|
chunk_appendf(b, " (");
|
|
if (p->disable_active_migration) {
|
|
if (prev)
|
|
chunk_appendf(b, ",");
|
|
prev = 1;
|
|
chunk_appendf(b, "no_act_migr");
|
|
}
|
|
if (p->with_stateless_reset_token) {
|
|
if (prev)
|
|
chunk_appendf(b, ",");
|
|
prev = 1;
|
|
chunk_appendf(b, "stless_rst_tok");
|
|
}
|
|
if (p->with_preferred_address) {
|
|
if (prev)
|
|
chunk_appendf(b, ",");
|
|
prev = 1;
|
|
chunk_appendf(b, "pref_addr");
|
|
}
|
|
chunk_appendf(b, ")");
|
|
}
|
|
|
|
quic_tp_version_info_dump(b, &p->version_information, local);
|
|
}
|
|
|
|
#endif /* USE_QUIC */
|
|
#endif /* _HAPROXY_QUIC_TP_H */
|