diff options
Diffstat (limited to 'python')
-rw-r--r-- | python/vyos/util.py | 28 |
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}') |