Re: [PATCH v2] vlan: don't deliver frames for unknown vlans to protocols
flat view
From: Florian Zumbiehl <hidden>
Date: 2012-10-08 19:19:53
Also in:
lkml
Hi,
But I wonder if it breaks things, since you do the assignment so late we no longer handle the case where the VLAN device's MAC address matches the packet MAC address and the top-level device's does not. That's handled by logic in vlan_do_receive() which checks for PACKET_OTHERHOST. But you're going to unconditionally set PACKET_OTHERHOST, overriding any decision that code makes.
I don't think that that's actually the case. If vlan_do_receive() reaches the MAC address check (that is, there is a vlan device for the tag), it will either clear skb->vlan_tci and return true (which also causes goto another_round), or return false with a NULL skb, which causes goto out. The only way to reach the new check without another_round and with a non-zero tag is the first return false, which happens if there is no device for the tag, in which case setting PACKET_OTHERHOST should be the right thing to do (in particular, a non-existent vlan device won't have the frame's MAC address). I am assuming that rx_handlers don't modify the frame unless they return RX_HANDLER_ANOTHER.
This turns out to be a really non-trivial area and it's going to take some time to get this right and audit the change appropriately.
I wouldn't want to disagree with that ;-) Florian