Don't send more than one mapping req in l2output node

Change-Id: I4205613818d664abb94b62a33e1353b87d5b1c7d
Signed-off-by: Damjan Marion <damarion@cisco.com>
This commit is contained in:
Damjan Marion
2015-12-16 19:31:59 +01:00
parent fa1a6a4dd3
commit db2c6c6eee
2 changed files with 17 additions and 3 deletions

View File

@ -263,6 +263,10 @@ typedef struct vnet_hw_interface_t {
VNET_HW_INTERFACE_FLAG_SPEED_40G | \
VNET_HW_INTERFACE_FLAG_SPEED_100G)
/* l2output node flags */
#define VNET_HW_INTERFACE_FLAG_L2OUTPUT_SHIFT 9
#define VNET_HW_INTERFACE_FLAG_L2OUTPUT_MAPPED (1 << 9)
/* Hardware address as vector. Zero (e.g. zero-length vector) if no
address for this class (e.g. PPP). */
u8 * hw_address;

View File

@ -477,17 +477,27 @@ u32 l2output_create_output_node_mapping (
#if DPDK > 0
uword cpu_number;
hw0 = vnet_get_sup_hw_interface (vnet_main, sw_if_index);
cpu_number = os_get_cpu_number();
if (cpu_number)
{
u32 oldflags;
vlib_node_t *error_drop_node;
error_drop_node = vlib_get_node_by_name (vlib_main, (u8 *) "error-drop");
oldflags = __sync_fetch_and_or(&hw0->flags,
VNET_HW_INTERFACE_FLAG_L2OUTPUT_MAPPED);
if ((oldflags & VNET_HW_INTERFACE_FLAG_L2OUTPUT_MAPPED) )
return error_drop_node->index;
output_node_mapping_send_rpc (node_index, sw_if_index);
return 0;
return error_drop_node->index;
}
#endif
hw0 = vnet_get_sup_hw_interface (vnet_main, sw_if_index);
// dynamically create graph node arc
next = vlib_node_add_next (vlib_main,
node_index,