From 4ac258497303c1cbca539e04ef5f732eed24a5c4 Mon Sep 17 00:00:00 2001 From: Florin Coras Date: Mon, 19 Apr 2021 17:34:54 -0700 Subject: vcl session: extended connect/listen configuration Type: feature Signed-off-by: Florin Coras Change-Id: Ic8d9386fef37ffd3446aaeb93a96ee6d60633831 --- src/vnet/session/session_node.c | 36 +++++++++++++++++++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) (limited to 'src/vnet/session/session_node.c') diff --git a/src/vnet/session/session_node.c b/src/vnet/session/session_node.c index 22ab3e8c064..a4db02362d3 100644 --- a/src/vnet/session/session_node.c +++ b/src/vnet/session/session_node.c @@ -33,6 +33,29 @@ return; \ } +static transport_endpt_ext_cfg_t * +session_mq_get_ext_config (application_t *app, uword offset) +{ + svm_fifo_chunk_t *c; + fifo_segment_t *fs; + + fs = application_get_rx_mqs_segment (app); + c = fs_chunk_ptr (fs->h, offset); + return (transport_endpt_ext_cfg_t *) c->data; +} + +static void +session_mq_free_ext_config (application_t *app, uword offset) +{ + u32 ctrl_thread = vlib_num_workers () ? 1 : 0; + svm_fifo_chunk_t *c; + fifo_segment_t *fs; + + fs = application_get_rx_mqs_segment (app); + c = fs_chunk_ptr (fs->h, offset); + fifo_segment_collect_chunk (fs, ctrl_thread, c); +} + static void session_mq_listen_handler (void *data) { @@ -61,12 +84,17 @@ session_mq_listen_handler (void *data) a->wrk_map_index = mp->wrk_index; a->sep_ext.transport_flags = mp->flags; + if (mp->ext_config) + a->sep_ext.ext_cfg = session_mq_get_ext_config (app, mp->ext_config); + if ((rv = vnet_listen (a))) clib_warning ("listen returned: %U", format_session_error, rv); app_wrk = application_get_worker (app, mp->wrk_index); mq_send_session_bound_cb (app_wrk->wrk_index, mp->context, a->handle, rv); - return; + + if (mp->ext_config) + session_mq_free_ext_config (app, mp->ext_config); } static void @@ -135,6 +163,9 @@ session_mq_connect_handler (void *data) a->app_index = app->app_index; a->wrk_map_index = mp->wrk_index; + if (mp->ext_config) + a->sep_ext.ext_cfg = session_mq_get_ext_config (app, mp->ext_config); + if ((rv = vnet_connect (a))) { clib_warning ("connect returned: %U", format_session_error, rv); @@ -142,6 +173,9 @@ session_mq_connect_handler (void *data) mq_send_session_connected_cb (app_wrk->wrk_index, mp->context, 0, rv); } + if (mp->ext_config) + session_mq_free_ext_config (app, mp->ext_config); + vec_free (a->sep_ext.hostname); } -- cgit 1.2.3-korg