diff options
author | John Estabrook <jestabro@vyos.io> | 2024-08-09 13:28:48 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-08-09 13:28:48 -0500 |
commit | 30506a53fa02bc514f3570af4d870eba9695aa08 (patch) | |
tree | 2dfddec7aefb1245c15588d03031b92bae8f7469 | |
parent | c0ce26f995e48e29050791a6adb4bc09a2630201 (diff) | |
parent | d9c9c48a0993524fa6443e317e5046e0e01d7641 (diff) | |
download | vyos-1x-30506a53fa02bc514f3570af4d870eba9695aa08.tar.gz vyos-1x-30506a53fa02bc514f3570af4d870eba9695aa08.zip |
Merge pull request #3963 from vyos/mergify/bp/circinus/pr-3960circinus-merge-commit-handling
qos: T6638: require interface state existence in verify conditional (backport #3960)
-rw-r--r-- | python/vyos/configverify.py | 13 | ||||
-rwxr-xr-x | src/conf_mode/qos.py | 2 |
2 files changed, 8 insertions, 7 deletions
diff --git a/python/vyos/configverify.py b/python/vyos/configverify.py index 4cb84194a..b49d66c36 100644 --- a/python/vyos/configverify.py +++ b/python/vyos/configverify.py @@ -237,7 +237,7 @@ def verify_bridge_delete(config): raise ConfigError(f'Interface "{interface}" cannot be deleted as it ' f'is a member of bridge "{bridge_name}"!') -def verify_interface_exists(ifname, warning_only=False): +def verify_interface_exists(ifname, state_required=False, warning_only=False): """ Common helper function used by interface implementations to perform recurring validation if an interface actually exists. We first probe @@ -249,11 +249,12 @@ def verify_interface_exists(ifname, warning_only=False): from vyos.utils.dict import dict_search_recursive from vyos.utils.network import interface_exists - # Check if interface is present in CLI config - config = ConfigTreeQuery() - tmp = config.get_config_dict(['interfaces'], get_first_key=True) - if bool(list(dict_search_recursive(tmp, ifname))): - return True + if not state_required: + # Check if interface is present in CLI config + config = ConfigTreeQuery() + tmp = config.get_config_dict(['interfaces'], get_first_key=True) + if bool(list(dict_search_recursive(tmp, ifname))): + return True # Interface not found on CLI, try Linux Kernel if interface_exists(ifname): diff --git a/src/conf_mode/qos.py b/src/conf_mode/qos.py index 45248fb4a..464d7c192 100755 --- a/src/conf_mode/qos.py +++ b/src/conf_mode/qos.py @@ -303,7 +303,7 @@ def apply(qos): return None for interface, interface_config in qos['interface'].items(): - if not verify_interface_exists(interface, warning_only=True): + if not verify_interface_exists(interface, state_required=True, warning_only=True): # When shaper is bound to a dialup (e.g. PPPoE) interface it is # possible that it is yet not availbale when to QoS code runs. # Skip the configuration and inform the user via warning_only=True |