]> git.baikalelectronics.ru Git - kernel.git/commit
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)
commitbfa5b8650efe961e2ec295e91a8f385198def1c4
tree7ebf6685b37f657516087a9796771de6939055f3
parent7739df48e9a5414ccc84bda5bdba71717dd11c35
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