summaryrefslogtreecommitdiff
path: root/python
diff options
context:
space:
mode:
authorDaniil Baturin <daniil@vyos.io>2023-09-05 11:23:03 +0100
committerGitHub <noreply@github.com>2023-09-05 11:23:03 +0100
commit7bc09074457e3d0d60de18c713e0b6d91f4e20a6 (patch)
tree205e50ffb8896b6d7a720a16cd57bdacb0b8526c /python
parent68aac9a42f6dbbdd41bf6ba514cf83f660b1e7e5 (diff)
parent500d59cb1fe12916ae529fa20860f1518d68244b (diff)
downloadvyos-1x-7bc09074457e3d0d60de18c713e0b6d91f4e20a6.tar.gz
vyos-1x-7bc09074457e3d0d60de18c713e0b6d91f4e20a6.zip
Merge pull request #2200 from sever-sever/T5533-eq
T5533: Fix VRRP IPv6 FAULT state due to IPv6 tentative state
Diffstat (limited to 'python')
-rw-r--r--python/vyos/util.py28
1 files changed, 28 insertions, 0 deletions
diff --git a/python/vyos/util.py b/python/vyos/util.py
index 20c743b35..e83a17e18 100644
--- a/python/vyos/util.py
+++ b/python/vyos/util.py
@@ -920,6 +920,34 @@ def is_ipv6_enabled() -> bool:
""" Check if IPv6 support on the system is enabled or not """
return (sysctl_read('net.ipv6.conf.all.disable_ipv6') == '0')
+def is_ipv6_tentative(iface: str, ipv6_address: str) -> bool:
+ """Check if IPv6 address is in tentative state.
+ This function checks if an IPv6 address on a specific network interface is
+ in the tentative state. IPv6 tentative addresses are not fully configured
+ and are undergoing Duplicate Address Detection (DAD) to ensure they are
+ unique on the network.
+ Args:
+ iface (str): The name of the network interface.
+ ipv6_address (str): The IPv6 address to check.
+ Returns:
+ bool: True if the IPv6 address is tentative, False otherwise.
+ """
+ import json
+ from vyos.util import rc_cmd
+
+ rc, out = rc_cmd(f'ip -6 --json address show dev {iface} scope global')
+ if rc:
+ return False
+
+ data = json.loads(out)
+ for addr_info in data[0]['addr_info']:
+ if (
+ addr_info.get('local') == ipv6_address and
+ addr_info.get('tentative', False)
+ ):
+ return True
+ return False
+
def interface_exists(interface) -> bool:
import os
return os.path.exists(f'/sys/class/net/{interface}')