From b1f920457dc8ac62c36fae492cc3aa3ec10d051d Mon Sep 17 00:00:00 2001 From: Jose Phillips Date: Thu, 7 May 2026 11:40:42 -0500 Subject: T8823: validation of GE and LE according FRR instructions --- smoketest/scripts/cli/test_policy.py | 50 ++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) (limited to 'smoketest/scripts/cli') diff --git a/smoketest/scripts/cli/test_policy.py b/smoketest/scripts/cli/test_policy.py index 76a9d09a5..eee04eb9b 100755 --- a/smoketest/scripts/cli/test_policy.py +++ b/smoketest/scripts/cli/test_policy.py @@ -709,6 +709,56 @@ class TestPolicy(VyOSUnitTestSHIM.TestCase): for rule in test_range: tmp = f'ip prefix-list {prefix_list} seq {rule} permit {prefix} le {rule}' self.assertIn(tmp, config) + def test_prefix_list_ge_le_validation(self): + # FRR requires mask_length <= ge <= le for prefix-list rules + base = base_path + ['prefix-list', 'getest', 'rule', '10'] + base6 = base_path + ['prefix-list6', 'getest6', 'rule', '10'] + + # ge < mask_length should be rejected + self.cli_set(base + ['action', 'permit']) + self.cli_set(base + ['prefix', '192.0.2.0/24']) + self.cli_set(base + ['ge', '16']) + with self.assertRaises(ConfigSessionError): + self.cli_commit() + self.cli_delete(base + ['ge']) + + # le < mask_length should be rejected + self.cli_set(base + ['le', '16']) + with self.assertRaises(ConfigSessionError): + self.cli_commit() + self.cli_delete(base + ['le']) + + # ge > le should be rejected + self.cli_set(base + ['ge', '28']) + self.cli_set(base + ['le', '26']) + with self.assertRaises(ConfigSessionError): + self.cli_commit() + self.cli_delete(base + ['ge']) + self.cli_delete(base + ['le']) + + # valid ge <= le >= mask_length should commit + self.cli_set(base + ['ge', '25']) + self.cli_set(base + ['le', '28']) + self.cli_commit() + self.cli_delete(base_path + ['prefix-list', 'getest']) + + # same checks for prefix-list6 + self.cli_set(base6 + ['action', 'permit']) + self.cli_set(base6 + ['prefix', '2a06:9801:2c0::/44']) + self.cli_set(base6 + ['ge', '48']) + self.cli_set(base6 + ['le', '44']) + with self.assertRaises(ConfigSessionError): + self.cli_commit() + self.cli_delete(base6 + ['ge']) + self.cli_delete(base6 + ['le']) + + # valid IPv6 ge/le + self.cli_set(base6 + ['ge', '48']) + self.cli_set(base6 + ['le', '64']) + self.cli_commit() + self.cli_delete(base_path + ['prefix-list6', 'getest6']) + self.cli_commit() + def test_route_map_community_set(self): test_data = { "community-configuration": { -- cgit v1.2.3 From 35d40d7f4d9d95e7754d41c3f97efd4ef20c0625 Mon Sep 17 00:00:00 2001 From: Jose Phillips Date: Thu, 7 May 2026 11:40:42 -0500 Subject: T8823: validation of GE and LE according FRR instructions --- smoketest/scripts/cli/test_policy.py | 1 + src/conf_mode/policy.py | 9 ++++++--- 2 files changed, 7 insertions(+), 3 deletions(-) (limited to 'smoketest/scripts/cli') diff --git a/smoketest/scripts/cli/test_policy.py b/smoketest/scripts/cli/test_policy.py index eee04eb9b..304bbdbc8 100755 --- a/smoketest/scripts/cli/test_policy.py +++ b/smoketest/scripts/cli/test_policy.py @@ -709,6 +709,7 @@ class TestPolicy(VyOSUnitTestSHIM.TestCase): for rule in test_range: tmp = f'ip prefix-list {prefix_list} seq {rule} permit {prefix} le {rule}' self.assertIn(tmp, config) + def test_prefix_list_ge_le_validation(self): # FRR requires mask_length <= ge <= le for prefix-list rules base = base_path + ['prefix-list', 'getest', 'rule', '10'] diff --git a/src/conf_mode/policy.py b/src/conf_mode/policy.py index 4da884e3e..c9398848a 100755 --- a/src/conf_mode/policy.py +++ b/src/conf_mode/policy.py @@ -174,15 +174,18 @@ def verify(config_dict): if ge is not None and ge < mask_len: raise ConfigError( f'{policy_hr} {instance} rule {rule}: "ge" ({ge}) must be >= ' - f'prefix length ({mask_len})') + f'prefix length ({mask_len})' + ) if le is not None and le < mask_len: raise ConfigError( f'{policy_hr} {instance} rule {rule}: "le" ({le}) must be >= ' - f'prefix length ({mask_len})') + f'prefix length ({mask_len})' + ) if ge is not None and le is not None and ge > le: raise ConfigError( f'{policy_hr} {instance} rule {rule}: "ge" ({ge}) must be <= ' - f'"le" ({le})') + f'"le" ({le})' + ) if rule_config in entries: raise ConfigError( -- cgit v1.2.3