session: make sure segment sizes are page aligned
[vpp.git] / src / vnet / session / application_interface.c
index dbd5e49..9d82a18 100644 (file)
@@ -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;