]> git.proxmox.com Git - mirror_ifupdown2.git/commitdiff
addons: bridge: bridge-portmcfl: add support for yes/no value
authorJulien Fortin <julien@cumulusnetworks.com>
Tue, 3 Jan 2017 15:48:59 +0000 (18:48 +0300)
committerJulien Fortin <julien@cumulusnetworks.com>
Tue, 3 Jan 2017 15:48:59 +0000 (18:48 +0300)
Ticket: CM-14146
Reviewed By: Roopa, Daniel W, Nikhil G
Testing Done:

bridge-portmcfl attribute needs to validate an <interface-yes-no-0-1-list>
to support the yes/no syntax.
This is an incremental commit for CM-8866

$ ifquery -a
auto br0
iface br0
      bridge-ports swp1 swp2 swp3 swp4
      bridge-portmcfl swp1=yes swp2=no swp3=1 swp4=0

auto br1
iface br1
      bridge-vlan-aware yes
      bridge-ports swp5 swp6 swp7 swp8

auto swp5
iface swp5
      bridge-portmcfl yes

auto swp6
iface swp6
      bridge-portmcfl no

auto swp7
iface swp7
      bridge-portmcfl 1

auto swp8
iface swp8
      bridge-portmcfl 0
$

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

index 54bb6ec183771bf2ec279a6db86cd854d97d1d45..e1bba5de724376bbb1139681fed7c04f78032e79 100644 (file)
@@ -183,11 +183,11 @@ class bridge(moduleBase):
                                        'under the port (recommended): bridge-portmcrouter yes']},
                     'bridge-portmcfl' :
                         { 'help' : 'port multicast fast leave.',
-                          'validvals': ['<interface-range-list>'],
-                          'validrange' : ['0', '65535'],
-                          'default' : '0',
-                          'example' : ['under the bridge: bridge-portmcfl swp1=0 swp2=0',
-                                       'under the port (recommended): bridge-portmcfl 0']},
+                          'validvals': ['<interface-yes-no-0-1-list>'],
+                          'validrange' : ['yes', 'no', '0', '1'],
+                          'default' : 'no',
+                          'example' : ['under the bridge: bridge-portmcfl swp1=no swp2=no',
+                                       'under the port (recommended): bridge-portmcfl no']},
                     'bridge-waitport' :
                         { 'help' : 'wait for a max of time secs for the' +
                                 ' specified ports to become available,' +
@@ -782,7 +782,8 @@ class bridge(moduleBase):
                         (port, val) = p.split('=')
                         if not portattrs.get(port):
                             portattrs[port] = {}
-                        if attrname == 'bridge-portmcrouter':
+                        if (attrname == 'bridge-portmcrouter'
+                                or attrname == 'bridge-portmcfl'):
                             portattrs[port].update({dstattrname: utils.boolean_support_binary(val)})
                         else:
                             portattrs[port].update({dstattrname : val})
@@ -1077,8 +1078,7 @@ class bridge(moduleBase):
         portattrs = {}
         for attrname, dstattrname in {
             'bridge-pathcosts' : 'pathcost',
-            'bridge-portprios' : 'portprio',
-            'bridge-portmcfl' : 'portmcfl'}.items():
+            'bridge-portprios' : 'portprio'}.items():
             attrval = bportifaceobj.get_attr_value_first(attrname)
             if not attrval:
                 # Check if bridge has that attribute
@@ -1094,6 +1094,10 @@ class bridge(moduleBase):
         if portmcrouter:
             portattrs['portmcrouter'] = utils.boolean_support_binary(portmcrouter)
 
+        portmcfl = bportifaceobj.get_attr_value_first('bridge-portmcfl')
+        if portmcfl:
+            portattrs['portmcfl'] = utils.boolean_support_binary(portmcfl)
+
         try:
             self.brctlcmd.set_bridgeport_attrs(bridgename,
                             bportifaceobj.name, portattrs)
@@ -1833,7 +1837,7 @@ class bridge(moduleBase):
                 running_attrval = self.brctlcmd.get_bridgeport_attr(
                                        bridgename, ifaceobj.name, dstattr)
 
-                if dstattr == 'portmcrouter':
+                if dstattr == 'portmcrouter' or dstattr == 'portmcfl':
                     if not utils.is_binary_bool(attrval) and running_attrval:
                         running_attrval = utils.get_yesno_boolean(
                             utils.get_boolean_from_string(running_attrval))
@@ -1941,7 +1945,10 @@ class bridge(moduleBase):
                 if attrl[0] in runningattrs:
                     bool = utils.get_boolean_from_string(runningattrs[attrl[0]])
                     runningattrs[attrl[0]] = utils.get_yesno_boolean(bool)
-        attrval = ifaceobj.get_attr_value_first('bridge-portmcrouter')
+        self._query_check_support_yesno_attr_port(runningattrs, ifaceobj, 'portmcrouter', ifaceobj.get_attr_value_first('bridge-portmcrouter'))
+        self._query_check_support_yesno_attr_port(runningattrs, ifaceobj, 'portmcfl', ifaceobj.get_attr_value_first('bridge-portmcfl'))
+
+    def _query_check_support_yesno_attr_port(self, runningattrs, ifaceobj, attr, attrval):
         if attrval:
             portlist = self.parse_port_list(ifaceobj.name, attrval)
             if portlist:
@@ -1951,8 +1958,8 @@ class bridge(moduleBase):
                     if not utils.is_binary_bool(val):
                         to_convert.append(port)
                 for port in to_convert:
-                    runningattrs['ports'][port]['portmcrouter'] = utils.get_yesno_boolean(
-                        utils.get_boolean_from_string(runningattrs['ports'][port]['portmcrouter']))
+                    runningattrs['ports'][port][attr] = utils.get_yesno_boolean(
+                        utils.get_boolean_from_string(runningattrs['ports'][port][attr]))
 
     _run_ops = {'pre-up' : _up,
                'post-down' : _down,