summaryrefslogtreecommitdiff
path: root/src
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 /src
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 'src')
-rwxr-xr-xsrc/conf_mode/vrrp.py16
1 files changed, 15 insertions, 1 deletions
diff --git a/src/conf_mode/vrrp.py b/src/conf_mode/vrrp.py
index ad38adaec..86b11b6c4 100755
--- a/src/conf_mode/vrrp.py
+++ b/src/conf_mode/vrrp.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
#
-# Copyright (C) 2018-2021 VyOS maintainers and contributors
+# Copyright (C) 2018-2023 VyOS maintainers and contributors
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License version 2 or later as
@@ -15,6 +15,7 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
import os
+import time
from sys import exit
from ipaddress import ip_interface
@@ -28,6 +29,7 @@ from vyos.template import render
from vyos.template import is_ipv4
from vyos.template import is_ipv6
from vyos.util import call
+from vyos.util import is_ipv6_tentative
from vyos.util import is_systemd_service_running
from vyos.xml import defaults
from vyos import ConfigError
@@ -147,6 +149,18 @@ def apply(vrrp):
call(f'systemctl stop {service_name}')
return None
+ # Check if IPv6 address is tentative T5533
+ for group, group_config in vrrp['group'].items():
+ if 'hello_source_address' in group_config:
+ if is_ipv6(group_config['hello_source_address']):
+ ipv6_address = group_config['hello_source_address']
+ interface = group_config['interface']
+ checks = 20
+ interval = 0.1
+ for _ in range(checks):
+ if is_ipv6_tentative(interface, ipv6_address):
+ time.sleep(interval)
+
# XXX: T3944 - reload keepalived configuration if service is already running
# to not cause any service disruption when applying changes.
if is_systemd_service_running(service_name):