On Sun, Feb 22, 2026 at 10:53:37AM +0200, Danielle Ratson wrote:
> The br_vlan_opts_eq_range() function determines if consecutive VLANs can
> be grouped together in a range for compact netlink notifications. It
> currently checks state, tunnel info, and multicast router configuration,
> but misses two categories of per-VLAN options that affect the output:
> 1. User-visible priv_flags (neigh_suppress, mcast_enabled)
> 2. Port multicast context (mcast_max_groups, mcast_n_groups)
> 
> When VLANs have different settings for these options, they are incorrectly
> grouped into ranges, causing netlink notifications to report only one
> VLAN's settings for the entire range.
> 
> Fix by checking priv_flags equality, but only for flags that affect netlink
> output (BR_VLFLAG_NEIGH_SUPPRESS_ENABLED and BR_VLFLAG_MCAST_ENABLED),
> and comparing multicast context (mcast_max_groups and mcast_n_groups).
> 
> Example showing the bugs before the fix:
> 
> $ bridge vlan set vid 10 dev dummy1 neigh_suppress on
> $ bridge vlan set vid 11 dev dummy1 neigh_suppress off
> $ bridge -d vlan show dev dummy1
>   port             vlan-id
>   dummy1           10-11
>                       ... neigh_suppress on
> 
> $ bridge vlan set vid 10 dev dummy1 mcast_max_groups 100
> $ bridge vlan set vid 11 dev dummy1 mcast_max_groups 200
> $ bridge -d vlan show dev dummy1
>   port             vlan-id
>   dummy1           10-11
>                       ... mcast_max_groups 100
> 
> After the fix, VLANs 10 and 11 are shown as separate entries with their
> correct individual settings.
> 
> Fixes: a1aee20d5db2 ("net: bridge: Add netlink knobs for number / maximum MDB 
> entries")
> Fixes: 83f6d600796c ("bridge: vlan: Allow setting VLAN neighbor suppression 
> state")
> Signed-off-by: Danielle Ratson <[email protected]>
> Reviewed-by: Ido Schimmel <[email protected]>
> ---
>  net/bridge/br_private.h      | 10 ++++++++++
>  net/bridge/br_vlan_options.c | 26 +++++++++++++++++++++++---
>  2 files changed, 33 insertions(+), 3 deletions(-)
> 
 
Acked-by: Nikolay Aleksandrov <[email protected]>

Reply via email to