From 1e96617d952e2d5d8cc367a226702f8f825ed039 Mon Sep 17 00:00:00 2001 From: Florin Coras Date: Sat, 16 May 2020 18:18:14 +0000 Subject: vcl: support connected udp listens Request connected udp listener behavior by setting VPPCOM_ATTR_SET_CONNECTED attribute with vppcom_session_attr Type: feature Signed-off-by: Florin Coras Change-Id: Iba95155c0f41cea8c6e1a4263946270d49c213ac --- src/vcl/vppcom.c | 7 +++++++ src/vcl/vppcom.h | 1 + src/vnet/session/application_interface.h | 1 + src/vnet/session/session_node.c | 1 + 4 files changed, 10 insertions(+) (limited to 'src') diff --git a/src/vcl/vppcom.c b/src/vcl/vppcom.c index 173b7fdd556..35e7804d8cb 100644 --- a/src/vcl/vppcom.c +++ b/src/vcl/vppcom.c @@ -209,6 +209,8 @@ vcl_send_session_listen (vcl_worker_t * wrk, vcl_session_t * s) clib_memcpy_fast (&mp->ip, &s->transport.lcl_ip, sizeof (mp->ip)); mp->port = s->transport.lcl_port; mp->proto = s->session_type; + if (s->flags & VCL_SESSION_F_CONNECTED) + mp->flags = TRANSPORT_CFG_F_CONNECTED; app_send_ctrl_evt_to_vpp (mq, app_evt); } @@ -3592,6 +3594,11 @@ vppcom_session_attr (uint32_t session_handle, uint32_t op, *(int *) buffer = SHUT_RDWR; *buflen = sizeof (int); break; + + case VPPCOM_ATTR_SET_CONNECTED: + session->flags |= VCL_SESSION_F_CONNECTED; + break; + default: rv = VPPCOM_EINVAL; break; diff --git a/src/vcl/vppcom.h b/src/vcl/vppcom.h index e2e0ae7d4bf..c61de372fca 100644 --- a/src/vcl/vppcom.h +++ b/src/vcl/vppcom.h @@ -160,6 +160,7 @@ typedef enum VPPCOM_ATTR_SET_TCP_USER_MSS, VPPCOM_ATTR_SET_SHUT, VPPCOM_ATTR_GET_SHUT, + VPPCOM_ATTR_SET_CONNECTED, } vppcom_attr_op_t; typedef struct _vcl_poll diff --git a/src/vnet/session/application_interface.h b/src/vnet/session/application_interface.h index d0d65031d8c..7a3eeeb34c4 100644 --- a/src/vnet/session/application_interface.h +++ b/src/vnet/session/application_interface.h @@ -315,6 +315,7 @@ typedef struct session_listen_msg_ ip46_address_t ip; u32 ckpair_index; u8 crypto_engine; + u8 flags; } __clib_packed session_listen_msg_t; STATIC_ASSERT (sizeof (session_listen_msg_t) <= SESSION_CTRL_MSG_MAX_SIZE, diff --git a/src/vnet/session/session_node.c b/src/vnet/session/session_node.c index d2b918a2587..d49fa1e1ba6 100644 --- a/src/vnet/session/session_node.c +++ b/src/vnet/session/session_node.c @@ -60,6 +60,7 @@ session_mq_listen_handler (void *data) a->sep_ext.crypto_engine = mp->crypto_engine; a->app_index = app->app_index; a->wrk_map_index = mp->wrk_index; + a->sep_ext.transport_flags = mp->flags; if ((rv = vnet_listen (a))) clib_warning ("listen returned: %d", rv); -- cgit 1.2.3-korg