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:
Ed Warnicke
2021-01-19 17:56:24 -06:00
committed by Damjan Marion
parent a4b0541f64
commit acaee3d36e
3 changed files with 23 additions and 16 deletions

View File

@@ -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,

View File

@@ -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)
{

View File

@@ -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)