From 2e4bceee568d4f132d0667a3ca51d05154f375d5 Mon Sep 17 00:00:00 2001
From: Henning Surmeier <me@hensur.de>
Date: Fri, 21 Jan 2022 13:27:18 +0100
Subject: policy: T4151: Bugfix policy ipv6-local-route

---
 smoketest/scripts/cli/test_policy.py |  8 ++++----
 src/conf_mode/policy-local-route.py  | 15 ++++++++++-----
 2 files changed, 14 insertions(+), 9 deletions(-)

diff --git a/smoketest/scripts/cli/test_policy.py b/smoketest/scripts/cli/test_policy.py
index 9f9c11fb5..d055762f4 100755
--- a/smoketest/scripts/cli/test_policy.py
+++ b/smoketest/scripts/cli/test_policy.py
@@ -1381,8 +1381,8 @@ class TestPolicy(VyOSUnitTestSHIM.TestCase):
         path = base_path + ['local-route']
         path_v6 = base_path + ['local-route6']
 
-        sources = ['203.0.113.1/24', '203.0.114.5']
-        destinations = ['203.0.112.1/24', '203.0.116.5']
+        sources = ['203.0.113.0/24', '203.0.114.5']
+        destinations = ['203.0.112.0/24', '203.0.116.5']
         sources_v6 = ['2001:db8:1338::/126', '2001:db8:1339::/56']
         destinations_v6 = ['2001:db8:13::/48', '2001:db8:16::/48']
         fwmk = '23'
@@ -1432,8 +1432,8 @@ class TestPolicy(VyOSUnitTestSHIM.TestCase):
         tmp = cmd('ip rule show prio 103')
         tmp_v6 = cmd('ip -6 rule show prio 103')
 
-        original = ['']
-        original_v6 = ['']
+        original = None
+        original_v6 = None
 
         self.assertEqual(sort_ip(tmp), original)
         self.assertEqual(sort_ip(tmp_v6), original_v6)
diff --git a/src/conf_mode/policy-local-route.py b/src/conf_mode/policy-local-route.py
index 2541603e2..6dabb37ae 100755
--- a/src/conf_mode/policy-local-route.py
+++ b/src/conf_mode/policy-local-route.py
@@ -121,11 +121,14 @@ def apply(pbr):
         if rule_rm in pbr:
             v6 = " -6" if rule_rm == 'rule6_remove' else ""
             for rule, rule_config in pbr[rule_rm].items():
-                for src in (rule_config['source'] or ['']):
+                rule_config['source'] = rule_config['source'] if 'source' in rule_config else ['']
+                for src in rule_config['source']:
                     f_src = '' if src == '' else f' from {src} '
-                    for dst in (rule_config['destination'] or ['']):
+                    rule_config['destination'] = rule_config['destination'] if 'destination' in rule_config else ['']
+                    for dst in rule_config['destination']:
                         f_dst = '' if dst == '' else f' to {dst} '
-                        for fwmk in (rule_config['fwmark'] or ['']):
+                        rule_config['fwmark'] = rule_config['fwmark'] if 'fwmark' in rule_config else ['']
+                        for fwmk in rule_config['fwmark']:
                             f_fwmk = '' if fwmk == '' else f' fwmark {fwmk} '
                             call(f'ip{v6} rule del prio {rule} {f_src}{f_dst}{f_fwmk}')
 
@@ -141,9 +144,11 @@ def apply(pbr):
             for rule, rule_config in pbr_route['rule'].items():
                 table = rule_config['set']['table']
 
-                for src in (rule_config['source'] or ['all']):
+                rule_config['source'] = rule_config['source'] if 'source' in rule_config else ['all']
+                for src in rule_config['source'] or ['all']:
                     f_src = '' if src == '' else f' from {src} '
-                    for dst in (rule_config['destination'] or ['all']):
+                    rule_config['destination'] = rule_config['destination'] if 'destination' in rule_config else ['all']
+                    for dst in rule_config['destination']:
                         f_dst = '' if dst == '' else f' to {dst} '
                         f_fwmk = ''
                         if 'fwmark' in rule_config:
-- 
cgit v1.2.3