Code Review
/
vpp.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
review
|
tree
raw
|
inline
| side by side
session tls: support tls descheduling
[vpp.git]
/
src
/
plugins
/
quic
/
quic.c
diff --git
a/src/plugins/quic/quic.c
b/src/plugins/quic/quic.c
index
31cfcce
..
de0e4e4
100644
(file)
--- a/
src/plugins/quic/quic.c
+++ b/
src/plugins/quic/quic.c
@@
-784,7
+784,7
@@
quic_on_stream_destroy (quicly_stream_t * stream, int err)
clib_mem_free (stream->data);
}
clib_mem_free (stream->data);
}
-static
int
+static
void
quic_on_stop_sending (quicly_stream_t * stream, int err)
{
#if QUIC_DEBUG >= 2
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 */
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;
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);
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)
{
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);
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))
{
}
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);
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)
{
}
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);
}
len, (u8 *) src);
QUIC_ASSERT (rlen == 0);
}
- return
0
;
+ return;
}
void
}
void
@@
-912,7
+910,7
@@
quic_fifo_egress_shift (quicly_stream_t * stream, size_t delta)
QUIC_ASSERT (!rv);
}
QUIC_ASSERT (!rv);
}
-int
+void
quic_fifo_egress_emit (quicly_stream_t * stream, size_t off, void *dst,
size_t * len, int *wrote_all)
{
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);
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 = {
}
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;
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 */
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 (!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;
{
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);
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;
stream_session->flags |= SESSION_F_UNIDIRECTIONAL;
sctx->c_s_index = stream_session->session_index;
@@
-1262,18
+1258,19
@@
quic_connect_stream (session_t * quic_session, session_endpoint_cfg_t * sep)
stream_session->session_state = SESSION_STATE_READY;
/* For now we only reset streams. Cleanup will be triggered by timers */
stream_session->session_state = SESSION_STATE_READY;
/* For now we only reset streams. Cleanup will be triggered by timers */
- if (
app_worker_init_connected (app_wrk, stream_session
))
+ if (
(rv = app_worker_init_connected (app_wrk, stream_session)
))
{
QUIC_ERR ("failed to app_worker_init_connected");
quicly_reset_stream (stream, QUIC_APP_CONNECT_NOTIFY_ERROR);
{
QUIC_ERR ("failed to app_worker_init_connected");
quicly_reset_stream (stream, QUIC_APP_CONNECT_NOTIFY_ERROR);
- return app_worker_connect_notify (app_wrk, NULL, sep->opaque);
+ return app_worker_connect_notify (app_wrk, NULL,
rv,
sep->opaque);
}
svm_fifo_add_want_deq_ntf (stream_session->rx_fifo,
SVM_FIFO_WANT_DEQ_NOTIF_IF_FULL |
SVM_FIFO_WANT_DEQ_NOTIF_IF_EMPTY);
}
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, sep->opaque))
+ if (app_worker_connect_notify (app_wrk, stream_session, SESSION_E_NONE,
+ sep->opaque))
{
QUIC_ERR ("failed to notify app");
quic_increment_counter (QUIC_ERROR_CLOSED_STREAM, 1);
{
QUIC_ERR ("failed to notify app");
quic_increment_counter (QUIC_ERROR_CLOSED_STREAM, 1);
@@
-1316,7
+1313,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));
vec_terminate_c_string (ctx->srv_hostname);
clib_memcpy (&cargs->sep, sep, sizeof (session_endpoint_cfg_t));
- cargs->sep.transport_proto = TRANSPORT_PROTO_UDP
C
;
+ cargs->sep.transport_proto = TRANSPORT_PROTO_UDP;
cargs->app_index = qm->app_index;
cargs->api_context = ctx_index;
cargs->app_index = qm->app_index;
cargs->api_context = ctx_index;
@@
-1324,6
+1321,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;
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;
ctx->crypto_engine = sep->crypto_engine;
ctx->ckpair_index = sep->ckpair_index;
@@
-1431,7
+1429,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->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;
if ((rv = vnet_listen (args)))
return rv;
@@
-1614,17
+1613,17
@@
quic_on_quic_session_connected (quic_ctx_t * ctx)
/* If quic session connected fails, immediatly close connection */
app_wrk = app_worker_get (ctx->parent_app_wrk_id);
/* If quic session connected fails, immediatly close connection */
app_wrk = app_worker_get (ctx->parent_app_wrk_id);
- if (
app_worker_init_connected (app_wrk, quic_session
))
+ if (
(rv = app_worker_init_connected (app_wrk, quic_session)
))
{
QUIC_ERR ("failed to app_worker_init_connected");
quic_proto_on_close (ctx_id, thread_index);
{
QUIC_ERR ("failed to app_worker_init_connected");
quic_proto_on_close (ctx_id, thread_index);
- app_worker_connect_notify (app_wrk, NULL, ctx->client_opaque);
+ app_worker_connect_notify (app_wrk, NULL,
rv,
ctx->client_opaque);
return;
}
quic_session->session_state = SESSION_STATE_CONNECTING;
if ((rv = app_worker_connect_notify (app_wrk, quic_session,
return;
}
quic_session->session_state = SESSION_STATE_CONNECTING;
if ((rv = app_worker_connect_notify (app_wrk, quic_session,
- ctx->client_opaque)))
+
SESSION_E_NONE,
ctx->client_opaque)))
{
QUIC_ERR ("failed to notify app %d", rv);
quic_proto_on_close (ctx_id, thread_index);
{
QUIC_ERR ("failed to notify app %d", rv);
quic_proto_on_close (ctx_id, thread_index);
@@
-1741,7
+1740,8
@@
quic_transfer_connection (u32 ctx_index, u32 dest_thread)
static int
quic_udp_session_connected_callback (u32 quic_app_index, u32 ctx_index,
static int
quic_udp_session_connected_callback (u32 quic_app_index, u32 ctx_index,
- session_t * udp_session, u8 is_fail)
+ session_t * udp_session,
+ session_error_t err)
{
QUIC_DBG (2, "QSession is now connected (id %u)",
udp_session->session_index);
{
QUIC_DBG (2, "QSession is now connected (id %u)",
udp_session->session_index);
@@
-1761,14
+1761,14
@@
quic_udp_session_connected_callback (u32 quic_app_index, u32 ctx_index,
ctx = quic_ctx_get (ctx_index, thread_index);
ctx = quic_ctx_get (ctx_index, thread_index);
- if (
is_fail
)
+ if (
err
)
{
u32 api_context;
app_wrk = app_worker_get_if_valid (ctx->parent_app_wrk_id);
if (app_wrk)
{
api_context = ctx->c_s_index;
{
u32 api_context;
app_wrk = app_worker_get_if_valid (ctx->parent_app_wrk_id);
if (app_wrk)
{
api_context = ctx->c_s_index;
- app_worker_connect_notify (app_wrk, 0, api_context);
+ app_worker_connect_notify (app_wrk, 0,
SESSION_E_NONE,
api_context);
}
return 0;
}
}
return 0;
}
@@
-1928,7
+1928,7
@@
quic_custom_app_rx_callback (transport_connection_t * tc)
}
static int
}
static int
-quic_custom_tx_callback (void *s,
u32 max_burst_size
)
+quic_custom_tx_callback (void *s,
transport_send_params_t * sp
)
{
session_t *stream_session = (session_t *) s;
quic_stream_data_t *stream_data;
{
session_t *stream_session = (session_t *) s;
quic_stream_data_t *stream_data;
@@
-2180,8
+2180,11
@@
quic_process_one_rx_packet (u64 udp_session_handle, svm_fifo_t * f,
if (rv == QUIC_PACKET_TYPE_RECEIVE)
{
pctx->ptype = QUIC_PACKET_TYPE_RECEIVE;
if (rv == QUIC_PACKET_TYPE_RECEIVE)
{
pctx->ptype = QUIC_PACKET_TYPE_RECEIVE;
- quic_ctx_t *qctx = quic_ctx_get (pctx->ctx_index, thread_index);
- quic_crypto_decrypt_packet (qctx, pctx);
+ if (quic_main.vnet_crypto_enabled)
+ {
+ quic_ctx_t *qctx = quic_ctx_get (pctx->ctx_index, thread_index);
+ quic_crypto_decrypt_packet (qctx, pctx);
+ }
return 0;
}
else if (rv == QUIC_PACKET_TYPE_MIGRATE)
return 0;
}
else if (rv == QUIC_PACKET_TYPE_MIGRATE)
@@
-2395,6
+2398,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 = {
.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,
},
.tx_type = TRANSPORT_TX_INTERNAL,
.service_type = TRANSPORT_SERVICE_APP,
},
@@
-2506,6
+2511,13
@@
quic_init (vlib_main_t * vm)
qm->default_crypto_engine = CRYPTO_ENGINE_VPP;
qm->max_packets_per_key = DEFAULT_MAX_PACKETS_PER_KEY;
clib_rwlock_init (&qm->crypto_keys_quic_rw_lock);
qm->default_crypto_engine = CRYPTO_ENGINE_VPP;
qm->max_packets_per_key = DEFAULT_MAX_PACKETS_PER_KEY;
clib_rwlock_init (&qm->crypto_keys_quic_rw_lock);
+
+ vnet_crypto_main_t *cm = &crypto_main;
+ if (vec_len (cm->engines) == 0)
+ qm->vnet_crypto_enabled = 0;
+ else
+ qm->vnet_crypto_enabled = 1;
+
vec_free (a->name);
return 0;
}
vec_free (a->name);
return 0;
}