From 3fc9b2fb79fd3e27a5034804e5243fe2e4ec40c3 Mon Sep 17 00:00:00 2001
From: Christian Poessinger <christian@poessinger.com>
Date: Fri, 14 May 2021 21:26:25 +0200
Subject: conntrack: T3535: check for VRRP group definition

---
 interface-definitions/service_conntrack-sync.xml.in |  2 +-
 src/conf_mode/conntrack_sync.py                     | 10 ++++++++++
 2 files changed, 11 insertions(+), 1 deletion(-)

diff --git a/interface-definitions/service_conntrack-sync.xml.in b/interface-definitions/service_conntrack-sync.xml.in
index 2953ae390..088cd78f6 100644
--- a/interface-definitions/service_conntrack-sync.xml.in
+++ b/interface-definitions/service_conntrack-sync.xml.in
@@ -78,7 +78,7 @@
                 <children>
                   <leafNode name="sync-group">
                     <properties>
-                      <help>VRRP sync group [REQUIRED]</help>
+                      <help>VRRP sync group</help>
                       <completionHelp>
                         <path>high-availability vrrp sync-group</path>
                       </completionHelp>
diff --git a/src/conf_mode/conntrack_sync.py b/src/conf_mode/conntrack_sync.py
index c1c90d1fc..e0a414745 100755
--- a/src/conf_mode/conntrack_sync.py
+++ b/src/conf_mode/conntrack_sync.py
@@ -21,6 +21,7 @@ from vyos.config import Config
 from vyos.configdict import dict_merge
 from vyos.configverify import verify_interface_exists
 from vyos.util import call
+from vyos.util import dict_search
 from vyos.util import read_file
 from vyos.template import render
 from vyos.template import get_ipv4
@@ -51,6 +52,9 @@ def get_config(config=None):
     conntrack['hash_size'] = read_file('/sys/module/nf_conntrack/parameters/hashsize')
     conntrack['table_size'] = read_file('/proc/sys/net/netfilter/nf_conntrack_max')
 
+    conntrack['vrrp'] = conf.get_config_dict(['high-availability', 'vrrp', 'sync-group'],
+                                     get_first_key=True)
+
     return conntrack
 
 def verify(conntrack):
@@ -75,6 +79,12 @@ def verify(conntrack):
         if not is_addr_assigned(address):
             raise ConfigError(f'Specified listen-address {address} not assigned to any interface!')
 
+    vrrp_group = dict_search('failover_mechanism.vrrp.sync_group', conntrack)
+    if vrrp_group == None:
+        raise ConfigError(f'No VRRP sync-group defined!')
+    if vrrp_group not in conntrack['vrrp']:
+        raise ConfigError(f'VRRP sync-group {vrrp_group} not configured!')
+
     return None
 
 def generate(conntrack):
-- 
cgit v1.2.3