--- zzzz-none-000/linux-4.9.218/net/bridge/br_if.c 2020-04-02 15:20:41.000000000 +0000 +++ seale-7590ax-750/linux-4.9.218/net/bridge/br_if.c 2023-03-29 10:59:08.000000000 +0000 @@ -262,6 +262,10 @@ struct net_bridge *br = p->br; struct net_device *dev = p->dev; +#ifdef CONFIG_MCAST_SNOOPING + br_mcast_port_cleanup(p); +#endif + sysfs_remove_link(br->ifobj, p->dev->name); nbp_delete_promisc(p); @@ -360,10 +364,17 @@ dev_hold(dev); p->dev = dev; p->path_cost = port_cost(dev); + p->learning_limit = BRPORT_LEARNING_LIMIT_UNLIMITED; p->priority = 0x8000 >> BR_PORT_BITS; p->port_no = index; - p->flags = BR_LEARNING | BR_FLOOD | BR_MCAST_FLOOD; + p->flags = BR_LEARNING | BR_FLOOD | BR_MCAST_FLOOD | BR_BCAST_FLOOD; br_init_port(p); + +#ifdef CONFIG_MCAST_SNOOPING + br_mcast_port_init(p); + spin_lock_init(&p->mghash_lock); +#endif + br_set_state(p, BR_STATE_DISABLED); br_stp_port_timer_init(p); err = br_multicast_add_port(p); @@ -593,6 +604,10 @@ kobject_uevent(&p->kobj, KOBJ_ADD); +#ifdef CONFIG_MCAST_SNOOPING + br_ifinfo_notify(RTM_NEWLINK, p); +#endif + return 0; err7: @@ -644,6 +659,10 @@ netdev_update_features(br->dev); +#ifdef CONFIG_MCAST_SNOOPING + br_ifinfo_notify(RTM_DELLINK, p); +#endif + return 0; }