]> git.proxmox.com Git - mirror_ifupdown2.git/commitdiff
addons: bridge: check kernel state for igmp snooping on vxlan brport
authorJulien Fortin <julien@cumulusnetworks.com>
Thu, 7 Mar 2019 18:11:16 +0000 (19:11 +0100)
committerJulien Fortin <julien@cumulusnetworks.com>
Mon, 22 Apr 2019 02:53:23 +0000 (10:53 +0800)
Signed-off-by: Julien Fortin <julien@cumulusnetworks.com>
ifupdown2/addons/bridge.py

index 3cca424e6a572eda1bf69c961917170b8c9a6930..9677b3bc1d2d08561bbec3206561daf0bb8ffa7b 100644 (file)
@@ -1953,12 +1953,14 @@ class bridge(moduleBase):
                                                                                      brport_ifla_info_slave_data,
                                                                                      bridge_ports_learning.get(brport_name))
 
                                                                                      brport_ifla_info_slave_data,
                                                                                      bridge_ports_learning.get(brport_name))
 
-                    if self.vxlan_bridge_igmp_snooping_enable_port_mcrouter and utils.get_boolean_from_string(
+                    cached_bridge_mcsnoop = self.brctlcmd.link_cache_get([ifname, 'linkinfo', Link.IFLA_BR_MCAST_SNOOPING])
+
+                    if (self.vxlan_bridge_igmp_snooping_enable_port_mcrouter and utils.get_boolean_from_string(
                             self.get_bridge_mcsnoop_value(ifaceobj)
                             self.get_bridge_mcsnoop_value(ifaceobj)
-                    ):
+                    )) or cached_bridge_mcsnoop:
                         # if policy "vxlan_bridge_igmp_snooping_enable_port_mcrouter"
                         # if policy "vxlan_bridge_igmp_snooping_enable_port_mcrouter"
-                        # is on and mcsnoop is on, set 'bridge-portmcrouter 2'
-                        # on vxlan ports (if not set by the user)
+                        # is on and mcsnoop is on (or mcsnoop is already enabled on the
+                        # bridge, set 'bridge-portmcrouter 2' on vxlan ports (if not set by the user)
                         if not brport_ifla_info_slave_data.get(Link.IFLA_BRPORT_MULTICAST_ROUTER):
                             brport_ifla_info_slave_data[Link.IFLA_BRPORT_MULTICAST_ROUTER] = 2
                             self.logger.info("%s: %s: vxlan bridge igmp snooping: enable port multicast router" % (ifname, brport_name))
                         if not brport_ifla_info_slave_data.get(Link.IFLA_BRPORT_MULTICAST_ROUTER):
                             brport_ifla_info_slave_data[Link.IFLA_BRPORT_MULTICAST_ROUTER] = 2
                             self.logger.info("%s: %s: vxlan bridge igmp snooping: enable port multicast router" % (ifname, brport_name))