quic: move ctx_pool into quic_worker_ctx_t struct 92/42992/2
authorDave Wallace <[email protected]>
Wed, 21 May 2025 01:45:46 +0000 (21:45 -0400)
committerFlorin Coras <[email protected]>
Thu, 22 May 2025 15:58:04 +0000 (15:58 +0000)
- Also, update MAINTAINERS file to include quicly
  engine plugin

Type: refactor
Change-Id: I8181df05b08cbd6296599982256d050c63f53b9b
Signed-off-by: Dave Wallace <[email protected]>
MAINTAINERS
src/plugins/quic/quic.c
src/plugins/quic/quic.h
src/plugins/quic_quicly/quic_quicly.c
src/plugins/quic_quicly/quic_quicly.h

index 124a197..01fc7b1 100644 (file)
@@ -672,6 +672,7 @@ M:  Dave Wallace <[email protected]>
 M:     Florin Coras <[email protected]>
 Y:     src/plugins/quic/FEATURE.yaml
 F:     src/plugins/quic/
+F:     src/plugins/quic_quicly/
 
 Plugin - snort plugin
 I:     snort
index 355ed73..1daf78b 100644 (file)
@@ -142,7 +142,8 @@ done:
 static_always_inline quic_ctx_t *
 quic_ctx_get (u32 ctx_index, clib_thread_index_t thread_index)
 {
-  return pool_elt_at_index (quic_main.ctx_pool[thread_index], ctx_index);
+  return pool_elt_at_index (
+    quic_wrk_ctx_get (&quic_main, thread_index)->ctx_pool, ctx_index);
 }
 
 /* Transport proto functions */
@@ -886,8 +887,6 @@ quic_init (vlib_main_t * vm)
       return clib_error_return (0, "failed to attach quic app");
     }
 
