aboutsummaryrefslogtreecommitdiffstats
path: root/src/vnet/gre/gre.c
diff options
context:
space:
mode:
authorJohn Lo <loj@cisco.com>2018-02-27 16:35:03 -0500
committerNeale Ranns <nranns@cisco.com>2018-03-01 13:09:57 +0000
commit2bf8b8154d0e1707fbf8502eb8e85fdda885a8e5 (patch)
tree24804592e3a4a738dfe306b468547ad9377c6541 /src/vnet/gre/gre.c
parent3c6a976325f32f880b7e53f50ebe86fa0e8476c9 (diff)
Fix ERSPAN encap to set EN bits in the header and add test case
For ERSPAN encap, both bits in the EN field of the header should be set to indicate any VLAN tag in the original Ethernet frame is preserved. Added SPAN L2 test case where the mirrored packet output is a GRE ERSPAN tunnel. Change-Id: Ie7a40992a9278469c24aa6fa9e122b4505797d10 Signed-off-by: John Lo <loj@cisco.com>
Diffstat (limited to 'src/vnet/gre/gre.c')
-rw-r--r--src/vnet/gre/gre.c18
1 files changed, 9 insertions, 9 deletions
diff --git a/src/vnet/gre/gre.c b/src/vnet/gre/gre.c
index 75b11017e50..2918f3541fd 100644
--- a/src/vnet/gre/gre.c
+++ b/src/vnet/gre/gre.c
@@ -410,10 +410,10 @@ gre_interface_tx (vlib_main_t * vm,
vlib_buffer_advance (b0, -sizeof (erspan_t2_t));
erspan_t2_t *h0 = vlib_buffer_get_current (b0);
u32 seq_num = clib_smp_atomic_add (&gt0->gre_sn->seq_num, 1);
- u64 ver1 = clib_host_to_net_u64 (0x1000000000000000);
+ u64 hdr = clib_host_to_net_u64 (ERSPAN_HDR2);
h0->seq_num = clib_host_to_net_u32 (seq_num);
- h0->t2_u64 = ver1; /* all 0's except ver=1 */
- h0->t2.cos_en_t_session =
+ h0->t2_u64 = hdr;
+ h0->t2.cos_en_t_session |=
clib_host_to_net_u16 (gt0->session_id);
}
if (PREDICT_FALSE (gt1->type == GRE_TUNNEL_TYPE_ERSPAN))
@@ -422,10 +422,10 @@ gre_interface_tx (vlib_main_t * vm,
vlib_buffer_advance (b1, -sizeof (erspan_t2_t));
erspan_t2_t *h1 = vlib_buffer_get_current (b1);
u32 seq_num = clib_smp_atomic_add (&gt1->gre_sn->seq_num, 1);
- u64 ver1 = clib_host_to_net_u64 (0x1000000000000000);
+ u64 hdr = clib_host_to_net_u64 (ERSPAN_HDR2);
h1->seq_num = clib_host_to_net_u32 (seq_num);
- h1->t2_u64 = ver1; /* all 0's except ver=1 */
- h1->t2.cos_en_t_session =
+ h1->t2_u64 = hdr;
+ h1->t2.cos_en_t_session |=
clib_host_to_net_u16 (gt1->session_id);
}
@@ -481,10 +481,10 @@ gre_interface_tx (vlib_main_t * vm,
vlib_buffer_advance (b0, -sizeof (erspan_t2_t));
erspan_t2_t *h0 = vlib_buffer_get_current (b0);
u32 seq_num = clib_smp_atomic_add (&gt0->gre_sn->seq_num, 1);
- u64 ver1 = clib_host_to_net_u64 (0x1000000000000000);
+ u64 hdr = clib_host_to_net_u64 (ERSPAN_HDR2);
h0->seq_num = clib_host_to_net_u32 (seq_num);
- h0->t2_u64 = ver1; /* all 0's except ver=1 */
- h0->t2.cos_en_t_session =
+ h0->t2_u64 = hdr;
+ h0->t2.cos_en_t_session |=
clib_host_to_net_u16 (gt0->session_id);
}