diff options
author | zdc <zdc@users.noreply.github.com> | 2023-09-04 10:59:17 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-09-04 10:59:17 +0300 |
commit | 8e22a2f6f77dc2d10969d8603c59a8834164b903 (patch) | |
tree | f2b723769df3fa6b8ea0c3c308db3e204b0b6b37 /src/conf_mode/high-availability.py | |
parent | bbcf94bba674e4c001d9439439b8fd405f39501a (diff) | |
parent | 5fb77805f0fcc507c6af7b897fcf5a532bf20e42 (diff) | |
download | vyos-1x-vyos/1.5dev0.tar.gz vyos-1x-vyos/1.5dev0.zip |
Merge pull request #2192 from sever-sever/T5533vyos/1.5dev0
T5533: Fix VRRP IPv6 group enters in FAULT state
Diffstat (limited to 'src/conf_mode/high-availability.py')
-rwxr-xr-x | src/conf_mode/high-availability.py | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/src/conf_mode/high-availability.py b/src/conf_mode/high-availability.py index 626a3757e..0121df11c 100755 --- a/src/conf_mode/high-availability.py +++ b/src/conf_mode/high-availability.py @@ -15,6 +15,8 @@ # along with this program. If not, see <http://www.gnu.org/licenses/>. +import time + from sys import exit from ipaddress import ip_interface from ipaddress import IPv4Interface @@ -26,11 +28,13 @@ from vyos.ifconfig.vrrp import VRRP from vyos.template import render from vyos.template import is_ipv4 from vyos.template import is_ipv6 +from vyos.utils.network import is_ipv6_tentative from vyos.utils.process import call from vyos import ConfigError from vyos import airbag airbag.enable() + def get_config(config=None): if config: conf = config @@ -171,6 +175,18 @@ def apply(ha): call(f'systemctl stop {service_name}') return None + # Check if IPv6 address is tentative T5533 + for group, group_config in ha['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) + call(f'systemctl reload-or-restart {service_name}') return None |