1
0
mirror of https://github.com/CumulusNetworks/ifupdown2.git synced 2024-05-06 15:54:50 +00:00

addons: bond: support for classical numerical bond modes

Ticket: CM-7965
Reviewed By: Roopa, Nikhil G
Testing Done: ifup/down/reload/query iface attr bond-mode with numerical/string values

Signed-off-by: Julien Fortin <julien@cumulusnetworks.com>
This commit is contained in:
Julien Fortin
2016-05-25 17:12:19 +02:00
parent d02acd0226
commit 1a13da934b

View File

@ -44,12 +44,16 @@ class bond(moduleBase):
'default' : '0',
'example' : ['bond-miimon 0']},
'bond-mode' :
{'help' : 'bond mode',
'validvals' : ['balance-rr', 'active-backup',
'balance-xor', 'broadcast', '802.3ad',
'balance-tlb', 'balance-alb'],
'default' : 'balance-rr',
'example' : ['bond-mode 802.3ad']},
{'help': 'bond mode',
'validvals': ['0', 'balance-rr',
'1', 'active-backup',
'2', 'balance-xor',
'3', 'broadcast',
'4', '802.3ad',
'5', 'balance-tlb',
'6', 'balance-alb'],
'default': 'balance-rr',
'example': ['bond-mode 802.3ad']},
'bond-lacp-rate':
{'help' : 'bond lacp rate',
'validvals' : ['0', '1'],
@ -91,6 +95,34 @@ class bond(moduleBase):
'bond-slaves glob swp1-2',
'bond-slaves regex (swp[1|2)']}}}
_bond_mode_num = {'0': 'balance-rr',
'1': 'active-backup',
'2': 'balance-xor',
'3': 'broadcast',
'4': '802.3ad',
'5': 'balance-tlb',
'6': 'balance-alb'}
_bond_mode_string = {'balance-rr': '0',
'active-backup': '1',
'balance-xor': '2',
'broadcast': '3',
'802.3ad': '4',
'balance-tlb': '5',
'balance-alb': '6'}
@staticmethod
def _get_readable_bond_mode(mode):
if mode in bond._bond_mode_num:
return bond._bond_mode_num[mode]
return mode
@staticmethod
def _get_num_bond_mode(mode):
if mode in bond._bond_mode_string:
return bond._bond_mode_string[mode]
return mode
def __init__(self, *args, **kargs):
ifupdownaddons.modulebase.moduleBase.__init__(self, *args, **kargs)
self.ipcmd = None
@ -165,15 +197,17 @@ class bond(moduleBase):
int(attrval) > int(validrange[1])):
raise Exception(msg + ' Valid range is [%s,%s]'
%(validrange[0], validrange[1]))
if attrname == 'bond-mode' and attrval == '802.3ad':
dattrname = 'bond-min-links'
min_links = ifaceobj.get_attr_value_first(dattrname)
if not min_links:
min_links = self.bondcmd.get_min_links(ifaceobj.name)
if min_links == '0':
self.logger.warn('%s: attribute %s'
%(ifaceobj.name, dattrname) +
' is set to \'0\'')
if attrname == 'bond-mode':
attrval = bond._get_readable_bond_mode(attrval)
if attrval == '802.3ad':
dattrname = 'bond-min-links'
min_links = ifaceobj.get_attr_value_first(dattrname)
if not min_links:
min_links = self.bondcmd.get_min_links(ifaceobj.name)
if min_links == '0':
self.logger.warn('%s: attribute %s'
%(ifaceobj.name, dattrname) +
' is set to \'0\'')
elif policy_default_val:
return policy_default_val
return attrval
@ -296,6 +330,12 @@ class bond(moduleBase):
if not ifaceattrs: return
runningattrs = self._query_running_attrs(ifaceobj.name)
# support for numerical bond-mode
mode = ifaceobj.get_attr_value_first('bond-mode')
if mode in bond._bond_mode_num:
if 'bond-mode' in runningattrs:
runningattrs['bond-mode'] = bond._get_num_bond_mode(runningattrs['bond-mode'])
for k in ifaceattrs:
v = ifaceobj.get_attr_value_first(k)
if not v: