[Bridge] [PATCH net-next 00/15] net: bridge: multicast: add vlan support
patchwork-bot+netdevbpf at kernel.org
patchwork-bot+netdevbpf at kernel.org
Tue Jul 20 13:30:10 UTC 2021
This series was applied to netdev/net-next.git (refs/heads/master):
On Mon, 19 Jul 2021 20:06:22 +0300 you wrote:
> From: Nikolay Aleksandrov <nikolay at nvidia.com>
> Hi all,
> This patchset adds initial per-vlan multicast support, most of the code
> deals with moving to multicast context pointers from bridge/port pointers.
> That allows us to switch them with the per-vlan contexts when a multicast
> packet is being processed and vlan multicast snooping has been enabled.
> That is controlled by a global bridge option added in patch 06 which is
> off by default (BR_BOOLOPT_MCAST_VLAN_SNOOPING). It is important to note
> that this option can change only under RTNL and doesn't require
> multicast_lock, so we need to be careful when retrieving mcast contexts
> in parallel. For packet processing they are switched only once in
> br_multicast_rcv() and then used until the packet has been processed.
> For the most part we need these contexts only to read config values and
> check if they are disabled. The global mcast state which is maintained
> consists of querier and router timers, the rest are config options.
> The port mcast state which is maintained consists of query timer and
> link to router port list if it's ever marked as a router port. Port
> multicast contexts _must_ be used only with their respective global
> contexts, that is a bridge port's mcast context must be used only with
> bridge's global mcast context and a vlan/port's mcast context must be
> used only with that vlan's global mcast context due to the router port
> lists. This way a bridge port can be marked as a router in multiple
> vlans, but might not be a router in some other vlan. Also this allows us
> to have per-vlan querier elections, per-vlan queries and basically the
> whole multicast state becomes per-vlan when the option is enabled.
> One of the hardest parts is synchronization with vlan's memory
> management, that is done through a new vlan flag: BR_VLFLAG_MCAST_ENABLED
> which is changed only under multicast_lock. When a vlan is being
> destroyed first that flag is removed under the lock, then the multicast
> context is torn down which includes waiting for any outstanding context
> timers. Since all of the vlan processing depends on BR_VLFLAG_MCAST_ENABLED
> it must be checked first if the contexts are vlan and the multicast_lock
> has been acquired. That is done by all IGMP/MLD packet processing
> functions and timers. When processing a packet we have RCU so the vlan
> memory won't be freed, but if the flag is missing we must not process it.
> The timers are synchronized in the same way with the addition of waiting
> for them to finish in case they are running after removing the flag
> under multicast_lock (i.e. they were waiting for the lock). Multicast vlan
> snooping requires vlan filtering to be enabled, if it's disabled then
> snooping gets automatically disabled, too. BR_VLFLAG_GLOBAL_MCAST_ENABLED
> controls if a vlan has BR_VLFLAG_MCAST_ENABLED set which is used in all
> vlan disabled checks. We need both flags because one is controlled by
> user-space globally (BR_VLFLAG_GLOBAL_MCAST_ENABLED) and the other is
> for a particular bridge/vlan or port/vlan entry (BR_VLFLAG_MCAST_ENABLED).
> Since the latter is also used for synchronization between the multicast
> and vlan code, and also controlled by BR_VLFLAG_GLOBAL_MCAST_ENABLED we
> rely on it when checking if a vlan context is disabled. The multicast
> fast-path has 3 new bit tests on the cache-hot bridge flags field, I
> didn't observe any measurable difference. I haven't forced either
> context options to be always disabled when the other type is enabled
> because the state consists of timers which either expire (router) or
> don't affect the normal operation. Some options, like the mcast querier
> one, won't be allowed to change for the disabled context type, that will
> come with a future patch-set which adds per-vlan querier control.
Here is the summary with links:
- [net-next,01/15] net: bridge: multicast: factor out port multicast context
- [net-next,02/15] net: bridge: multicast: factor out bridge multicast context
- [net-next,03/15] net: bridge: multicast: use multicast contexts instead of bridge or port
- [net-next,04/15] net: bridge: vlan: add global and per-port multicast context
- [net-next,05/15] net: bridge: multicast: add vlan state initialization and control
- [net-next,06/15] net: bridge: add vlan mcast snooping knob
- [net-next,07/15] net: bridge: multicast: add helper to get port mcast context from port group
- [net-next,08/15] net: bridge: multicast: use the port group to port context helper
- [net-next,09/15] net: bridge: multicast: check if should use vlan mcast ctx
- [net-next,10/15] net: bridge: multicast: add vlan querier and query support
- [net-next,11/15] net: bridge: multicast: include router port vlan id in notifications
- [net-next,12/15] net: bridge: vlan: add support for global options
- [net-next,13/15] net: bridge: vlan: add support for dumping global vlan options
- [net-next,14/15] net: bridge: vlan: notify when global options change
- [net-next,15/15] net: bridge: vlan: add mcast snooping control
You are awesome, thank you!
Deet-doot-dot, I am a bot.
More information about the Bridge