X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvnet%2Fsession%2Fapplication_interface.c;h=9d82a1855a4888ac9d4997deba4f5f8ac452537f;hb=5da96a77a84ae5414debbc46d390464d51010113;hp=dbd5e49417f37ca37380bb40879c1a78e7255f75;hpb=8f89dd01289ea9e97405432d2351a19c842dd6d5;p=vpp.git diff --git a/src/vnet/session/application_interface.c b/src/vnet/session/application_interface.c index dbd5e49417f..9d82a1855a4 100644 --- a/src/vnet/session/application_interface.c +++ b/src/vnet/session/application_interface.c @@ -97,8 +97,8 @@ session_endpoint_is_zero (session_endpoint_t * sep) u8 session_endpoint_in_ns (session_endpoint_t * sep) { - u8 is_zero = ip_is_zero (&sep->ip, sep->is_ip4); - if (!is_zero && sep->sw_if_index != ENDPOINT_INVALID_INDEX + u8 is_lep = session_endpoint_is_local (sep); + if (!is_lep && sep->sw_if_index != ENDPOINT_INVALID_INDEX && !ip_interface_has_address (sep->sw_if_index, &sep->ip, sep->is_ip4)) { clib_warning ("sw_if_index %u not configured with ip %U", @@ -106,7 +106,7 @@ session_endpoint_in_ns (session_endpoint_t * sep) sep->is_ip4); return 0; } - return (is_zero || ip_is_local (sep->fib_index, &sep->ip, sep->is_ip4)); + return (is_lep || ip_is_local (sep->fib_index, &sep->ip, sep->is_ip4)); } int @@ -176,7 +176,7 @@ vnet_bind_i (u32 app_index, session_endpoint_t * sep, u64 * handle) * Add session endpoint to local session table. Only binds to "inaddr_any" * (i.e., zero address) are added to local scope table. */ - if (application_has_local_scope (app) && session_endpoint_is_zero (sep)) + if (application_has_local_scope (app) && session_endpoint_is_local (sep)) { if ((rv = application_start_local_listen (app, sep, handle))) return rv; @@ -453,10 +453,17 @@ vnet_application_attach (vnet_app_attach_args_t * a) u64 secret; int rv; - app = application_lookup (a->api_client_index); + if (a->api_client_index != APP_INVALID_INDEX) + app = application_lookup (a->api_client_index); + else if (a->name) + app = application_lookup_name (a->name); + else + return clib_error_return_code (0, VNET_API_ERROR_INVALID_VALUE, 0, + "api index or name must be provided"); + if (app) - return clib_error_return_code (0, VNET_API_ERROR_APP_ALREADY_ATTACHED, - 0, "app already attached"); + return clib_error_return_code (0, VNET_API_ERROR_APP_ALREADY_ATTACHED, 0, + "app already attached"); secret = a->options[APP_OPTIONS_NAMESPACE_SECRET]; if ((rv = session_validate_namespace (a->namespace_id, secret, @@ -464,7 +471,7 @@ vnet_application_attach (vnet_app_attach_args_t * a) return clib_error_return_code (0, rv, 0, "namespace validation: %d", rv); a->options[APP_OPTIONS_NAMESPACE] = app_ns_index; app = application_new (); - if ((rv = application_init (app, a->api_client_index, a->options, + if ((rv = application_init (app, a->api_client_index, a->name, a->options, a->session_cb_vft))) return clib_error_return_code (0, rv, 0, "app init: %d", rv); @@ -521,14 +528,18 @@ vnet_unbind_uri (vnet_unbind_args_t * a) { session_endpoint_extended_t sep = SESSION_ENDPOINT_EXT_NULL; stream_session_t *listener; + u32 table_index; int rv; rv = parse_uri (a->uri, &sep); if (rv) return rv; - /* NOTE: only default table supported for uri */ - listener = session_lookup_listener (0, (session_endpoint_t *) & sep); + /* NOTE: only default fib tables supported for uri apis */ + table_index = session_lookup_get_index_for_fib (fib_ip_proto (!sep.is_ip4), + 0); + listener = session_lookup_listener (table_index, + (session_endpoint_t *) & sep); if (!listener) return VNET_API_ERROR_ADDRESS_NOT_IN_USE;