diff options
Diffstat (limited to 'src/vpp/api/api_main.c')
-rw-r--r-- | src/vpp/api/api_main.c | 39 |
1 files changed, 32 insertions, 7 deletions
diff --git a/src/vpp/api/api_main.c b/src/vpp/api/api_main.c index 97dec9e1542..f2516752b9d 100644 --- a/src/vpp/api/api_main.c +++ b/src/vpp/api/api_main.c @@ -1,9 +1,11 @@ #include "vat.h" +#include <dlfcn.h> +#include <vat/plugin.h> vat_main_t vat_main; -void -vat_suspend (vlib_main_t * vm, f64 interval) +void __clib_no_tail_calls +vat_suspend (vlib_main_t *vm, f64 interval) { vlib_process_suspend (vm, interval); } @@ -94,6 +96,30 @@ vat_plugin_hash_create (void) } static void +vat_register_interface_dump (vat_main_t *vam) +{ + void *handle; + plugin_info_t *pi; + + vec_foreach (pi, vat_plugin_main.plugin_info) + { + handle = dlsym (pi->handle, "api_sw_interface_dump"); + if (handle) + { + vam->api_sw_interface_dump = handle; + break; + } + } + + if (!vam->api_sw_interface_dump) + { + fformat (stderr, + "sw_interface_dump not found in interface_test plugin!\n"); + exit (1); + } +} + +static void maybe_register_api_client (vat_main_t * vam) { vl_api_registration_t **regpp; @@ -130,7 +156,8 @@ maybe_register_api_client (vat_main_t * vam) am->shmem_hdr->application_restarts); vam->vl_input_queue = am->shmem_hdr->vl_input_queue; - api_sw_interface_dump (vam); + vat_register_interface_dump (vam); + vam->api_sw_interface_dump (vam); } static clib_error_t * @@ -149,7 +176,7 @@ api_command_fn (vlib_main_t * vm, maybe_register_api_client (vam); /* vec_validated in the init routine */ - _vec_len (vam->inbuf) = 0; + vec_set_len (vam->inbuf, 0); vam->input = &_input; @@ -234,13 +261,12 @@ api_command_fn (vlib_main_t * vm, if (vam->regenerate_interface_table) { vam->regenerate_interface_table = 0; - api_sw_interface_dump (vam); + vam->api_sw_interface_dump (vam); } unformat_free (vam->input); return 0; } -/* *INDENT-OFF* */ VLIB_CLI_COMMAND (api_command, static) = { .path = "binary-api", @@ -248,7 +274,6 @@ VLIB_CLI_COMMAND (api_command, static) = .function = api_command_fn, .is_mp_safe = 1, }; -/* *INDENT-ON* */ void api_cli_output (void *notused, const char *fmt, ...) |