X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvlib%2Funix%2Fplugin.c;h=61eaad471ffb09ae604a1e96ee6a3270d4237ba8;hb=8feeaff56fa9a4fbdfc06131f28a1060ffd9645d;hp=e9846e3bbe2a99f29937cb8b3adde12989b2d8bf;hpb=a83bc30d064e70a4e20d2728e14e0b59667b17c5;p=vpp.git diff --git a/src/vlib/unix/plugin.c b/src/vlib/unix/plugin.c index e9846e3bbe2..61eaad471ff 100644 --- a/src/vlib/unix/plugin.c +++ b/src/vlib/unix/plugin.c @@ -94,6 +94,9 @@ load_one_plugin (plugin_main_t * pm, plugin_info_t * pi, int from_early_init) goto error; } + if (pm->plugins_default_disable) + reg->default_disabled = 1; + p = hash_get_mem (pm->config_index_by_name, pi->name); if (p) { @@ -105,13 +108,13 @@ load_one_plugin (plugin_main_t * pm, plugin_info_t * pi, int from_early_init) } if (reg->default_disabled && pc->is_enabled == 0) { - clib_warning ("Plugin disabled: %s (default)", pi->name); + clib_warning ("Plugin disabled (default): %s", pi->name); goto error; } } else if (reg->default_disabled) { - clib_warning ("Plugin disabled: %s (default)", pi->name); + clib_warning ("Plugin disabled (default): %s", pi->name); goto error; } @@ -137,15 +140,11 @@ load_one_plugin (plugin_main_t * pm, plugin_info_t * pi, int from_early_init) handle = dlopen ((char *) pi->filename, RTLD_LAZY); - /* - * Note: this can happen if the plugin has an undefined symbol reference, - * so print a warning. Otherwise, the poor slob won't know what happened. - * Ask me how I know that... - */ if (handle == 0) { clib_warning ("%s", dlerror ()); - return -1; + clib_warning ("Failed to load plugin '%s'", pi->name); + goto error; } pi->handle = handle; @@ -156,7 +155,8 @@ load_one_plugin (plugin_main_t * pm, plugin_info_t * pi, int from_early_init) { /* This should never happen unless somebody chagnes registration macro */ clib_warning ("Missing plugin registration in plugin '%s'", pi->name); - os_exit (1); + dlclose (pi->handle); + goto error; } pi->reg = reg; @@ -176,7 +176,8 @@ load_one_plugin (plugin_main_t * pm, plugin_info_t * pi, int from_early_init) if (error) { clib_error_report (error); - os_exit (1); + dlclose (pi->handle); + goto error; } } else @@ -184,7 +185,10 @@ load_one_plugin (plugin_main_t * pm, plugin_info_t * pi, int from_early_init) (char *) pi->name, reg->early_init); } - clib_warning ("Loaded plugin: %s", pi->name); + if (reg->description) + clib_warning ("Loaded plugin: %s (%s)", pi->name, reg->description); + else + clib_warning ("Loaded plugin: %s", pi->name); return 0; error: @@ -362,6 +366,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) @@ -374,7 +392,7 @@ vlib_plugins_show_cmd_fn (vlib_main_t * vm, plugin_info_t *pi; s = format (s, " Plugin path is: %s\n\n", pm->plugin_path); - s = format (s, " %-41s%s\n", "Plugin", "Version"); + s = format (s, " %-41s%-33s%s\n", "Plugin", "Version", "Description"); /* *INDENT-OFF* */ hash_foreach_mem (key, value, pm->plugin_by_name_hash, @@ -382,7 +400,8 @@ vlib_plugins_show_cmd_fn (vlib_main_t * vm, if (key != 0) { pi = vec_elt_at_index (pm->plugin_info, value); - s = format (s, "%3d. %-40s %s\n", index, key, pi->version); + s = format (s, "%3d. %-40s %-32s %s\n", index, key, pi->version, + pi->reg->description ? pi->reg->description : ""); index++; } }); @@ -497,6 +516,19 @@ 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 default %U", + unformat_vlib_cli_sub_input, &sub_input)) + { + pm->plugins_default_disable = + unformat (&sub_input, "disable") ? 1 : 0; + unformat_free (&sub_input); + } else if (unformat (input, "plugin %s %U", &s, unformat_vlib_cli_sub_input, &sub_input)) {