format_odp_packet_device_name (u8 * s, va_list * args)
{
u32 i = va_arg (*args, u32);
- odp_packet_main_t *om = &odp_packet_main;
+ odp_packet_main_t *om = odp_packet_main;
odp_packet_if_t *oif = pool_elt_at_index (om->interfaces, i);
s = format (s, "odp-%s", oif->host_if_name);
vlib_node_runtime_t * node, vlib_frame_t * frame)
{
- odp_packet_main_t *om = &odp_packet_main;
+ odp_packet_main_t *om = odp_packet_main;
u32 *buffers = vlib_frame_args (frame);
u32 n_left = frame->n_vectors;
vnet_interface_output_runtime_t *rd = (void *) node->runtime_data;
odp_packet_set_interface_next_node (vnet_main_t * vnm, u32 hw_if_index,
u32 node_index)
{
- odp_packet_main_t *om = &odp_packet_main;
+ odp_packet_main_t *om = odp_packet_main;
vnet_hw_interface_t *hw = vnet_get_hw_interface (vnm, hw_if_index);
odp_packet_if_t *oif = pool_elt_at_index (om->interfaces, hw->dev_instance);
odp_packet_interface_admin_up_down (vnet_main_t * vnm, u32 hw_if_index,
u32 flags)
{
- odp_packet_main_t *om = &odp_packet_main;
+ odp_packet_main_t *om = odp_packet_main;
vnet_hw_interface_t *hw = vnet_get_hw_interface (vnm, hw_if_index);
odp_packet_if_t *oif = pool_elt_at_index (om->interfaces, hw->dev_instance);
u32 hw_flags;
#include <vnet/plugin/plugin.h>
#include <vpp/app/version.h>
+odp_packet_main_t *odp_packet_main;
+
static u32
odp_packet_eth_flag_change (vnet_main_t * vnm, vnet_hw_interface_t * hi,
u32 flags)
odp_packet_create_if (vlib_main_t * vm, u8 * host_if_name, u8 * hw_addr_set,
u32 * sw_if_index, u32 mode)
{
- odp_packet_main_t *om = &odp_packet_main;
+ odp_packet_main_t *om = odp_packet_main;
int ret = 0;
odp_packet_if_t *oif = 0;
u8 hw_addr[6];
odp_packet_delete_if (vlib_main_t * vm, u8 * host_if_name)
{
vnet_main_t *vnm = vnet_get_main ();
- odp_packet_main_t *om = &odp_packet_main;
+ odp_packet_main_t *om = odp_packet_main;
odp_packet_if_t *oif = 0;
uword *p;
vlib_thread_main_t *tm = vlib_get_thread_main ();
static clib_error_t *
odp_packet_init (vlib_main_t * vm)
{
- odp_packet_main_t *om = &odp_packet_main;
+ odp_packet_main_t *om;
vlib_thread_main_t *tm = vlib_get_thread_main ();
vlib_thread_registration_t *tr;
vlib_physmem_main_t *vpm = &vm->physmem_main;
odp_platform_init_t platform_params;
odp_pool_param_t params;
odp_pool_capability_t capa;
-
- memset (om, 0, sizeof (odp_packet_main_t));
- om->input_cpu_first_index = 0;
- om->input_cpu_count = 1;
- om->if_count = 0;
+ odp_shm_t shm;
+ odp_instance_t instance;
memset (&platform_params, 0, sizeof (platform_params));
platform_params.memory = 100;
- if (odp_init_global (&om->instance, NULL, &platform_params))
+ if (odp_init_global (&instance, NULL, &platform_params))
clib_warning ("Error:ODP global init failed");
- if (odp_init_local (om->instance, ODP_THREAD_CONTROL) != 0)
+ if (odp_init_local (instance, ODP_THREAD_CONTROL) != 0)
{
clib_warning ("Error: ODP local init failed");
- odp_term_global (om->instance);
+ odp_term_global (instance);
+
+ }
+ shm = odp_shm_reserve ("odp_packet_main", sizeof (odp_packet_main_t),
+ ODP_CACHE_LINE_SIZE, 0);
+ odp_packet_main = odp_shm_addr (shm);
+ if (odp_packet_main == NULL)
+ {
+ return clib_error_return (0, "Failed to initialize odp_packet");
}
+ om = odp_packet_main;
+ memset (om, 0, sizeof (odp_packet_main_t));
+ om->input_cpu_first_index = 0;
+ om->input_cpu_count = 1;
+ om->if_count = 0;
+ om->instance = instance;
+
odp_pool_capability (&capa);
if (capa.pkt.min_headroom != VLIB_BUFFER_PRE_DATA_SIZE)
{