memif: fix vpp to go link up immediately on admin up
Type: improvement Previously, memif would check every 3 seconds to see if an interface had gone admin up. Now it does as soon as admin up occurs. Signed-off-by: Ed Warnicke <hagbard@gmail.com> Change-Id: I808699cd5980fa162c34ac977f43d00ed6b67115 Signed-off-by: Ed Warnicke <hagbard@gmail.com>
This commit is contained in:

committed by
Damjan Marion

parent
a4b0541f64
commit
acaee3d36e
@@ -474,22 +474,6 @@ memif_interface_rx_mode_change (vnet_main_t * vnm, u32 hw_if_index, u32 qid,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static clib_error_t *
|
||||
memif_interface_admin_up_down (vnet_main_t * vnm, u32 hw_if_index, u32 flags)
|
||||
{
|
||||
memif_main_t *mm = &memif_main;
|
||||
vnet_hw_interface_t *hw = vnet_get_hw_interface (vnm, hw_if_index);
|
||||
memif_if_t *mif = pool_elt_at_index (mm->interfaces, hw->dev_instance);
|
||||
static clib_error_t *error = 0;
|
||||
|
||||
if (flags & VNET_SW_INTERFACE_FLAG_ADMIN_UP)
|
||||
mif->flags |= MEMIF_IF_FLAG_ADMIN_UP;
|
||||
else
|
||||
mif->flags &= ~MEMIF_IF_FLAG_ADMIN_UP;
|
||||
|
||||
return error;
|
||||
}
|
||||
|
||||
static clib_error_t *
|
||||
memif_subif_add_del_function (vnet_main_t * vnm,
|
||||
u32 hw_if_index,
|
||||
|
@@ -551,6 +551,8 @@ memif_process (vlib_main_t * vm, vlib_node_runtime_t * rt, vlib_frame_t * f)
|
||||
case MEMIF_PROCESS_EVENT_STOP:
|
||||
enabled = 0;
|
||||
continue;
|
||||
case MEMIF_PROCESS_EVENT_ADMIN_UP_DOWN:
|
||||
break;
|
||||
default:
|
||||
ASSERT (0);
|
||||
}
|
||||
@@ -1079,6 +1081,24 @@ done:
|
||||
return rv;
|
||||
}
|
||||
|
||||
clib_error_t *
|
||||
memif_interface_admin_up_down (vnet_main_t *vnm, u32 hw_if_index, u32 flags)
|
||||
{
|
||||
memif_main_t *mm = &memif_main;
|
||||
vnet_hw_interface_t *hw = vnet_get_hw_interface (vnm, hw_if_index);
|
||||
memif_if_t *mif = pool_elt_at_index (mm->interfaces, hw->dev_instance);
|
||||
static clib_error_t *error = 0;
|
||||
|
||||
if (flags & VNET_SW_INTERFACE_FLAG_ADMIN_UP)
|
||||
mif->flags |= MEMIF_IF_FLAG_ADMIN_UP;
|
||||
else
|
||||
mif->flags &= ~MEMIF_IF_FLAG_ADMIN_UP;
|
||||
|
||||
vlib_process_signal_event (vnm->vlib_main, memif_process_node.index,
|
||||
MEMIF_PROCESS_EVENT_ADMIN_UP_DOWN, 0);
|
||||
return error;
|
||||
}
|
||||
|
||||
static clib_error_t *
|
||||
memif_init (vlib_main_t * vm)
|
||||
{
|
||||
|
@@ -259,6 +259,7 @@ typedef enum
|
||||
{
|
||||
MEMIF_PROCESS_EVENT_START = 1,
|
||||
MEMIF_PROCESS_EVENT_STOP = 2,
|
||||
MEMIF_PROCESS_EVENT_ADMIN_UP_DOWN = 3,
|
||||
} memif_process_event_t;
|
||||
|
||||
typedef struct
|
||||
@@ -285,6 +286,8 @@ int memif_socket_filename_add_del (u8 is_add, u32 sock_id,
|
||||
int memif_create_if (vlib_main_t * vm, memif_create_if_args_t * args);
|
||||
int memif_delete_if (vlib_main_t * vm, memif_if_t * mif);
|
||||
clib_error_t *memif_plugin_api_hookup (vlib_main_t * vm);
|
||||
clib_error_t *memif_interface_admin_up_down (vnet_main_t *vnm, u32 hw_if_index,
|
||||
u32 flags);
|
||||
|
||||
static_always_inline void *
|
||||
memif_get_buffer (memif_if_t * mif, memif_ring_t * ring, u16 slot)
|
||||
|
Reference in New Issue
Block a user