static clib_error_t * ethernet_init (vlib_main_t * vm) { ethernet_main_t *em = ðernet_main; clib_error_t *error; /* * Set up the L2 path now, or we'll wipe out the L2 ARP * registration set up by ethernet_arp_init. */ if ((error = vlib_call_init_function (vm, l2_init))) return error; em->vlib_main = vm; em->type_info_by_name = hash_create_string (0, sizeof (uword)); em->type_info_by_type = hash_create (0, sizeof (uword)); #define ethernet_type(n,s) add_type (em, ETHERNET_TYPE_##s, #s); #include "types.def" #undef ethernet_type if ((error = vlib_call_init_function (vm, llc_init))) return error; if ((error = vlib_call_init_function (vm, ethernet_input_init))) return error; if ((error = vlib_call_init_function (vm, vnet_feature_init))) return error; return 0; }
static clib_error_t * unix_main_init (vlib_main_t * vm) { unix_main_t *um = &unix_main; um->vlib_main = vm; return vlib_call_init_function (vm, unix_input_init); }
static clib_error_t * ethernet_init (vlib_main_t * vm) { ethernet_main_t * em = ðernet_main; clib_error_t * error; em->vlib_main = vm; em->type_info_by_name = hash_create_string (0, sizeof (uword)); em->type_info_by_type = hash_create (0, sizeof (uword)); #define ethernet_type(n,s) add_type (em, ETHERNET_TYPE_##s, #s); #include "types.def" #undef ethernet_type if ((error = vlib_call_init_function (vm, llc_init))) return error; if ((error = vlib_call_init_function (vm, ethernet_input_init))) return error; if ((error = vlib_call_init_function (vm, ethernet_cli_init))) return error; return error; }
static clib_error_t * udp_init (vlib_main_t * vm) { ip_main_t * im = &ip_main; ip_protocol_info_t * pi; clib_error_t * error; error = vlib_call_init_function (vm, ip_main_init); if (! error) { pi = ip_get_protocol_info (im, IP_PROTOCOL_UDP); pi->format_header = format_udp_header; pi->unformat_pg_edit = unformat_pg_udp_header; } return 0; }
clib_error_t * vnet_main_init (vlib_main_t * vm) { vnet_main_t *vnm = vnet_get_main (); clib_error_t *error; u32 hw_if_index; vnet_hw_interface_t *hw; if ((error = vlib_call_init_function (vm, vnet_interface_init))) return error; if ((error = vlib_call_init_function (vm, fib_module_init))) return error; if ((error = vlib_call_init_function (vm, mfib_module_init))) return error; if ((error = vlib_call_init_function (vm, ip_main_init))) return error; if ((error = vlib_call_init_function (vm, ip4_lookup_init))) return error; if ((error = vlib_call_init_function (vm, ip6_lookup_init))) return error; if ((error = vlib_call_init_function (vm, mpls_init))) return error; vnm->vlib_main = vm; hw_if_index = vnet_register_interface (vnm, vnet_local_interface_device_class.index, /* instance */ 0, vnet_local_interface_hw_class.index, /* instance */ 0); hw = vnet_get_hw_interface (vnm, hw_if_index); vnm->local_interface_hw_if_index = hw_if_index; vnm->local_interface_sw_if_index = hw->sw_if_index; /* the local interface is used as an input interface when decapping from * an IPSEC tunnel. so it needs to be IP enabled */ ip4_sw_interface_enable_disable (hw->sw_if_index, 1); ip6_sw_interface_enable_disable (hw->sw_if_index, 1); return 0; }
clib_error_t * vnet_main_init (vlib_main_t * vm) { vnet_main_t * vnm = vnet_get_main(); clib_error_t * error; u32 hw_if_index; vnet_hw_interface_t * hw; if ((error = vlib_call_init_function (vm, vnet_interface_init))) return error; vnm->vlib_main = vm; hw_if_index = vnet_register_interface (vnm, vnet_local_interface_device_class.index, /* instance */ 0, vnet_local_interface_hw_class.index, /* instance */ 0); hw = vnet_get_hw_interface (vnm, hw_if_index); vnm->local_interface_hw_if_index = hw_if_index; vnm->local_interface_sw_if_index = hw->sw_if_index; return 0; }
clib_error_t * ip_main_init (vlib_main_t * vm) { ip_main_t * im = &ip_main; clib_error_t * error = 0; memset (im, 0, sizeof (im[0])); { ip_protocol_info_t * pi; u32 i; #define ip_protocol(n,s) \ do { \ vec_add2 (im->protocol_infos, pi, 1); \ pi->protocol = n; \ pi->name = (u8 *) #s; \ } while (0); #include "protocols.def" #undef ip_protocol im->protocol_info_by_name = hash_create_string (0, sizeof (uword)); for (i = 0; i < vec_len (im->protocol_infos); i++) { pi = im->protocol_infos + i; hash_set_mem (im->protocol_info_by_name, pi->name, i); hash_set (im->protocol_info_by_protocol, pi->protocol, i); } } { tcp_udp_port_info_t * pi; u32 i; static char * port_names[] = { #define ip_port(s,n) #s, #include "ports.def" #undef ip_port }; static u16 ports[] = { #define ip_port(s,n) n, #include "ports.def" #undef ip_port }; vec_resize (im->port_infos, ARRAY_LEN (port_names)); im->port_info_by_name = hash_create_string (0, sizeof (uword)); for (i = 0; i < vec_len (im->port_infos); i++) { pi = im->port_infos + i; pi->port = clib_host_to_net_u16 (ports[i]); pi->name = (u8 *) port_names[i]; hash_set_mem (im->port_info_by_name, pi->name, i); hash_set (im->port_info_by_port, pi->port, i); } } if ((error = vlib_call_init_function (vm, vnet_main_init))) return error; if ((error = vlib_call_init_function (vm, ip4_init))) return error; if ((error = vlib_call_init_function (vm, ip6_init))) return error; if ((error = vlib_call_init_function (vm, icmp4_init))) return error; if ((error = vlib_call_init_function (vm, icmp6_init))) return error; if ((error = vlib_call_init_function (vm, ip6_hop_by_hop_init))) return error; if ((error = vlib_call_init_function (vm, udp_local_init))) return error; if ((error = vlib_call_init_function (vm, udp_init))) return error; if ((error = vlib_call_init_function (vm, ip_classify_init))) return error; if ((error = vlib_call_init_function (vm, input_acl_init))) return error; return error; }
ethernet_main_t * ethernet_get_main (vlib_main_t * vm) { vlib_call_init_function (vm, ethernet_init); return ðernet_main; }