summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Breunig <christian@breunig.cc>2024-11-15 20:16:59 +0100
committerGitHub <noreply@github.com>2024-11-15 20:16:59 +0100
commit89a7e176c1d30a6862976d8b72dc4e7bc0ad5c85 (patch)
tree389ae388088ee1111dd24b095f36e8e2dfb54bca
parentab470796af602e14af9a6014d0c1b854a6049976 (diff)
parente6558a535594c1cd25133979f07663cf6958ce75 (diff)
downloadvyos-1x-89a7e176c1d30a6862976d8b72dc4e7bc0ad5c85.tar.gz
vyos-1x-89a7e176c1d30a6862976d8b72dc4e7bc0ad5c85.zip
Merge pull request #4191 from HollyGurza/T6801
T6801: QoS: Policy rate-control is broken by default
-rwxr-xr-xsmoketest/scripts/cli/test_qos.py21
-rwxr-xr-xsrc/conf_mode/qos.py3
2 files changed, 24 insertions, 0 deletions
diff --git a/smoketest/scripts/cli/test_qos.py b/smoketest/scripts/cli/test_qos.py
index 77d384024..aaeebcdae 100755
--- a/smoketest/scripts/cli/test_qos.py
+++ b/smoketest/scripts/cli/test_qos.py
@@ -922,6 +922,27 @@ class TestQoS(VyOSUnitTestSHIM.TestCase):
tmp[2]['options'],
)
+ def test_22_rate_control_default(self):
+ interface = self._interfaces[0]
+ policy_name = f'qos-policy-{interface}'
+ bandwidth = 5000
+
+ self.cli_set(base_path + ['interface', interface, 'egress', policy_name])
+ self.cli_set(base_path + ['policy', 'rate-control', policy_name])
+ with self.assertRaises(ConfigSessionError):
+ # Bandwidth not defined
+ self.cli_commit()
+
+ self.cli_set(base_path + ['policy', 'rate-control', policy_name, 'bandwidth', str(bandwidth)])
+ # commit changes
+ self.cli_commit()
+
+ tmp = get_tc_qdisc_json(interface)
+
+ self.assertEqual('tbf', tmp['kind'])
+ # TC store rates as a 32-bit unsigned integer in bps (Bytes per second)
+ self.assertEqual(int(bandwidth * 125), tmp['options']['rate'])
+
if __name__ == '__main__':
unittest.main(verbosity=2)
diff --git a/src/conf_mode/qos.py b/src/conf_mode/qos.py
index 7dfad3180..a4d5f44e7 100755
--- a/src/conf_mode/qos.py
+++ b/src/conf_mode/qos.py
@@ -255,6 +255,9 @@ def verify(qos):
if policy_type in ['priority_queue']:
if 'default' not in policy_config:
raise ConfigError(f'Policy {policy} misses "default" class!')
+ if policy_type in ['rate_control']:
+ if 'bandwidth' not in policy_config:
+ raise ConfigError('Bandwidth not defined')
if 'default' in policy_config:
if 'bandwidth' not in policy_config['default'] and policy_type not in ['priority_queue', 'round_robin', 'shaper_hfsc']:
raise ConfigError('Bandwidth not defined for default traffic!')