aboutsummaryrefslogtreecommitdiffstats
path: root/src/vpp/api/api_main.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/vpp/api/api_main.c')
-rw-r--r--src/vpp/api/api_main.c39
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, ...)