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 | |
| parent | bbcf94bba674e4c001d9439439b8fd405f39501a (diff) | |
| parent | 5fb77805f0fcc507c6af7b897fcf5a532bf20e42 (diff) | |
| download | vyos-1x-8e22a2f6f77dc2d10969d8603c59a8834164b903.tar.gz vyos-1x-8e22a2f6f77dc2d10969d8603c59a8834164b903.zip | |
Merge pull request #2192 from sever-sever/T5533vyos/1.5dev0
T5533: Fix VRRP IPv6 group enters in FAULT state
Diffstat (limited to 'src')
| -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 | 
