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 */
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,
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);
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)
{
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);
#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
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;
{
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
{
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
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
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