--- zzzz-none-000/linux-2.6.39.4/net/bridge/br_multicast.c 2011-08-03 19:43:28.000000000 +0000 +++ puma6-atom-6490-729/linux-2.6.39.4/net/bridge/br_multicast.c 2021-11-10 13:38:18.000000000 +0000 @@ -278,6 +278,13 @@ netif_running(br->dev)) mod_timer(&mp->timer, jiffies); +#ifdef CONFIG_AVM_PA + /* Must re-learn multicast sessions because of removed port + * group, otherwise avm_pa continues to forward to that port + */ + if (mp->addr.proto == htons(ETH_P_IP)) + avm_pa_flush_multicast_sessions_for_group(mp->addr.u.ip4); +#endif return; } @@ -749,6 +756,14 @@ rcu_assign_pointer(*pp, p); found: +#ifdef CONFIG_AVM_PA + /* 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 (p->addr.proto == htons(ETH_P_IP)) + avm_pa_flush_multicast_sessions_for_group(mp->addr.u.ip4); +#endif mod_timer(&p->timer, now + br->multicast_membership_interval); out: err = 0; @@ -1660,6 +1675,10 @@ br->mdb = NULL; +#ifdef CONFIG_AVM_PA + avm_pa_flush_multicast_sessions(); +#endif + ver = mdb->ver; for (i = 0; i < mdb->max; i++) { hlist_for_each_entry_safe(mp, p, n, &mdb->mhash[i],