summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorFlorin Coras <fcoras@cisco.com>2020-05-16 18:18:14 +0000
committerFlorin Coras <florin.coras@gmail.com>2020-06-04 20:47:53 +0000
commit7037fde018a6f56e607457863f696dc693c70ea3 (patch)
tree331b112d7a644c5d26fdc32cc50df275fc2bbfd0 /src
parent53b5233057b8e90ca739da005ba213cd6d6b8806 (diff)
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 <fcoras@cisco.com> Change-Id: Iba95155c0f41cea8c6e1a4263946270d49c213ac (cherry picked from commit 1e96617d952e2d5d8cc367a226702f8f825ed039)
Diffstat (limited to 'src')
-rw-r--r--src/vcl/vppcom.c7
-rw-r--r--src/vcl/vppcom.h1
-rw-r--r--src/vnet/session/application_interface.h1
-rw-r--r--src/vnet/session/session_node.c1
4 files changed, 10 insertions, 0 deletions
diff --git a/src/vcl/vppcom.c b/src/vcl/vppcom.c
index 30fb76335bc..c5c42add633 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);
}
@@ -3597,6 +3599,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);