]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
MINOR: quic: Remove pool_head_quic_be_cc_buf pool
authorFrederic Lecaille <flecaille@haproxy.com>
Thu, 17 Jul 2025 17:23:50 +0000 (19:23 +0200)
committerFrederic Lecaille <flecaille@haproxy.com>
Thu, 17 Jul 2025 17:33:21 +0000 (19:33 +0200)
This patch impacts the QUIC frontends. It reverts this patch

    MINOR: quic-be: add a "CC connection" backend TX buffer pool

which adds <pool_head_quic_be_cc_buf> new pool to allocate CC (connection closed state)
TX buffers with bigger object size than the one for <pool_head_quic_cc_buf>.
Indeed the QUIC backends must be able to send at least 1200 bytes Initial packets.

For now on, both the QUIC frontends and backend use the same pool with
MAX(QUIC_INITIAL_IPV6_MTU, QUIC_INITIAL_IPV4_MTU)(1252 bytes) as object size.

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

index fde45221c7850f9a80612014b0ac9cff50f282a6..a719abe2902b1bf597c2671e608a298dca644030 100644 (file)
@@ -3,8 +3,7 @@
 
 #define QUIC_MIN_CC_PKTSIZE  128
 #define QUIC_DGRAM_HEADLEN  (sizeof(uint16_t) + sizeof(void *))
-#define QUIC_MAX_CC_BUFSIZE (2 * (QUIC_MIN_CC_PKTSIZE + QUIC_DGRAM_HEADLEN))
-#define QUIC_BE_MAX_CC_BUFSIZE MAX(QUIC_INITIAL_IPV6_MTU, QUIC_INITIAL_IPV4_MTU)
+#define QUIC_MAX_CC_BUFSIZE MAX(QUIC_INITIAL_IPV6_MTU, QUIC_INITIAL_IPV4_MTU)
 
 /* Sendmsg input buffer cannot be bigger than 65535 bytes. This comes from UDP
  * header which uses a 2-bytes length field. QUIC datagrams are limited to 1252
@@ -22,7 +21,6 @@
 
 extern struct pool_head *pool_head_quic_tx_packet;
 extern struct pool_head *pool_head_quic_cc_buf;
-extern struct pool_head *pool_head_quic_be_cc_buf;
 
 /* Flag a sent packet as being an ack-eliciting packet. */
 #define QUIC_FL_TX_PACKET_ACK_ELICITING (1UL << 0)
index cd5f451e7a3a45166c56008fd141b1675eccf5b0..ff61c2029314ea010a6d5beb882ebbc77ec6850e 100644 (file)
@@ -651,12 +651,7 @@ static void quic_release_cc_conn(struct quic_conn_closed *cc_qc)
        free_quic_conn_cids(qc);
        pool_free(pool_head_quic_cids, cc_qc->cids);
        cc_qc->cids = NULL;
-       if (objt_listener(cc_qc->target)) {
-               pool_free(pool_head_quic_cc_buf, cc_qc->cc_buf_area);
-       }
-       else {
-               pool_free(pool_head_quic_be_cc_buf, cc_qc->cc_buf_area);
-       }
+       pool_free(pool_head_quic_cc_buf, cc_qc->cc_buf_area);
        cc_qc->cc_buf_area = NULL;
        /* free the SSL sock context */
        pool_free(pool_head_quic_conn_closed, cc_qc);
@@ -1519,10 +1514,7 @@ int quic_conn_release(struct quic_conn *qc)
                free_quic_conn_cids(qc);
                pool_free(pool_head_quic_cids, qc->cids);
                qc->cids = NULL;
-               if (objt_listener(qc->target))
-                       pool_free(pool_head_quic_cc_buf, qc->tx.cc_buf_area);
-               else
-                       pool_free(pool_head_quic_be_cc_buf, qc->tx.cc_buf_area);
+               pool_free(pool_head_quic_cc_buf, qc->tx.cc_buf_area);
                qc->tx.cc_buf_area = NULL;
                ret = 1;
        }
index ec9aba445fbc65c1c0d4dfbc247be2673c2e93ba..27420260d723be9d58132a82c23ce6b9caf29ea7 100644 (file)
@@ -33,7 +33,6 @@
 
 DECLARE_POOL(pool_head_quic_tx_packet, "quic_tx_packet", sizeof(struct quic_tx_packet));
 DECLARE_POOL(pool_head_quic_cc_buf, "quic_cc_buf", QUIC_MAX_CC_BUFSIZE);
-DECLARE_POOL(pool_head_quic_be_cc_buf, "quic_be_cc_buf", QUIC_BE_MAX_CC_BUFSIZE);
 
 static struct quic_tx_packet *qc_build_pkt(unsigned char **pos, const unsigned char *buf_end,
                                            struct quic_enc_level *qel, struct quic_tls_ctx *ctx,
@@ -130,28 +129,16 @@ struct buffer *qc_get_txb(struct quic_conn *qc)
        struct buffer *buf;
 
        if (qc->flags & QUIC_FL_CONN_IMMEDIATE_CLOSE) {
-               struct pool_head *ph;
-               size_t psz;
-
-               if (objt_listener(qc->target)) {
-                       ph = pool_head_quic_cc_buf;
-                       psz = QUIC_MAX_CC_BUFSIZE;
-               }
-               else {
-                       ph = pool_head_quic_be_cc_buf;
-                       psz = QUIC_BE_MAX_CC_BUFSIZE;
-               }
-
                TRACE_PROTO("Immediate close required", QUIC_EV_CONN_PHPKTS, qc);
                buf = &qc->tx.cc_buf;
                if (b_is_null(buf)) {
-                       qc->tx.cc_buf_area = pool_alloc(ph);
+                       qc->tx.cc_buf_area = pool_alloc(pool_head_quic_cc_buf);
                        if (!qc->tx.cc_buf_area)
                                goto err;
                }
 
                /* In every case, initialize ->tx.cc_buf */
-               qc->tx.cc_buf = b_make(qc->tx.cc_buf_area, psz, 0, 0);
+               qc->tx.cc_buf = b_make(qc->tx.cc_buf_area, QUIC_MAX_CC_BUFSIZE, 0, 0);
        }
        else {
                buf = qc_txb_alloc(qc);