Configure a vxlan tunnel using this CLI and then assign an ip address to
the vxlan tunnel cause VPP to crash immediately
create vxlan tunnel src x.x.x.x dst y.y.y.y vni 1000 decap-next node ethernet-input l3
set interface ip address vxlan_tunnel0 z.z.z.z/24
It looks like when l3 mode is configured, the code calls the wrong function
to register the interface
Type: fix
Fixes:
3e38422ab905d26ab1625c74268e30c94327ea54
Signed-off-by: Steven Luong <sluong@cisco.com>
Change-Id: Ie1a08efc028f37fb528a7dfd7048ff6836bb8ddc
if (PREDICT_FALSE (t->decap_next_index != VXLAN_INPUT_NEXT_L2_INPUT))
s = format (s, "decap-next-%U ", format_decap_next, t->decap_next_index);
if (PREDICT_FALSE (t->decap_next_index != VXLAN_INPUT_NEXT_L2_INPUT))
s = format (s, "decap-next-%U ", format_decap_next, t->decap_next_index);
+ s = format (s, "l3 %u ", t->is_l3);
+
if (PREDICT_FALSE (ip46_address_is_multicast (&t->dst)))
s = format (s, "mcast-sw-if-idx %d ", t->mcast_sw_if_index);
if (PREDICT_FALSE (ip46_address_is_multicast (&t->dst)))
s = format (s, "mcast-sw-if-idx %d ", t->mcast_sw_if_index);
_ (src) \
_ (dst) \
_ (src_port) \
_ (src) \
_ (dst) \
_ (src_port) \
+ _ (dst_port) \
+ _ (is_l3)
static void
vxlan_rewrite (vxlan_tunnel_t * t, bool is_ip6)
static void
vxlan_rewrite (vxlan_tunnel_t * t, bool is_ip6)
t->user_instance = user_instance; /* name */
t->flow_index = ~0;
t->user_instance = user_instance; /* name */
t->flow_index = ~0;
t->hw_if_index =
vnet_register_interface (vnm, vxlan_device_class.index, dev_instance,
vxlan_hw_class.index, dev_instance);
t->hw_if_index =
vnet_register_interface (vnm, vxlan_device_class.index, dev_instance,
vxlan_hw_class.index, dev_instance);
vnet_delete_hw_interface (vnm, t->hw_if_index);
else
ethernet_delete_interface (vnm, t->hw_if_index);
vnet_delete_hw_interface (vnm, t->hw_if_index);
else
ethernet_delete_interface (vnm, t->hw_if_index);
mcast_shared_remove (&t->dst);
}
mcast_shared_remove (&t->dst);
}
- vnet_hw_interface_t *hw = vnet_get_hw_interface (vnm, t->hw_if_index);
- if (hw->dev_class_index == vxlan_device_class.index)
vnet_delete_hw_interface (vnm, t->hw_if_index);
else
ethernet_delete_interface (vnm, t->hw_if_index);
vnet_delete_hw_interface (vnm, t->hw_if_index);
else
ethernet_delete_interface (vnm, t->hw_if_index);
vnet_vxlan_add_del_tunnel_args_t a = { .is_add = is_add,
.is_ip6 = ipv6_set,
vnet_vxlan_add_del_tunnel_args_t a = { .is_add = is_add,
.is_ip6 = ipv6_set,
.instance = instance,
#define _(x) .x = x,
foreach_copy_field
.instance = instance,
#define _(x) .x = x,
foreach_copy_field
u32 dev_instance; /* Real device instance in tunnel vector */
u32 user_instance; /* Instance name being shown to user */
u32 dev_instance; /* Real device instance in tunnel vector */
u32 user_instance; /* Instance name being shown to user */
+ VNET_DECLARE_REWRITE;
+ u8 is_l3;
} vxlan_tunnel_t;
#define foreach_vxlan_input_next \
} vxlan_tunnel_t;
#define foreach_vxlan_input_next \