session: api to add new transport types
[vpp.git] / src / vnet / session / application_namespace.c
index 8bd5b65..294192c 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017 Cisco and/or its affiliates.
+ * Copyright (c) 2017-2019 Cisco and/or its affiliates.
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at:
@@ -54,14 +54,14 @@ app_namespace_alloc (u8 * ns_id)
 {
   app_namespace_t *app_ns;
   pool_get (app_namespace_pool, app_ns);
-  memset (app_ns, 0, sizeof (*app_ns));
+  clib_memset (app_ns, 0, sizeof (*app_ns));
   app_ns->ns_id = vec_dup (ns_id);
   hash_set_mem (app_namespace_lookup_table, app_ns->ns_id,
                app_ns - app_namespace_pool);
   return app_ns;
 }
 
-clib_error_t *
+int
 vnet_app_namespace_add_del (vnet_app_namespace_add_del_args_t * a)
 {
   app_namespace_t *app_ns;
@@ -70,10 +70,10 @@ vnet_app_namespace_add_del (vnet_app_namespace_add_del_args_t * a)
   if (a->is_add)
     {
       if (a->sw_if_index != APP_NAMESPACE_INVALID_INDEX
-         && !vnet_get_sw_interface_safe (vnet_get_main (), a->sw_if_index))
-       return clib_error_return_code (0, VNET_API_ERROR_INVALID_SW_IF_INDEX,
-                                      0, "sw_if_index %u doesn't exist",
-                                      a->sw_if_index);
+         && !vnet_get_sw_interface_or_null (vnet_get_main (),
+                                            a->sw_if_index))
+       return VNET_API_ERROR_INVALID_SW_IF_INDEX;
+
 
       if (a->sw_if_index != APP_NAMESPACE_INVALID_INDEX)
        {
@@ -81,14 +81,13 @@ vnet_app_namespace_add_del (vnet_app_namespace_add_del_args_t * a)
            fib_table_get_table_id_for_sw_if_index (FIB_PROTOCOL_IP4,
                                                    a->sw_if_index);
          a->ip6_fib_id =
-           fib_table_get_table_id_for_sw_if_index (FIB_PROTOCOL_IP4,
+           fib_table_get_table_id_for_sw_if_index (FIB_PROTOCOL_IP6,
                                                    a->sw_if_index);
        }
       if (a->sw_if_index == APP_NAMESPACE_INVALID_INDEX
          && a->ip4_fib_id == APP_NAMESPACE_INVALID_INDEX)
-       return clib_error_return_code (0, VNET_API_ERROR_INVALID_VALUE, 0,
-                                      "sw_if_index or fib_id must be "
-                                      "configured");
+       return VNET_API_ERROR_INVALID_VALUE;
+
       app_ns = app_namespace_get_from_id (a->ns_id);
       if (!app_ns)
        {
@@ -109,8 +108,7 @@ vnet_app_namespace_add_del (vnet_app_namespace_add_del_args_t * a)
     }
   else
     {
-      return clib_error_return_code (0, VNET_API_ERROR_UNIMPLEMENTED, 0,
-                                    "namespace deletion not supported");
+      return VNET_API_ERROR_UNIMPLEMENTED;
     }
   return 0;
 }
@@ -184,6 +182,7 @@ app_ns_fn (vlib_main_t * vm, unformat_input_t * input,
   u32 sw_if_index, fib_id = APP_NAMESPACE_INVALID_INDEX;
   u64 secret;
   clib_error_t *error = 0;
+  int rv;
 
   session_cli_return_if_not_enabled ();
 
@@ -228,7 +227,8 @@ app_ns_fn (vlib_main_t * vm, unformat_input_t * input,
        .ip4_fib_id = fib_id,
        .is_add = 1
       };
-      error = vnet_app_namespace_add_del (&args);
+      if ((rv = vnet_app_namespace_add_del (&args)))
+       return clib_error_return (0, "app namespace add del returned %d", rv);
     }
 
   return error;