mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2025-09-22 06:11:32 +02:00
xprt_quic module was too large and did not reflect the true architecture by contrast to the other protocols in haproxy. Extract code related to XPRT layer and keep it under xprt_quic module. This code should only contains a simple API to communicate between QUIC lower layer and connection/MUX. The vast majority of the code has been moved into a new module named quic_conn. This module is responsible to the implementation of QUIC lower layer. Conceptually, it overlaps with TCP kernel implementation when comparing QUIC and HTTP1/2 stacks of haproxy. This should be backported up to 2.6.
104 lines
4.2 KiB
C
104 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 *choosen_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;
|
|
|
|
chunk_appendf(buf, "(%d", cid->len);
|
|
if (cid->len)
|
|
chunk_appendf(buf, ",");
|
|
for (i = 0; i < cid->len; i++)
|
|
chunk_appendf(buf, "%02x", cid->data[i]);
|
|
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:");
|
|
quic_tp_cid_dump(b, &p->initial_source_connection_id);
|
|
chunk_appendf(b, "\n\tretry_source_connection_id:");
|
|
quic_tp_cid_dump(b, &p->retry_source_connection_id);
|
|
|
|
chunk_appendf(b, "\n\tmax_idle_timeout=%llu", (ull)p->max_idle_timeout);
|
|
chunk_appendf(b, "\n\tmax_udp_payload_size=%llu", (ull)p->max_udp_payload_size);
|
|
chunk_appendf(b, "\n\tinitial_max_data=%llu", (ull)p->initial_max_data);
|
|
chunk_appendf(b, "\n\tinitial_max_stream_data_bidi_local=%llu",
|
|
(ull)p->initial_max_stream_data_bidi_local);
|
|
chunk_appendf(b, "\n\tinitial_max_stream_data_bidi_remote=%llu",
|
|
(ull)p->initial_max_stream_data_bidi_remote);
|
|
chunk_appendf(b, "\n\tinitial_max_stream_data_uni=%llu",
|
|
(ull)p->initial_max_stream_data_uni);
|
|
chunk_appendf(b, "\n\tinitial_max_streams_bidi=%llu", (ull)p->initial_max_streams_bidi);
|
|
chunk_appendf(b, "\n\tinitial_max_streams_uni=%llu", (ull)p->initial_max_streams_uni);
|
|
chunk_appendf(b, "\n\tack_delay_exponent=%llu", (ull)p->ack_delay_exponent);
|
|
chunk_appendf(b, "\n\tmax_ack_delay=%llu", (ull)p->max_ack_delay);
|
|
chunk_appendf(b, "\n\tactive_connection_id_limit=%llu", (ull)p->active_connection_id_limit);
|
|
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 */
|
|
#endif /* _HAPROXY_QUIC_TP_H */
|