diff options
Diffstat (limited to 'python')
| -rw-r--r-- | python/vyos/configdict.py | 3 | ||||
| -rwxr-xr-x | python/vyos/ifconfig/interface.py | 20 | 
2 files changed, 14 insertions, 9 deletions
diff --git a/python/vyos/configdict.py b/python/vyos/configdict.py index 8d7142049..5c6836e97 100644 --- a/python/vyos/configdict.py +++ b/python/vyos/configdict.py @@ -375,6 +375,9 @@ def get_interface_dict(config, base, ifname=''):      # XXX: T2665: blend in proper DHCPv6-PD default values      dict = T2665_set_dhcpv6pd_defaults(dict) +    address = leaf_node_changed(config, ['address']) +    if address: dict.update({'address_old' : address}) +      # Check if we are a member of a bridge device      bridge = is_member(config, ifname, 'bridge')      if bridge: dict.update({'is_bridge_member' : bridge}) diff --git a/python/vyos/ifconfig/interface.py b/python/vyos/ifconfig/interface.py index 14b782db4..963f47c89 100755 --- a/python/vyos/ifconfig/interface.py +++ b/python/vyos/ifconfig/interface.py @@ -1085,6 +1085,8 @@ class Interface(Control):          >>> j.get_addr()          ['2001:db8::ffff/64']          """ +        if not addr: +            raise ValueError()          # remove from interface          if addr == 'dhcp': @@ -1364,16 +1366,16 @@ class Interface(Control):          # determine IP addresses which are assigned to the interface and build a          # list of addresses which are no longer in the dict so they can be removed -        cur_addr = self.get_addr() -        for addr in list_diff(cur_addr, new_addr): -            # we will delete all interface specific IP addresses if they are not -            # explicitly configured on the CLI -            if is_ipv6_link_local(addr): -                eui64 = mac2eui64(self.get_mac(), 'fe80::/64') -                if addr != f'{eui64}/64': +        if 'address_old' in config: +            for addr in list_diff(config['address_old'], new_addr): +                # we will delete all interface specific IP addresses if they are not +                # explicitly configured on the CLI +                if is_ipv6_link_local(addr): +                    eui64 = mac2eui64(self.get_mac(), 'fe80::/64') +                    if addr != f'{eui64}/64': +                        self.del_addr(addr) +                else:                      self.del_addr(addr) -            else: -                self.del_addr(addr)          for addr in new_addr:              self.add_addr(addr)  | 
