21 #include <vpp/app/version.h> 35 char *p, path[PATH_MAX];
40 if ((rv = readlink (
"/proc/self/exe", path, PATH_MAX - 1)) == -1)
47 if ((p = strrchr (path,
'/')) == 0)
52 if ((p = strrchr (path,
'/')) == 0)
56 s =
format (0,
"%s/lib/vpp_plugins", path);
58 s =
format (s,
":%s/lib64/vpp_plugins", path);
63 s =
format (0,
"%s/lib/vpp_api_test_plugins", path);
65 s =
format (s,
":%s/lib64/vpp_api_test_plugins", path);
68 vat_plugin_path = (
char *) s;
98 main (
int argc,
char *argv[])
103 uword main_heap_size = (1ULL << 30);
109 =
"ERROR: This binary requires CPU with %s extensions.\n";
111 if (!clib_cpu_supports_ ## a ()) \ 113 fprintf(stderr, msg, b); \ 141 if ((argc == 3) && !strncmp (argv[1],
"-c", 2))
150 fp = fopen (argv[2],
"r");
153 fprintf (stderr,
"open configuration file '%s' failed\n", argv[2]);
156 argv_ = calloc (1,
sizeof (
char *));
159 arg = strndup (argv[0], 1024);
166 if (fgets (inbuf, 4096, fp) == 0)
168 p = strtok (inbuf,
" \t\n");
174 char **tmp = realloc (argv_, argc_ *
sizeof (
char *));
178 arg = strndup (p, 1024);
181 argv_[argc_ - 1] = arg;
182 p = strtok (
NULL,
" \t\n");
188 char **tmp = realloc (argv_, (argc_ + 1) *
sizeof (
char *));
205 for (i = 1; i < (argc - 1); i++)
207 if (!strncmp (argv[i],
"plugin_path", 11))
212 else if (!strncmp (argv[i],
"heapsize", 8))
214 sizep = (
u8 *) argv[i + 1];
216 while (*sizep >=
'0' && *sizep <=
'9')
219 size += *sizep++ -
'0';
225 "warning: heapsize parse error '%s', use default %lld\n",
226 argv[i], (
long long int) main_heap_size);
230 main_heap_size =
size;
232 if (*sizep ==
'g' || *sizep ==
'G')
233 main_heap_size <<= 30;
234 else if (*sizep ==
'm' || *sizep ==
'M')
235 main_heap_size <<= 20;
254 int rv __attribute__ ((unused)) =
255 write (2,
"Main heap allocation failure!\r\n", 31);
322 static int recursion_block;
339 #ifdef BARRIER_TRACING 379 u64 *p = (
u64 *) 0xdefec8ed;
383 .format =
"deliberate crash: touching %x",.format_args =
"i4",};
395 .path =
"test crash",
396 .short_help =
"crash the bus!",
int vlib_unix_main(int argc, char *argv[])
u32 vlib_app_num_thread_stacks_needed(void)
vlib_main_t vlib_global_main
void vl_msg_api_barrier_sync(void)
static clib_error_t * plugin_path_config(vlib_main_t *vm, unformat_input_t *input)
void vlib_unix_cli_set_prompt(char *prompt)
Set the CLI prompt.
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 vl_msg_api_barrier_trace_context(X)
#define vlib_worker_thread_barrier_sync(X)
char * vlib_default_runtime_dir
#define clib_error_return(e, args...)
static clib_error_t * srp_init(vlib_main_t *vm)
void vl_msg_api_post_mortem_dump(void)
vlib_worker_thread_t * vlib_worker_threads
#define VLIB_CONFIG_FUNCTION(x, n,...)
void elog_post_mortem_dump(void)
static void elog(elog_main_t *em, elog_event_type_t *type, u32 data)
Log a single-datum event.
uword * init_functions_called
void * clib_mem_init(void *heap, uword size)
#define vec_free(V)
Free vector's memory (no header).
static clib_error_t * test_crash_command_fn(vlib_main_t *vm, unformat_input_t *input, vlib_cli_command_t *cmd)
#define ELOG_TYPE_DECLARE(f)
#define VLIB_CLI_COMMAND(x,...)
#define hash_create(elts, value_bytes)
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)
static void vpp_find_plugin_path()
void vlib_worker_thread_barrier_release(vlib_main_t *vm)
int main(int argc, char *argv[])
char * vlib_plugin_app_version
void vl_msg_api_set_first_available_msg_id(u16 first_avail)