Configure vat-plugin-path and vat-plugin-name-filter 12/9612/2
authorDave Barach <dave@barachs.net>
Tue, 28 Nov 2017 23:55:09 +0000 (18:55 -0500)
committerDamjan Marion <dmarion.lists@gmail.com>
Wed, 29 Nov 2017 10:04:05 +0000 (10:04 +0000)
To facilitate in-tree plugin API testing, via the "binary-api..."
debug CLI command.

Change-Id: If7ee88a6a0dbc8e8f4555cb41e259db24e378a64
Signed-off-by: Dave Barach <dave@barachs.net>
src/vlib/unix/plugin.c
src/vlib/unix/plugin.h
src/vpp/api/plugin.c
src/vpp/api/plugin.h

index c2741aa..058afcf 100644 (file)
@@ -361,6 +361,20 @@ vlib_plugin_early_init (vlib_main_t * vm)
   return vlib_load_new_plugins (pm, 1 /* from_early_init */ );
 }
 
+u8 *
+vlib_get_vat_plugin_path (void)
+{
+  plugin_main_t *pm = &vlib_plugin_main;
+  return (pm->vat_plugin_path);
+}
+
+u8 *
+vlib_get_vat_plugin_name_filter (void)
+{
+  plugin_main_t *pm = &vlib_plugin_main;
+  return (pm->vat_plugin_name_filter);
+}
+
 static clib_error_t *
 vlib_plugins_show_cmd_fn (vlib_main_t * vm,
                          unformat_input_t * input, vlib_cli_command_t * cmd)
@@ -497,6 +511,12 @@ done:
       u8 *s = 0;
       if (unformat (input, "path %s", &s))
        pm->plugin_path = s;
+      else if (unformat (input, "name-filter %s", &s))
+       pm->plugin_name_filter = s;
+      else if (unformat (input, "vat-path %s", &s))
+       pm->vat_plugin_path = s;
+      else if (unformat (input, "vat-name-filter %s", &s))
+       pm->vat_plugin_name_filter = s;
       else if (unformat (input, "plugin %s %U", &s,
                         unformat_vlib_cli_sub_input, &sub_input))
        {
index 52da743..aad1ca3 100644 (file)
@@ -92,9 +92,11 @@ typedef struct
   plugin_info_t *plugin_info;
   uword *plugin_by_name_hash;
 
-  /* path and name filter */
+  /* paths and name filters */
   u8 *plugin_path;
   u8 *plugin_name_filter;
+  u8 *vat_plugin_path;
+  u8 *vat_plugin_name_filter;
 
   /* plugin configs and hash by name */
   plugin_config_t *configs;
@@ -110,6 +112,7 @@ clib_error_t *vlib_plugin_config (vlib_main_t * vm, unformat_input_t * input);
 int vlib_plugin_early_init (vlib_main_t * vm);
 int vlib_load_new_plugins (plugin_main_t * pm, int from_early_init);
 void *vlib_get_plugin_symbol (char *plugin_name, char *symbol_name);
+u8 *vlib_get_vat_plugin_path (void);
 
 #define VLIB_PLUGIN_REGISTER() \
   vlib_plugin_registration_t vlib_plugin_registration \
index c1cc928..e8b1341 100644 (file)
@@ -180,9 +180,22 @@ int
 vat_plugin_init (vat_main_t * vam)
 {
   plugin_main_t *pm = &vat_plugin_main;
+  u8 *vlib_get_vat_plugin_path (void);
+  u8 *vlib_get_vat_plugin_name_filter (void);
+  u8 *plugin_path;
+  u8 *plugin_name_filter;
 
+  plugin_path = vlib_get_vat_plugin_path ();
+  plugin_name_filter = vlib_get_vat_plugin_name_filter ();
+
+  if (plugin_path)
+    vat_plugin_path = (char *) plugin_path;
+
+  if (plugin_name_filter)
+    vat_plugin_name_filter = (char *) plugin_name_filter;
 
   pm->plugin_path = format (0, "%s%c", vat_plugin_path, 0);
+
   if (vat_plugin_name_filter)
     pm->plugin_name_filter = format (0, "%s%c", vat_plugin_name_filter, 0);
 
index c691862..e4f0c64 100644 (file)
@@ -1,4 +1,6 @@
 /*
+ * plugin.h: plugin handling
+ *
  * Copyright (c) 2015 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.
@@ -12,9 +14,6 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-/*
- * plugin.h: plugin handling
- */
 
 #ifndef __included_plugin_h__
 #define __included_plugin_h__
@@ -36,13 +35,18 @@ typedef struct
   plugin_info_t *plugin_info;
   uword *plugin_by_name_hash;
 
-  /* path and name filter */
+  /* paths and name filters */
   u8 *plugin_path;
   u8 *plugin_name_filter;
+  u8 *vat_plugin_path;
+  u8 *vat_plugin_name_filter;
 
-  /* convenience */
-  vat_main_t *vat_main;
+  /* plugin configs and hash by name */
+  plugin_config_t *configs;
+  uword *config_index_by_name;
 
+  /* usual */
+  vlib_main_t *vlib_main;
 } plugin_main_t;
 
 extern plugin_main_t vat_plugin_main;