diff options
Diffstat (limited to 'python')
| -rw-r--r-- | python/vyos/ifconfig/vxlan.py | 20 | 
1 files changed, 17 insertions, 3 deletions
| diff --git a/python/vyos/ifconfig/vxlan.py b/python/vyos/ifconfig/vxlan.py index 918aea202..1023c58d1 100644 --- a/python/vyos/ifconfig/vxlan.py +++ b/python/vyos/ifconfig/vxlan.py @@ -134,6 +134,19 @@ class VXLANIf(Interface):          Controls whether vlan to tunnel mapping is enabled on the port.          By default this flag is off.          """ +        def range_to_dict(vlan_to_vni): +            """ Converts dict of ranges to dict """ +            result_dict = {} +            for vlan, vlan_conf in vlan_to_vni.items(): +                vni = vlan_conf['vni'] +                vlan_range, vni_range = vlan.split('-'), vni.split('-') +                if len(vlan_range) > 1: +                    vlan_range = range(int(vlan_range[0]), int(vlan_range[1]) + 1) +                    vni_range = range(int(vni_range[0]), int(vni_range[1]) + 1) +                dict_to_add = {str(k): {'vni': str(v)} for k, v in zip(vlan_range, vni_range)} +                result_dict.update(dict_to_add) +            return result_dict +          if not isinstance(state, bool):              raise ValueError('Value out of range') @@ -142,7 +155,7 @@ class VXLANIf(Interface):              if dict_search('parameters.vni_filter', self.config) != None:                  cur_vni_filter = get_vxlan_vni_filter(self.ifname) -            for vlan, vlan_config in self.config['vlan_to_vni_removed'].items(): +            for vlan, vlan_config in range_to_dict(self.config['vlan_to_vni_removed']).items():                  # If VNI filtering is enabled, remove matching VNI filter                  if cur_vni_filter != None:                      vni = vlan_config['vni'] @@ -159,10 +172,11 @@ class VXLANIf(Interface):          if 'vlan_to_vni' in self.config:              # Determine current OS Kernel configured VLANs +            vlan_vni_mapping = range_to_dict(self.config['vlan_to_vni'])              os_configured_vlan_ids = get_vxlan_vlan_tunnels(self.ifname) -            add_vlan = list_diff(list(self.config['vlan_to_vni'].keys()), os_configured_vlan_ids) +            add_vlan = list_diff(list(vlan_vni_mapping.keys()), os_configured_vlan_ids) -            for vlan, vlan_config in self.config['vlan_to_vni'].items(): +            for vlan, vlan_config in vlan_vni_mapping.items():                  # VLAN mapping already exists - skip                  if vlan not in add_vlan:                      continue | 
