From 427392e988b94a120e0cb56c0067821a8b325764 Mon Sep 17 00:00:00 2001 From: Edoardo Putti Date: Thu, 22 Jun 2017 12:05:59 +0200 Subject: [PATCH] [airos] check for interface without address definition --- netjsonconfig/backends/airos/converters.py | 47 ++++++++++++---------- 1 file changed, 26 insertions(+), 21 deletions(-) diff --git a/netjsonconfig/backends/airos/converters.py b/netjsonconfig/backends/airos/converters.py index 68d063c9c..439273fcf 100644 --- a/netjsonconfig/backends/airos/converters.py +++ b/netjsonconfig/backends/airos/converters.py @@ -181,27 +181,32 @@ def to_intermediate(self): if interface['type'] == 'wireless': base['devname'] = interface['wireless']['radio'] - addresses = interface.get('addresses', []) - - for addr in addresses: - temp = { - 'devname': interface['name'], - 'status': 'enabled', # can't disable interfaces - 'up': status(interface), - 'mut': interface.get('mtu', 1500), - } - if addr['proto'] == 'dhcp': - temp['autoip'] = {} - temp['autoip']['status'] = 'enabled' - else: - network = ip_interface('%s/%d' % (addr['address'],addr['mask'])) - temp['ip'] = str(network.ip) - temp['netmask'] = str(network.netmask) - - if interface['type'] == 'wireless': - temp['devname'] = interface['wireless']['radio'] - - interfaces.append(temp) + addresses = interface.get('addresses') + + if addresses: + # for every address policy put a + # configuration + for addr in addresses: + temp = deepcopy(base) + + # handle explicit address policy + if addr['proto'] == 'dhcp': + temp['autoip'] = {} + temp['autoip']['status'] = 'enabled' + else: + ip_and_mask = '%s/%d' % (addr['address'], addr['mask']) + network = ip_interface(ip_and_mask) + temp['ip'] = str(network.ip) + temp['netmask'] = str(network.netmask) + + interfaces.append(temp) + else: + # an interface without address + # is still valid with these defaults values + base['autoip'] = { + 'status': 'disabled', + } + interfaces.append(base) result.append(interfaces) result.append({