From b2e8194c0791f78e5c4db0e4726a094718caa43e Mon Sep 17 00:00:00 2001 From: Matus Fabian Date: Fri, 24 Oct 2025 10:13:44 -0400 Subject: [PATCH] quic: deprecate open stream via vnet_connect Type: improvement Change-Id: Ia33063774e4c33997e34434061d0191fc642016a Signed-off-by: Matus Fabian --- src/plugins/quic/quic.c | 146 ++---------------------------------------------- 1 file changed, 6 insertions(+), 140 deletions(-) diff --git a/src/plugins/quic/quic.c b/src/plugins/quic/quic.c index d37de7fe00c..259ee7b9d9d 100644 --- a/src/plugins/quic/quic.c +++ b/src/plugins/quic/quic.c @@ -162,122 +162,6 @@ quic_ctx_get (u32 ctx_index, clib_thread_index_t thread_index) } /* Transport proto functions */ -static int -quic_connect_stream (session_t * quic_session, session_endpoint_cfg_t * sep) -{ - quic_main_t *qm = &quic_main; - uint64_t quic_session_handle; - session_t *stream_session; - quic_stream_data_t *stream_data; - void *stream; - void *conn; - app_worker_t *app_wrk; - quic_ctx_t *qctx, *sctx; - u32 sctx_index; - u8 is_unidir; - int rv; - - /* Find base session to which the user want to attach a stream */ - quic_session_handle = session_handle (quic_session); - QUIC_DBG (2, "Connect stream: session 0x%lx", quic_session_handle); - - if (session_type_transport_proto (quic_session->session_type) != - TRANSPORT_PROTO_QUIC) - { - QUIC_ERR ("received incompatible session"); - return -1; - } - - app_wrk = app_worker_get_if_valid (quic_session->app_wrk_index); - if (!app_wrk) - { - QUIC_ERR ("Invalid app worker :("); - return -1; - } - - sctx_index = quic_ctx_alloc ( - qm, quic_session->thread_index); /* Allocate before we get pointers */ - sctx = quic_ctx_get (sctx_index, quic_session->thread_index); - qctx = - quic_ctx_get (quic_session->connection_index, quic_session->thread_index); - if (quic_ctx_is_stream (qctx)) - { - QUIC_ERR ("session is a stream"); - quic_ctx_free (qm, sctx); - return -1; - } - - sctx->parent_app_wrk_id = qctx->parent_app_wrk_id; - sctx->parent_app_id = qctx->parent_app_id; - sctx->quic_connection_ctx_id = qctx->c_c_index; - sctx->c_c_index = sctx_index; - sctx->c_flags |= TRANSPORT_CONNECTION_F_NO_LOOKUP; - sctx->flags |= QUIC_F_IS_STREAM; - - if (!(conn = qctx->conn)) - return -1; - - is_unidir = sep->transport_flags & TRANSPORT_CFG_F_UNIDIRECTIONAL; - rv = quic_eng_connect_stream (conn, &stream, &stream_data, is_unidir); - if (rv) - { - QUIC_DBG (1, - "Connect stream: failed %d, conn %p, stream %p, stream_data " - "%p, unidir %d", - rv, conn, &stream, &stream_data, is_unidir); - return -1; - } - quic_increment_counter (qm, QUIC_ERROR_OPENED_STREAM, 1); - - sctx->stream = stream; - sctx->crypto_context_index = qctx->crypto_context_index; - - stream_session = session_alloc (qctx->c_thread_index); - QUIC_DBG ( - 2, "Connect stream: stream_session handle 0x%lx, sctx_index %u, thread %u", - session_handle (stream_session), sctx_index, qctx->c_thread_index); - stream_session->app_wrk_index = app_wrk->wrk_index; - stream_session->connection_index = sctx_index; - stream_session->listener_handle = quic_session_handle; - stream_session->session_type = - session_type_from_proto_and_ip (TRANSPORT_PROTO_QUIC, qctx->udp_is_ip4); - if (is_unidir) - stream_session->flags |= SESSION_F_UNIDIRECTIONAL; - - sctx->c_s_index = stream_session->session_index; - stream_data->ctx_id = sctx->c_c_index; - stream_data->thread_index = sctx->c_thread_index; - stream_data->app_rx_data_len = 0; - stream_data->app_tx_data_len = 0; - stream_session->session_state = SESSION_STATE_READY; - stream_session->opaque = sep->opaque; - - /* For now we only reset streams. Cleanup will be triggered by timers */ - if ((rv = app_worker_init_connected (app_wrk, stream_session))) - { - QUIC_ERR ("Connect stream: failed app_worker_init_connected %d", rv); - quic_eng_connect_stream_error_reset (stream); - return app_worker_connect_notify (app_wrk, NULL, rv, sep->opaque); - } - - svm_fifo_init_ooo_lookup (stream_session->rx_fifo, 0 /* ooo enq */); - svm_fifo_init_ooo_lookup (stream_session->tx_fifo, 1 /* ooo deq */); - svm_fifo_add_want_deq_ntf (stream_session->rx_fifo, - SVM_FIFO_WANT_DEQ_NOTIF_IF_FULL | - SVM_FIFO_WANT_DEQ_NOTIF_IF_EMPTY); - - if (app_worker_connect_notify (app_wrk, stream_session, SESSION_E_NONE, - sep->opaque)) - { - QUIC_ERR ("Connect stream: failed to notify app"); - quic_increment_counter (qm, QUIC_ERROR_CLOSED_STREAM, 1); - quic_eng_connect_stream_error_reset (stream); - return -1; - } - - return 0; -} - static_always_inline void quic_ctx_set_alpn_protos (quic_ctx_t *ctx, transport_endpt_crypto_cfg_t *ccfg) { @@ -288,8 +172,9 @@ quic_ctx_set_alpn_protos (quic_ctx_t *ctx, transport_endpt_crypto_cfg_t *ccfg) } static int -quic_connect_connection (session_endpoint_cfg_t * sep) +quic_connect_connection (transport_endpoint_cfg_t *tep) { + session_endpoint_cfg_t *sep = (session_endpoint_cfg_t *) tep; vnet_connect_args_t _cargs, *cargs = &_cargs; transport_endpt_crypto_cfg_t *ccfg; quic_main_t *qm = &quic_main; @@ -353,27 +238,8 @@ quic_connect_connection (session_endpoint_cfg_t * sep) } static int -quic_connect (transport_endpoint_cfg_t * tep) -{ - session_endpoint_cfg_t *sep = (session_endpoint_cfg_t *) tep; - session_t *quic_session; - sep = (session_endpoint_cfg_t *) tep; - - quic_session = session_get_from_handle_if_valid (sep->parent_handle); - if (quic_session) - { -#if CLIB_DEBUG > 0 - clib_warning ("deprecated, use vnet_connect_stream to open stream"); -#endif - return quic_connect_stream (quic_session, sep); - } - else - return quic_connect_connection (sep); -} - -static int -quic_proto_connect_stream (transport_endpoint_cfg_t *tep, - session_t *stream_session, u32 *conn_index) +quic_connect_stream (transport_endpoint_cfg_t *tep, session_t *stream_session, + u32 *conn_index) { quic_main_t *qm = &quic_main; session_endpoint_cfg_t *sep = (session_endpoint_cfg_t *) tep; @@ -973,8 +839,8 @@ static clib_error_t *quic_enable (vlib_main_t *vm, u8 is_en); static transport_proto_vft_t quic_proto = { .enable = quic_enable, - .connect = quic_connect, - .connect_stream = quic_proto_connect_stream, + .connect = quic_connect_connection, + .connect_stream = quic_connect_stream, .close = quic_proto_on_close, .start_listen = quic_start_listen, .stop_listen = quic_stop_listen, -- 2.16.6