vxlan_header_t *vxlan;
/* Fixed portion of the (outer) ip header */
- memset (&h, 0, sizeof (h));
+ clib_memset (&h, 0, sizeof (h));
if (!is_ip6)
{
ip4_header_t *ip = &h.h4.ip4;
vxlan_tunnel_t *t;
pool_get_aligned (vxm->tunnels, t, CLIB_CACHE_LINE_BYTES);
- memset (t, 0, sizeof (*t));
+ clib_memset (t, 0, sizeof (*t));
dev_instance = t - vxm->tunnels;
/* copy from arg structure */
if (!p)
return VNET_API_ERROR_NO_SUCH_ENTRY;
- u32 instance = vxm->tunnel_index_by_sw_if_index[p->sw_if_index];
+ u32 instance = is_ip6 ? key6.value :
+ vxm->tunnel_index_by_sw_if_index[p->sw_if_index];
vxlan_tunnel_t *t = pool_elt_at_index (vxm->tunnels, instance);
sw_if_index = t->sw_if_index;
void
vnet_int_vxlan_bypass_mode (u32 sw_if_index, u8 is_ip6, u8 is_enable)
{
+ vxlan_main_t *vxm = &vxlan_main;
+
+ if (pool_is_free_index (vxm->vnet_main->interface_main.sw_interfaces,
+ sw_if_index))
+ return;
+
+ is_enable = ! !is_enable;
+
if (is_ip6)
- vnet_feature_enable_disable ("ip6-unicast", "ip6-vxlan-bypass",
- sw_if_index, is_enable, 0, 0);
+ {
+ if (clib_bitmap_get (vxm->bm_ip6_bypass_enabled_by_sw_if, sw_if_index)
+ != is_enable)
+ {
+ vnet_feature_enable_disable ("ip6-unicast", "ip6-vxlan-bypass",
+ sw_if_index, is_enable, 0, 0);
+ vxm->bm_ip6_bypass_enabled_by_sw_if =
+ clib_bitmap_set (vxm->bm_ip6_bypass_enabled_by_sw_if,
+ sw_if_index, is_enable);
+ }
+ }
else
- vnet_feature_enable_disable ("ip4-unicast", "ip4-vxlan-bypass",
- sw_if_index, is_enable, 0, 0);
+ {
+ if (clib_bitmap_get (vxm->bm_ip4_bypass_enabled_by_sw_if, sw_if_index)
+ != is_enable)
+ {
+ vnet_feature_enable_disable ("ip4-unicast", "ip4-vxlan-bypass",
+ sw_if_index, is_enable, 0, 0);
+ vxm->bm_ip4_bypass_enabled_by_sw_if =
+ clib_bitmap_set (vxm->bm_ip4_bypass_enabled_by_sw_if,
+ sw_if_index, is_enable);
+ }
+ }
}
vnet_flow_get_range (vxm->vnet_main, "vxlan", 1024 * 1024,
&vxm->flow_id_start);
+ vxm->bm_ip4_bypass_enabled_by_sw_if = 0;
+ vxm->bm_ip6_bypass_enabled_by_sw_if = 0;
+
/* initialize the ip6 hash */
clib_bihash_init_16_8 (&vxm->vxlan4_tunnel_by_key, "vxlan4",
VXLAN_HASH_NUM_BUCKETS, VXLAN_HASH_MEMORY_SIZE);