From: Julien Fortin Date: Tue, 26 Feb 2019 23:11:36 +0000 (+0100) Subject: addons: bridge: add new policy vxlan_bridge_igmp_snooping_enable_port_mcrouter X-Git-Tag: 1.2.8-1~34 X-Git-Url: https://git.proxmox.com/?p=mirror_ifupdown2.git;a=commitdiff_plain;h=80adb3c144c192fd1c85fe31fc3577d9c770c1f2;hp=e588acb7d88c794d6b789ca7d355bf76336a953f addons: bridge: add new policy vxlan_bridge_igmp_snooping_enable_port_mcrouter 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 --- diff --git a/ifupdown2/addons/bridge.py b/ifupdown2/addons/bridge.py index 973ec7e..3cca424 100644 --- a/ifupdown2/addons/bridge.py +++ b/ifupdown2/addons/bridge.py @@ -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 = {}