On Sat, Mar 07, 2026 at 05:45:44AM +0100, Linus Lüssing wrote:
> @@ -4478,6 +4487,9 @@ static void __br_multicast_stop(struct net_bridge_mcast 
> *brmctx)
>       timer_shutdown(&brmctx->ip6_other_query.delay_timer);
>       timer_shutdown(&brmctx->ip6_own_query.timer);
>  #endif
> +
> +     /* bridge interface is down, set multicast state to inactive */
> +     br_multicast_update_active(brmctx);
>  }

This suffers from the same problem that I already mentioned.
__br_multicast_stop() is only called for VLANs that were added on the
bridge. For the rest it does not update the active state. You can
reproduce with [1].

[1]
#!/bin/bash

for ns in ns0 ns1; do
        ip netns del $ns &> /dev/null
        ip netns add $ns
        ip -n $ns link set dev lo up
done

ip -n ns0 link add name veth0 type veth peer name veth1 netns ns1

ip -n ns0 link add name br0 up type bridge vlan_filtering 1 mcast_snooping 1 
mcast_vlan_snooping 1
ip -n ns1 link add name br1 up type bridge vlan_filtering 1 mcast_snooping 1 
mcast_vlan_snooping 1

ip -n ns0 link set dev veth0 up master br0
ip -n ns1 link set dev veth1 up master br1

bridge -n ns0 vlan add vid 10 dev veth0 master
bridge -n ns1 vlan add vid 10 dev veth1 master

sleep 5

bridge -n ns0 vlan global set vid 10 dev br0 mcast_snooping 1 
mcast_query_response_interval 100 mcast_querier 1
bridge -n ns1 vlan global set vid 10 dev br1 mcast_snooping 1 
mcast_query_response_interval 100 mcast_querier 0

sleep 5

bridge -n ns1 -j -p vlan global show dev br1 vid 10 | jq 
'.[]["vlans"][]["mcast_active_v4"]'

ip -n ns1 link set dev br1 down
sleep 5
bridge -n ns1 -j -p vlan global show dev br1 vid 10 | jq 
'.[]["vlans"][]["mcast_active_v4"]'

Reply via email to