]> git.proxmox.com Git - mirror_ubuntu-jammy-kernel.git/commit - include/uapi/linux/if_bridge.h
net: bridge: vlan: add per-vlan state
authorNikolay Aleksandrov <nikolay@cumulusnetworks.com>
Fri, 24 Jan 2020 11:40:22 +0000 (13:40 +0200)
committerDavid S. Miller <davem@davemloft.net>
Fri, 24 Jan 2020 11:58:14 +0000 (12:58 +0100)
commita580c76d534c7360ba68042b19cb255e8420e987
tree7ebf6685b37f657516087a9796771de6939055f3
parenta5d29ae226812ae620f58a0726525d8af9b1d751
net: bridge: vlan: add per-vlan state

The first per-vlan option added is state, it is needed for EVPN and for
per-vlan STP. The state allows to control the forwarding on per-vlan
basis. The vlan state is considered only if the port state is forwarding
in order to avoid conflicts and be consistent. br_allowed_egress is
called only when the state is forwarding, but the ingress case is a bit
more complicated due to the fact that we may have the transition between
port:BR_STATE_FORWARDING -> vlan:BR_STATE_LEARNING which should still
allow the bridge to learn from the packet after vlan filtering and it will
be dropped after that. Also to optimize the pvid state check we keep a
copy in the vlan group to avoid one lookup. The state members are
modified with *_ONCE() to annotate the lockless access.

Signed-off-by: Nikolay Aleksandrov <nikolay@cumulusnetworks.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
include/uapi/linux/if_bridge.h
net/bridge/br_device.c
net/bridge/br_input.c
net/bridge/br_private.h
net/bridge/br_vlan.c
net/bridge/br_vlan_options.c