X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=vpp%2Fvnet%2Fmain.c;h=2540083982b1524b3b3968c18db16c50310fd3f1;hb=1c80e831b728ab378949714d5059a0b5b1822a0a;hp=84e071c77041b1e83f87e2c3896664046bfc82f6;hpb=161781988918e2403c0fb1e7f6ebe0d3051985b4;p=vpp.git diff --git a/vpp/vnet/main.c b/vpp/vnet/main.c index 84e071c7704..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,115 +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, map_init))) - return error; - if ((error = vlib_call_init_function (vm, sixrd_init))) - return error; - if ((error = vlib_call_init_function (vm, llc_init))) - return error; - if ((error = vlib_call_init_function (vm, snap_init))) - return error; - if ((error = vlib_call_init_function (vm, cdp_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 IPSEC > 0 - if ((error = vlib_call_init_function (vm, ipsec_init))) - return error; -#endif /* IPSEC */ -#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, 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 IPV6SR > 0 - if ((error = vlib_call_init_function (vm, sr_init))) - return error; -#endif - 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 VCGN > 0 - if ((error = vlib_call_init_function (vm, vcgn_init))) - return error; -#endif - 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 */ @@ -145,12 +54,43 @@ 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: vpp -c /etc/vpp/startup.conf @@ -252,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 { @@ -354,32 +303,6 @@ u32 vlib_app_num_thread_stacks_needed (void) * messages! */ -#if IPV6SR == 0 -#define foreach_ipv6_sr_stub_node \ -_(ipsec-output, ipsec_output) -#else -#define foreach_ipv6_sr_stub_node -#endif - -#define _(n,m) \ -static uword \ -m##_node_fn (vlib_main_t *vm, \ - vlib_node_runtime_t *node, \ - vlib_frame_t *frame) \ -{ \ - clib_warning("unimplemented, leaking buffers..."); \ - return 0; \ -} \ - \ -VLIB_REGISTER_NODE(m##_node) = { \ - .function = m##_node_fn, \ - .name = #n, \ - .vector_size = sizeof(u32), \ - .type = VLIB_NODE_TYPE_INTERNAL, \ -}; -foreach_ipv6_sr_stub_node; -#undef _ - #if CLIB_DEBUG > 0 static clib_error_t *