diff options
| author | John Estabrook <jestabro@vyos.io> | 2026-09-15 13:51:30 -0500 |
|---|---|---|
| committer | John Estabrook <jestabro@vyos.io> | 2026-10-08 07:41:04 -0500 |
| commit | df7c3fc0017fb27d2945ac2818ac2d5fc343ca37 (patch) | |
| tree | f21d7c3ece96d8377a99b53d47a99cd576548787 /interface-definitions/include | |
| parent | ec64edcb5b014125dfd5574f40704423b0c0831b (diff) | |
| download | vyos-1x-df7c3fc0017fb27d2945ac2818ac2d5fc343ca37.tar.gz vyos-1x-df7c3fc0017fb27d2945ac2818ac2d5fc343ca37.zip | |
T7886: add basic cases of reverse interface dependency verification
Add cases for which a config mode script calls verify_interface_exists,
excluding those of dynamic_interface_pattern, to be handled separately.
The dependency verification raises error, resp., gives a warning, when
verify_interface_exists is called with warning_only=False, resp., True.
These are the critical cases that motivated the original design, for if
a removal of an interface is allowed, a subsequent reboot will raise
ConfigError on config load and invalidate the config subtree for that
component.
Diffstat (limited to 'interface-definitions/include')
12 files changed, 139 insertions, 6 deletions
diff --git a/interface-definitions/include/constraint/dependent-error-interface-name.xml.i b/interface-definitions/include/constraint/dependent-error-interface-name.xml.i new file mode 100644 index 000000000..ec4d524f4 --- /dev/null +++ b/interface-definitions/include/constraint/dependent-error-interface-name.xml.i @@ -0,0 +1,7 @@ +<!-- include start from constraint/dependent-error-interface-name.xml.i --> +<constraint> + <regex>(bond|br|dum|en|ersp|eth|gnv|ifb|ipoe|lan|l2tp|l2tpeth|macsec|peth|ppp|pppoe|pptp|sstp|sstpc|tun|veth|vpptap|vpptun|vti|vtun|vxlan|wg|wlan|wwan)[0-9]+(.\d+)?|pod-[-_a-zA-Z0-9]{1,11}|lo</regex> + <validator name="interface-exists"/> +</constraint> +<dependency kind="interface" alert="error"/> +<!-- include end --> diff --git a/interface-definitions/include/constraint/dependent-warning-interface-name.xml.i b/interface-definitions/include/constraint/dependent-warning-interface-name.xml.i new file mode 100644 index 000000000..bc646c3c9 --- /dev/null +++ b/interface-definitions/include/constraint/dependent-warning-interface-name.xml.i @@ -0,0 +1,7 @@ +<!-- include start from constraint/dependent-warning-interface-name.xml.i --> +<constraint> + <regex>(bond|br|dum|en|ersp|eth|gnv|ifb|ipoe|lan|l2tp|l2tpeth|macsec|peth|ppp|pppoe|pptp|sstp|sstpc|tun|veth|vpptap|vpptun|vti|vtun|vxlan|wg|wlan|wwan)[0-9]+(.\d+)?|pod-[-_a-zA-Z0-9]{1,11}|lo</regex> + <validator name="interface-exists"/> +</constraint> +<dependency kind="interface" alert="warning"/> +<!-- include end --> diff --git a/interface-definitions/include/dependent-error-generic-interface-multi.xml.i b/interface-definitions/include/dependent-error-generic-interface-multi.xml.i new file mode 100644 index 000000000..c5dd26267 --- /dev/null +++ b/interface-definitions/include/dependent-error-generic-interface-multi.xml.i @@ -0,0 +1,19 @@ +<!-- include start from dependent-error-generic-interface-multi.xml.i --> +<leafNode name="interface"> + <properties> + <help>Interface</help> + <completionHelp> + <script>${vyos_completion_dir}/list_interfaces</script> + </completionHelp> + <valueHelp> + <format>txt</format> + <description>Interface name</description> + </valueHelp> + <constraint> + #include <include/constraint/interface-name.xml.i> + </constraint> + <multi/> + <dependency kind="interface" alert="error"/> + </properties> +</leafNode> +<!-- include end --> diff --git a/interface-definitions/include/dependent-error-generic-interface.xml.i b/interface-definitions/include/dependent-error-generic-interface.xml.i new file mode 100644 index 000000000..c48e728c8 --- /dev/null +++ b/interface-definitions/include/dependent-error-generic-interface.xml.i @@ -0,0 +1,18 @@ +<!-- include start from dependent-error-generic-interface.xml.i --> +<leafNode name="interface"> + <properties> + <help>Interface</help> + <completionHelp> + <script>${vyos_completion_dir}/list_interfaces</script> + </completionHelp> + <valueHelp> + <format>txt</format> + <description>Interface name</description> + </valueHelp> + <constraint> + #include <include/constraint/interface-name.xml.i> + </constraint> + <dependency kind="interface" alert="error"/> + </properties> +</leafNode> +<!-- include end --> diff --git a/interface-definitions/include/dependent-error-source-interface.xml.i b/interface-definitions/include/dependent-error-source-interface.xml.i new file mode 100644 index 000000000..b3c23f64e --- /dev/null +++ b/interface-definitions/include/dependent-error-source-interface.xml.i @@ -0,0 +1,18 @@ +<!-- include start from dependent-error-source-interface.xml.i --> +<leafNode name="source-interface"> + <properties> + <help>Interface used to establish connection</help> + <valueHelp> + <format>interface</format> + <description>Interface name</description> + </valueHelp> + <completionHelp> + <script>${vyos_completion_dir}/list_interfaces</script> + </completionHelp> + <constraint> + #include <include/constraint/interface-name.xml.i> + </constraint> + <dependency kind="interface" alert="error"/> + </properties> +</leafNode> +<!-- include end --> diff --git a/interface-definitions/include/dependent-warning-generic-interface-multi-broadcast.xml.i b/interface-definitions/include/dependent-warning-generic-interface-multi-broadcast.xml.i new file mode 100644 index 000000000..22f6b6552 --- /dev/null +++ b/interface-definitions/include/dependent-warning-generic-interface-multi-broadcast.xml.i @@ -0,0 +1,19 @@ +<!-- include start from dependent-warning-generic-interface-multi-broadcast.xml.i --> +<leafNode name="interface"> + <properties> + <help>Interface</help> + <completionHelp> + <script>${vyos_completion_dir}/list_interfaces --broadcast</script> + </completionHelp> + <valueHelp> + <format>txt</format> + <description>Interface name</description> + </valueHelp> + <constraint> + #include <include/constraint/interface-name.xml.i> + </constraint> + <multi/> + <dependency kind="interface" alert="warning"/> + </properties> +</leafNode> +<!-- include end --> diff --git a/interface-definitions/include/dependent-warning-generic-interface-multi.xml.i b/interface-definitions/include/dependent-warning-generic-interface-multi.xml.i new file mode 100644 index 000000000..bd4b9ea93 --- /dev/null +++ b/interface-definitions/include/dependent-warning-generic-interface-multi.xml.i @@ -0,0 +1,19 @@ +<!-- include start from dependent-warning-generic-interface-multi.xml.i --> +<leafNode name="interface"> + <properties> + <help>Interface</help> + <completionHelp> + <script>${vyos_completion_dir}/list_interfaces</script> + </completionHelp> + <valueHelp> + <format>txt</format> + <description>Interface name</description> + </valueHelp> + <constraint> + #include <include/constraint/interface-name.xml.i> + </constraint> + <multi/> + <dependency kind="interface" alert="warning"/> + </properties> +</leafNode> +<!-- include end --> diff --git a/interface-definitions/include/dependent-warning-source-interface.xml.i b/interface-definitions/include/dependent-warning-source-interface.xml.i new file mode 100644 index 000000000..164135f2f --- /dev/null +++ b/interface-definitions/include/dependent-warning-source-interface.xml.i @@ -0,0 +1,18 @@ +<!-- include start from dependent-warning-source-interface.xml.i --> +<leafNode name="source-interface"> + <properties> + <help>Interface used to establish connection</help> + <valueHelp> + <format>interface</format> + <description>Interface name</description> + </valueHelp> + <completionHelp> + <script>${vyos_completion_dir}/list_interfaces</script> + </completionHelp> + <constraint> + #include <include/constraint/interface-name.xml.i> + </constraint> + <dependency kind="interface" alert="warning"/> + </properties> +</leafNode> +<!-- include end --> diff --git a/interface-definitions/include/interface/dependent-error-inbound-interface.xml.i b/interface-definitions/include/interface/dependent-error-inbound-interface.xml.i new file mode 100644 index 000000000..e1c79feb0 --- /dev/null +++ b/interface-definitions/include/interface/dependent-error-inbound-interface.xml.i @@ -0,0 +1,11 @@ +<!-- include start from interface/dependent-error-inbound-interface.xml.i --> +<leafNode name="inbound-interface"> + <properties> + <help>Inbound Interface</help> + <completionHelp> + <script>${vyos_completion_dir}/list_interfaces</script> + </completionHelp> + <dependency kind="interface" alert="error"/> + </properties> +</leafNode> +<!-- include end --> diff --git a/interface-definitions/include/isis/protocol-common-config.xml.i b/interface-definitions/include/isis/protocol-common-config.xml.i index 6a7388c99..d0424ea4f 100644 --- a/interface-definitions/include/isis/protocol-common-config.xml.i +++ b/interface-definitions/include/isis/protocol-common-config.xml.i @@ -719,6 +719,7 @@ <completionHelp> <script>${vyos_completion_dir}/list_interfaces</script> </completionHelp> + <dependency kind="interface" alert="error"/> </properties> <children> #include <include/bfd/bfd.xml.i> diff --git a/interface-definitions/include/ospf/protocol-common-config.xml.i b/interface-definitions/include/ospf/protocol-common-config.xml.i index 93d718ed4..caef8abb4 100644 --- a/interface-definitions/include/ospf/protocol-common-config.xml.i +++ b/interface-definitions/include/ospf/protocol-common-config.xml.i @@ -406,9 +406,7 @@ <format>txt</format> <description>Interface name</description> </valueHelp> - <constraint> - #include <include/constraint/interface-name.xml.i> - </constraint> + #include <include/constraint/dependent-error-interface-name.xml.i> </properties> <children> <leafNode name="area"> diff --git a/interface-definitions/include/ospfv3/protocol-common-config.xml.i b/interface-definitions/include/ospfv3/protocol-common-config.xml.i index 72fb86d3d..e6d3b23b8 100644 --- a/interface-definitions/include/ospfv3/protocol-common-config.xml.i +++ b/interface-definitions/include/ospfv3/protocol-common-config.xml.i @@ -132,9 +132,7 @@ <format>txt</format> <description>Interface used for routing information exchange</description> </valueHelp> - <constraint> - #include <include/constraint/interface-name.xml.i> - </constraint> + #include <include/constraint/dependent-error-interface-name.xml.i> </properties> <children> <leafNode name="area"> |
