aboutsummaryrefslogtreecommitdiffstats
path: root/src/vnet/session/application.c
diff options
context:
space:
mode:
authorFlorin Coras <fcoras@cisco.com>2020-09-02 19:10:28 -0700
committerDave Barach <openvpp@barachs.net>2020-09-14 14:33:11 +0000
commit61ae056bdb6cdf7cb718cf9f459d41e903abcb47 (patch)
tree72b43bcb5a6e184b005d3b6aa60a2d954f902f16 /src/vnet/session/application.c
parent4a2c794c431c72364e241fa14327f03e35b886b7 (diff)
session: add unix socket api for app attachment
This is an af_unix socket alternative to the binary api. To enable it, add use-app-socket-api under session stanza in startup.conf. When the socket api is enabled, attachments through the binary api are disabled. The socket api only works with memfd fifo segments, i.e., shm segments are not supported. Type: feature Signed-off-by: Florin Coras <fcoras@cisco.com> Change-Id: I55ffcee201d004846daeeec85c700c7e7a578d43
Diffstat (limited to 'src/vnet/session/application.c')
-rw-r--r--src/vnet/session/application.c31
1 files changed, 18 insertions, 13 deletions
diff --git a/src/vnet/session/application.c b/src/vnet/session/application.c
index c20277720ad..65d2f08ddca 100644
--- a/src/vnet/session/application.c
+++ b/src/vnet/session/application.c
@@ -493,7 +493,11 @@ application_alloc_and_init (app_init_args_t * a)
/*
* Make sure we support the requested configuration
*/
- if (!(options[APP_OPTIONS_FLAGS] & APP_OPTIONS_FLAGS_IS_BUILTIN))
+ if (options[APP_OPTIONS_FLAGS] & APP_OPTIONS_FLAGS_IS_BUILTIN)
+ {
+ seg_type = SSVM_SEGMENT_PRIVATE;
+ }
+ else if (!a->use_sock_api)
{
reg = vl_api_client_index_to_registration (a->api_client_index);
if (!reg)
@@ -501,10 +505,6 @@ application_alloc_and_init (app_init_args_t * a)
if (vl_api_registration_file_index (reg) == VL_API_INVALID_FI)
seg_type = SSVM_SEGMENT_SHM;
}
- else
- {
- seg_type = SSVM_SEGMENT_PRIVATE;
- }
if ((options[APP_OPTIONS_FLAGS] & APP_OPTIONS_FLAGS_EVT_MQ_USE_EVENTFD)
&& seg_type != SSVM_SEGMENT_MEMFD)
@@ -845,16 +845,21 @@ vnet_application_attach (vnet_app_attach_args_t * a)
if (app)
return VNET_API_ERROR_APP_ALREADY_ATTACHED;
- if (a->api_client_index != APP_INVALID_INDEX)
+ /* Socket api sets the name and validates namespace prior to attach */
+ if (!a->use_sock_api)
{
- app_name = app_name_from_api_index (a->api_client_index);
- a->name = app_name;
- }
+ if (a->api_client_index != APP_INVALID_INDEX)
+ {
+ app_name = app_name_from_api_index (a->api_client_index);
+ a->name = app_name;
+ }
- secret = a->options[APP_OPTIONS_NAMESPACE_SECRET];
- if ((rv = app_validate_namespace (a->namespace_id, secret, &app_ns_index)))
- return rv;
- a->options[APP_OPTIONS_NAMESPACE] = app_ns_index;
+ secret = a->options[APP_OPTIONS_NAMESPACE_SECRET];
+ if ((rv =
+ app_validate_namespace (a->namespace_id, secret, &app_ns_index)))
+ return rv;
+ a->options[APP_OPTIONS_NAMESPACE] = app_ns_index;
+ }
if ((rv = application_alloc_and_init ((app_init_args_t *) a)))
return rv;