X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvpp%2Fvnet%2Fmain.c;h=397cf8328c5f5484b6d9960c2e54dd5ed8c2d02c;hb=f2b4a375d68b29130801c17f05ae66294d007d90;hp=89dfedcd015a10a6424932fca509d90483a0f4d9;hpb=a0f0c964049d16155a49ef4cf986a16c34acfaec;p=vpp.git diff --git a/src/vpp/vnet/main.c b/src/vpp/vnet/main.c index 89dfedcd015..397cf8328c5 100644 --- a/src/vpp/vnet/main.c +++ b/src/vpp/vnet/main.c @@ -20,17 +20,20 @@ #include #include #include +#include #include #include #include +#include #include #include /* * Load plugins from /usr/lib/vpp_plugins by default */ -char *vlib_plugin_path = "/usr/lib/vpp_plugins"; +char *vlib_plugin_path = NULL; char *vlib_plugin_app_version = VPP_BUILD_VER; +char *vat_plugin_path = NULL; static void vpp_find_plugin_path () @@ -57,11 +60,13 @@ vpp_find_plugin_path () return; *p = 0; - s = format (0, "%s/lib/vpp_plugins", path); + s = format (0, "%s/lib/" CLIB_TARGET_TRIPLET "/vpp_plugins:" + "%s/lib/vpp_plugins", path, path); vec_add1 (s, 0); vlib_plugin_path = (char *) s; - s = format (0, "%s/lib/vpp_api_test_plugins", path); + s = format (0, "%s/lib/" CLIB_TARGET_TRIPLET "/vpp_api_test_plugins:" + "%s/lib/vpp_api_test_plugins", path, path); vec_add1 (s, 0); vat_plugin_path = (char *) s; } @@ -69,7 +74,9 @@ vpp_find_plugin_path () static void vpe_main_init (vlib_main_t * vm) { +#if VPP_API_TEST_BUILTIN > 0 void vat_plugin_hash_create (void); +#endif if (CLIB_DEBUG > 0) vlib_unix_cli_set_prompt ("DBGvpp# "); @@ -82,9 +89,12 @@ vpe_main_init (vlib_main_t * vm) /* * Create the binary api plugin hashes before loading plugins */ +#if VPP_API_TEST_BUILTIN > 0 vat_plugin_hash_create (); +#endif - vpp_find_plugin_path (); + if (!vlib_plugin_path) + vpp_find_plugin_path (); } /* @@ -101,8 +111,12 @@ main (int argc, char *argv[]) uword main_heap_size = (1ULL << 30); u8 *sizep; u32 size; + clib_mem_page_sz_t main_heap_log2_page_sz = CLIB_MEM_PAGE_SZ_DEFAULT; + unformat_input_t input, sub_input; + u8 *s = 0, *v = 0; int main_core = 1; cpu_set_t cpuset; + void *main_heap; #if __x86_64__ CLIB_UNUSED (const char *msg) @@ -216,6 +230,11 @@ main (int argc, char *argv[]) if (i < (argc - 1)) vlib_plugin_path = argv[++i]; } + if (!strncmp (argv[i], "test_plugin_path", 16)) + { + if (i < (argc - 1)) + vat_plugin_path = argv[++i]; + } else if (!strncmp (argv[i], "heapsize", 8)) { sizep = (u8 *) argv[i + 1]; @@ -252,9 +271,48 @@ main (int argc, char *argv[]) } } } - defaulted: + /* temporary heap */ + clib_mem_init (0, 1 << 20); + unformat_init_command_line (&input, (char **) argv); + + while (unformat_check_input (&input) != UNFORMAT_END_OF_INPUT) + { + if (unformat (&input, "memory %v", &v)) + { + unformat_init_vector (&sub_input, v); + v = 0; + while (unformat_check_input (&sub_input) != UNFORMAT_END_OF_INPUT) + { + if (unformat (&sub_input, "main-heap-size %U", + unformat_memory_size, &main_heap_size)) + ; + else if (unformat (&sub_input, "main-heap-page-size %U", + unformat_log2_page_size, + &main_heap_log2_page_sz)) + ; + else + { + fformat (stderr, "unknown 'memory' config input '%U'\n", + format_unformat_error, &sub_input); + exit (1); + } + + } + unformat_free (&sub_input); + } + else if (!unformat (&input, "%s %v", &s, &v)) + break; + + vec_reset_length (s); + vec_reset_length (v); + } + vec_free (s); + vec_free (v); + + unformat_free (&input); + /* set process affinity for main thread */ CPU_ZERO (&cpuset); CPU_SET (main_core, &cpuset); @@ -263,9 +321,18 @@ defaulted: /* Set up the plugin message ID allocator right now... */ vl_msg_api_set_first_available_msg_id (VL_MSG_FIRST_AVAILABLE); - /* Allocate main heap */ - if (clib_mem_init_thread_safe (0, main_heap_size)) + /* destroy temporary heap and create main one */ + clib_mem_destroy (); + + if ((main_heap = clib_mem_init_with_page_size (main_heap_size, + main_heap_log2_page_sz))) { + /* Figure out which numa runs the main thread */ + __os_numa_index = clib_get_current_numa_node (); + + /* and use the main heap as that numa's numa heap */ + clib_mem_set_per_numa_heap (main_heap); + vm->init_functions_called = hash_create (0, /* value bytes */ 0); vpe_main_init (vm); return vlib_unix_main (argc, argv); @@ -281,27 +348,23 @@ defaulted: } static clib_error_t * -heapsize_config (vlib_main_t * vm, unformat_input_t * input) +memory_config (vlib_main_t * vm, unformat_input_t * input) { - u32 junk; + return 0; +} - while (unformat_check_input (input) != UNFORMAT_END_OF_INPUT) - { - if (unformat (input, "%dm", &junk) - || unformat (input, "%dM", &junk) - || unformat (input, "%dg", &junk) || unformat (input, "%dG", &junk)) - return 0; - else - return clib_error_return (0, "unknown input '%U'", - format_unformat_error, input); - } +VLIB_CONFIG_FUNCTION (memory_config, "memory"); + +static clib_error_t * +heapsize_config (vlib_main_t * vm, unformat_input_t * input) +{ return 0; } VLIB_CONFIG_FUNCTION (heapsize_config, "heapsize"); static clib_error_t * -plugin_path_config (vlib_main_t * vm, unformat_input_t * input) +placeholder_path_config (vlib_main_t * vm, unformat_input_t * input) { u8 *junk; @@ -319,8 +382,22 @@ plugin_path_config (vlib_main_t * vm, unformat_input_t * input) return 0; } +static clib_error_t * +plugin_path_config (vlib_main_t * vm, unformat_input_t * input) +{ + return placeholder_path_config (vm, input); +} + VLIB_CONFIG_FUNCTION (plugin_path_config, "plugin_path"); +static clib_error_t * +test_plugin_path_config (vlib_main_t * vm, unformat_input_t * input) +{ + return placeholder_path_config (vm, input); +} + +VLIB_CONFIG_FUNCTION (test_plugin_path_config, "test_plugin_path"); + void vl_msg_api_post_mortem_dump (void); void elog_post_mortem_dump (void); @@ -392,6 +469,46 @@ vlib_app_num_thread_stacks_needed (void) * messages! */ +#include + +static clib_error_t * +show_bihash_command_fn (vlib_main_t * vm, + unformat_input_t * input, vlib_cli_command_t * cmd) +{ + int i; + clib_bihash_8_8_t *h; + int verbose = 0; + + if (unformat (input, "verbose")) + verbose = 1; + + for (i = 0; i < vec_len (clib_all_bihashes); i++) + { + h = (clib_bihash_8_8_t *) clib_all_bihashes[i]; + vlib_cli_output (vm, "\n%U", h->fmt_fn, h, verbose); + } + + return 0; +} + +/* *INDENT-OFF* */ +VLIB_CLI_COMMAND (show_bihash_command, static) = +{ + .path = "show bihash", + .short_help = "show bihash", + .function = show_bihash_command_fn, +}; +/* *INDENT-ON* */ + +#ifdef CLIB_SANITIZE_ADDR +/* default options for Address Sanitizer */ +const char * +__asan_default_options (void) +{ + return VPP_SANITIZE_ADDR_OPTIONS; +} +#endif /* CLIB_SANITIZE_ADDR */ + /* * fd.io coding-style-patch-verification: ON *