diff options
Diffstat (limited to 'src/vpp/vnet/main.c')
-rw-r--r-- | src/vpp/vnet/main.c | 53 |
1 files changed, 37 insertions, 16 deletions
diff --git a/src/vpp/vnet/main.c b/src/vpp/vnet/main.c index e9cef5e76a8..c57efd59a62 100644 --- a/src/vpp/vnet/main.c +++ b/src/vpp/vnet/main.c @@ -15,9 +15,15 @@ #define _GNU_SOURCE #include <pthread.h> +#ifdef __FreeBSD__ +#include <pthread_np.h> +#endif /* __FreeBSD__ */ #include <sched.h> +#include <vppinfra/clib.h> #include <vppinfra/cpu.h> +#include <vppinfra/bitmap.h> +#include <vppinfra/unix.h> #include <vlib/vlib.h> #include <vlib/unix/unix.h> #include <vlib/threads.h> @@ -39,25 +45,26 @@ static void vpp_find_plugin_path () { extern char *vat_plugin_path; - char *p, path[PATH_MAX]; - int rv; - u8 *s; + char *p; + u8 *s, *path; /* find executable path */ - if ((rv = readlink ("/proc/self/exe", path, PATH_MAX - 1)) == -1) + path = os_get_exec_path (); + + if (!path) return; - /* readlink doesn't provide null termination */ - path[rv] = 0; + /* add null termination */ + vec_add1 (path, 0); /* strip filename */ - if ((p = strrchr (path, '/')) == 0) - return; + if ((p = strrchr ((char *) path, '/')) == 0) + goto done; *p = 0; /* strip bin/ */ - if ((p = strrchr (path, '/')) == 0) - return; + if ((p = strrchr ((char *) path, '/')) == 0) + goto done; *p = 0; s = format (0, "%s/" CLIB_LIB_DIR "/vpp_plugins", path, path); @@ -67,6 +74,9 @@ vpp_find_plugin_path () s = format (0, "%s/" CLIB_LIB_DIR "/vpp_api_test_plugins", path, path); vec_add1 (s, 0); vat_plugin_path = (char *) s; + +done: + vec_free (path); } static void @@ -112,7 +122,7 @@ main (int argc, char *argv[]) clib_mem_page_sz_t default_log2_hugepage_sz = CLIB_MEM_PAGE_SZ_UNKNOWN; unformat_input_t input, sub_input; u8 *s = 0, *v = 0; - int main_core = 1; + int main_core = ~0; cpu_set_t cpuset; void *main_heap; @@ -268,6 +278,10 @@ main (int argc, char *argv[]) main_core = x; } } + else if (!strncmp (argv[i], "interactive", 11)) + unix_main.flags |= UNIX_FLAG_INTERACTIVE; + else if (!strncmp (argv[i], "nosyslog", 8)) + unix_main.flags |= UNIX_FLAG_NOSYSLOG; } defaulted: @@ -316,9 +330,18 @@ defaulted: unformat_free (&input); /* set process affinity for main thread */ - CPU_ZERO (&cpuset); - CPU_SET (main_core, &cpuset); - pthread_setaffinity_np (pthread_self (), sizeof (cpu_set_t), &cpuset); + if (main_core != ~0) + { + CPU_ZERO (&cpuset); + CPU_SET (main_core, &cpuset); + if (pthread_setaffinity_np (pthread_self (), sizeof (cpu_set_t), + &cpuset)) + { + clib_unix_error ( + "pthread_setaffinity_np() on cpu %d failed for main thread", + main_core); + } + } /* Set up the plugin message ID allocator right now... */ vl_msg_api_set_first_available_msg_id (VL_MSG_MEMCLNT_LAST + 1); @@ -495,14 +518,12 @@ show_bihash_command_fn (vlib_main_t * vm, 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 */ |