diff --git a/Makefile b/Makefile index 1ccd45d39..2c07969a7 100644 --- a/Makefile +++ b/Makefile @@ -652,7 +652,7 @@ OPTIONS_OBJS += src/quic_rx.o src/mux_quic.o src/h3.o src/quic_tx.o \ src/cfgparse-quic.o src/qmux_trace.o src/qpack-enc.o \ src/qpack-tbl.o src/h3_stats.o src/quic_stats.o \ src/quic_fctl.o src/cbuf.o src/quic_rules.o \ - src/quic_token.o + src/quic_token.o src/quic_pacing.o endif ifneq ($(USE_QUIC_OPENSSL_COMPAT:0=),) diff --git a/include/haproxy/mux_quic-t.h b/include/haproxy/mux_quic-t.h index fcdd38b9b..0e4f6b283 100644 --- a/include/haproxy/mux_quic-t.h +++ b/include/haproxy/mux_quic-t.h @@ -15,6 +15,7 @@ #include #include #include +#include #include #include #include @@ -68,6 +69,7 @@ struct qcc { struct { struct quic_fctl fc; /* stream flow control applied on sending */ uint64_t buf_in_flight; /* sum of currently allocated Tx buffer sizes */ + struct quic_pacer pacer; } tx; uint64_t largest_bidi_r; /* largest remote bidi stream ID opened. */ diff --git a/include/haproxy/quic_conn.h b/include/haproxy/quic_conn.h index ebff29186..31f0c086f 100644 --- a/include/haproxy/quic_conn.h +++ b/include/haproxy/quic_conn.h @@ -45,6 +45,7 @@ #include #include #include +#include #include #include diff --git a/include/haproxy/quic_pacing-t.h b/include/haproxy/quic_pacing-t.h new file mode 100644 index 000000000..fd3074571 --- /dev/null +++ b/include/haproxy/quic_pacing-t.h @@ -0,0 +1,10 @@ +#ifndef _HAPROXY_QUIC_PACING_T_H +#define _HAPROXY_QUIC_PACING_T_H + +#include + +struct quic_pacer { + const struct quic_cc_path *path; +}; + +#endif /* _HAPROXY_QUIC_PACING_T_H */ diff --git a/include/haproxy/quic_pacing.h b/include/haproxy/quic_pacing.h new file mode 100644 index 000000000..eff731598 --- /dev/null +++ b/include/haproxy/quic_pacing.h @@ -0,0 +1,12 @@ +#ifndef _HAPROXY_QUIC_PACING_H +#define _HAPROXY_QUIC_PACING_H + +#include + +static inline void quic_pacing_init(struct quic_pacer *pacer, + const struct quic_cc_path *path) +{ + pacer->path = path; +} + +#endif /* _HAPROXY_QUIC_PACING_H */ diff --git a/src/mux_quic.c b/src/mux_quic.c index 84f92c55b..7b3f705e7 100644 --- a/src/mux_quic.c +++ b/src/mux_quic.c @@ -2875,6 +2875,7 @@ static int qmux_init(struct connection *conn, struct proxy *prx, qcc->rfctl.msd_uni_l = rparams->initial_max_stream_data_uni; qcc->tx.buf_in_flight = 0; + quic_pacing_init(&qcc->tx.pacer, conn->handle.qc->path); if (conn_is_back(conn)) { qcc->next_bidi_l = 0x00; diff --git a/src/quic_pacing.c b/src/quic_pacing.c new file mode 100644 index 000000000..faee5e81c --- /dev/null +++ b/src/quic_pacing.c @@ -0,0 +1 @@ +#include