From d594711a5d79859a7d0bde83a516f7ab52051d9b Mon Sep 17 00:00:00 2001 From: Steve Shin Date: Mon, 13 Nov 2017 15:46:35 -0800 Subject: l2-flood: fix restore vnet buffer's flags in the replication routine When BUM packets are flooded in the l2 domain, some data should be kept and restored for recycling in the replication routine. If l2 bridge domain has multiple interfaces mixed with normal and vlan tagged, the vlan tag value of the vnet buffer can be changed while flooding the replicated packets. The change is made to store and restore the original vlan tag in the replication logic. Change-Id: I399cf54cd2e74cb44a2be42241bdc4fba85032c5 Signed-off-by: Steve Shin (cherry picked from commit 49806fe252030a4cd993f598ff65a89590d57388) --- src/vnet/replication.c | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'src/vnet/replication.c') diff --git a/src/vnet/replication.c b/src/vnet/replication.c index 0fdca0bf..5a8a0fe6 100644 --- a/src/vnet/replication.c +++ b/src/vnet/replication.c @@ -45,6 +45,7 @@ replication_prep (vlib_main_t * vm, /* Save state from vlib buffer */ ctx->saved_free_list_index = vlib_buffer_get_free_list_index (b0); ctx->current_data = b0->current_data; + ctx->flags = b0->flags & VNET_BUFFER_FLAGS_VLAN_BITS; /* Set up vlib buffer hooks */ b0->recycle_count = ctx_id; @@ -104,6 +105,10 @@ replication_recycle (vlib_main_t * vm, vlib_buffer_t * b0, u32 is_last) clib_memcpy (vnet_buffer (b0), ctx->vnet_buffer, sizeof (vnet_buffer_opaque_t)); + /* Restore the vlan flags */ + b0->flags &= ~VNET_BUFFER_FLAGS_VLAN_BITS; + b0->flags |= ctx->flags; + /* Restore the packet start (current_data) and length */ vlib_buffer_advance (b0, ctx->current_data - b0->current_data); -- cgit 1.2.3-korg