vtep6_key_t last_vtep6; /* last IPv6 address / fib index
matching a local VTEP address */
vlib_buffer_t *bufs[VLIB_FRAME_SIZE], **b = bufs;
-#ifdef CLIB_HAVE_VEC512
- vtep4_cache_t vtep4_u512;
- clib_memset (&vtep4_u512, 0, sizeof (vtep4_u512));
-#endif
from = vlib_frame_vector_args (frame);
n_left_from = frame->n_vectors;
if (is_ip4)
{
#ifdef CLIB_HAVE_VEC512
- if (!vtep4_check_vector
- (&vxm->vtep_table, b0, ip40, &last_vtep4, &vtep4_u512))
+ if (!vtep4_check_vector (&vxm->vtep_table, b0, ip40, &last_vtep4,
+ &vxm->vtep4_u512))
#else
if (!vtep4_check (&vxm->vtep_table, b0, ip40, &last_vtep4))
#endif
if (is_ip4)
{
#ifdef CLIB_HAVE_VEC512
- if (!vtep4_check_vector
- (&vxm->vtep_table, b1, ip41, &last_vtep4, &vtep4_u512))
+ if (!vtep4_check_vector (&vxm->vtep_table, b1, ip41, &last_vtep4,
+ &vxm->vtep4_u512))
#else
if (!vtep4_check (&vxm->vtep_table, b1, ip41, &last_vtep4))
#endif
if (is_ip4)
{
#ifdef CLIB_HAVE_VEC512
- if (!vtep4_check_vector
- (&vxm->vtep_table, b0, ip40, &last_vtep4, &vtep4_u512))
+ if (!vtep4_check_vector (&vxm->vtep_table, b0, ip40, &last_vtep4,
+ &vxm->vtep4_u512))
#else
if (!vtep4_check (&vxm->vtep_table, b0, ip40, &last_vtep4))
#endif
vnet_main_t *vnet_main;
u16 msg_id_base;
+ /* cache for last 8 geneve tunnel */
+#ifdef CLIB_HAVE_VEC512
+ vtep4_cache_t vtep4_u512;
+#endif
+
} geneve_main_t;
extern geneve_main_t geneve_main;
vlib_main_t *vlib_main;
vnet_main_t *vnet_main;
u32 flow_id_start;
+ /* cache for last 8 gtpu tunnel */
+#ifdef CLIB_HAVE_VEC512
+ vtep4_cache_t vtep4_u512;
+#endif
+
} gtpu_main_t;
extern gtpu_main_t gtpu_main;
vtep6_key_t last_vtep6; /* last IPv6 address / fib index
matching a local VTEP address */
vlib_buffer_t *bufs[VLIB_FRAME_SIZE], **b = bufs;
-#ifdef CLIB_HAVE_VEC512
- vtep4_cache_t vtep4_u512;
- clib_memset (&vtep4_u512, 0, sizeof (vtep4_u512));
-#endif
from = vlib_frame_vector_args (frame);
n_left_from = frame->n_vectors;
if (is_ip4)
{
#ifdef CLIB_HAVE_VEC512
- if (!vtep4_check_vector
- (>m->vtep_table, b0, ip40, &last_vtep4, &vtep4_u512))
+ if (!vtep4_check_vector (>m->vtep_table, b0, ip40, &last_vtep4,
+ >m->vtep4_u512))
#else
if (!vtep4_check (>m->vtep_table, b0, ip40, &last_vtep4))
#endif
if (is_ip4)
{
#ifdef CLIB_HAVE_VEC512
- if (!vtep4_check_vector
- (>m->vtep_table, b1, ip41, &last_vtep4, &vtep4_u512))
+ if (!vtep4_check_vector (>m->vtep_table, b1, ip41, &last_vtep4,
+ >m->vtep4_u512))
#else
if (!vtep4_check (>m->vtep_table, b1, ip41, &last_vtep4))
#endif
if (is_ip4)
{
#ifdef CLIB_HAVE_VEC512
- if (!vtep4_check_vector
- (>m->vtep_table, b0, ip40, &last_vtep4, &vtep4_u512))
+ if (!vtep4_check_vector (>m->vtep_table, b0, ip40, &last_vtep4,
+ >m->vtep4_u512))
#else
if (!vtep4_check (>m->vtep_table, b0, ip40, &last_vtep4))
#endif
return VTEP_CHECK_PASS;
}
+#ifdef CLIB_HAVE_VEC512
typedef struct
{
vtep4_key_t vtep4_cache[8];
if (PREDICT_TRUE (k4.as_u64 == last_k4->as_u64))
return VTEP_CHECK_PASS_UNCHANGED;
-#ifdef CLIB_HAVE_VEC512
u64x8 k4_u64x8 = u64x8_splat (k4.as_u64);
u64x8 cache = u64x8_load_unaligned (vtep4_u512->vtep4_cache);
u8 result = u64x8_mask_is_equal (cache, k4_u64x8);
vtep4_u512->vtep4_cache[count_trailing_zeros (result)].as_u64;
return VTEP_CHECK_PASS_UNCHANGED;
}
-#endif
if (PREDICT_FALSE (!hash_get (t->vtep4, k4.as_u64)))
return VTEP_CHECK_FAIL;
- last_k4->as_u64 = k4.as_u64;
-
-#ifdef CLIB_HAVE_VEC512
vtep4_u512->vtep4_cache[vtep4_u512->idx].as_u64 = k4.as_u64;
vtep4_u512->idx = (vtep4_u512->idx + 1) & 0x7;
-#endif
+
+ last_k4->as_u64 = k4.as_u64;
return VTEP_CHECK_PASS;
}
+#endif
always_inline u8
vtep6_check (vtep_table_t * t, vlib_buffer_t * b0, ip6_header_t * ip60,
vtep6_key_t last_vtep6; /* last IPv6 address / fib index
matching a local VTEP address */
vlib_buffer_t *bufs[VLIB_FRAME_SIZE], **b = bufs;
-#ifdef CLIB_HAVE_VEC512
- vtep4_cache_t vtep4_u512;
- clib_memset (&vtep4_u512, 0, sizeof (vtep4_u512));
-#endif
from = vlib_frame_vector_args (frame);
n_left_from = frame->n_vectors;
if (is_ip4)
{
#ifdef CLIB_HAVE_VEC512
- if (!vtep4_check_vector
- (&ngm->vtep_table, b0, ip40, &last_vtep4, &vtep4_u512))
+ if (!vtep4_check_vector (&ngm->vtep_table, b0, ip40, &last_vtep4,
+ &ngm->vtep4_u512))
#else
if (!vtep4_check (&ngm->vtep_table, b0, ip40, &last_vtep4))
#endif
if (is_ip4)
{
#ifdef CLIB_HAVE_VEC512
- if (!vtep4_check_vector
- (&ngm->vtep_table, b1, ip41, &last_vtep4, &vtep4_u512))
+ if (!vtep4_check_vector (&ngm->vtep_table, b1, ip41, &last_vtep4,
+ &ngm->vtep4_u512))
#else
if (!vtep4_check (&ngm->vtep_table, b1, ip41, &last_vtep4))
#endif
if (is_ip4)
{
#ifdef CLIB_HAVE_VEC512
- if (!vtep4_check_vector
- (&ngm->vtep_table, b0, ip40, &last_vtep4, &vtep4_u512))
+ if (!vtep4_check_vector (&ngm->vtep_table, b0, ip40, &last_vtep4,
+ &ngm->vtep4_u512))
#else
if (!vtep4_check (&ngm->vtep_table, b0, ip40, &last_vtep4))
#endif
/** State convenience vnet_main_t */
vnet_main_t *vnet_main;
+ /* cache for last 8 vxlan_gpe tunnel */
+#ifdef CLIB_HAVE_VEC512
+ vtep4_cache_t vtep4_u512;
+#endif
+
/** List of next nodes for the decap indexed on protocol */
uword decap_next_node_list[VXLAN_GPE_PROTOCOL_MAX];
} vxlan_gpe_main_t;
last_tunnel_cache4 last4;
last_tunnel_cache6 last6;
-#ifdef CLIB_HAVE_VEC512
- vtep4_cache_t vtep4_u512;
- clib_memset (&vtep4_u512, 0, sizeof (vtep4_u512));
-#endif
-
from = vlib_frame_vector_args (frame);
n_left_from = frame->n_vectors;
next_index = node->cached_next_index;
if (is_ip4)
{
#ifdef CLIB_HAVE_VEC512
- if (!vtep4_check_vector
- (&vxm->vtep_table, b0, ip40, &last_vtep4, &vtep4_u512))
+ if (!vtep4_check_vector (&vxm->vtep_table, b0, ip40, &last_vtep4,
+ &vxm->vtep4_u512))
#else
if (!vtep4_check (&vxm->vtep_table, b0, ip40, &last_vtep4))
#endif
if (is_ip4)
{
#ifdef CLIB_HAVE_VEC512
- if (!vtep4_check_vector
- (&vxm->vtep_table, b1, ip41, &last_vtep4, &vtep4_u512))
+ if (!vtep4_check_vector (&vxm->vtep_table, b1, ip41, &last_vtep4,
+ &vxm->vtep4_u512))
#else
if (!vtep4_check (&vxm->vtep_table, b1, ip41, &last_vtep4))
#endif
if (is_ip4)
{
#ifdef CLIB_HAVE_VEC512
- if (!vtep4_check_vector
- (&vxm->vtep_table, b0, ip40, &last_vtep4, &vtep4_u512))
+ if (!vtep4_check_vector (&vxm->vtep_table, b0, ip40, &last_vtep4,
+ &vxm->vtep4_u512))
#else
if (!vtep4_check (&vxm->vtep_table, b0, ip40, &last_vtep4))
#endif
/* Record used instances */
uword *instance_used;
u32 flow_id_start;
+
+ /* cache for last 8 vxlan tunnel */
+#ifdef CLIB_HAVE_VEC512
+ vtep4_cache_t vtep4_u512;
+#endif
+
} vxlan_main_t;
extern vxlan_main_t vxlan_main;