]> git.proxmox.com Git - mirror_ifupdown2.git/commitdiff
addons: bridge: add new policy vxlan_bridge_igmp_snooping_enable_port_mcrouter
authorJulien Fortin <julien@cumulusnetworks.com>
Tue, 26 Feb 2019 23:11:36 +0000 (00:11 +0100)
committerJulien Fortin <julien@cumulusnetworks.com>
Mon, 22 Apr 2019 02:50:00 +0000 (10:50 +0800)
if igmp snooping is enabled on a vxlan bridge and if the
vxlan_bridge_igmp_snooping_enable_port_mcrouter is turned on, ifupdown2
will automatically enable multicast router on the vxlan brport unless
this attribute was provided by the user. The policy is enabled by default.

The policy can be disabled as follow:
{
    "bridge": {
"module_globals": {
    "vxlan_bridge_igmp_snooping_enable_port_mcrouter": "no"
}
    }
}

auto br0
iface br0
      bridge-ports vx42
      bridge-mcsnoop yes

auto vx42
iface vx42
      vxlan-id 42

$ ifreload -ad
will show that the config is applied

Signed-off-by: Julien Fortin <julien@cumulusnetworks.com>
ifupdown2/addons/bridge.py

index 973ec7efb01ccefac5f14d461e59537df11a3619..3cca424e6a572eda1bf69c961917170b8c9a6930 100644 (file)
@@ -643,6 +643,14 @@ class bridge(moduleBase):
             )
         )
 
+        self.vxlan_bridge_igmp_snooping_enable_port_mcrouter = utils.get_boolean_from_string(
+            policymanager.policymanager_api.get_module_globals(
+                module_name=self.__class__.__name__,
+                attr="vxlan_bridge_igmp_snooping_enable_port_mcrouter"
+            ),
+            default=True
+        )
+
         self.l2protocol_tunnel_callback = {
             'all': self._l2protocol_tunnel_set_all,
             'stp': self._l2protocol_tunnel_set_stp,
@@ -1944,6 +1952,16 @@ class bridge(moduleBase):
                                                                                      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(
+                            self.get_bridge_mcsnoop_value(ifaceobj)
+                    ):
+                        # 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)
+                        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))
                 else:
                     kind = None
                     ifla_info_data = {}