quic: deprecate open stream via vnet_connect 40/43940/2 master
authorMatus Fabian <[email protected]>
Fri, 24 Oct 2025 14:13:44 +0000 (10:13 -0400)
committerFlorin Coras <[email protected]>
Fri, 24 Oct 2025 20:13:50 +0000 (20:13 +0000)
Type: improvement

Change-Id: Ia33063774e4c33997e34434061d0191fc642016a
Signed-off-by: Matus Fabian <[email protected]>
src/plugins/quic/quic.c

index d37de7f..259ee7b 100644 (file)
@@ -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,