session udp: fix transport flags and migration
[vpp.git] / src / plugins / quic / quic.c
index 8b11136..14002a2 100644 (file)
@@ -784,7 +784,7 @@ quic_on_stream_destroy (quicly_stream_t * stream, int err)
   clib_mem_free (stream->data);
 }
 
-static int
+static void
 quic_on_stop_sending (quicly_stream_t * stream, int err)
 {
 #if QUIC_DEBUG >= 2
@@ -797,10 +797,9 @@ quic_on_stop_sending (quicly_stream_t * stream, int err)
                session_handle (stream_session), quic_format_err, err);
 #endif
   /* TODO : handle STOP_SENDING */
-  return 0;
 }
 
-static int
+static void
 quic_on_receive_reset (quicly_stream_t * stream, int err)
 {
   quic_stream_data_t *stream_data = (quic_stream_data_t *) stream->data;
@@ -813,10 +812,9 @@ quic_on_receive_reset (quicly_stream_t * stream, int err)
                session_handle (stream_session), quic_format_err, err);
 #endif
   session_transport_closing_notify (&sctx->connection);
-  return 0;
 }
 
-static int
+static void
 quic_on_receive (quicly_stream_t * stream, size_t off, const void *src,
                 size_t len)
 {
@@ -846,7 +844,7 @@ quic_on_receive (quicly_stream_t * stream, size_t off, const void *src,
                stream_session->thread_index, f,
                max_enq, len, stream_data->app_rx_data_len, off,
                off - stream_data->app_rx_data_len + len);
-      return 0;
+      return;
     }
   if (PREDICT_FALSE ((off - stream_data->app_rx_data_len + len) > max_enq))
     {
@@ -858,7 +856,7 @@ quic_on_receive (quicly_stream_t * stream, size_t off, const void *src,
                stream_session->thread_index, f,
                max_enq, len, stream_data->app_rx_data_len, off,
                off - stream_data->app_rx_data_len + len);
-      return 1;
+      return;                  /* This shouldn't happen */
     }
   if (off == stream_data->app_rx_data_len)
     {
@@ -888,7 +886,7 @@ quic_on_receive (quicly_stream_t * stream, size_t off, const void *src,
                                           len, (u8 *) src);
       QUIC_ASSERT (rlen == 0);
     }
-  return 0;
+  return;
 }
 
 void
@@ -912,7 +910,7 @@ quic_fifo_egress_shift (quicly_stream_t * stream, size_t delta)
   QUIC_ASSERT (!rv);
 }
 
-int
+void
 quic_fifo_egress_emit (quicly_stream_t * stream, size_t off, void *dst,
                       size_t * len, int *wrote_all)
 {
@@ -944,8 +942,6 @@ quic_fifo_egress_emit (quicly_stream_t * stream, size_t off, void *dst,
     stream_data->app_tx_data_len = off + *len;
 
   svm_fifo_peek (f, off, *len, dst);
-
-  return 0;
 }
 
 static const quicly_stream_callbacks_t quic_stream_callbacks = {
@@ -1186,6 +1182,7 @@ quic_connect_stream (session_t * quic_session, session_endpoint_cfg_t * sep)
   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 */
@@ -1229,9 +1226,8 @@ quic_connect_stream (session_t * quic_session, session_endpoint_cfg_t * sep)
   if (!conn || !quicly_connection_is_ready (conn))
     return -1;
 
-  if ((rv =
-       quicly_open_stream (conn, &stream,
-                          sep->flags & SESSION_F_UNIDIRECTIONAL)))
+  is_unidir = sep->transport_flags & TRANSPORT_CFG_F_UNIDIRECTIONAL;
+  if ((rv = quicly_open_stream (conn, &stream, is_unidir)))
     {
       QUIC_DBG (2, "Stream open failed with %d", rv);
       return -1;
@@ -1250,7 +1246,7 @@ quic_connect_stream (session_t * quic_session, session_endpoint_cfg_t * sep)
   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 (sep->flags & SESSION_F_UNIDIRECTIONAL)
+  if (is_unidir)
     stream_session->flags |= SESSION_F_UNIDIRECTIONAL;
 
   sctx->c_s_index = stream_session->session_index;
@@ -1316,7 +1312,7 @@ quic_connect_connection (session_endpoint_cfg_t * sep)
   vec_terminate_c_string (ctx->srv_hostname);
 
   clib_memcpy (&cargs->sep, sep, sizeof (session_endpoint_cfg_t));
-  cargs->sep.transport_proto = TRANSPORT_PROTO_UDPC;
+  cargs->sep.transport_proto = TRANSPORT_PROTO_UDP;
   cargs->app_index = qm->app_index;
   cargs->api_context = ctx_index;
 
@@ -1324,6 +1320,7 @@ quic_connect_connection (session_endpoint_cfg_t * sep)
   app = application_get (app_wrk->app_index);
   ctx->parent_app_id = app_wrk->app_index;
   cargs->sep_ext.ns_index = app->ns_index;
+  cargs->sep_ext.transport_flags = TRANSPORT_CFG_F_CONNECTED;
 
   ctx->crypto_engine = sep->crypto_engine;
   ctx->ckpair_index = sep->ckpair_index;
@@ -1431,7 +1428,8 @@ quic_start_listen (u32 quic_listen_session_index, transport_endpoint_t * tep)
   args->app_index = qm->app_index;
   args->sep_ext = *sep;
   args->sep_ext.ns_index = app->ns_index;
-  args->sep_ext.transport_proto = TRANSPORT_PROTO_UDPC;
+  args->sep_ext.transport_proto = TRANSPORT_PROTO_UDP;
+  args->sep_ext.transport_flags = TRANSPORT_CFG_F_CONNECTED;
   if ((rv = vnet_listen (args)))
     return rv;
 
@@ -2398,6 +2396,8 @@ static const transport_proto_vft_t quic_proto = {
   .get_transport_endpoint = quic_get_transport_endpoint,
   .get_transport_listener_endpoint = quic_get_transport_listener_endpoint,
   .transport_options = {
+    .name = "quic",
+    .short_name = "Q",
     .tx_type = TRANSPORT_TX_INTERNAL,
     .service_type = TRANSPORT_SERVICE_APP,
   },