add the mbuf tag that prevents loops in vxlan_encap, not vxlan_output.
authordlg <dlg@openbsd.org>
Sat, 26 Feb 2022 04:46:34 +0000 (04:46 +0000)
committerdlg <dlg@openbsd.org>
Sat, 26 Feb 2022 04:46:34 +0000 (04:46 +0000)
commit85410f108fd876e368e66ce1ba6eaa30f4ebefab
tree74c1afbcdc8060cf7c66fb4057c77e6a17aa9e40
parent1c9104c31d3f30112714e8d264aa072933855a4f
add the mbuf tag that prevents loops in vxlan_encap, not vxlan_output.

vxlan_output calls ether_output, which will do arp for ipv4 packets.
if arp hasn't resolved an address for a peer yet, it will queue the
packet and transmit it again after resolution completes. the way
it outputs is to call the interface output routine again, which is
vxlan_output.

if we tag the packet in vxlan_output before arp, and then arp calls
vxlan_output again, it looks like a loop and drops it. moving the
tagging to when we add all the encap headers in vxlan_encap avoids
this issue.
sys/net/if_vxlan.c