-  vec_validate (qm->ctx_pool, qm->num_threads - 1);
-
   qm->app_index = a->app_index;
 
   transport_register_protocol (TRANSPORT_PROTO_QUIC, &quic_proto,
@@ -903,22 +902,28 @@ static void
 quic_engine_init ()
 {
   quic_main_t *qm = &quic_main;
+  quic_worker_ctx_t *wrk_ctx;
+  quic_ctx_t *ctx;
   crypto_context_t *crctx;
   int i;
 
   vec_validate (quic_main.wrk_ctx, qm->num_threads - 1);
-  vec_validate (quic_main.ctx_pool, qm->num_threads - 1);
 
   QUIC_DBG (1, "Initializing quic engine to %s",
            quic_engine_type_str (qm->engine_type));
 
   for (i = 0; i < qm->num_threads; i++)
     {
-      pool_get_aligned_safe (quic_wrk_ctx_get (qm, i)->crypto_ctx_pool, crctx,
+      wrk_ctx = quic_wrk_ctx_get (qm, i);
+      pool_get_aligned_safe (wrk_ctx->crypto_ctx_pool, crctx,
                             CLIB_CACHE_LINE_BYTES);
-      pool_program_safe_realloc (
-       (void **) &quic_wrk_ctx_get (qm, i)->crypto_ctx_pool,
-       QUIC_CRYPTO_CTX_POOL_PER_THREAD_SIZE, CLIB_CACHE_LINE_BYTES);
+      pool_program_safe_realloc ((void **) &wrk_ctx->crypto_ctx_pool,
+                                QUIC_CRYPTO_CTX_POOL_PER_THREAD_SIZE,
+                                CLIB_CACHE_LINE_BYTES);
+      pool_get_aligned_safe (wrk_ctx->ctx_pool, ctx, CLIB_CACHE_LINE_BYTES);
+      pool_program_safe_realloc ((void **) &wrk_ctx->ctx_pool,
+                                QUIC_CTX_POOL_PER_THREAD_SIZE,
+                                CLIB_CACHE_LINE_BYTES);
     }
 
   quic_eng_engine_init (qm);
@@ -1039,7 +1044,7 @@ quic_show_aggregated_stats (vlib_main_t * vm)
   clib_memset (&agg_stats, 0, sizeof (agg_stats));
   for (i = 0; i < num_workers + 1; i++)
     {
-      pool_foreach (ctx, quic_main.ctx_pool[i])
+      pool_foreach (ctx, quic_main.wrk_ctx[i].ctx_pool)
        {
          if (quic_ctx_is_conn (ctx) && ctx->conn)
            {
@@ -1181,7 +1186,7 @@ quic_show_connections_command_fn (vlib_main_t *vm, unformat_input_t *input,
 
   for (int i = 0; i < num_workers + 1; i++)
     {
-      pool_foreach (ctx, quic_main.ctx_pool[i])
+      pool_foreach (ctx, quic_main.wrk_ctx[i].ctx_pool)
        {
          if (quic_ctx_is_stream (ctx) && show_stream)
            vlib_cli_output (vm, "%U", quic_format_stream_ctx, ctx);
index 8f5b250..40c0bc0 100644 (file)
@@ -40,6 +40,7 @@
 #define QUIC_DECRYPT_PACKET_ERROR 2
 
 #define DEFAULT_MAX_PACKETS_PER_KEY         16777216
+#define QUIC_CTX_POOL_PER_THREAD_SIZE       256
 #define QUIC_CRYPTO_CTX_POOL_PER_THREAD_SIZE 256
 
 #if QUIC_DEBUG
@@ -227,6 +228,7 @@ typedef struct quic_worker_ctx_
   CLIB_CACHE_LINE_ALIGN_MARK (cacheline0);
   int64_t time_now;
   tw_timer_wheel_1t_3w_1024sl_ov_t timer_wheel;
+  quic_ctx_t *ctx_pool;
   crypto_context_t *crypto_ctx_pool;
 } quic_worker_ctx_t;
 
@@ -234,7 +236,6 @@ typedef struct quic_main_
 {
   vlib_node_registration_t *quic_input_node;
   u32 app_index;
-  quic_ctx_t **ctx_pool;
   quic_worker_ctx_t *wrk_ctx;
 
   u8 default_crypto_engine; /**< Used if you do connect with CRYPTO_ENGINE_NONE
@@ -264,15 +265,15 @@ quic_ctx_alloc (quic_main_t *qm, clib_thread_index_t thread_index)
 {
   quic_ctx_t *ctx;
 
-  pool_get_aligned_safe (qm->ctx_pool[thread_index], ctx,
+  pool_get_aligned_safe (qm->wrk_ctx[thread_index].ctx_pool, ctx,
                         CLIB_CACHE_LINE_BYTES);
 
   clib_memset (ctx, 0, sizeof (quic_ctx_t));
   ctx->c_thread_index = thread_index;
   ctx->timer_handle = QUIC_TIMER_HANDLE_INVALID;
   QUIC_DBG (3, "Allocated quic_ctx %u on thread %u",
-           ctx - qm->ctx_pool[thread_index], thread_index);
-  return ctx - qm->ctx_pool[thread_index];
+           ctx - qm->wrk_ctx[thread_index].ctx_pool, thread_index);
+  return ctx - qm->wrk_ctx[thread_index].ctx_pool;
 }
 
 static_always_inline void
@@ -283,7 +284,7 @@ quic_ctx_free (quic_main_t *qm, quic_ctx_t *ctx)
   QUIC_ASSERT (ctx->timer_handle == QUIC_TIMER_HANDLE_INVALID);
   if (CLIB_DEBUG)
     clib_memset (ctx, 0xfb, sizeof (*ctx));
-  pool_put (qm->ctx_pool[thread_index], ctx);
+  pool_put (qm->wrk_ctx[thread_index].ctx_pool, ctx);
 }
 
 static_always_inline void
index 1eb0b7d..e621b04 100644 (file)
@@ -710,11 +710,12 @@ static_always_inline quic_ctx_t *
 quic_quicly_get_quic_ctx_if_valid (u32 ctx_index,
                                   clib_thread_index_t thread_index)
 {
-  quic_main_t *qm = quic_quicly_main.qm;
+  quic_worker_ctx_t *wrk_ctx =
+    quic_wrk_ctx_get (quic_quicly_main.qm, thread_index);
 
-  if (pool_is_free_index (qm->ctx_pool[thread_index], ctx_index))
+  if (pool_is_free_index (wrk_ctx->ctx_pool, ctx_index))
     return 0;
-  return pool_elt_at_index (qm->ctx_pool[thread_index], ctx_index);
+  return pool_elt_at_index (wrk_ctx->ctx_pool, ctx_index);
 }
 
 static void
index 5b739c9..516e542 100644 (file)
@@ -74,8 +74,8 @@ extern void quic_quicly_check_quic_session_connected (quic_ctx_t *ctx);
 static_always_inline quic_ctx_t *
 quic_quicly_get_quic_ctx (u32 ctx_index, u32 thread_index)
 {
-  return pool_elt_at_index (quic_quicly_main.qm->ctx_pool[thread_index],
-                           ctx_index);
+  return pool_elt_at_index (
+    quic_wrk_ctx_get (quic_quicly_main.qm, thread_index)->ctx_pool, ctx_index);
 }
 
 static_always_inline quic_session_connected_t