Description
Description
Attempting to set the vxlan decap-next-index to ethernet-input using:
{{add_node_next node vxlan4-input next ethernet-input }}
vxlan_add_del_tunnel src 10.0.4.1 dst 10.0.6.1 decap-next 3 vni 9832580 instance -1
results in vpp crashing on the first packet received over the vxlan interface.
The resulting decoded backtrace is:
#0 __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:50
#1 0x00007f7ec0f9a859 in __GI_abort () at abort.c:79
#2 0x0000555a8f691d9e in os_exit (code=code@entry=1) at /w/workspace/vpp-merge-2009-ubuntu2004-x86_64/src/vpp/vnet/main.c:395
#3 0x00007f7ec12e4736 in unix_signal_handler (signum=11, si=, uc=) at /w/workspace/vpp-merge-2009-ubuntu2004-x86_64/src/vlib/unix/main.c:187
#5 0x00007f7ec1418a49 in ethernet_input_inline (variant=ETHERNET_INPUT_VARIANT_ETHERNET, n_packets=, from=0x7f7e81923294, node=0x7f7e82638f00, vm=0x7f7ec1300540 <vlib_global_main>)
{{ at /w/workspace/vpp-merge-2009-ubuntu2004-x86_64/src/vnet/ethernet/node.c:1581}}
#6 ethernet_input_node_fn_hsw (vm=0x7f7ec1300540 <vlib_global_main>, node=0x7f7e82638f00, frame=) at /w/workspace/vpp-merge-2009-ubuntu2004-x86_64/src/vnet/ethernet/node.c:1725
{{#7 0x00007f7ec129c28b in dispatch_node (last_time_stamp=, frame=0x7f7e81923280, dispatch_state=VLIB_NODE_STATE_POLLING, type=VLIB_NODE_TYPE_INTERNAL, node=, }}
{{ vm=0x7f7ec1300540 <vlib_global_main>) at /w/workspace/vpp-merge-2009-ubuntu2004-x86_64/src/vlib/main.c:1194}}
#8 dispatch_pending_node (vm=vm@entry=0x7f7ec1300540 <vlib_global_main>, pending_frame_index=pending_frame_index@entry=14, last_time_stamp=)
{{ at /w/workspace/vpp-merge-2009-ubuntu2004-x86_64/src/vlib/main.c:1353}}
#9 0x00007f7ec12a0eb7 in vlib_main_or_worker_loop (is_main=1, vm=0x7f7ec1300540 <vlib_global_main>) at /w/workspace/vpp-merge-2009-ubuntu2004-x86_64/src/vlib/main.c:1846
#10 vlib_main_loop (vm=0x7f7ec1300540 <vlib_global_main>) at /w/workspace/vpp-merge-2009-ubuntu2004-x86_64/src/vlib/main.c:1974
#11 vlib_main (vm=, vm@entry=0x7f7ec1300540 <vlib_global_main>, input=input@entry=0x7f7e821b9fa0) at /w/workspace/vpp-merge-2009-ubuntu2004-x86_64/src/vlib/main.c:2220
#12 0x00007f7ec12e370c in thread0 (arg=140182383756608) at /w/workspace/vpp-merge-2009-ubuntu2004-x86_64/src/vlib/unix/main.c:660
#13 0x00007f7ec1191d90 in clib_calljmp () from /lib/x86_64-linux-gnu/libvppinfra.so.20.09
#14 0x00007fff4e7ba820 in ?? ()
#15 0x00007f7ec12e4c18 in vlib_unix_main (argc=, argv=) at /w/workspace/vpp-merge-2009-ubuntu2004-x86_64/src/vlib/unix/main.c:733
#16 0xba0f48028b4890f3 in ?? ()
#17 0xffea3ce9f47224e0 in ?? ()
#18 0x41660442b70f44ff in ?? ()
#19 0x0f200442f606e8c1 in ?? ()
#20 0x8f8b41fffff28185 in ?? ()
#21 0xffc2c74800000254 in ?? ()
Assignee
John Lo
Reporter
Ed Warnicke
Comments
- hagbard (Thu, 14 Jan 2021 16:18:42 +0000): Could that be fixed?
- sykazmi (Thu, 14 Jan 2021 14:14:32 +0000): Ed Warnicke I have reproduced the issue.
Ethernet-input node checks the interface Mac address in ethernet_input_inline_dmac_check(). MAC address is not set for vxlan-tunnel interface(s) in VPP.
Thread 3 "vpp_wk_0" received signal SIGSEGV, Segmentation fault. [Switching to Thread 0x7fff54bfe700 (LWP 140168)] 0x00007ffff6e56b7b in ethernet_input_inline_dmac_check (hi=0x7fffb8132cc0, dmacs=0x7fffb9c1ff40, dmacs_bad=0x7fffb9c1ff3e "", n_packets=1, ei=0x0, have_sec_dmac=0 '\000') at /home/vpp/src/vnet/ethernet/node.c:695 695 u64 hwaddr = (*(u64 *) hi->hw_address) & DMAC_MASK; (gdb) bt #0 0x00007ffff6e56b7b in ethernet_input_inline_dmac_check (hi=0x7fffb8132cc0, dmacs=0x7fffb9c1ff40, dmacs_bad=0x7fffb9c1ff3e "", n_packets=1, ei=0x0, have_sec_dmac=0 '\000') at /home/vpp/src/vnet/ethernet/node.c:695 #1 0x00007ffff6e4fa0c in ethernet_input_inline (vm=0x7fffb7f40b00, node=0x7fffb9c80b40, from=0x7fffb8135c94, n_packets=1, variant=ETHERNET_INPUT_VARIANT_ETHERNET) at /home/vpp/src/vnet/ethernet/node.c:1588 #2 0x00007ffff6e4de9e in ethernet_input_node_fn_skx (vm=0x7fffb7f40b00, node=0x7fffb9c80b40, frame=0x7fffb8135c80) at /home/vpp/src/vnet/ethernet/node.c:1725 #3 0x00007ffff6b59536 in dispatch_node (vm=0x7fffb7f40b00, node=0x7fffb9c80b40, type=VLIB_NODE_TYPE_INTERNAL, dispatch_state=VLIB_NODE_STATE_POLLING, frame=0x7fffb8135c80, last_time_stamp=13267928507756) at /home/vpp/src/vlib/main.c:1194 #4 0x00007ffff6b5a027 in dispatch_pending_node (vm=0x7fffb7f40b00, pending_frame_index=6, last_time_stamp=13267928507756) at /home/vpp/src/vlib/main.c:1353 #5 0x00007ffff6b53bf0 in vlib_main_or_worker_loop (vm=0x7fffb7f40b00, is_main=0) at /home/vpp/src/vlib/main.c:1846 #6 0x00007ffff6b52f57 in vlib_worker_loop (vm=0x7fffb7f40b00) at /home/vpp/src/vlib/main.c:1980 #7 0x00007ffff6baaada in vlib_worker_thread_fn (arg=0x7fffb90af540) at /home/vpp/src/vlib/threads.c:1861 #8 0x00007ffff699ae64 in clib_calljmp () at /home/vpp/src/vppinfra/longjmp.S:123 #9 0x00007fff54bfdcd0 in ?? () #10 0x00007ffff6ba2c73 in vlib_worker_thread_bootstrap_fn (arg=0x7fffb90af540) at /home/vpp/src/vlib/threads.c:585 Backtrace stopped: previous frame inner to this frame (corrupt stack?) (gdb) f 0 #0 0x00007ffff6e56b7b in ethernet_input_inline_dmac_check (hi=0x7fffb8132cc0, dmacs=0x7fffb9c1ff40, dmacs_bad=0x7fffb9c1ff3e "", n_packets=1, ei=0x0, have_sec_dmac=0 '\000') at /home/vpp/src/vnet/ethernet/node.c:695 695 u64 hwaddr = (*(u64 *) hi->hw_address) & DMAC_MASK; (gdb) l 690 ethernet_input_inline_dmac_check (vnet_hw_interface_t * hi, 691 u64 * dmacs, u8 * dmacs_bad, 692 u32 n_packets, ethernet_interface_t * ei, 693 u8 have_sec_dmac) 694 { 695 u64 hwaddr = (*(u64 *) hi->hw_address) & DMAC_MASK; 696 u8 bad = 0; 697 698 dmacs_bad[0] = is_dmac_bad (dmacs[0], hwaddr); 699 dmacs_bad[1] = ((n_packets > 1) & is_dmac_bad (dmacs[1], hwaddr)); (gdb) p hi $1 = (vnet_hw_interface_t *) 0x7fffb8132cc0 (gdb) p *hi $2 = {cacheline0 = 0x7fffb8132cc0 "\220\353\025\270\377\177", name = 0x7fffb815eb90 "vxlan_tunnel0", flags = VNET_HW_INTERFACE_FLAG_LINK_UP, link_speed = 0, hw_address = 0x0, output_node_index = 615, tx_node_index = 0, dev_class_index = 30, dev_instance = 0, hw_class_index = 23, hw_instance = 0, hw_if_index = 3, sw_if_index = 3, output_node_next_index = 3, max_rate_bits_per_sec = 0, min_supported_packet_bytes = 0, max_supported_packet_bytes = 0, min_packet_bytes = 0, max_packet_bytes = 0, sub_interface_sw_if_index_by_id = 0x0, l2_if_count = 1, l3_if_count = 0, bond_info = 0x0, input_node_index = 0, input_node_thread_index_by_queue = 0x0, rx_mode_by_queue = 0x0, default_rx_mode = VNET_HW_INTERFACE_RX_MODE_POLLING, dq_runtime_index_by_queue = 0x0, numa_node = 0 '\000', rss_queues = 0x0, n_trace = 0, trace_classify_table_index = 4294967295} (gdb) p hi->hw_address $3 = (u8 *) 0x0
Original issue: https://jira.fd.io/browse/VPP-1962