summaryrefslogtreecommitdiff
path: root/python
diff options
context:
space:
mode:
authorChristian Poessinger <christian@poessinger.com>2020-12-06 18:13:31 +0100
committerChristian Poessinger <christian@poessinger.com>2020-12-06 18:13:31 +0100
commitd247736f67cc056062b75a4215a031bebcfee2ee (patch)
tree9670119cd318c2299afd8a1d93605b2f73dc5357 /python
parent2bfe25d4376f3b410906d157c3f9cdfd07fe79f2 (diff)
downloadvyos-1x-d247736f67cc056062b75a4215a031bebcfee2ee.tar.gz
vyos-1x-d247736f67cc056062b75a4215a031bebcfee2ee.zip
vyos.ifconfig: T1579: do not remove IPv6 link-local address on reconfiguration
Diffstat (limited to 'python')
-rw-r--r--python/vyos/ifconfig/interface.py6
-rw-r--r--python/vyos/validate.py4
2 files changed, 7 insertions, 3 deletions
diff --git a/python/vyos/ifconfig/interface.py b/python/vyos/ifconfig/interface.py
index 6837e2d6a..d695f05e3 100644
--- a/python/vyos/ifconfig/interface.py
+++ b/python/vyos/ifconfig/interface.py
@@ -40,6 +40,7 @@ from vyos.util import read_file
from vyos.template import is_ipv4
from vyos.template import is_ipv6
from vyos.validate import is_intf_addr_assigned
+from vyos.validate import is_ipv6_link_local
from vyos.validate import assert_boolean
from vyos.validate import assert_list
from vyos.validate import assert_mac
@@ -1042,7 +1043,10 @@ class Interface(Control):
# 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):
- self.del_addr(addr)
+ # do not clean out link-local IPv6 addresses - it makes no sense
+ # as they will be readded so this prevents any flapping links
+ if not is_ipv6_link_local(addr):
+ self.del_addr(addr)
for addr in new_addr:
self.add_addr(addr)
diff --git a/python/vyos/validate.py b/python/vyos/validate.py
index 84a7bc2de..98bd40f74 100644
--- a/python/vyos/validate.py
+++ b/python/vyos/validate.py
@@ -27,11 +27,11 @@ from vyos.util import cmd
def is_ipv6_link_local(addr):
""" Check if addrsss is an IPv6 link-local address. Returns True/False """
- from ipaddress import IPv6Address
+ from ipaddress import ip_interface
from vyos.template import is_ipv6
addr = addr.split('%')[0]
if is_ipv6(addr):
- if IPv6Address(addr).is_link_local:
+ if ip_interface(addr).is_link_local:
return True
return False