move away from using the M_PROTO1 flag to prevent loops with vports
authordlg <dlg@openbsd.org>
Tue, 28 Dec 2021 23:10:30 +0000 (23:10 +0000)
committerdlg <dlg@openbsd.org>
Tue, 28 Dec 2021 23:10:30 +0000 (23:10 +0000)
commit6b7aaaa875a600293799032dd65c1d1022f2dbe3
tree49311ebcdf6a02671873524048b0acd734a10be4
parentdf58c94db2952a5fae0d5f34d30f212ef79b975b
move away from using the M_PROTO1 flag to prevent loops with vports

if a vlan interface is configured on a vport interface, vlan(4)
will take the packet away from ether_input before the veb bridge
input handler gets to clear M_PROTO1. this leaves the flag on the
mbuf as it goes through the l3 stacks. if it goes back out a vport
into a veb, the presence of M_PROTO1 means the packet ends up getting
dropped, which is unexpected.

this diff specialises vport handling by veb even more to avoid the
problem the flag was handling. vports get their own bridge input
handler that skips veb processing completely because a packet being
received on a vport can only occur if a veb has decided to forward
it there and has already processed it. when the stack sends a packet
out a vport interface, then we do actual veb bridge input handling.

bug reported on misc@ and the fix tested by Simon Baker
sys/net/if_veb.c