aboutsummaryrefslogtreecommitdiffstats
path: root/vnet/vnet/l2/l2_output.c
diff options
context:
space:
mode:
authorDamjan Marion <damarion@cisco.com>2015-12-16 19:31:59 +0100
committerDamjan Marion <damarion@cisco.com>2015-12-16 19:32:05 +0100
commitdb2c6c6eee9a08083af3f9dc778b63416e214ea4 (patch)
tree84cde81ba4a2746195f7681e5895e0dbec96512e /vnet/vnet/l2/l2_output.c
parentfa1a6a4dd3af06523bf3cd53b4b21e7f32edec9a (diff)
Don't send more than one mapping req in l2output node
Change-Id: I4205613818d664abb94b62a33e1353b87d5b1c7d Signed-off-by: Damjan Marion <damarion@cisco.com>
Diffstat (limited to 'vnet/vnet/l2/l2_output.c')
-rw-r--r--vnet/vnet/l2/l2_output.c16
1 files changed, 13 insertions, 3 deletions
diff --git a/vnet/vnet/l2/l2_output.c b/vnet/vnet/l2/l2_output.c
index a5424866db1..02862138928 100644
--- a/vnet/vnet/l2/l2_output.c
+++ b/vnet/vnet/l2/l2_output.c
@@ -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,