X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvpp%2Fapi%2Fapi_main.c;h=47d974877e1cf5dd7e09afcc79a5991a57f6fcad;hb=f284c14c7bd8731367ba3527cdfffa610a8c6de4;hp=1d16f78ea88fee3c70f3ec8db11f040427104216;hpb=0aa4013e20471a7b23bc3252649c95c81b5d7519;p=vpp.git diff --git a/src/vpp/api/api_main.c b/src/vpp/api/api_main.c index 1d16f78ea88..47d974877e1 100644 --- a/src/vpp/api/api_main.c +++ b/src/vpp/api/api_main.c @@ -1,9 +1,11 @@ #include "vat.h" +#include +#include 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); } @@ -38,8 +40,29 @@ init_error_string_table (vat_main_t * vam) hash_set (vam->error_string_by_error_number, 99, "Misc"); } -static clib_error_t * -api_main_init (vlib_main_t * vm) +#if VPP_API_TEST_BUILTIN > 0 +static void +load_features (void) +{ + vat_registered_features_t *f; + vat_main_t *vam = &vat_main; + clib_error_t *error; + + f = vam->feature_function_registrations; + + while (f) + { + error = f->function (vam); + if (error) + { + clib_warning ("INIT FAILED"); + } + f = f->next; + } +} + +clib_error_t * +vat_builtin_main_init (vlib_main_t * vm) { vat_main_t *vam = &vat_main; int rv; @@ -56,10 +79,11 @@ api_main_init (vlib_main_t * vm) if (rv) clib_warning ("vat_plugin_init returned %d", rv); + load_features (); + return 0; } - -VLIB_MAIN_LOOP_ENTER_FUNCTION (api_main_init); +#endif void vat_plugin_hash_create (void) @@ -71,6 +95,30 @@ vat_plugin_hash_create (void) vam->help_by_name = hash_create_string (0, sizeof (uword)); } +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) { @@ -108,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 * @@ -127,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; @@ -212,7 +261,7 @@ 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;