--- zzzz-none-000/linux-4.19.183/net/bridge/br_multicast.c 2021-03-24 10:07:39.000000000 +0000 +++ bcm63-7530ax-756/linux-4.19.183/net/bridge/br_multicast.c 2023-06-28 08:54:21.000000000 +0000 @@ -35,6 +35,8 @@ #include #endif +#include + #include "br_private.h" static void br_multicast_start_querier(struct net_bridge *br, @@ -297,6 +299,11 @@ netif_running(br->dev)) mod_timer(&mp->timer, jiffies); + /* Must re-learn multicast sessions because of removed port + * group, otherwise avm_pa continues to forward to that port. + */ + if (p->addr.proto == htons(ETH_P_IP)) + avm_pa_flush_multicast_sessions_for_group(p->addr.u.ip4); return; } @@ -798,6 +805,12 @@ br_mdb_notify(br->dev, port, group, RTM_NEWMDB, 0); found: + /* Must re-learn multicast sessions because of newly added port group, + * otherwise avm_pa continues to forward only to existing egress ports + * and not this one. + */ + if (group->proto == htons(ETH_P_IP)) + avm_pa_flush_multicast_sessions_for_group(group->u.ip4); mod_timer(&p->timer, now + br->multicast_membership_interval); out: err = 0; @@ -2045,6 +2058,8 @@ br->mdb = NULL; + avm_pa_flush_multicast_sessions(); + ver = mdb->ver; for (i = 0; i < mdb->max; i++) { hlist_for_each_entry_safe(mp, n, &mdb->mhash[i],