26 #include <vpp/app/version.h> 27 #include <vpp/vnet/config.h> 42 char *p,
path[PATH_MAX];
47 if ((rv = readlink (
"/proc/self/exe", path, PATH_MAX - 1)) == -1)
54 if ((p = strrchr (path,
'/')) == 0)
59 if ((p = strrchr (path,
'/')) == 0)
63 s =
format (0,
"%s/lib/" CLIB_TARGET_TRIPLET
"/vpp_plugins:" 64 "%s/lib/vpp_plugins", path, path);
68 s =
format (0,
"%s/lib/" CLIB_TARGET_TRIPLET
"/vpp_api_test_plugins:" 69 "%s/lib/vpp_api_test_plugins", path, path);
71 vat_plugin_path = (
char *) s;
77 #if VPP_API_TEST_BUILTIN > 0 92 #if VPP_API_TEST_BUILTIN > 0 111 uword main_heap_size = (1ULL << 30);
120 =
"ERROR: This binary requires CPU with %s extensions.\n";
122 if (!clib_cpu_supports_ ## a ()) \ 124 fprintf(stderr, msg, b); \ 152 if ((argc == 3) && !strncmp (argv[1],
"-c", 2))
161 fp = fopen (argv[2],
"r");
164 fprintf (stderr,
"open configuration file '%s' failed\n", argv[2]);
167 argv_ = calloc (1,
sizeof (
char *));
173 arg = strndup (argv[0], 1024);
184 if (fgets (inbuf, 4096, fp) == 0)
186 p = strtok (inbuf,
" \t\n");
192 char **tmp = realloc (argv_, argc_ *
sizeof (
char *));
196 arg = strndup (p, 1024);
199 argv_[argc_ - 1] = arg;
200 p = strtok (NULL,
" \t\n");
206 char **tmp = realloc (argv_, (argc_ + 1) *
sizeof (
char *));
223 for (i = 1; i < (argc - 1); i++)
225 if (!strncmp (argv[i],
"plugin_path", 11))
230 if (!strncmp (argv[i],
"test_plugin_path", 16))
235 else if (!strncmp (argv[i],
"heapsize", 8))
237 sizep = (
u8 *) argv[i + 1];
239 while (*sizep >=
'0' && *sizep <=
'9')
242 size += *sizep++ -
'0';
248 "warning: heapsize parse error '%s', use default %lld\n",
249 argv[i], (
long long int) main_heap_size);
253 main_heap_size =
size;
255 if (*sizep ==
'g' || *sizep ==
'G')
256 main_heap_size <<= 30;
257 else if (*sizep ==
'm' || *sizep ==
'M')
258 main_heap_size <<= 20;
260 else if (!strncmp (argv[i],
"main-core", 9))
265 unsigned long x = strtol (argv[++i], 0, 0);
276 CPU_SET (main_core, &cpuset);
277 pthread_setaffinity_np (pthread_self (),
sizeof (cpu_set_t), &cpuset);
298 int rv __attribute__ ((unused)) =
299 write (2,
"Main heap allocation failure!\r\n", 31);
380 static int recursion_block;
397 #ifdef BARRIER_TRACING 446 return strcmp ((
char *) n1->
name, (
char *) n2->
name);
454 clib_bihash_8_8_t *
h;
455 u64 total_actual_virt_size = 0;
456 u64 total_configured_virt_size = 0;
457 u64 actual_virt_size;
458 u64 configured_virt_size;
469 if (alloc_arena (h) || verbose)
473 configured_virt_size = h->memory_size;
474 actual_virt_size = alloc_arena (h) ? h->memory_size : 0ULL;
475 this->actual_virt_size = actual_virt_size;
476 this->configured_virt_size = configured_virt_size;
477 total_actual_virt_size += actual_virt_size;
478 total_configured_virt_size += configured_virt_size;
486 for (i = 0; i <
vec_len (names); i++)
490 names[i].actual_virt_size,
506 .path =
"show bihash",
507 .short_help =
"show bihash",
512 #ifdef CLIB_SANITIZE_ADDR 515 __asan_default_options (
void)
517 return VPP_SANITIZE_ADDR_OPTIONS;
int vlib_unix_main(int argc, char *argv[])
u32 vlib_app_num_thread_stacks_needed(void)
vlib_main_t vlib_global_main
static clib_error_t * srp_init(vlib_main_t *vm)
void vlib_unix_cli_set_prompt(char *prompt)
Set the CLI prompt.
static u32 clib_get_current_numa_node()
void vl_msg_api_barrier_sync(void)
static clib_error_t * plugin_path_config(vlib_main_t *vm, unformat_input_t *input)
static clib_error_t * heapsize_config(vlib_main_t *vm, unformat_input_t *input)
#define vlib_mark_init_function_complete(vm, x)
void vhost_user_unmap_all(void)
#define vec_add1(V, E)
Add 1 element to end of vector (unspecified alignment).
#define vec_add2(V, P, N)
Add N elements to end of vector V, return pointer to new elements in P.
static clib_error_t * test_plugin_path_config(vlib_main_t *vm, unformat_input_t *input)
#define vl_msg_api_barrier_trace_context(X)
static clib_error_t * show_bihash_command_fn(vlib_main_t *vm, unformat_input_t *input, vlib_cli_command_t *cmd)
#define vlib_worker_thread_barrier_sync(X)
char * vlib_default_runtime_dir
#define clib_error_return(e, args...)
void vl_msg_api_post_mortem_dump(void)
vlib_worker_thread_t * vlib_worker_threads
static int name_sort_cmp(void *a1, void *a2)
static clib_error_t * placeholder_path_config(vlib_main_t *vm, unformat_input_t *input)
const char * barrier_context
#define VLIB_CONFIG_FUNCTION(x, n,...)
void elog_post_mortem_dump(void)
uword * init_functions_called
sll srl srl sll sra u16x4 i
#define vec_free(V)
Free vector's memory (no header).
#define VLIB_CLI_COMMAND(x,...)
#define hash_create(elts, value_bytes)
void vlib_cli_output(vlib_main_t *vm, char *fmt,...)
void vat_plugin_hash_create(void)
void vl_msg_api_barrier_release(void)
static void vpe_main_init(vlib_main_t *vm)
static vlib_main_t * vlib_get_main(void)
#define vec_len(v)
Number of elements in vector (rvalue-only, NULL tolerant)
#define vec_sort_with_function(vec, f)
Sort a vector using the supplied element comparison function.
static void vpp_find_plugin_path()
void vlib_worker_thread_barrier_release(vlib_main_t *vm)
int main(int argc, char *argv[])
void ** clib_all_bihashes
char * vlib_plugin_app_version
void * clib_mem_init_thread_safe(void *memory, uword memory_size)
void vl_msg_api_set_first_available_msg_id(u16 first_avail)
static void * clib_mem_set_per_numa_heap(u8 *new_heap)