X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=vpp%2Fvnet%2Fmain.c;h=2540083982b1524b3b3968c18db16c50310fd3f1;hb=1c80e831b728ab378949714d5059a0b5b1822a0a;hp=da1ec9a4d4f18c273355af326e34c424b8529864;hpb=317be0349275f1f461028853d936670729591796;p=vpp.git diff --git a/vpp/vnet/main.c b/vpp/vnet/main.c index da1ec9a4d4f..2540083982b 100644 --- a/vpp/vnet/main.c +++ b/vpp/vnet/main.c @@ -12,6 +12,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + +#include #include #include #include @@ -19,107 +21,22 @@ #include -/** \mainpage Virtual Packet Edge Documentation - * \section intro_sec Introduction - * - * VPE is a specific vector packet processing application, - * designed to steer packets to/from tenant virtual machines. - * - */ +#if DPDK +#include +#endif -static clib_error_t * +static void vpe_main_init (vlib_main_t * vm) { - clib_error_t * error = 0; - void vnet_library_plugin_reference(void); - if (CLIB_DEBUG > 0) vlib_unix_cli_set_prompt ("DBGvpp# "); else vlib_unix_cli_set_prompt ("vpp# "); - vnet_library_plugin_reference(); - - if ((error = vlib_call_init_function (vm, pg_init))) - return error; - if ((error = vlib_call_init_function (vm, ip_main_init))) - return error; - if ((error = vlib_call_init_function (vm, osi_init))) - return error; - if ((error = vlib_call_init_function (vm, l2_init))) - return error; - if ((error = vlib_call_init_function (vm, ethernet_init))) - return error; - if ((error = vlib_call_init_function (vm, ethernet_arp_init))) - return error; - if ((error = vlib_call_init_function (vm, sr_init))) - return error; - if ((error = vlib_call_init_function (vm, map_init))) - return error; - if ((error = vlib_call_init_function (vm, sixrd_init))) - return error; - if ((error = vlib_call_init_function (vm, nsh_gre_init))) - return error; - if ((error = vlib_call_init_function (vm, nsh_vxlan_gpe_init))) - return error; - if ((error = vlib_call_init_function (vm, lisp_gpe_init))) - return error; - -#if DPDK == 1 - if ((error = vlib_call_init_function (vm, dpdk_init))) - return error; - if ((error = vlib_call_init_function (vm, dpdk_thread_init))) - return error; - if ((error = vlib_call_init_function (vm, vhost_user_init))) - return error; - if ((error = vlib_call_init_function (vm, ipsec_init))) - return error; -#endif - if ((error = vlib_call_init_function (vm, vlibmemory_init))) - return error; - if ((error = vlib_call_init_function (vm, l2tp_init))) - return error; - if ((error = vlib_call_init_function (vm, gre_init))) - return error; - if ((error = vlib_call_init_function (vm, gre_interface_init))) - return error; - if ((error = vlib_call_init_function (vm, mpls_init))) - return error; - if ((error = vlib_call_init_function (vm, mpls_interface_init))) - return error; - if ((error = vlib_call_init_function (vm, dhcp_proxy_init))) - return error; - if ((error = vlib_call_init_function (vm, dhcpv6_proxy_init))) - return error; - if ((error = vlib_call_init_function (vm, tapcli_init))) - return error; - if ((error = vlib_call_init_function (vm, tuntap_init))) - return error; - if ((error = vlib_call_init_function (vm, gdb_func_init))) - return error; - if ((error = unix_physmem_init - (vm, 0 /* fail_if_physical_memory_not_present */))) - return error; - if ((error = vlib_call_init_function (vm, tuntap_init))) - return error; - if ((error = vlib_call_init_function (vm, sr_init))) - return error; - if ((error = vlib_call_init_function (vm, l2_classify_init))) - return error; - if ((error = vlib_call_init_function (vm, policer_init))) - return error; - if ((error = vlib_call_init_function (vm, vxlan_init))) - return error; - if ((error = vlib_call_init_function (vm, vcgn_init))) - return error; - if ((error = vlib_call_init_function (vm, li_init))) - return error; - - return error; + /* Turn off network stack components which we don't want */ + vlib_mark_init_function_complete (vm, srp_init); } -VLIB_INIT_FUNCTION (vpe_main_init); - /* * Load plugins from /usr/lib/vpp_plugins by default */ @@ -137,15 +54,46 @@ void *vnet_get_handoff_structure (void) int main (int argc, char * argv[]) { int i; + vlib_main_t * vm = &vlib_global_main; void vl_msg_api_set_first_available_msg_id (u16); uword main_heap_size = (1ULL << 30); u8 * sizep; u32 size; void vlib_set_get_handoff_structure_cb (void *cb); +#if __x86_64__ + const char * msg = "ERROR: This binary requires CPU with %s extensions.\n"; +#define _(a,b) \ + if (!clib_cpu_supports_ ## a ()) \ + { \ + fprintf(stderr, msg, b); \ + exit(1); \ + } + +#if __AVX2__ + _(avx2, "AVX2") +#endif +#if __AVX__ + _(avx, "AVX") +#endif +#if __SSE4_2__ + _(sse42, "SSE4.2") +#endif +#if __SSE4_1__ + _(sse41, "SSE4.1") +#endif +#if __SSSE3__ + _(ssse3, "SSSE3") +#endif +#if __SSE3__ + _(sse3, "SSE3") +#endif +#undef _ +#endif + /* * Load startup config from file. - * usage: vpe -c /etc/vpp/startup.conf + * usage: vpp -c /etc/vpp/startup.conf */ if ((argc == 3) && !strncmp(argv[1], "-c", 2)) { @@ -244,6 +192,15 @@ defaulted: /* Allocate main heap */ if (clib_mem_init (0, main_heap_size)) { + vm->init_functions_called = hash_create (0, /* value bytes */ 0); + vpe_main_init(vm); +#if DPDK +#if !DPDK_SHARED_LIB + dpdk_pmd_constructor_init(); +#endif +#else + unix_physmem_init(vm, 0 /* fail_if_physical_memory_not_present */); +#endif vlib_set_get_handoff_structure_cb (&vnet_get_handoff_structure); return vlib_unix_main (argc, argv); } else { @@ -339,6 +296,13 @@ u32 vlib_app_num_thread_stacks_needed (void) return 1; } +/* + * Depending on the configuration selected above, + * it may be necessary to generate stub graph nodes. + * It is never OK to ignore "node 'x' refers to unknown node 'y' + * messages! + */ + #if CLIB_DEBUG > 0 static clib_error_t *