]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
MINOR: quic-be: add field for max_udp_payload_size into quic_conn
authorFrederic Lecaille <flecaille@haproxy.com>
Thu, 5 Jun 2025 12:58:50 +0000 (14:58 +0200)
committerAmaury Denoyelle <adenoyelle@haproxy.com>
Wed, 11 Jun 2025 16:37:34 +0000 (18:37 +0200)
Add ->max_udp_payload_size new member to quic_conn struct.
Initialize it from qc_new_conn().
Adapt qc_snd_buf() to use it.

include/haproxy/quic_conn-t.h
src/quic_conn.c
src/quic_sock.c

index dfd24c4c29cb040db24179939222847c238bf43b..cec1203aea1632fa9300be64777187b388576b03 100644 (file)
@@ -308,6 +308,7 @@ struct qcc_app_ops;
             /* Number of received bytes. */            \
             uint64_t rx;                               \
         } bytes;                                       \
+        size_t max_udp_payload;                        \
         /* First DCID used by client on its Initial packet. */                 \
         struct quic_cid odcid;                                                 \
         /* DCID of our endpoint - not updated when a new DCID is used */       \
index d99a59d0efb50ce2599fa19964f6a63d437b2bcd..f8c03489b8a0aedd3c7f2e069b39f203bcdddf87 100644 (file)
@@ -1251,6 +1251,10 @@ struct quic_conn *qc_new_conn(const struct quic_version *qv, int ipv4,
        qc->rx.buf = b_make(qc->rx.buf.area, QUIC_CONN_RX_BUFSZ, 0, 0);
        qc->rx.stream_max_uni = qc->rx.stream_max_bidi = 0;
 
+       qc->max_udp_payload = l ?
+         l->bind_conf->quic_params.max_udp_payload_size :
+         srv->quic_params.max_udp_payload_size;
+
        qc->nb_pkt_for_cc = 1;
        qc->nb_pkt_since_cc = 0;
 
index 7af0bad54c94f8d9e93256eb7396a3b6b1b02ef1..4cd9317cc42e9c9eec8e1f0087f8bcb0c74c6ad0 100644 (file)
@@ -815,10 +815,8 @@ int qc_snd_buf(struct quic_conn *qc, const struct buffer *buf, size_t sz,
 int qc_rcv_buf(struct quic_conn *qc)
 {
        struct sockaddr_storage saddr = {0}, daddr = {0};
-       struct quic_transport_params *params;
        struct quic_dgram *new_dgram = NULL;
        struct buffer buf = BUF_NULL;
-       size_t max_sz;
        unsigned char *dgram_buf;
        struct listener *l;
        ssize_t ret = 0;
@@ -829,22 +827,19 @@ int qc_rcv_buf(struct quic_conn *qc)
        TRACE_ENTER(QUIC_EV_CONN_RCV, qc);
        l = qc->li;
 
-       params = &l->bind_conf->quic_params;
-       max_sz = params->max_udp_payload_size;
-
        do {
                if (!b_alloc(&buf, DB_MUX_RX))
                        break; /* TODO subscribe for memory again available. */
 
                b_reset(&buf);
-               BUG_ON(b_contig_space(&buf) < max_sz);
+               BUG_ON(b_contig_space(&buf) < qc->max_udp_payload);
 
                /* Allocate datagram on first loop or after requeuing. */
                if (!new_dgram && !(new_dgram = pool_alloc(pool_head_quic_dgram)))
                        break; /* TODO subscribe for memory again available. */
 
                dgram_buf = (unsigned char *)b_tail(&buf);
-               ret = quic_recv(qc->fd, dgram_buf, max_sz,
+               ret = quic_recv(qc->fd, dgram_buf, qc->max_udp_payload,
                                (struct sockaddr *)&saddr, sizeof(saddr),
                                (struct sockaddr *)&daddr, sizeof(daddr),
                                get_net_port(&qc->local_addr));