summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsarthurdev <965089+sarthurdev@users.noreply.github.com>2023-03-09 14:47:11 +0100
committersarthurdev <965089+sarthurdev@users.noreply.github.com>2023-03-09 18:03:13 +0100
commitc3039903aff9f2c3cb33f4fdd9e9634aa9f09997 (patch)
treea0fd54d9149bf21475b231ee529785b2c8853917
parent25b64f32a22c5832eb1eefd1afdfad6efa46bbcb (diff)
downloadvyos-1x-c3039903aff9f2c3cb33f4fdd9e9634aa9f09997.tar.gz
vyos-1x-c3039903aff9f2c3cb33f4fdd9e9634aa9f09997.zip
qos: T5018: Use configdep to fix interface mirror/redirect issue
This will check if mirror/redirect is present on a QoS interface and use `vyos.configdep` module to update the interface again after QoS is applied.
-rw-r--r--data/config-mode-dependencies.json20
-rwxr-xr-xsrc/conf_mode/qos.py16
2 files changed, 36 insertions, 0 deletions
diff --git a/data/config-mode-dependencies.json b/data/config-mode-dependencies.json
index 9e943ba2c..ccee359d1 100644
--- a/data/config-mode-dependencies.json
+++ b/data/config-mode-dependencies.json
@@ -8,5 +8,25 @@
"ipsec": ["vpn_ipsec"],
"openconnect": ["vpn_openconnect"],
"sstp": ["vpn_sstp"]
+ },
+ "qos": {
+ "bonding": ["interfaces-bonding"],
+ "bridge": ["interfaces-bridge"],
+ "dummy": ["interfaces-dummy"],
+ "ethernet": ["interfaces-ethernet"],
+ "geneve": ["interfaces-geneve"],
+ "input": ["interfaces-input"],
+ "l2tpv3": ["interfaces-l2tpv3"],
+ "loopback": ["interfaces-loopback"],
+ "macsec": ["interfaces-macsec"],
+ "openvpn": ["interfaces-openvpn"],
+ "pppoe": ["interfaces-pppoe"],
+ "pseudo-ethernet": ["interfaces-pseudo-ethernet"],
+ "tunnel": ["interfaces-tunnel"],
+ "vti": ["interfaces-vti"],
+ "vxlan": ["interfaces-vxlan"],
+ "wireguard": ["interfaces-wireguard"],
+ "wireless": ["interfaces-wireless"],
+ "wwan": ["interfaces-wwan"]
}
}
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__':