diff options
author | Florin Coras <fcoras@cisco.com> | 2020-09-02 19:10:28 -0700 |
---|---|---|
committer | Dave Barach <openvpp@barachs.net> | 2020-09-14 14:33:11 +0000 |
commit | 61ae056bdb6cdf7cb718cf9f459d41e903abcb47 (patch) | |
tree | 72b43bcb5a6e184b005d3b6aa60a2d954f902f16 /src/vnet/session/application.c | |
parent | 4a2c794c431c72364e241fa14327f03e35b886b7 (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.c | 31 |
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; |