u32 next_index;
u32 tunnel_index;
u32 error;
- u32 vni;
+ u32 vni_rsvd;
} geneve_rx_trace_t;
static u8 *
s =
format (s,
"GENEVE decap from geneve_tunnel%d vni %d next %d error %d",
- t->tunnel_index, t->vni, t->next_index, t->error);
+ t->tunnel_index, t->vni_rsvd, t->next_index, t->error);
}
else
{
s = format (s, "GENEVE decap error - tunnel for vni %d does not exist",
- t->vni);
+ t->vni_rsvd);
}
return s;
}
geneve4_tunnel_key_t last_key4;
geneve6_tunnel_key_t last_key6;
u32 pkts_decapsulated = 0;
- u32 thread_index = vlib_get_thread_index ();
+ u32 thread_index = vm->thread_index;
u32 stats_sw_if_index, stats_n_packets, stats_n_bytes;
if (is_ip4)
/* udp leaves current_data pointing at the geneve header */
geneve0 = vlib_buffer_get_current (b0);
geneve1 = vlib_buffer_get_current (b1);
+
+ vnet_geneve_hdr_1word_ntoh (geneve0);
+ vnet_geneve_hdr_1word_ntoh (geneve1);
+
if (is_ip4)
{
vlib_buffer_advance
tunnel_index1 = ~0;
error1 = 0;
- if (PREDICT_FALSE (geneve0->ver != GENEVE_VERSION))
+ if (PREDICT_FALSE
+ (vnet_get_geneve_version (geneve0) != GENEVE_VERSION))
{
error0 = GENEVE_ERROR_BAD_FLAGS;
next0 = GENEVE_INPUT_NEXT_DROP;
goto trace0;
}
-#if SUPPORT_OPTIONS_HEADER==0
+#if SUPPORT_OPTIONS_HEADER==1
if (PREDICT_FALSE (vnet_get_geneve_critical_bit (geneve0) == 1))
{
error0 = GENEVE_ERROR_BAD_FLAGS;
if (is_ip4)
{
key4_0.remote = ip4_0->src_address.as_u32;
- key4_0.vni = geneve0->vni;
+ key4_0.vni = vnet_get_geneve_vni_bigendian (geneve0);
/* Make sure GENEVE tunnel exist according to packet SIP and VNI */
if (PREDICT_FALSE (key4_0.as_u64 != last_key4.as_u64))
(ip4_address_is_multicast (&ip4_0->dst_address)))
{
key4_0.remote = ip4_0->dst_address.as_u32;
- key4_0.vni = geneve0->vni;
+ key4_0.vni = vnet_get_geneve_vni_bigendian (geneve0);
/* Make sure mcast GENEVE tunnel exist by packet DIP and VNI */
p0 = hash_get (vxm->geneve4_tunnel_by_key, key4_0.as_u64);
if (PREDICT_TRUE (p0 != NULL))
{
key6_0.remote.as_u64[0] = ip6_0->src_address.as_u64[0];
key6_0.remote.as_u64[1] = ip6_0->src_address.as_u64[1];
- key6_0.vni = geneve0->vni;
+ key6_0.vni = vnet_get_geneve_vni_bigendian (geneve0);
/* Make sure GENEVE tunnel exist according to packet SIP and VNI */
if (PREDICT_FALSE
{
key6_0.remote.as_u64[0] = ip6_0->dst_address.as_u64[0];
key6_0.remote.as_u64[1] = ip6_0->dst_address.as_u64[1];
- key6_0.vni = geneve0->vni;
+ key6_0.vni = vnet_get_geneve_vni_bigendian (geneve0);
p0 = hash_get_mem (vxm->geneve6_tunnel_by_key, &key6_0);
if (PREDICT_TRUE (p0 != NULL))
{
tr->next_index = next0;
tr->error = error0;
tr->tunnel_index = tunnel_index0;
- tr->vni = vnet_get_geneve_vni (geneve0);
+ tr->vni_rsvd = vnet_get_geneve_vni (geneve0);
}
- if (PREDICT_FALSE (geneve1->ver != GENEVE_VERSION))
+ if (PREDICT_FALSE
+ (vnet_get_geneve_version (geneve1) != GENEVE_VERSION))
{
error1 = GENEVE_ERROR_BAD_FLAGS;
next1 = GENEVE_INPUT_NEXT_DROP;
goto trace1;
}
-#if SUPPORT_OPTIONS_HEADER==0
+#if SUPPORT_OPTIONS_HEADER==1
if (PREDICT_FALSE (vnet_get_geneve_critical_bit (geneve1) == 1))
{
error1 = GENEVE_ERROR_BAD_FLAGS;
if (is_ip4)
{
key4_1.remote = ip4_1->src_address.as_u32;
- key4_1.vni = geneve1->vni;
+ key4_1.vni = vnet_get_geneve_vni_bigendian (geneve1);
/* Make sure unicast GENEVE tunnel exist by packet SIP and VNI */
if (PREDICT_FALSE (key4_1.as_u64 != last_key4.as_u64))
(ip4_address_is_multicast (&ip4_1->dst_address)))
{
key4_1.remote = ip4_1->dst_address.as_u32;
- key4_1.vni = geneve1->vni;
+ key4_1.vni = vnet_get_geneve_vni_bigendian (geneve1);
/* Make sure mcast GENEVE tunnel exist by packet DIP and VNI */
p1 = hash_get (vxm->geneve4_tunnel_by_key, key4_1.as_u64);
if (PREDICT_TRUE (p1 != NULL))
{
key6_1.remote.as_u64[0] = ip6_1->src_address.as_u64[0];
key6_1.remote.as_u64[1] = ip6_1->src_address.as_u64[1];
- key6_1.vni = geneve1->vni;
+ key6_1.vni = vnet_get_geneve_vni_bigendian (geneve1);
/* Make sure GENEVE tunnel exist according to packet SIP and VNI */
if (PREDICT_FALSE
{
key6_1.remote.as_u64[0] = ip6_1->dst_address.as_u64[0];
key6_1.remote.as_u64[1] = ip6_1->dst_address.as_u64[1];
- key6_1.vni = geneve1->vni;
+ key6_1.vni = vnet_get_geneve_vni_bigendian (geneve1);
p1 = hash_get_mem (vxm->geneve6_tunnel_by_key, &key6_1);
if (PREDICT_TRUE (p1 != NULL))
{
tr->next_index = next1;
tr->error = error1;
tr->tunnel_index = tunnel_index1;
- tr->vni = vnet_get_geneve_vni (geneve1);
+ tr->vni_rsvd = vnet_get_geneve_vni (geneve1);
}
vlib_validate_buffer_enqueue_x2 (vm, node, next_index,
/* udp leaves current_data pointing at the geneve header */
geneve0 = vlib_buffer_get_current (b0);
+ vnet_geneve_hdr_1word_ntoh (geneve0);
+
if (is_ip4)
{
vlib_buffer_advance
tunnel_index0 = ~0;
error0 = 0;
- if (PREDICT_FALSE (geneve0->ver != GENEVE_VERSION))
+ if (PREDICT_FALSE
+ (vnet_get_geneve_version (geneve0) != GENEVE_VERSION))
{
error0 = GENEVE_ERROR_BAD_FLAGS;
next0 = GENEVE_INPUT_NEXT_DROP;
goto trace00;
}
-#if SUPPORT_OPTIONS_HEADER==0
+#if SUPPORT_OPTIONS_HEADER==1
if (PREDICT_FALSE (vnet_get_geneve_critical_bit (geneve0) == 1))
{
error0 = GENEVE_ERROR_BAD_FLAGS;
if (is_ip4)
{
key4_0.remote = ip4_0->src_address.as_u32;
- key4_0.vni = geneve0->vni;
+ key4_0.vni = vnet_get_geneve_vni_bigendian (geneve0);
/* Make sure unicast GENEVE tunnel exist by packet SIP and VNI */
if (PREDICT_FALSE (key4_0.as_u64 != last_key4.as_u64))
(ip4_address_is_multicast (&ip4_0->dst_address)))
{
key4_0.remote = ip4_0->dst_address.as_u32;
- key4_0.vni = geneve0->vni;
+ key4_0.vni = vnet_get_geneve_vni_bigendian (geneve0);
/* Make sure mcast GENEVE tunnel exist by packet DIP and VNI */
p0 = hash_get (vxm->geneve4_tunnel_by_key, key4_0.as_u64);
if (PREDICT_TRUE (p0 != NULL))
{
key6_0.remote.as_u64[0] = ip6_0->src_address.as_u64[0];
key6_0.remote.as_u64[1] = ip6_0->src_address.as_u64[1];
- key6_0.vni = geneve0->vni;
+ key6_0.vni = vnet_get_geneve_vni_bigendian (geneve0);
/* Make sure GENEVE tunnel exist according to packet SIP and VNI */
if (PREDICT_FALSE
{
key6_0.remote.as_u64[0] = ip6_0->dst_address.as_u64[0];
key6_0.remote.as_u64[1] = ip6_0->dst_address.as_u64[1];
- key6_0.vni = geneve0->vni;
+ key6_0.vni = vnet_get_geneve_vni_bigendian (geneve0);
p0 = hash_get_mem (vxm->geneve6_tunnel_by_key, &key6_0);
if (PREDICT_TRUE (p0 != NULL))
{
tr->next_index = next0;
tr->error = error0;
tr->tunnel_index = tunnel_index0;
- tr->vni = vnet_get_geneve_vni (geneve0);
+ tr->vni_rsvd = vnet_get_geneve_vni (geneve0);
}
vlib_validate_buffer_enqueue_x1 (vm, node, next_index,
to_next, n_left_to_next,