summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorChristian Breunig <christian@breunig.cc>2023-03-09 19:38:34 +0100
committerGitHub <noreply@github.com>2023-03-09 19:38:34 +0100
commit0f3710927eaba4f855119a86046c5e2a5eb76d8b (patch)
treebe72879f80f4965b5a552c56ee64391af8122bf3 /src
parent3c6e20b3bb54d7efb001e7578629b0d4275bbc36 (diff)
parentc3039903aff9f2c3cb33f4fdd9e9634aa9f09997 (diff)
downloadvyos-1x-0f3710927eaba4f855119a86046c5e2a5eb76d8b.tar.gz
vyos-1x-0f3710927eaba4f855119a86046c5e2a5eb76d8b.zip
Merge pull request #1881 from sarthurdev/qos_fix
qos: T5018: Fix issues between QoS and interface mirror/redirect
Diffstat (limited to 'src')
-rwxr-xr-xsrc/conf_mode/qos.py16
1 files changed, 16 insertions, 0 deletions
diff --git a/src/conf_mode/qos.py b/src/conf_mode/qos.py
index dca713283..1be2c283f 100755
--- a/src/conf_mode/qos.py
+++ b/src/conf_mode/qos.py
@@ -21,7 +21,9 @@ from netifaces import interfaces
from vyos.base import Warning
from vyos.config import Config
+from vyos.configdep import set_dependents, call_dependents
from vyos.configdict import dict_merge
+from vyos.ifconfig import Section
from vyos.qos import CAKE
from vyos.qos import DropTail
from vyos.qos import FairQueue
@@ -83,6 +85,18 @@ def get_config(config=None):
get_first_key=True,
no_tag_node_value_mangle=True)
+ if 'interface' in qos:
+ for ifname, if_conf in qos['interface'].items():
+ if_node = Section.get_config_path(ifname)
+
+ if not if_node:
+ continue
+
+ path = f'interfaces {if_node}'
+ if conf.exists(f'{path} mirror') or conf.exists(f'{path} redirect'):
+ type_node = path.split(" ")[1] # return only interface type node
+ set_dependents(type_node, conf, ifname)
+
if 'policy' in qos:
for policy in qos['policy']:
# when calling defaults() we need to use the real CLI node, thus we
@@ -245,6 +259,8 @@ def apply(qos):
tmp = shaper_type(interface)
tmp.update(shaper_config, direction)
+ call_dependents()
+
return None
if __name__ == '__main__':