vxlan: vxlan/vxlan.api API cleanup
[vpp.git] / src / vpp / api / plugin.c
index 95bdbe6..410d497 100644 (file)
 
 plugin_main_t vat_plugin_main;
 
+static vlib_log_class_t vat_builtin_logger;
+
+#define PLUGIN_LOG_DBG(...) \
+  do {vlib_log_debug (vat_builtin_logger, __VA_ARGS__);} while(0)
+#define PLUGIN_LOG_ERR(...) \
+  do {vlib_log_err (vat_builtin_logger, __VA_ARGS__);} while(0)
+#define PLUGIN_LOG_NOTICE(...) \
+  do {vlib_log_notice (vat_builtin_logger, __VA_ARGS__);} while(0)
+
 static int
-load_one_plugin (plugin_main_t * pm, plugin_info_t * pi)
+load_one_vat_plugin (plugin_main_t * pm, plugin_info_t * pi)
 {
   void *handle, *register_handle;
   clib_error_t *(*fp) (vat_main_t *);
   clib_error_t *error;
 
-  handle = dlopen ((char *) pi->name, RTLD_LAZY);
+  handle = dlopen ((char *) pi->filename, RTLD_LAZY);
 
   /*
    * Note: this can happen if the plugin has an undefined symbol reference,
@@ -39,7 +48,7 @@ load_one_plugin (plugin_main_t * pm, plugin_info_t * pi)
    */
   if (handle == 0)
     {
-      clib_warning ("%s", dlerror ());
+      PLUGIN_LOG_ERR ("%s", dlerror ());
       return 0;
     }
 
@@ -48,7 +57,7 @@ load_one_plugin (plugin_main_t * pm, plugin_info_t * pi)
   register_handle = dlsym (pi->handle, "vat_plugin_register");
   if (register_handle == 0)
     {
-      clib_warning ("%s: symbol vat_plugin_register not found", pi->name);
+      PLUGIN_LOG_ERR ("%s: symbol vat_plugin_register not found", pi->name);
       dlclose (handle);
       return 0;
     }
@@ -59,12 +68,15 @@ load_one_plugin (plugin_main_t * pm, plugin_info_t * pi)
 
   if (error)
     {
-      clib_error_report (error);
+      u8 *err = format (0, "%U%c", format_clib_error, error, 0);
+      PLUGIN_LOG_ERR ((char *) err);
+      clib_error_free (error);
       dlclose (handle);
+      pi->handle = 0;
       return 1;
     }
 
-  clib_warning ("Loaded plugin: %s", pi->name);
+  PLUGIN_LOG_NOTICE ("Loaded plugin: %s", pi->name);
 
   return 0;
 }
@@ -119,6 +131,7 @@ vat_load_new_plugins (plugin_main_t * pm)
       while ((entry = readdir (dp)))
        {
          u8 *plugin_name;
+         u8 *file_name;
 
          if (pm->plugin_name_filter)
            {
@@ -128,13 +141,14 @@ vat_load_new_plugins (plugin_main_t * pm)
                  goto next;
            }
 
-         plugin_name = format (0, "%s/%s%c", plugin_path[i],
-                               entry->d_name, 0);
+         file_name = format (0, "%s/%s%c", plugin_path[i], entry->d_name, 0);
+         plugin_name = format (0, "%s%c", entry->d_name, 0);
 
          /* unreadable */
-         if (stat ((char *) plugin_name, &statb) < 0)
+         if (stat ((char *) file_name, &statb) < 0)
            {
            ignore:
+             vec_free (file_name);
              vec_free (plugin_name);
              continue;
            }
@@ -148,15 +162,17 @@ vat_load_new_plugins (plugin_main_t * pm)
            {
              vec_add2 (pm->plugin_info, pi, 1);
              pi->name = plugin_name;
+             pi->filename = file_name;
              pi->file_info = statb;
 
-             if (load_one_plugin (pm, pi))
+             if (load_one_vat_plugin (pm, pi))
                {
+                 vec_free (file_name);
                  vec_free (plugin_name);
                  _vec_len (pm->plugin_info) = vec_len (pm->plugin_info) - 1;
                  continue;
                }
-             memset (pi, 0, sizeof (*pi));
+             clib_memset (pi, 0, sizeof (*pi));
              hash_set_mem (pm->plugin_by_name_hash, plugin_name,
                            pi - pm->plugin_info);
            }
@@ -173,10 +189,7 @@ vat_load_new_plugins (plugin_main_t * pm)
 #define QUOTE_(x) #x
 #define QUOTE(x) QUOTE_(x)
 
-/*
- * Load plugins from /usr/lib/vpp_api_test_plugins by default
- */
-char *vat_plugin_path = "/usr/lib/vpp_api_test_plugins";
+extern char *vat_plugin_path;
 
 char *vat_plugin_name_filter = 0;
 
@@ -189,6 +202,10 @@ vat_plugin_init (vat_main_t * vam)
   u8 *plugin_path;
   u8 *plugin_name_filter;
 
+  vat_builtin_logger =
+    vlib_log_register_class_rate_limit ("vat-plug", "load",
+                                       0x7FFFFFFF /* aka no rate limit */ );
+
   plugin_path = vlib_get_vat_plugin_path ();
   plugin_name_filter = vlib_get_vat_plugin_name_filter ();