X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvlib%2Finit.h;h=68ac2f367170a7fdacccd9d05e7d3a2e0217a191;hb=refs%2Fchanges%2F21%2F28421%2F2;hp=6d2711489d8805df6bf6d6fedf33ad8dd99cee45;hpb=f8d50682cd1245f6f5ce4c846ca6f1bdc11255a6;p=vpp.git diff --git a/src/vlib/init.h b/src/vlib/init.h index 6d2711489d8..68ac2f36717 100644 --- a/src/vlib/init.h +++ b/src/vlib/init.h @@ -317,6 +317,19 @@ static void __vlib_rm_config_function_##x (void) \ _error; \ }) +#define vlib_call_main_loop_enter_function(vm, x) \ + ({ \ + extern vlib_init_function_t * VLIB_MAIN_LOOP_ENTER_FUNCTION_SYMBOL (x); \ + vlib_init_function_t * _f = VLIB_MAIN_LOOP_ENTER_FUNCTION_SYMBOL (x); \ + clib_error_t * _error = 0; \ + if (! hash_get (vm->init_functions_called, _f)) \ + { \ + hash_set1 (vm->init_functions_called, _f); \ + _error = _f (vm); \ + } \ + _error; \ + }) + /* External functions. */ clib_error_t *vlib_call_all_init_functions (struct vlib_main_t *vm); clib_error_t *vlib_call_all_config_functions (struct vlib_main_t *vm, @@ -328,7 +341,11 @@ clib_error_t *vlib_call_all_main_loop_exit_functions (struct vlib_main_t *vm); clib_error_t *vlib_call_init_exit_functions (struct vlib_main_t *vm, _vlib_init_function_list_elt_t ** headp, int call_once); - +clib_error_t *vlib_call_init_exit_functions_no_sort (struct vlib_main_t *vm, + _vlib_init_function_list_elt_t + ** headp, int call_once); +clib_error_t *vlib_sort_init_exit_functions (_vlib_init_function_list_elt_t + **); #define foreach_vlib_module_reference \ _ (node_cli) \ _ (trace_cli)