summaryrefslogtreecommitdiff
path: root/python/vyos/qos/cake.py
diff options
context:
space:
mode:
authorChristian Poessinger <christian@poessinger.com>2023-01-01 08:18:10 +0100
committerGitHub <noreply@github.com>2023-01-01 08:18:10 +0100
commit6574b0dd5a5c7616ac4b17619d5f2c29a691616d (patch)
tree1aeda3c69dc87a8b69172fbd6fa3f4011602cdbe /python/vyos/qos/cake.py
parent182adaf56a5573d32d79d3c21e24007f5c18fb2b (diff)
parentbebec647c3d04f42d471d4aed1a3b98bf82732b8 (diff)
downloadvyos-1x-6574b0dd5a5c7616ac4b17619d5f2c29a691616d.tar.gz
vyos-1x-6574b0dd5a5c7616ac4b17619d5f2c29a691616d.zip
Merge pull request #1663 from c-po/t4284-qos
QoS: T4284: re-implementation using XML and Python
Diffstat (limited to 'python/vyos/qos/cake.py')
-rw-r--r--python/vyos/qos/cake.py55
1 files changed, 55 insertions, 0 deletions
diff --git a/python/vyos/qos/cake.py b/python/vyos/qos/cake.py
new file mode 100644
index 000000000..a89b1de1e
--- /dev/null
+++ b/python/vyos/qos/cake.py
@@ -0,0 +1,55 @@
+# Copyright 2022 VyOS maintainers and contributors <maintainers@vyos.io>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library. If not, see <http://www.gnu.org/licenses/>.
+
+from vyos.qos.base import QoSBase
+
+class CAKE(QoSBase):
+ _direction = ['egress']
+
+ # https://man7.org/linux/man-pages/man8/tc-cake.8.html
+ def update(self, config, direction):
+ tmp = f'tc qdisc add dev {self._interface} root handle 1: cake {direction}'
+ if 'bandwidth' in config:
+ bandwidth = self._rate_convert(config['bandwidth'])
+ tmp += f' bandwidth {bandwidth}'
+
+ if 'rtt' in config:
+ rtt = config['rtt']
+ tmp += f' rtt {rtt}ms'
+
+ if 'flow_isolation' in config:
+ if 'blind' in config['flow_isolation']:
+ tmp += f' flowblind'
+ if 'dst_host' in config['flow_isolation']:
+ tmp += f' dsthost'
+ if 'dual_dst_host' in config['flow_isolation']:
+ tmp += f' dual-dsthost'
+ if 'dual_src_host' in config['flow_isolation']:
+ tmp += f' dual-srchost'
+ if 'flow' in config['flow_isolation']:
+ tmp += f' flows'
+ if 'host' in config['flow_isolation']:
+ tmp += f' hosts'
+ if 'nat' in config['flow_isolation']:
+ tmp += f' nat'
+ if 'src_host' in config['flow_isolation']:
+ tmp += f' srchost '
+ else:
+ tmp += f' nonat'
+
+ self._cmd(tmp)
+
+ # call base class
+ super().update(config, direction)