MINOR: mux-quic: refactor transport parameters init
Since QUIC accept handling has been improved, the MUX is initialized
after the handshake completion. Thus its safe to access transport
parameters in qc_init via the quic_conn.
Remove quic_mux_transport_params_update which was called by the
transport for the MUX. This improves the architecture by removing a
direct call from the transport to the MUX.
The deleted function body is not transfered to qc_init because this part
will change heavily in the near future when implementing the
flow-control.
diff --git a/include/haproxy/mux_quic.h b/include/haproxy/mux_quic.h
index 0b957e9..4e588bc 100644
--- a/include/haproxy/mux_quic.h
+++ b/include/haproxy/mux_quic.h
@@ -8,8 +8,8 @@
#include <haproxy/api.h>
#include <haproxy/mux_quic-t.h>
+#include <haproxy/xprt_quic-t.h>
-void quic_mux_transport_params_update(struct qcc *qcc);
struct qcs *qcs_new(struct qcc *qcc, uint64_t id, enum qcs_type type);
void uni_qcs_free(struct qcs *qcs);
diff --git a/src/mux_quic.c b/src/mux_quic.c
index 3ae9193..c16e3d2 100644
--- a/src/mux_quic.c
+++ b/src/mux_quic.c
@@ -13,26 +13,6 @@
DECLARE_POOL(pool_head_qcc, "qcc", sizeof(struct qcc));
DECLARE_POOL(pool_head_qcs, "qcs", sizeof(struct qcs));
-void quic_mux_transport_params_update(struct qcc *qcc)
-{
- struct quic_transport_params *clt_params;
-
- /* Client parameters, params used to TX. */
- clt_params = &qcc->conn->qc->tx.params;
-
- qcc->tx.max_data = clt_params->initial_max_data;
- /* Client initiated streams must respect the server flow control. */
- qcc->strms[QCS_CLT_BIDI].rx.max_data = clt_params->initial_max_stream_data_bidi_local;
- qcc->strms[QCS_CLT_UNI].rx.max_data = clt_params->initial_max_stream_data_uni;
-
- /* Server initiated streams must respect the server flow control. */
- qcc->strms[QCS_SRV_BIDI].max_streams = clt_params->initial_max_streams_bidi;
- qcc->strms[QCS_SRV_BIDI].tx.max_data = clt_params->initial_max_stream_data_bidi_remote;
-
- qcc->strms[QCS_SRV_UNI].max_streams = clt_params->initial_max_streams_uni;
- qcc->strms[QCS_SRV_UNI].tx.max_data = clt_params->initial_max_stream_data_uni;
-}
-
/* Allocate a new QUIC streams with id <id> and type <type>. */
struct qcs *qcs_new(struct qcc *qcc, uint64_t id, enum qcs_type type)
{
@@ -532,7 +512,7 @@
struct session *sess, struct buffer *input)
{
struct qcc *qcc;
- struct quic_transport_params *srv_params;
+ struct quic_transport_params *lparams;
qcc = pool_alloc(pool_head_qcc);
if (!qcc)
@@ -547,35 +527,35 @@
qcc->streams_by_id = EB_ROOT_UNIQUE;
/* Server parameters, params used for RX flow control. */
- srv_params = &conn->qc->rx.params;
+ lparams = &conn->qc->rx.params;
- qcc->rx.max_data = srv_params->initial_max_data;
+ qcc->rx.max_data = lparams->initial_max_data;
qcc->tx.max_data = 0;
/* Client initiated streams must respect the server flow control. */
- qcc->strms[QCS_CLT_BIDI].max_streams = srv_params->initial_max_streams_bidi;
+ qcc->strms[QCS_CLT_BIDI].max_streams = lparams->initial_max_streams_bidi;
qcc->strms[QCS_CLT_BIDI].nb_streams = 0;
qcc->strms[QCS_CLT_BIDI].largest_id = -1;
qcc->strms[QCS_CLT_BIDI].rx.max_data = 0;
- qcc->strms[QCS_CLT_BIDI].tx.max_data = srv_params->initial_max_stream_data_bidi_remote;
+ qcc->strms[QCS_CLT_BIDI].tx.max_data = lparams->initial_max_stream_data_bidi_remote;
- qcc->strms[QCS_CLT_UNI].max_streams = srv_params->initial_max_streams_uni;
+ qcc->strms[QCS_CLT_UNI].max_streams = lparams->initial_max_streams_uni;
qcc->strms[QCS_CLT_UNI].nb_streams = 0;
qcc->strms[QCS_CLT_UNI].largest_id = -1;
qcc->strms[QCS_CLT_UNI].rx.max_data = 0;
- qcc->strms[QCS_CLT_UNI].tx.max_data = srv_params->initial_max_stream_data_uni;
+ qcc->strms[QCS_CLT_UNI].tx.max_data = lparams->initial_max_stream_data_uni;
/* Server initiated streams must respect the server flow control. */
qcc->strms[QCS_SRV_BIDI].max_streams = 0;
qcc->strms[QCS_SRV_BIDI].nb_streams = 0;
qcc->strms[QCS_SRV_BIDI].largest_id = -1;
- qcc->strms[QCS_SRV_BIDI].rx.max_data = srv_params->initial_max_stream_data_bidi_local;
+ qcc->strms[QCS_SRV_BIDI].rx.max_data = lparams->initial_max_stream_data_bidi_local;
qcc->strms[QCS_SRV_BIDI].tx.max_data = 0;
qcc->strms[QCS_SRV_UNI].max_streams = 0;
qcc->strms[QCS_SRV_UNI].nb_streams = 0;
qcc->strms[QCS_SRV_UNI].largest_id = -1;
- qcc->strms[QCS_SRV_UNI].rx.max_data = srv_params->initial_max_stream_data_uni;
+ qcc->strms[QCS_SRV_UNI].rx.max_data = lparams->initial_max_stream_data_uni;
qcc->strms[QCS_SRV_UNI].tx.max_data = 0;
qcc->wait_event.tasklet = tasklet_new();
diff --git a/src/xprt_quic.c b/src/xprt_quic.c
index ddbfe97..4849a23 100644
--- a/src/xprt_quic.c
+++ b/src/xprt_quic.c
@@ -5330,7 +5330,6 @@
struct ssl_sock_ctx *qctx = ctx;
qc = conn->qc;
- quic_mux_transport_params_update(qc->qcc);
if (qcc_install_app_ops(qc->qcc, qc->app_ops)) {
TRACE_PROTO("Cannot install app layer", QUIC_EV_CONN_LPKT, qc);
return 0;