summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Poessinger <christian@poessinger.com>2021-03-14 14:57:13 +0100
committerGitHub <noreply@github.com>2021-03-14 14:57:13 +0100
commit2785a486f798c5e36d59c58720334f7bdffcbb3e (patch)
tree1510d0c47d32b6fd5153c8d7a1775cf367cb6022
parent0f24c5b25bc277e0604608710cf81225d765b3be (diff)
parent7d67e8609471b6a5c9761a99301f368bd6747e13 (diff)
downloadvyos-1x-2785a486f798c5e36d59c58720334f7bdffcbb3e.tar.gz
vyos-1x-2785a486f798c5e36d59c58720334f7bdffcbb3e.zip
Merge pull request #770 from c-po/vrf-dynamic-routing
VRF: support for dynamic routing protocols OSPF and BGP
-rw-r--r--data/configd-include.json1
-rw-r--r--data/templates/frr/bgp.frr.tmpl2
-rw-r--r--data/templates/frr/ospf.frr.tmpl4
-rw-r--r--data/templates/frr/static.frr.tmpl17
-rw-r--r--data/templates/frr/vrf.frr.tmpl25
-rw-r--r--interface-definitions/include/accel-auth-local-users.xml.i4
-rw-r--r--interface-definitions/include/accel-auth-mode.xml.i4
-rw-r--r--interface-definitions/include/accel-auth-protocols.xml.i4
-rw-r--r--interface-definitions/include/accel-client-ip-pool-start-stop.xml.i4
-rw-r--r--interface-definitions/include/accel-client-ip-pool-subnet.xml.i4
-rw-r--r--interface-definitions/include/accel-client-ipv6-pool.xml.i4
-rw-r--r--interface-definitions/include/accel-gateway-address.xml.i4
-rw-r--r--interface-definitions/include/accel-lcp-echo-interval-failure.xml.i4
-rw-r--r--interface-definitions/include/accel-lcp-echo-timeout.xml.i4
-rw-r--r--interface-definitions/include/accel-mtu-128-16384.xml.i4
-rw-r--r--interface-definitions/include/accel-name-server.xml.i4
-rw-r--r--interface-definitions/include/accel-ppp-mppe.xml.i4
-rw-r--r--interface-definitions/include/accel-radius-additions-disable-accounting.xml.i4
-rw-r--r--interface-definitions/include/accel-radius-additions-rate-limit.xml.i4
-rw-r--r--interface-definitions/include/accel-radius-additions.xml.i4
-rw-r--r--interface-definitions/include/accel-wins-server.xml.i4
-rw-r--r--interface-definitions/include/address-ipv4-ipv6-dhcp.xml.i4
-rw-r--r--interface-definitions/include/address-ipv4-ipv6.xml.i4
-rw-r--r--interface-definitions/include/bfd-common.xml.i4
-rw-r--r--interface-definitions/include/bgp-neighbor-afi-l2vpn-evpn.xml.i16
-rw-r--r--interface-definitions/include/bgp-route-map.xml.i10
-rw-r--r--interface-definitions/include/bgp/bgp-afi-aggregate-address.xml.i (renamed from interface-definitions/include/bgp-afi-aggregate-address.xml.i)4
-rw-r--r--interface-definitions/include/bgp/bgp-afi-allowas-in.xml.i (renamed from interface-definitions/include/bgp-afi-allowas-in.xml.i)4
-rw-r--r--interface-definitions/include/bgp/bgp-afi-attribute-unchanged.xml.i (renamed from interface-definitions/include/bgp-afi-attribute-unchanged.xml.i)4
-rw-r--r--interface-definitions/include/bgp/bgp-afi-capability-orf.xml.i (renamed from interface-definitions/include/bgp-afi-capability-orf.xml.i)4
-rw-r--r--interface-definitions/include/bgp/bgp-afi-common.xml.i (renamed from interface-definitions/include/bgp-afi-common.xml.i)20
-rw-r--r--interface-definitions/include/bgp/bgp-afi-ipv4-prefix-list.xml.i (renamed from interface-definitions/include/bgp-afi-ipv4-prefix-list.xml.i)4
-rw-r--r--interface-definitions/include/bgp/bgp-afi-ipv6-nexthop-local.xml.i (renamed from interface-definitions/include/bgp-afi-ipv6-nexthop-local.xml.i)4
-rw-r--r--interface-definitions/include/bgp/bgp-afi-ipv6-prefix-list.xml.i (renamed from interface-definitions/include/bgp-afi-ipv6-prefix-list.xml.i)4
-rw-r--r--interface-definitions/include/bgp/bgp-afi-l2vpn-common.xml.i (renamed from interface-definitions/include/bgp-afi-l2vpn-common.xml.i)6
-rw-r--r--interface-definitions/include/bgp/bgp-afi-maximum-paths.xml.i (renamed from interface-definitions/include/bgp-afi-maximum-paths.xml.i)4
-rw-r--r--interface-definitions/include/bgp/bgp-afi-nexthop-self.xml.i (renamed from interface-definitions/include/bgp-afi-nexthop-self.xml.i)4
-rw-r--r--interface-definitions/include/bgp/bgp-afi-redistribute-metric-route-map.xml.i (renamed from interface-definitions/include/bgp-afi-redistribute-metric-route-map.xml.i)6
-rw-r--r--interface-definitions/include/bgp/bgp-afi-route-map.xml.i (renamed from interface-definitions/include/bgp-afi-route-map.xml.i)4
-rw-r--r--interface-definitions/include/bgp/bgp-afi-route-reflector-client.xml.i (renamed from interface-definitions/include/bgp-afi-route-reflector-client.xml.i)4
-rw-r--r--interface-definitions/include/bgp/bgp-afi-route-server-client.xml.i (renamed from interface-definitions/include/bgp-afi-route-server-client.xml.i)4
-rw-r--r--interface-definitions/include/bgp/bgp-afi-soft-reconfiguration.xml.i (renamed from interface-definitions/include/bgp-afi-soft-reconfiguration.xml.i)4
-rw-r--r--interface-definitions/include/bgp/bgp-bfd.xml.i (renamed from interface-definitions/include/bgp-bfd.xml.i)4
-rw-r--r--interface-definitions/include/bgp/bgp-capability.xml.i (renamed from interface-definitions/include/bgp-capability.xml.i)4
-rw-r--r--interface-definitions/include/bgp/bgp-common-config.xml.i825
-rw-r--r--interface-definitions/include/bgp/bgp-description.xml.i (renamed from interface-definitions/include/bgp-description.xml.i)4
-rw-r--r--interface-definitions/include/bgp/bgp-disable-capability-negotiation.xml.i (renamed from interface-definitions/include/bgp-disable-capability-negotiation.xml.i)4
-rw-r--r--interface-definitions/include/bgp/bgp-disable-connected-check.xml.i (renamed from interface-definitions/include/bgp-disable-connected-check.xml.i)4
-rw-r--r--interface-definitions/include/bgp/bgp-ebgp-multihop.xml.i (renamed from interface-definitions/include/bgp-ebgp-multihop.xml.i)4
-rw-r--r--interface-definitions/include/bgp/bgp-local-as.xml.i (renamed from interface-definitions/include/bgp-local-as.xml.i)4
-rw-r--r--interface-definitions/include/bgp/bgp-neighbor-afi-ipv4-unicast.xml.i (renamed from interface-definitions/include/bgp-neighbor-afi-ipv4-unicast.xml.i)10
-rw-r--r--interface-definitions/include/bgp/bgp-neighbor-afi-ipv6-unicast.xml.i (renamed from interface-definitions/include/bgp-neighbor-afi-ipv6-unicast.xml.i)12
-rw-r--r--interface-definitions/include/bgp/bgp-neighbor-afi-l2vpn-evpn.xml.i16
-rw-r--r--interface-definitions/include/bgp/bgp-override-capability.xml.i (renamed from interface-definitions/include/bgp-override-capability.xml.i)4
-rw-r--r--interface-definitions/include/bgp/bgp-passive.xml.i (renamed from interface-definitions/include/bgp-passive.xml.i)4
-rw-r--r--interface-definitions/include/bgp/bgp-password.xml.i (renamed from interface-definitions/include/bgp-password.xml.i)4
-rw-r--r--interface-definitions/include/bgp/bgp-peer-group.xml.i (renamed from interface-definitions/include/bgp-peer-group.xml.i)7
-rw-r--r--interface-definitions/include/bgp/bgp-remote-as.xml.i (renamed from interface-definitions/include/bgp-remote-as.xml.i)4
-rw-r--r--interface-definitions/include/bgp/bgp-route-target.xml.i (renamed from interface-definitions/include/bgp-route-target.xml.i)4
-rw-r--r--interface-definitions/include/bgp/bgp-shutdown.xml.i (renamed from interface-definitions/include/bgp-shutdown.xml.i)4
-rw-r--r--interface-definitions/include/bgp/bgp-timers-holdtime.xml.i (renamed from interface-definitions/include/bgp-timers-holdtime.xml.i)4
-rw-r--r--interface-definitions/include/bgp/bgp-timers-keepalive.xml.i (renamed from interface-definitions/include/bgp-timers-keepalive.xml.i)4
-rw-r--r--interface-definitions/include/bgp/bgp-ttl-security.xml.i (renamed from interface-definitions/include/bgp-ttl-security.xml.i)4
-rw-r--r--interface-definitions/include/bgp/bgp-update-source.xml.i (renamed from interface-definitions/include/bgp-update-source.xml.i)4
-rw-r--r--interface-definitions/include/certificate-ca.xml.i4
-rw-r--r--interface-definitions/include/certificate-key.xml.i4
-rw-r--r--interface-definitions/include/certificate.xml.i4
-rw-r--r--interface-definitions/include/dhcp-options.xml.i4
-rw-r--r--interface-definitions/include/dhcp-server-domain-search.xml.i4
-rw-r--r--interface-definitions/include/dhcpv6-options.xml.i4
-rw-r--r--interface-definitions/include/generic-disable-node.xml.i4
-rw-r--r--interface-definitions/include/interface-arp-cache-timeout.xml.i4
-rw-r--r--interface-definitions/include/interface-description.xml.i4
-rw-r--r--interface-definitions/include/interface-dial-on-demand.xml.i4
-rw-r--r--interface-definitions/include/interface-disable-arp-filter.xml.i4
-rw-r--r--interface-definitions/include/interface-disable-forwarding.xml.i4
-rw-r--r--interface-definitions/include/interface-disable-link-detect.xml.i4
-rw-r--r--interface-definitions/include/interface-disable.xml.i4
-rw-r--r--interface-definitions/include/interface-eapol.xml.i4
-rw-r--r--interface-definitions/include/interface-enable-arp-accept.xml.i4
-rw-r--r--interface-definitions/include/interface-enable-arp-announce.xml.i4
-rw-r--r--interface-definitions/include/interface-enable-arp-ignore.xml.i4
-rw-r--r--interface-definitions/include/interface-enable-proxy-arp.xml.i4
-rw-r--r--interface-definitions/include/interface-hw-id.xml.i4
-rw-r--r--interface-definitions/include/interface-ipv4-options.xml.i4
-rw-r--r--interface-definitions/include/interface-ipv6-options.xml.i4
-rw-r--r--interface-definitions/include/interface-mac.xml.i4
-rw-r--r--interface-definitions/include/interface-mirror.xml.i4
-rw-r--r--interface-definitions/include/interface-mtu-1200-16000.xml.i4
-rw-r--r--interface-definitions/include/interface-mtu-1450-16000.xml.i4
-rw-r--r--interface-definitions/include/interface-mtu-64-8024.xml.i4
-rw-r--r--interface-definitions/include/interface-mtu-68-1500.xml.i4
-rw-r--r--interface-definitions/include/interface-mtu-68-16000.xml.i4
-rw-r--r--interface-definitions/include/interface-parameters-dont-fragment.xml.i4
-rw-r--r--interface-definitions/include/interface-parameters-flowlabel.xml.i4
-rw-r--r--interface-definitions/include/interface-parameters-key.xml.i4
-rw-r--r--interface-definitions/include/interface-parameters-tos.xml.i4
-rw-r--r--interface-definitions/include/interface-parameters-ttl.xml.i4
-rw-r--r--interface-definitions/include/interface-proxy-arp-pvlan.xml.i4
-rw-r--r--interface-definitions/include/interface-source-validation.xml.i4
-rw-r--r--interface-definitions/include/interface-vrf.xml.i4
-rw-r--r--interface-definitions/include/interface-xdp.xml.i4
-rw-r--r--interface-definitions/include/ipv6-address-autoconf.xml.i4
-rw-r--r--interface-definitions/include/ipv6-address-eui64.xml.i4
-rw-r--r--interface-definitions/include/ipv6-address-no-default-link-local.xml.i4
-rw-r--r--interface-definitions/include/ipv6-address.xml.i4
-rw-r--r--interface-definitions/include/ipv6-disable-forwarding.xml.i4
-rw-r--r--interface-definitions/include/ipv6-dup-addr-detect-transmits.xml.i4
-rw-r--r--interface-definitions/include/isis-redistribute-ipv4.xml.i4
-rw-r--r--interface-definitions/include/listen-address-ipv4.xml.i4
-rw-r--r--interface-definitions/include/listen-address.xml.i4
-rw-r--r--interface-definitions/include/nat-address.xml.i4
-rw-r--r--interface-definitions/include/nat-interface.xml.i4
-rw-r--r--interface-definitions/include/nat-port.xml.i4
-rw-r--r--interface-definitions/include/nat-rule.xml.i4
-rw-r--r--interface-definitions/include/nat-translation-port.xml.i4
-rw-r--r--interface-definitions/include/ospf/ospf-authentication.xml.i (renamed from interface-definitions/include/ospf-authentication.xml.i)4
-rw-r--r--interface-definitions/include/ospf/ospf-common-config.xml.i761
-rw-r--r--interface-definitions/include/ospf/ospf-distance-global.xml.i14
-rw-r--r--interface-definitions/include/ospf/ospf-distance-per-protocol.xml.i38
-rw-r--r--interface-definitions/include/ospf/ospf-interface-common.xml.i (renamed from interface-definitions/include/ospf-interface-common.xml.i)4
-rw-r--r--interface-definitions/include/ospf/ospf-intervals.xml.i (renamed from interface-definitions/include/ospf-intervals.xml.i)4
-rw-r--r--interface-definitions/include/ospf/ospf-metric-type.xml.i (renamed from interface-definitions/include/ospf-metric-type.xml.i)4
-rw-r--r--interface-definitions/include/ospf/ospf-metric.xml.i (renamed from interface-definitions/include/ospf-metric.xml.i)4
-rw-r--r--interface-definitions/include/ospf/ospf-router-id.xml.i14
-rw-r--r--interface-definitions/include/port-number.xml.i4
-rw-r--r--interface-definitions/include/radius-server-ipv4-ipv6.xml.i4
-rw-r--r--interface-definitions/include/radius-server-ipv4.xml.i4
-rw-r--r--interface-definitions/include/radius-server-key.xml.i4
-rw-r--r--interface-definitions/include/radius-server-port.xml.i4
-rw-r--r--interface-definitions/include/rip-access-list.xml.i4
-rw-r--r--interface-definitions/include/rip-access-list6.xml.i4
-rw-r--r--interface-definitions/include/rip-default-information.xml.i4
-rw-r--r--interface-definitions/include/rip-default-metric.xml.i4
-rw-r--r--interface-definitions/include/rip-interface.xml.i4
-rw-r--r--interface-definitions/include/rip-prefix-list.xml.i4
-rw-r--r--interface-definitions/include/rip-prefix-list6.xml.i4
-rw-r--r--interface-definitions/include/rip-redistribute.xml.i6
-rw-r--r--interface-definitions/include/rip-timers.xml.i4
-rw-r--r--interface-definitions/include/route-map.xml.i (renamed from interface-definitions/include/ospf-route-map.xml.i)4
-rw-r--r--interface-definitions/include/source-address-ipv4-ipv6.xml.i4
-rw-r--r--interface-definitions/include/source-address-ipv4.xml.i4
-rw-r--r--interface-definitions/include/source-interface-ethernet.xml.i4
-rw-r--r--interface-definitions/include/source-interface.xml.i4
-rw-r--r--interface-definitions/include/static-route-blackhole.xml.i4
-rw-r--r--interface-definitions/include/static-route-distance.xml.i4
-rw-r--r--interface-definitions/include/static-route-interface.xml.i4
-rw-r--r--interface-definitions/include/static-route-map.xml.i4
-rw-r--r--interface-definitions/include/static-route-vrf.xml.i4
-rw-r--r--interface-definitions/include/static-route.xml.i4
-rw-r--r--interface-definitions/include/static-route6.xml.i4
-rw-r--r--interface-definitions/include/tunnel-remote.xml.i4
-rw-r--r--interface-definitions/include/vif-s.xml.i4
-rw-r--r--interface-definitions/include/vif.xml.i4
-rw-r--r--interface-definitions/include/vpn-ipsec-encryption.xml.i4
-rw-r--r--interface-definitions/include/vpn-ipsec-hash.xml.i4
-rw-r--r--interface-definitions/include/webproxy-url-filtering.xml.i4
-rw-r--r--interface-definitions/protocols-bgp.xml.in829
-rw-r--r--interface-definitions/protocols-ospf.xml.in818
-rw-r--r--interface-definitions/protocols-ospfv3.xml.in79
-rw-r--r--interface-definitions/protocols-ripng.xml.in2
-rw-r--r--interface-definitions/protocols-vrf.xml.in35
-rw-r--r--interface-definitions/vrf.xml.in50
-rw-r--r--python/vyos/util.py15
-rw-r--r--smoketest/configs/vrf-bgp166
-rw-r--r--smoketest/configs/vrf-ospf145
-rw-r--r--smoketest/scripts/cli/base_interfaces_test.py4
-rwxr-xr-xsmoketest/scripts/cli/test_interfaces_erspan.py6
-rwxr-xr-xsmoketest/scripts/cli/test_interfaces_geneve.py4
-rwxr-xr-xsmoketest/scripts/cli/test_interfaces_macsec.py4
-rwxr-xr-xsmoketest/scripts/cli/test_interfaces_tunnel.py12
-rwxr-xr-xsmoketest/scripts/cli/test_interfaces_vxlan.py4
-rwxr-xr-xsmoketest/scripts/cli/test_protocols_bgp.py34
-rwxr-xr-xsmoketest/scripts/cli/test_protocols_ospf.py64
-rwxr-xr-xsmoketest/scripts/cli/test_protocols_static.py54
-rwxr-xr-xsmoketest/scripts/cli/test_vrf.py6
-rwxr-xr-xsrc/completion/list_bgp_peer_groups.sh23
-rwxr-xr-xsrc/conf_mode/interfaces-tunnel.py4
-rwxr-xr-xsrc/conf_mode/protocols_bgp.py45
-rwxr-xr-xsrc/conf_mode/protocols_ospf.py61
-rwxr-xr-xsrc/conf_mode/protocols_static.py24
-rwxr-xr-xsrc/conf_mode/protocols_vrf.py72
-rwxr-xr-xsrc/migration-scripts/vrf/1-to-261
183 files changed, 2712 insertions, 2267 deletions
diff --git a/data/configd-include.json b/data/configd-include.json
index aabd7232e..eed858363 100644
--- a/data/configd-include.json
+++ b/data/configd-include.json
@@ -44,7 +44,6 @@
"protocols_ripng.py",
"protocols_static.py",
"protocols_static_multicast.py",
-"protocols_vrf.py",
"salt-minion.py",
"service_console-server.py",
"service_ids_fastnetmon.py",
diff --git a/data/templates/frr/bgp.frr.tmpl b/data/templates/frr/bgp.frr.tmpl
index f7aeaeb9d..30e1ec082 100644
--- a/data/templates/frr/bgp.frr.tmpl
+++ b/data/templates/frr/bgp.frr.tmpl
@@ -185,7 +185,7 @@
{% endif %}
{% endmacro %}
!
-router bgp {{ asn }}
+router bgp {{ asn }} {{ 'vrf ' + vrf if vrf is defined and vrf is not none }}
{% if parameters is defined and parameters.ebgp_requires_policy is defined %}
bgp ebgp-requires-policy
{% else %}
diff --git a/data/templates/frr/ospf.frr.tmpl b/data/templates/frr/ospf.frr.tmpl
index 140b6b406..a47c64c89 100644
--- a/data/templates/frr/ospf.frr.tmpl
+++ b/data/templates/frr/ospf.frr.tmpl
@@ -1,7 +1,7 @@
!
{% if interface is defined and interface is not none %}
{% for iface, iface_config in interface.items() %}
-interface {{ iface }}
+interface {{ iface }} {{ 'vrf ' + vrf if vrf is defined and vrf is not none }}
{% if iface_config.authentication is defined and iface_config.authentication is not none %}
{% if iface_config.authentication.plaintext_password is defined and iface_config.authentication.plaintext_password is not none %}
ip ospf authentication-key {{ iface_config.authentication.plaintext_password }}
@@ -50,7 +50,7 @@ interface {{ iface }}
{% endfor %}
{% endif %}
!
-router ospf
+router ospf {{ 'vrf ' + vrf if vrf is defined and vrf is not none }}
{% if access_list is defined and access_list is not none %}
{% for acl, acl_config in access_list.items() %}
{% for protocol in acl_config.export if acl_config.export is defined %}
diff --git a/data/templates/frr/static.frr.tmpl b/data/templates/frr/static.frr.tmpl
index bb0ec80a5..db59a44c2 100644
--- a/data/templates/frr/static.frr.tmpl
+++ b/data/templates/frr/static.frr.tmpl
@@ -1,18 +1,29 @@
{% from 'frr/static_routes_macro.j2' import static_routes %}
!
+{% set ip_prefix = 'ip' %}
+{% set ipv6_prefix = 'ipv6' %}
+{% if vrf is defined and vrf is not none %}
+{# We need to add an additional whitespace in front of the prefix #}
+{# when VRFs are in use, thus we use a variable for prefix handling #}
+{% set ip_prefix = ' ip' %}
+{% set ipv6_prefix = ' ipv6' %}
+vrf {{ vrf }}
+{% endif %}
{# IPv4 routing #}
{% if route is defined and route is not none %}
{% for prefix, prefix_config in route.items() %}
-{{ static_routes('ip', prefix, prefix_config) }}
+{{ static_routes(ip_prefix, prefix, prefix_config) }}
{%- endfor -%}
{% endif %}
-!
{# IPv6 routing #}
{% if route6 is defined and route6 is not none %}
{% for prefix, prefix_config in route6.items() %}
-{{ static_routes('ipv6', prefix, prefix_config) }}
+{{ static_routes(ipv6_prefix, prefix, prefix_config) }}
{%- endfor -%}
{% endif %}
+{% if vrf is defined and vrf is not none %}
+ exit-vrf
+{% endif %}
!
{# Policy route tables #}
{% if table is defined and table is not none %}
diff --git a/data/templates/frr/vrf.frr.tmpl b/data/templates/frr/vrf.frr.tmpl
deleted file mode 100644
index 8d3d8e9dd..000000000
--- a/data/templates/frr/vrf.frr.tmpl
+++ /dev/null
@@ -1,25 +0,0 @@
-{% from 'frr/static_routes_macro.j2' import static_routes %}
-!
-{% if vrf is defined and vrf is not none %}
-{% for vrf_name, vrf_config in vrf.items() %}
-vrf {{ vrf_name }}
-{% if vrf_config.vni is defined and vrf_config.vni is not none %}
- vni {{ vrf_config.vni }}
-{% endif %}
-{% if vrf_config.static is defined and vrf_config.static is not none %}
-{# IPv4 routes #}
-{% if vrf_config.static.route is defined and vrf_config.static.route is not none %}
-{% for prefix, prefix_config in vrf_config.static.route.items() %}
- {{ static_routes('ip', prefix, prefix_config) }}
-{%- endfor -%}
-{% endif %}
-{# IPv6 routes #}
-{% if vrf_config.static.route6 is defined and vrf_config.static.route6 is not none %}
-{% for prefix, prefix_config in vrf_config.static.route6.items() %}
- {{ static_routes('ipv6', prefix, prefix_config) }}
-{%- endfor -%}
-{% endif %}
-{% endif %}
-{% endfor %}
-{% endif %}
-!
diff --git a/interface-definitions/include/accel-auth-local-users.xml.i b/interface-definitions/include/accel-auth-local-users.xml.i
index 35c7a2a06..70a08c10e 100644
--- a/interface-definitions/include/accel-auth-local-users.xml.i
+++ b/interface-definitions/include/accel-auth-local-users.xml.i
@@ -1,4 +1,4 @@
-<!-- included start from accel-auth-local-users.xml.i -->
+<!-- include start from accel-auth-local-users.xml.i -->
<node name="local-users">
<properties>
<help>Local user authentication for PPPoE server</help>
@@ -48,4 +48,4 @@
</tagNode>
</children>
</node>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/accel-auth-mode.xml.i b/interface-definitions/include/accel-auth-mode.xml.i
index 85c3c5e82..81d687182 100644
--- a/interface-definitions/include/accel-auth-mode.xml.i
+++ b/interface-definitions/include/accel-auth-mode.xml.i
@@ -1,4 +1,4 @@
-<!-- included start from accel-auth-mode.xml.i -->
+<!-- include start from accel-auth-mode.xml.i -->
<leafNode name="mode">
<properties>
<help>Authentication mode used by this server</help>
@@ -19,4 +19,4 @@
</properties>
<defaultValue>local</defaultValue>
</leafNode>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/accel-auth-protocols.xml.i b/interface-definitions/include/accel-auth-protocols.xml.i
index a6899a4d8..c5cf743c6 100644
--- a/interface-definitions/include/accel-auth-protocols.xml.i
+++ b/interface-definitions/include/accel-auth-protocols.xml.i
@@ -1,4 +1,4 @@
-<!-- included start from accel-auth-protocols.xml.i -->
+<!-- include start from accel-auth-protocols.xml.i -->
<leafNode name="protocols">
<properties>
<help>Authentication protocol for remote access peer SSTP VPN</help>
@@ -28,4 +28,4 @@
</properties>
<defaultValue>pap chap mschap mschap-v2</defaultValue>
</leafNode>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/accel-client-ip-pool-start-stop.xml.i b/interface-definitions/include/accel-client-ip-pool-start-stop.xml.i
index b578f2b2c..b0668f93f 100644
--- a/interface-definitions/include/accel-client-ip-pool-start-stop.xml.i
+++ b/interface-definitions/include/accel-client-ip-pool-start-stop.xml.i
@@ -1,4 +1,4 @@
-<!-- included start from accel-client-ip-pool-start-stop.xml.i -->
+<!-- include start from accel-client-ip-pool-start-stop.xml.i -->
<leafNode name="start">
<properties>
<help>First IP address in the pool</help>
@@ -15,4 +15,4 @@
</constraint>
</properties>
</leafNode>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/accel-client-ip-pool-subnet.xml.i b/interface-definitions/include/accel-client-ip-pool-subnet.xml.i
index 8e9ca0e92..72f660c39 100644
--- a/interface-definitions/include/accel-client-ip-pool-subnet.xml.i
+++ b/interface-definitions/include/accel-client-ip-pool-subnet.xml.i
@@ -1,4 +1,4 @@
-<!-- included start from accel-client-ip-pool-subnet.xml.i -->
+<!-- include start from accel-client-ip-pool-subnet.xml.i -->
<leafNode name="subnet">
<properties>
<help>Client IP subnet (CIDR notation)</help>
@@ -13,4 +13,4 @@
<multi />
</properties>
</leafNode>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/accel-client-ipv6-pool.xml.i b/interface-definitions/include/accel-client-ipv6-pool.xml.i
index d15ff35d4..3608c2a0b 100644
--- a/interface-definitions/include/accel-client-ipv6-pool.xml.i
+++ b/interface-definitions/include/accel-client-ipv6-pool.xml.i
@@ -1,4 +1,4 @@
-<!-- included start from accel-client-ipv6-pool.xml.i -->
+<!-- include start from accel-client-ipv6-pool.xml.i -->
<node name="client-ipv6-pool">
<properties>
<help>Pool of client IPv6 addresses</help>
@@ -58,4 +58,4 @@
</tagNode>
</children>
</node>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/accel-gateway-address.xml.i b/interface-definitions/include/accel-gateway-address.xml.i
index c45c8b532..f7f9c721d 100644
--- a/interface-definitions/include/accel-gateway-address.xml.i
+++ b/interface-definitions/include/accel-gateway-address.xml.i
@@ -1,4 +1,4 @@
-<!-- included start from accel-gateway-address.xml.i -->
+<!-- include start from accel-gateway-address.xml.i -->
<leafNode name="gateway-address">
<properties>
<help>Gateway IP address</help>
@@ -12,4 +12,4 @@
</valueHelp>
</properties>
</leafNode>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/accel-lcp-echo-interval-failure.xml.i b/interface-definitions/include/accel-lcp-echo-interval-failure.xml.i
index cccf4b4f2..26f010916 100644
--- a/interface-definitions/include/accel-lcp-echo-interval-failure.xml.i
+++ b/interface-definitions/include/accel-lcp-echo-interval-failure.xml.i
@@ -1,4 +1,4 @@
-<!-- included start from accel-lcp-echo-interval-failure.xml.i -->
+<!-- include start from accel-lcp-echo-interval-failure.xml.i -->
<leafNode name="lcp-echo-interval">
<properties>
<help>LCP echo-requests/sec</help>
@@ -17,4 +17,4 @@
</properties>
<defaultValue>3</defaultValue>
</leafNode>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/accel-lcp-echo-timeout.xml.i b/interface-definitions/include/accel-lcp-echo-timeout.xml.i
index 888fa9d41..a60ca7ace 100644
--- a/interface-definitions/include/accel-lcp-echo-timeout.xml.i
+++ b/interface-definitions/include/accel-lcp-echo-timeout.xml.i
@@ -1,4 +1,4 @@
-<!-- included start from accel-lcp-echo-timeout.xml.i -->
+<!-- include start from accel-lcp-echo-timeout.xml.i -->
<leafNode name="lcp-echo-timeout">
<properties>
<help>Timeout in seconds to wait for any peer activity. If this option specified it turns on adaptive lcp echo functionality and "lcp-echo-failure" is not used.</help>
@@ -8,4 +8,4 @@
</properties>
<defaultValue>0</defaultValue>
</leafNode>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/accel-mtu-128-16384.xml.i b/interface-definitions/include/accel-mtu-128-16384.xml.i
index 6bd089823..c9cac8e45 100644
--- a/interface-definitions/include/accel-mtu-128-16384.xml.i
+++ b/interface-definitions/include/accel-mtu-128-16384.xml.i
@@ -1,4 +1,4 @@
-<!-- included start from accel-mtu-128-16384.xml.i -->
+<!-- include start from accel-mtu-128-16384.xml.i -->
<leafNode name="mtu">
<properties>
<help>Maximum Transmission Unit (MTU) - default 1492</help>
@@ -8,4 +8,4 @@
</properties>
<defaultValue>1492</defaultValue>
</leafNode>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/accel-name-server.xml.i b/interface-definitions/include/accel-name-server.xml.i
index e46c75b52..68e4ae418 100644
--- a/interface-definitions/include/accel-name-server.xml.i
+++ b/interface-definitions/include/accel-name-server.xml.i
@@ -1,4 +1,4 @@
-<!-- included start from accel-name-server.xml.i -->
+<!-- include start from accel-name-server.xml.i -->
<leafNode name="name-server">
<properties>
<help>Domain Name Server (DNS) propagated to client</help>
@@ -17,4 +17,4 @@
<multi/>
</properties>
</leafNode>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/accel-ppp-mppe.xml.i b/interface-definitions/include/accel-ppp-mppe.xml.i
index b7f9cfd92..dbf231ebe 100644
--- a/interface-definitions/include/accel-ppp-mppe.xml.i
+++ b/interface-definitions/include/accel-ppp-mppe.xml.i
@@ -1,4 +1,4 @@
-<!-- included start from accel-ppp-mppe.xml.i -->
+<!-- include start from accel-ppp-mppe.xml.i -->
<leafNode name="mppe">
<properties>
<help>Specifies mppe negotiation preferences</help>
@@ -23,4 +23,4 @@
</properties>
<defaultValue>prefer</defaultValue>
</leafNode>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/accel-radius-additions-disable-accounting.xml.i b/interface-definitions/include/accel-radius-additions-disable-accounting.xml.i
index dc5b9dd96..209f7a5f8 100644
--- a/interface-definitions/include/accel-radius-additions-disable-accounting.xml.i
+++ b/interface-definitions/include/accel-radius-additions-disable-accounting.xml.i
@@ -1,8 +1,8 @@
-<!-- included start from accel-radius-additions-disable-accounting.xml.i -->
+<!-- include start from accel-radius-additions-disable-accounting.xml.i -->
<leafNode name="disable-accounting">
<properties>
<help>Disable accounting</help>
<valueless/>
</properties>
</leafNode>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/accel-radius-additions-rate-limit.xml.i b/interface-definitions/include/accel-radius-additions-rate-limit.xml.i
index 23a4a51cf..8c37c62d1 100644
--- a/interface-definitions/include/accel-radius-additions-rate-limit.xml.i
+++ b/interface-definitions/include/accel-radius-additions-rate-limit.xml.i
@@ -1,4 +1,4 @@
-<!-- included start from accel-radius-additions-rate-limit.xml.i -->
+<!-- include start from accel-radius-additions-rate-limit.xml.i -->
<node name="rate-limit">
<properties>
<help>Upload/Download speed limits</help>
@@ -23,4 +23,4 @@
</leafNode>
</children>
</node>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/accel-radius-additions.xml.i b/interface-definitions/include/accel-radius-additions.xml.i
index 0067b6d1c..3df0f88fa 100644
--- a/interface-definitions/include/accel-radius-additions.xml.i
+++ b/interface-definitions/include/accel-radius-additions.xml.i
@@ -1,4 +1,4 @@
-<!-- included start from accel-radius-additions.xml.i -->
+<!-- include start from accel-radius-additions.xml.i -->
<node name="radius">
<children>
<leafNode name="acct-interim-jitter">
@@ -150,4 +150,4 @@
</node>
</children>
</node>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/accel-wins-server.xml.i b/interface-definitions/include/accel-wins-server.xml.i
index 6de032981..6d5d3d301 100644
--- a/interface-definitions/include/accel-wins-server.xml.i
+++ b/interface-definitions/include/accel-wins-server.xml.i
@@ -1,4 +1,4 @@
-<!-- included start from accel-wins-server.xml.i -->
+<!-- include start from accel-wins-server.xml.i -->
<leafNode name="wins-server">
<properties>
<help>Windows Internet Name Service (WINS) servers propagated to client</help>
@@ -12,4 +12,4 @@
<multi/>
</properties>
</leafNode>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/address-ipv4-ipv6-dhcp.xml.i b/interface-definitions/include/address-ipv4-ipv6-dhcp.xml.i
index 7805110bc..b9dd59bea 100644
--- a/interface-definitions/include/address-ipv4-ipv6-dhcp.xml.i
+++ b/interface-definitions/include/address-ipv4-ipv6-dhcp.xml.i
@@ -1,4 +1,4 @@
-<!-- included start from address-ipv4-ipv6-dhcp.xml.i -->
+<!-- include start from address-ipv4-ipv6-dhcp.xml.i -->
<leafNode name="address">
<properties>
<help>IP address</help>
@@ -28,4 +28,4 @@
<multi/>
</properties>
</leafNode>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/address-ipv4-ipv6.xml.i b/interface-definitions/include/address-ipv4-ipv6.xml.i
index b11610104..519622050 100644
--- a/interface-definitions/include/address-ipv4-ipv6.xml.i
+++ b/interface-definitions/include/address-ipv4-ipv6.xml.i
@@ -1,4 +1,4 @@
-<!-- included start from address-ipv4-ipv6.xml.i -->
+<!-- include start from address-ipv4-ipv6.xml.i -->
<leafNode name="address">
<properties>
<help>IP address</help>
@@ -16,4 +16,4 @@
<multi/>
</properties>
</leafNode>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/bfd-common.xml.i b/interface-definitions/include/bfd-common.xml.i
index ff73e4b20..b47b47612 100644
--- a/interface-definitions/include/bfd-common.xml.i
+++ b/interface-definitions/include/bfd-common.xml.i
@@ -1,4 +1,4 @@
-<!-- included start from bfd-common.xml.i -->
+<!-- include start from bfd-common.xml.i -->
<leafNode name="echo-mode">
<properties>
<help>Enables the echo transmission mode</help>
@@ -69,4 +69,4 @@
<valueless/>
</properties>
</leafNode>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/bgp-neighbor-afi-l2vpn-evpn.xml.i b/interface-definitions/include/bgp-neighbor-afi-l2vpn-evpn.xml.i
deleted file mode 100644
index df346afc1..000000000
--- a/interface-definitions/include/bgp-neighbor-afi-l2vpn-evpn.xml.i
+++ /dev/null
@@ -1,16 +0,0 @@
-<!-- included start from bgp-neighbor-afi-l2vpn-evpn.xml.i -->
-<node name="l2vpn-evpn">
- <properties>
- <help>L2VPN EVPN BGP settings</help>
- </properties>
- <children>
- #include <include/bgp-afi-allowas-in.xml.i>
- #include <include/bgp-afi-attribute-unchanged.xml.i>
- #include <include/bgp-afi-nexthop-self.xml.i>
- #include <include/bgp-afi-route-map.xml.i>
- #include <include/bgp-afi-route-reflector-client.xml.i>
- #include <include/bgp-afi-route-server-client.xml.i>
- #include <include/bgp-afi-soft-reconfiguration.xml.i>
- </children>
-</node>
-<!-- included end -->
diff --git a/interface-definitions/include/bgp-route-map.xml.i b/interface-definitions/include/bgp-route-map.xml.i
deleted file mode 100644
index 18b092354..000000000
--- a/interface-definitions/include/bgp-route-map.xml.i
+++ /dev/null
@@ -1,10 +0,0 @@
-<!-- included start from bgp-route-map.xml.i -->
-<leafNode name="route-map">
- <properties>
- <help>Route-map to modify route attributes</help>
- <completionHelp>
- <path>policy route-map</path>
- </completionHelp>
- </properties>
-</leafNode>
-<!-- included end -->
diff --git a/interface-definitions/include/bgp-afi-aggregate-address.xml.i b/interface-definitions/include/bgp/bgp-afi-aggregate-address.xml.i
index c33d1097c..c731e970b 100644
--- a/interface-definitions/include/bgp-afi-aggregate-address.xml.i
+++ b/interface-definitions/include/bgp/bgp-afi-aggregate-address.xml.i
@@ -1,4 +1,4 @@
-<!-- included start from bgp-afi-aggregate-address.xml.i -->
+<!-- include start from bgp-afi-aggregate-address.xml.i -->
<leafNode name="as-set">
<properties>
<help>Generate AS-set path information for this aggregate address</help>
@@ -11,4 +11,4 @@
<valueless/>
</properties>
</leafNode>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/bgp-afi-allowas-in.xml.i b/interface-definitions/include/bgp/bgp-afi-allowas-in.xml.i
index 77de04ed7..738bf0211 100644
--- a/interface-definitions/include/bgp-afi-allowas-in.xml.i
+++ b/interface-definitions/include/bgp/bgp-afi-allowas-in.xml.i
@@ -1,4 +1,4 @@
-<!-- included start from bgp-afi-allowas-in.xml.i -->
+<!-- include start from bgp-afi-allowas-in.xml.i -->
<node name="allowas-in">
<properties>
<help>Accept route that contains the local-as in the as-path</help>
@@ -18,4 +18,4 @@
</leafNode>
</children>
</node>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/bgp-afi-attribute-unchanged.xml.i b/interface-definitions/include/bgp/bgp-afi-attribute-unchanged.xml.i
index fef53dd9d..f407c3f74 100644
--- a/interface-definitions/include/bgp-afi-attribute-unchanged.xml.i
+++ b/interface-definitions/include/bgp/bgp-afi-attribute-unchanged.xml.i
@@ -1,4 +1,4 @@
-<!-- included start from bgp-afi-attribute-unchanged.xml.i -->
+<!-- include start from bgp-afi-attribute-unchanged.xml.i -->
<node name="attribute-unchanged">
<properties>
<help>BGP attributes are sent unchanged</help>
@@ -24,4 +24,4 @@
</leafNode>
</children>
</node>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/bgp-afi-capability-orf.xml.i b/interface-definitions/include/bgp/bgp-afi-capability-orf.xml.i
index 9bd265f93..dd5c5f8b2 100644
--- a/interface-definitions/include/bgp-afi-capability-orf.xml.i
+++ b/interface-definitions/include/bgp/bgp-afi-capability-orf.xml.i
@@ -1,4 +1,4 @@
-<!-- included start from bgp-afi-capability-orf.xml.i -->
+<!-- include start from bgp-afi-capability-orf.xml.i -->
<node name="orf">
<properties>
<help>Advertise ORF capability to this peer</help>
@@ -25,4 +25,4 @@
</node>
</children>
</node>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/bgp-afi-common.xml.i b/interface-definitions/include/bgp/bgp-afi-common.xml.i
index 90c2753c8..7782e7ef2 100644
--- a/interface-definitions/include/bgp-afi-common.xml.i
+++ b/interface-definitions/include/bgp/bgp-afi-common.xml.i
@@ -1,4 +1,4 @@
-<!-- included start from bgp-afi-common.xml.i -->
+<!-- include start from bgp-afi-common.xml.i -->
<leafNode name="addpath-tx-all">
<properties>
<help>Use addpath to advertise all paths to a neighbor</help>
@@ -11,14 +11,14 @@
<valueless/>
</properties>
</leafNode>
-#include <include/bgp-afi-allowas-in.xml.i>
+#include <include/bgp/bgp-afi-allowas-in.xml.i>
<leafNode name="as-override">
<properties>
<help>AS for routes sent to this peer to be the local AS</help>
<valueless/>
</properties>
</leafNode>
-#include <include/bgp-afi-attribute-unchanged.xml.i>
+#include <include/bgp/bgp-afi-attribute-unchanged.xml.i>
<node name="disable-send-community">
<properties>
<help>Disable sending community attributes to this peer</help>
@@ -43,7 +43,7 @@
<help>Originate default route to this peer</help>
</properties>
<children>
- #include <include/bgp-route-map.xml.i>
+ #include <include/route-map.xml.i>
</children>
</node>
<node name="distribute-list">
@@ -118,17 +118,17 @@
</constraint>
</properties>
</leafNode>
-#include <include/bgp-afi-nexthop-self.xml.i>
+#include <include/bgp/bgp-afi-nexthop-self.xml.i>
<leafNode name="remove-private-as">
<properties>
<help>Remove private AS numbers from AS path in outbound route updates</help>
<valueless/>
</properties>
</leafNode>
-#include <include/bgp-afi-route-map.xml.i>
-#include <include/bgp-afi-route-reflector-client.xml.i>
-#include <include/bgp-afi-route-server-client.xml.i>
-#include <include/bgp-afi-soft-reconfiguration.xml.i>
+#include <include/bgp/bgp-afi-route-map.xml.i>
+#include <include/bgp/bgp-afi-route-reflector-client.xml.i>
+#include <include/bgp/bgp-afi-route-server-client.xml.i>
+#include <include/bgp/bgp-afi-soft-reconfiguration.xml.i>
<leafNode name="unsuppress-map">
<properties>
<help>Route-map to selectively unsuppress suppressed routes</help>
@@ -149,4 +149,4 @@
</constraint>
</properties>
</leafNode>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/bgp-afi-ipv4-prefix-list.xml.i b/interface-definitions/include/bgp/bgp-afi-ipv4-prefix-list.xml.i
index bbbada6bd..133b5da28 100644
--- a/interface-definitions/include/bgp-afi-ipv4-prefix-list.xml.i
+++ b/interface-definitions/include/bgp/bgp-afi-ipv4-prefix-list.xml.i
@@ -1,4 +1,4 @@
-<!-- included start from bgp-afi-ipv4-prefix-list.xml.i -->
+<!-- include start from bgp-afi-ipv4-prefix-list.xml.i -->
<node name="prefix-list">
<properties>
<help>IPv4-Prefix-list to filter route updates to/from this peer</help>
@@ -22,4 +22,4 @@
</leafNode>
</children>
</node>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/bgp-afi-ipv6-nexthop-local.xml.i b/interface-definitions/include/bgp/bgp-afi-ipv6-nexthop-local.xml.i
index 4778b392f..c74d81b1f 100644
--- a/interface-definitions/include/bgp-afi-ipv6-nexthop-local.xml.i
+++ b/interface-definitions/include/bgp/bgp-afi-ipv6-nexthop-local.xml.i
@@ -1,4 +1,4 @@
-<!-- included start from bgp-afi-ipv6-nexthop-local.xml.i -->
+<!-- include start from bgp-afi-ipv6-nexthop-local.xml.i -->
<node name="nexthop-local">
<properties>
<help>Nexthop attributes</help>
@@ -12,4 +12,4 @@
</leafNode>
</children>
</node>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/bgp-afi-ipv6-prefix-list.xml.i b/interface-definitions/include/bgp/bgp-afi-ipv6-prefix-list.xml.i
index 8ae7837e9..d597b7c99 100644
--- a/interface-definitions/include/bgp-afi-ipv6-prefix-list.xml.i
+++ b/interface-definitions/include/bgp/bgp-afi-ipv6-prefix-list.xml.i
@@ -1,4 +1,4 @@
-<!-- included start from bgp-afi-ipv6-prefix-list.xml.i -->
+<!-- include start from bgp-afi-ipv6-prefix-list.xml.i -->
<node name="prefix-list">
<properties>
<help>Prefix-list to filter route updates to/from this peer</help>
@@ -22,4 +22,4 @@
</leafNode>
</children>
</node>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/bgp-afi-l2vpn-common.xml.i b/interface-definitions/include/bgp/bgp-afi-l2vpn-common.xml.i
index 2bbf57532..3e7e4ef78 100644
--- a/interface-definitions/include/bgp-afi-l2vpn-common.xml.i
+++ b/interface-definitions/include/bgp/bgp-afi-l2vpn-common.xml.i
@@ -1,4 +1,4 @@
-<!-- included start from bgp-afi-l2vpn-common.xml.i -->
+<!-- include start from bgp-afi-l2vpn-common.xml.i -->
<leafNode name="advertise-default-gw">
<properties>
<help>Advertise All default g/w mac-ip routes in EVPN</help>
@@ -23,5 +23,5 @@
</constraint>
</properties>
</leafNode>
-#include <include/bgp-route-target.xml.i>
-<!-- included end -->
+#include <include/bgp/bgp-route-target.xml.i>
+<!-- include end -->
diff --git a/interface-definitions/include/bgp-afi-maximum-paths.xml.i b/interface-definitions/include/bgp/bgp-afi-maximum-paths.xml.i
index 62133c375..6b220caa5 100644
--- a/interface-definitions/include/bgp-afi-maximum-paths.xml.i
+++ b/interface-definitions/include/bgp/bgp-afi-maximum-paths.xml.i
@@ -1,4 +1,4 @@
-<!-- included start from bgp-afi-maximum-paths.xml.i -->
+<!-- include start from bgp-afi-maximum-paths.xml.i -->
<node name="maximum-paths">
<properties>
<help>Forward packets over multiple paths</help>
@@ -30,4 +30,4 @@
</leafNode>
</children>
</node>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/bgp-afi-nexthop-self.xml.i b/interface-definitions/include/bgp/bgp-afi-nexthop-self.xml.i
index 0bcc4e937..a299f561e 100644
--- a/interface-definitions/include/bgp-afi-nexthop-self.xml.i
+++ b/interface-definitions/include/bgp/bgp-afi-nexthop-self.xml.i
@@ -1,4 +1,4 @@
-<!-- included start from bgp-afi-nexthop-self.xml.i -->
+<!-- include start from bgp-afi-nexthop-self.xml.i -->
<node name="nexthop-self">
<properties>
<help>Disable the next hop calculation for this peer</help>
@@ -12,4 +12,4 @@
</leafNode>
</children>
</node>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/bgp-afi-redistribute-metric-route-map.xml.i b/interface-definitions/include/bgp/bgp-afi-redistribute-metric-route-map.xml.i
index e85bf7d11..4382901c8 100644
--- a/interface-definitions/include/bgp-afi-redistribute-metric-route-map.xml.i
+++ b/interface-definitions/include/bgp/bgp-afi-redistribute-metric-route-map.xml.i
@@ -1,4 +1,4 @@
-<!-- included start from bgp-afi-redistribute-metric-route-map.xml.i -->
+<!-- include start from bgp-afi-redistribute-metric-route-map.xml.i -->
<leafNode name="metric">
<properties>
<help>Metric for redistributed routes</help>
@@ -8,5 +8,5 @@
</valueHelp>
</properties>
</leafNode>
-#include <include/bgp-route-map.xml.i>
-<!-- included end -->
+#include <include/route-map.xml.i>
+<!-- include end -->
diff --git a/interface-definitions/include/bgp-afi-route-map.xml.i b/interface-definitions/include/bgp/bgp-afi-route-map.xml.i
index 5549f56ca..7fac98586 100644
--- a/interface-definitions/include/bgp-afi-route-map.xml.i
+++ b/interface-definitions/include/bgp/bgp-afi-route-map.xml.i
@@ -1,4 +1,4 @@
-<!-- included start from bgp-afi-route-map.xml.i -->
+<!-- include start from bgp-afi-route-map.xml.i -->
<node name="route-map">
<properties>
<help>Route-map to filter route updates to/from this peer</help>
@@ -22,4 +22,4 @@
</leafNode>
</children>
</node>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/bgp-afi-route-reflector-client.xml.i b/interface-definitions/include/bgp/bgp-afi-route-reflector-client.xml.i
index f6a9caa61..70fee40f0 100644
--- a/interface-definitions/include/bgp-afi-route-reflector-client.xml.i
+++ b/interface-definitions/include/bgp/bgp-afi-route-reflector-client.xml.i
@@ -1,8 +1,8 @@
-<!-- included start from bgp-afi-route-reflector-client.xml.i -->
+<!-- include start from bgp-afi-route-reflector-client.xml.i -->
<leafNode name="route-reflector-client">
<properties>
<help>Peer is a route reflector client</help>
<valueless/>
</properties>
</leafNode>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/bgp-afi-route-server-client.xml.i b/interface-definitions/include/bgp/bgp-afi-route-server-client.xml.i
index 60de553fe..29719c463 100644
--- a/interface-definitions/include/bgp-afi-route-server-client.xml.i
+++ b/interface-definitions/include/bgp/bgp-afi-route-server-client.xml.i
@@ -1,8 +1,8 @@
-<!-- included start from bgp-afi-route-server-client.xml.i -->
+<!-- include start from bgp-afi-route-server-client.xml.i -->
<leafNode name="route-server-client">
<properties>
<help>Peer is a route server client</help>
<valueless/>
</properties>
</leafNode>
-<!-- included end --> \ No newline at end of file
+<!-- include end --> \ No newline at end of file
diff --git a/interface-definitions/include/bgp-afi-soft-reconfiguration.xml.i b/interface-definitions/include/bgp/bgp-afi-soft-reconfiguration.xml.i
index 7af11f8f4..c3f050bb8 100644
--- a/interface-definitions/include/bgp-afi-soft-reconfiguration.xml.i
+++ b/interface-definitions/include/bgp/bgp-afi-soft-reconfiguration.xml.i
@@ -1,4 +1,4 @@
-<!-- included start from bgp-afi-soft-reconfiguration.xml.i -->
+<!-- include start from bgp-afi-soft-reconfiguration.xml.i -->
<node name="soft-reconfiguration">
<properties>
<help>Soft reconfiguration for peer</help>
@@ -12,4 +12,4 @@
</leafNode>
</children>
</node>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/bgp-bfd.xml.i b/interface-definitions/include/bgp/bgp-bfd.xml.i
index fe52b12f2..d918fd673 100644
--- a/interface-definitions/include/bgp-bfd.xml.i
+++ b/interface-definitions/include/bgp/bgp-bfd.xml.i
@@ -1,4 +1,4 @@
-<!-- included start from bgp-bfd.xml.i -->
+<!-- include start from bgp-bfd.xml.i -->
<node name="bfd">
<properties>
<help>Enable Bidirectional Forwarding Detection (BFD) support</help>
@@ -12,4 +12,4 @@
</leafNode>
</children>
</node>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/bgp-capability.xml.i b/interface-definitions/include/bgp/bgp-capability.xml.i
index 8de5bd8ab..89ce19ca6 100644
--- a/interface-definitions/include/bgp-capability.xml.i
+++ b/interface-definitions/include/bgp/bgp-capability.xml.i
@@ -1,4 +1,4 @@
-<!-- included start from bgp-capability.xml.i -->
+<!-- include start from bgp-capability.xml.i -->
<node name="capability">
<properties>
<help>Advertise capabilities to this peer-group</help>
@@ -18,4 +18,4 @@
</leafNode>
</children>
</node>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/bgp/bgp-common-config.xml.i b/interface-definitions/include/bgp/bgp-common-config.xml.i
new file mode 100644
index 000000000..ae0e8b178
--- /dev/null
+++ b/interface-definitions/include/bgp/bgp-common-config.xml.i
@@ -0,0 +1,825 @@
+<!-- include start from bgp/bgp-common-config.xml.i -->
+<node name="address-family">
+ <properties>
+ <help>BGP address-family parameters</help>
+ </properties>
+ <children>
+ <node name="ipv4-unicast">
+ <properties>
+ <help>IPv4 BGP settings</help>
+ </properties>
+ <children>
+ <tagNode name="aggregate-address">
+ <properties>
+ <help>BGP aggregate network</help>
+ <valueHelp>
+ <format>ipv4net</format>
+ <description>BGP aggregate network</description>
+ </valueHelp>
+ <constraint>
+ <validator name="ipv4-prefix"/>
+ </constraint>
+ </properties>
+ <children>
+ #include <include/bgp/bgp-afi-aggregate-address.xml.i>
+ </children>
+ </tagNode>
+ <tagNode name="network">
+ <properties>
+ <help>BGP network</help>
+ <valueHelp>
+ <format>ipv4net</format>
+ <description>BGP network</description>
+ </valueHelp>
+ <constraint>
+ <validator name="ipv4-prefix"/>
+ </constraint>
+ </properties>
+ <children>
+ <leafNode name="backdoor">
+ <properties>
+ <help>Network as a backdoor route</help>
+ <valueless/>
+ </properties>
+ </leafNode>
+ #include <include/route-map.xml.i>
+ </children>
+ </tagNode>
+ #include <include/bgp/bgp-afi-maximum-paths.xml.i>
+ <node name="redistribute">
+ <properties>
+ <help>Redistribute routes from other protocols into BGP</help>
+ </properties>
+ <children>
+ <node name="connected">
+ <properties>
+ <help>Redistribute connected routes into BGP</help>
+ </properties>
+ <children>
+ #include <include/bgp/bgp-afi-redistribute-metric-route-map.xml.i>
+ </children>
+ </node>
+ <node name="isis">
+ <properties>
+ <help>Redistribute IS-IS routes into BGP</help>
+ </properties>
+ <children>
+ #include <include/bgp/bgp-afi-redistribute-metric-route-map.xml.i>
+ </children>
+ </node>
+ <node name="kernel">
+ <properties>
+ <help>Redistribute kernel routes into BGP</help>
+ </properties>
+ <children>
+ #include <include/bgp/bgp-afi-redistribute-metric-route-map.xml.i>
+ </children>
+ </node>
+ <node name="ospf">
+ <properties>
+ <help>Redistribute OSPF routes into BGP</help>
+ </properties>
+ <children>
+ #include <include/bgp/bgp-afi-redistribute-metric-route-map.xml.i>
+ </children>
+ </node>
+ <node name="rip">
+ <properties>
+ <help>Redistribute RIP routes into BGP</help>
+ </properties>
+ <children>
+ #include <include/bgp/bgp-afi-redistribute-metric-route-map.xml.i>
+ </children>
+ </node>
+ <node name="static">
+ <properties>
+ <help>Redistribute static routes into BGP</help>
+ </properties>
+ <children>
+ #include <include/bgp/bgp-afi-redistribute-metric-route-map.xml.i>
+ </children>
+ </node>
+ <leafNode name="table">
+ <properties>
+ <help>Redistribute non-main Kernel Routing Table</help>
+ </properties>
+ </leafNode>
+ </children>
+ </node>
+ </children>
+ </node>
+ <node name="ipv6-unicast">
+ <properties>
+ <help>IPv6 BGP settings</help>
+ </properties>
+ <children>
+ <tagNode name="aggregate-address">
+ <properties>
+ <help>BGP aggregate network</help>
+ <valueHelp>
+ <format>ipv6net</format>
+ <description>Aggregate network</description>
+ </valueHelp>
+ <constraint>
+ <validator name="ipv6-prefix"/>
+ </constraint>
+ </properties>
+ <children>
+ #include <include/bgp/bgp-afi-aggregate-address.xml.i>
+ </children>
+ </tagNode>
+ <tagNode name="network">
+ <properties>
+ <help>BGP network</help>
+ <valueHelp>
+ <format>ipv6net</format>
+ <description>Aggregate network</description>
+ </valueHelp>
+ <constraint>
+ <validator name="ipv6-prefix"/>
+ </constraint>
+ </properties>
+ <children>
+ <leafNode name="path-limit">
+ <properties>
+ <help>AS-path hopcount limit</help>
+ <valueHelp>
+ <format>u32:0-255</format>
+ <description>AS path hop count limit</description>
+ </valueHelp>
+ <constraint>
+ <validator name="numeric" argument="--range 0-255"/>
+ </constraint>
+ </properties>
+ </leafNode>
+ #include <include/route-map.xml.i>
+ </children>
+ </tagNode>
+ #include <include/bgp/bgp-afi-maximum-paths.xml.i>
+ <node name="redistribute">
+ <properties>
+ <help>Redistribute routes from other protocols into BGP</help>
+ </properties>
+ <children>
+ <node name="connected">
+ <properties>
+ <help>Redistribute connected routes into BGP</help>
+ </properties>
+ <children>
+ #include <include/bgp/bgp-afi-redistribute-metric-route-map.xml.i>
+ </children>
+ </node>
+ <node name="kernel">
+ <properties>
+ <help>Redistribute kernel routes into BGP</help>
+ </properties>
+ <children>
+ #include <include/bgp/bgp-afi-redistribute-metric-route-map.xml.i>
+ </children>
+ </node>
+ <node name="ospfv3">
+ <properties>
+ <help>Redistribute OSPFv3 routes into BGP</help>
+ </properties>
+ <children>
+ #include <include/bgp/bgp-afi-redistribute-metric-route-map.xml.i>
+ </children>
+ </node>
+ <node name="ripng">
+ <properties>
+ <help>Redistribute RIPng routes into BGP</help>
+ </properties>
+ <children>
+ #include <include/bgp/bgp-afi-redistribute-metric-route-map.xml.i>
+ </children>
+ </node>
+ <node name="static">
+ <properties>
+ <help>Redistribute static routes into BGP</help>
+ </properties>
+ <children>
+ #include <include/bgp/bgp-afi-redistribute-metric-route-map.xml.i>
+ </children>
+ </node>
+ <leafNode name="table">
+ <properties>
+ <help>Redistribute non-main Kernel Routing Table</help>
+ </properties>
+ </leafNode>
+ </children>
+ </node>
+ </children>
+ </node>
+ <node name="l2vpn-evpn">
+ <properties>
+ <help>L2VPN EVPN BGP settings</help>
+ </properties>
+ <children>
+ <leafNode name="advertise-all-vni">
+ <properties>
+ <help>Advertise All local VNIs</help>
+ <valueless/>
+ </properties>
+ </leafNode>
+ #include <include/bgp/bgp-afi-l2vpn-common.xml.i>
+ <leafNode name="advertise-pip">
+ <properties>
+ <help>EVPN system primary IP</help>
+ <valueHelp>
+ <format>ipv4</format>
+ <description>IP address</description>
+ </valueHelp>
+ <constraint>
+ <validator name="ipv4-address"/>
+ </constraint>
+ </properties>
+ </leafNode>
+ <leafNode name="rt-auto-derive">
+ <properties>
+ <help>Auto derivation of Route Target (RFC8365)</help>
+ <valueless/>
+ </properties>
+ </leafNode>
+ <node name="flooding">
+ <properties>
+ <help>Specify handling for BUM packets</help>
+ </properties>
+ <children>
+ <leafNode name="disable">
+ <properties>
+ <help>Do not flood any BUM packets</help>
+ <valueless/>
+ </properties>
+ </leafNode>
+ <leafNode name="head-end-replication">
+ <properties>
+ <help>Flood BUM packets using head-end replication</help>
+ <valueless/>
+ </properties>
+ </leafNode>
+ </children>
+ </node>
+ <tagNode name="vni">
+ <properties>
+ <help>VXLAN Network Identifier</help>
+ <valueHelp>
+ <format>u32:1-16777215</format>
+ <description>VNI number</description>
+ </valueHelp>
+ <constraint>
+ <validator name="numeric" argument="--range 1-16777215"/>
+ </constraint>
+ </properties>
+ <children>
+ #include <include/bgp/bgp-afi-l2vpn-common.xml.i>
+ </children>
+ </tagNode>
+ </children>
+ </node>
+ </children>
+</node>
+<node name="listen">
+ <properties>
+ <help>Listen for and accept BGP dynamic neighbors from range</help>
+ </properties>
+ <children>
+ <leafNode name="limit">
+ <properties>
+ <help>Maximum number of dynamic neighbors that can be created</help>
+ <valueHelp>
+ <format>u32:1-5000</format>
+ <description>BGP neighbor limit</description>
+ </valueHelp>
+ <constraint>
+ <validator name="numeric" argument="--range 1-5000"/>
+ </constraint>
+ </properties>
+ </leafNode>
+ <tagNode name="range">
+ <properties>
+ <help>BGP dynamic neighbors listen range</help>
+ <valueHelp>
+ <format>ipv4net</format>
+ <description>IPv4 dynamic neighbors listen range</description>
+ </valueHelp>
+ <valueHelp>
+ <format>ipv6net</format>
+ <description>IPv6 dynamic neighbors listen range</description>
+ </valueHelp>
+ <constraint>
+ <validator name="ipv4-prefix"/>
+ <validator name="ipv6-prefix"/>
+ </constraint>
+ </properties>
+ <children>
+ #include <include/bgp/bgp-peer-group.xml.i>
+ </children>
+ </tagNode>
+ </children>
+</node>
+<tagNode name="neighbor">
+ <properties>
+ <help>BGP neighbor</help>
+ <valueHelp>
+ <format>ipv4</format>
+ <description>BGP neighbor IP address</description>
+ </valueHelp>
+ <valueHelp>
+ <format>ipv6</format>
+ <description>BGP neighbor IPv6 address</description>
+ </valueHelp>
+ <valueHelp>
+ <format>txt</format>
+ <description>Interface name</description>
+ </valueHelp>
+ <constraint>
+ <validator name="ipv4-address"/>
+ <validator name="ipv6-address"/>
+ <validator name="interface-name"/>
+ </constraint>
+ </properties>
+ <children>
+ <node name="address-family">
+ <properties>
+ <help>Parameters relating to IPv4 or IPv6 routes</help>
+ </properties>
+ <children>
+ #include <include/bgp/bgp-neighbor-afi-ipv4-unicast.xml.i>
+ #include <include/bgp/bgp-neighbor-afi-ipv6-unicast.xml.i>
+ #include <include/bgp/bgp-neighbor-afi-l2vpn-evpn.xml.i>
+ </children>
+ </node>
+ <leafNode name="advertisement-interval">
+ <properties>
+ <help>Minimum interval for sending routing updates</help>
+ <valueHelp>
+ <format>u32:0-600</format>
+ <description>Advertisement interval in seconds</description>
+ </valueHelp>
+ <constraint>
+ <validator name="numeric" argument="--range 0-600"/>
+ </constraint>
+ </properties>
+ </leafNode>
+ #include <include/bgp/bgp-bfd.xml.i>
+ #include <include/bgp/bgp-capability.xml.i>
+ #include <include/bgp/bgp-description.xml.i>
+ #include <include/bgp/bgp-disable-capability-negotiation.xml.i>
+ #include <include/bgp/bgp-disable-connected-check.xml.i>
+ #include <include/bgp/bgp-ebgp-multihop.xml.i>
+ <node name="interface">
+ <properties>
+ <help>Interface parameters</help>
+ </properties>
+ <children>
+ #include <include/bgp/bgp-peer-group.xml.i>
+ #include <include/bgp/bgp-remote-as.xml.i>
+ <node name="v6only">
+ <properties>
+ <help>Enable BGP with v6 link-local only</help>
+ </properties>
+ <children>
+ #include <include/bgp/bgp-peer-group.xml.i>
+ #include <include/bgp/bgp-remote-as.xml.i>
+ </children>
+ </node>
+ </children>
+ </node>
+ #include <include/bgp/bgp-local-as.xml.i>
+ #include <include/bgp/bgp-override-capability.xml.i>
+ #include <include/bgp/bgp-passive.xml.i>
+ #include <include/bgp/bgp-password.xml.i>
+ #include <include/bgp/bgp-peer-group.xml.i>
+ <leafNode name="port">
+ <properties>
+ <help>Neighbor BGP port</help>
+ <valueHelp>
+ <format>u32:1-65535</format>
+ <description>Neighbor BGP port number</description>
+ </valueHelp>
+ <constraint>
+ <validator name="numeric" argument="--range 1-65535"/>
+ </constraint>
+ </properties>
+ </leafNode>
+ #include <include/bgp/bgp-remote-as.xml.i>
+ #include <include/bgp/bgp-shutdown.xml.i>
+ <leafNode name="strict-capability-match">
+ <properties>
+ <help>Enable strict capability negotiation</help>
+ <valueless/>
+ </properties>
+ </leafNode>
+ <node name="timers">
+ <properties>
+ <help>Neighbor timers</help>
+ </properties>
+ <children>
+ <leafNode name="connect">
+ <properties>
+ <help>BGP connect timer for this neighbor</help>
+ <valueHelp>
+ <format>u32:1-65535</format>
+ <description>Connect timer in seconds</description>
+ </valueHelp>
+ <valueHelp>
+ <format>0</format>
+ <description>Disable connect timer</description>
+ </valueHelp>
+ <constraint>
+ <validator name="numeric" argument="--range 0-65535"/>
+ </constraint>
+ </properties>
+ </leafNode>
+ #include <include/bgp/bgp-timers-holdtime.xml.i>
+ #include <include/bgp/bgp-timers-keepalive.xml.i>
+ </children>
+ </node>
+ #include <include/bgp/bgp-ttl-security.xml.i>
+ #include <include/bgp/bgp-update-source.xml.i>
+ </children>
+</tagNode>
+<node name="parameters">
+ <properties>
+ <help>BGP parameters</help>
+ </properties>
+ <children>
+ <leafNode name="always-compare-med">
+ <properties>
+ <help>Always compare MEDs from different neighbors</help>
+ <valueless/>
+ </properties>
+ </leafNode>
+ <node name="bestpath">
+ <properties>
+ <help>Default bestpath selection mechanism</help>
+ </properties>
+ <children>
+ <node name="as-path">
+ <properties>
+ <help>AS-path attribute comparison parameters</help>
+ </properties>
+ <children>
+ <leafNode name="confed">
+ <properties>
+ <help>Compare AS-path lengths including confederation sets and sequences</help>
+ <valueless/>
+ </properties>
+ </leafNode>
+ <leafNode name="ignore">
+ <properties>
+ <help>Ignore AS-path length in selecting a route</help>
+ <valueless/>
+ </properties>
+ </leafNode>
+ <leafNode name="multipath-relax">
+ <properties>
+ <help>Allow load sharing across routes that have different AS paths (but same length)</help>
+ <valueless/>
+ </properties>
+ </leafNode>
+ </children>
+ </node>
+ <leafNode name="compare-routerid">
+ <properties>
+ <help>Compare the router-id for identical EBGP paths</help>
+ <valueless/>
+ </properties>
+ </leafNode>
+ <node name="med">
+ <properties>
+ <help>MED attribute comparison parameters</help>
+ </properties>
+ <children>
+ <leafNode name="confed">
+ <properties>
+ <help>Compare MEDs among confederation paths</help>
+ <valueless/>
+ </properties>
+ </leafNode>
+ <leafNode name="missing-as-worst">
+ <properties>
+ <help>Treat missing route as a MED as the least preferred one</help>
+ <valueless/>
+ </properties>
+ </leafNode>
+ </children>
+ </node>
+ </children>
+ </node>
+ <leafNode name="cluster-id">
+ <properties>
+ <help>Route-reflector cluster-id</help>
+ <valueHelp>
+ <format>ipv4</format>
+ <description>Route-reflector cluster-id</description>
+ </valueHelp>
+ <constraint>
+ <validator name="ipv4-address"/>
+ </constraint>
+ </properties>
+ </leafNode>
+ <node name="confederation">
+ <properties>
+ <help>AS confederation parameters</help>
+ </properties>
+ <children>
+ <leafNode name="identifier">
+ <properties>
+ <help>Confederation AS identifier [REQUIRED]</help>
+ <valueHelp>
+ <format>u32:1-4294967294</format>
+ <description>Confederation AS id</description>
+ </valueHelp>
+ <constraint>
+ <validator name="numeric" argument="--range 1-4294967294"/>
+ </constraint>
+ </properties>
+ </leafNode>
+ <leafNode name="peers">
+ <properties>
+ <help>Peer ASs in the BGP confederation</help>
+ <valueHelp>
+ <format>u32:1-4294967294</format>
+ <description>Peer AS number</description>
+ </valueHelp>
+ <constraint>
+ <validator name="numeric" argument="--range 1-4294967294"/>
+ </constraint>
+ </properties>
+ </leafNode>
+ </children>
+ </node>
+ <node name="dampening">
+ <properties>
+ <help>Enable route-flap dampening</help>
+ </properties>
+ <children>
+ <leafNode name="half-life">
+ <properties>
+ <help>Half-life time for dampening [REQUIRED]</help>
+ <valueHelp>
+ <format>u32:1-45</format>
+ <description>Half-life penalty in minutes</description>
+ </valueHelp>
+ <constraint>
+ <validator name="numeric" argument="--range 1-45"/>
+ </constraint>
+ </properties>
+ </leafNode>
+ <leafNode name="max-suppress-time">
+ <properties>
+ <help>Maximum duration to suppress a stable route [REQUIRED]</help>
+ <valueHelp>
+ <format>u32:1-255</format>
+ <description>Maximum suppress duration in minutes</description>
+ </valueHelp>
+ <constraint>
+ <validator name="numeric" argument="--range 1-255"/>
+ </constraint>
+ </properties>
+ </leafNode>
+ <leafNode name="re-use">
+ <properties>
+ <help>Threshold to start reusing a route [REQUIRED]</help>
+ <valueHelp>
+ <format>u32:1-20000</format>
+ <description>Re-use penalty points</description>
+ </valueHelp>
+ <constraint>
+ <validator name="numeric" argument="--range 1-20000"/>
+ </constraint>
+ </properties>
+ </leafNode>
+ <leafNode name="start-suppress-time">
+ <properties>
+ <help>When to start suppressing a route [REQUIRED]</help>
+ <valueHelp>
+ <format>u32:1-20000</format>
+ <description>Start-suppress penalty points</description>
+ </valueHelp>
+ <constraint>
+ <validator name="numeric" argument="--range 1-20000"/>
+ </constraint>
+ </properties>
+ </leafNode>
+ </children>
+ </node>
+ <node name="default">
+ <properties>
+ <help>BGP defaults</help>
+ </properties>
+ <children>
+ <leafNode name="local-pref">
+ <properties>
+ <help>Default local preference</help>
+ <valueHelp>
+ <format>u32</format>
+ <description>Local preference</description>
+ </valueHelp>
+ <constraint>
+ <validator name="numeric" argument="--range 0-4294967295"/>
+ </constraint>
+ </properties>
+ </leafNode>
+ <leafNode name="no-ipv4-unicast">
+ <properties>
+ <help>Deactivate IPv4 unicast for a peer by default</help>
+ <valueless/>
+ </properties>
+ </leafNode>
+ </children>
+ </node>
+ <leafNode name="deterministic-med">
+ <properties>
+ <help>Compare MEDs between different peers in the same AS</help>
+ <valueless/>
+ </properties>
+ </leafNode>
+ <node name="distance">
+ <properties>
+ <help>Administratives distances for BGP routes</help>
+ </properties>
+ <children>
+ <node name="global">
+ <properties>
+ <help>Global administratives distances for BGP routes</help>
+ </properties>
+ <children>
+ <leafNode name="external">
+ <properties>
+ <help>Administrative distance for external BGP routes</help>
+ <valueHelp>
+ <format>u32:1-255</format>
+ <description>Administrative distance for external BGP routes</description>
+ </valueHelp>
+ <constraint>
+ <validator name="numeric" argument="--range 1-255"/>
+ </constraint>
+ </properties>
+ </leafNode>
+ <leafNode name="internal">
+ <properties>
+ <help>Administrative distance for internal BGP routes</help>
+ <valueHelp>
+ <format>u32:1-255</format>
+ <description>Administrative distance for internal BGP routes</description>
+ </valueHelp>
+ <constraint>
+ <validator name="numeric" argument="--range 1-255"/>
+ </constraint>
+ </properties>
+ </leafNode>
+ <leafNode name="local">
+ <properties>
+ <help>Administrative distance for local BGP routes</help>
+ <valueHelp>
+ <format>u32:1-255</format>
+ <description>Administrative distance for internal BGP routes</description>
+ </valueHelp>
+ <constraint>
+ <validator name="numeric" argument="--range 1-255"/>
+ </constraint>
+ </properties>
+ </leafNode>
+ </children>
+ </node>
+ <tagNode name="prefix">
+ <properties>
+ <help>Administrative distance for a specific BGP prefix</help>
+ <valueHelp>
+ <format>ipv4net</format>
+ <description>Administrative distance for a specific BGP prefix</description>
+ </valueHelp>
+ <constraint>
+ <validator name="ipv4-prefix"/>
+ </constraint>
+ </properties>
+ <children>
+ <leafNode name="distance">
+ <properties>
+ <help>Administrative distance for prefix</help>
+ <valueHelp>
+ <format>u32:1-255</format>
+ <description>Administrative distance for external BGP routes</description>
+ </valueHelp>
+ <constraint>
+ <validator name="numeric" argument="--range 1-255"/>
+ </constraint>
+ </properties>
+ </leafNode>
+ </children>
+ </tagNode>
+ </children>
+ </node>
+ <leafNode name="ebgp-requires-policy">
+ <properties>
+ <help>Require in and out policy for eBGP peers (RFC8212)</help>
+ <valueless/>
+ </properties>
+ </leafNode>
+ <node name="graceful-restart">
+ <properties>
+ <help>Graceful restart capability parameters</help>
+ </properties>
+ <children>
+ <leafNode name="stalepath-time">
+ <properties>
+ <help>Maximum time to hold onto restarting neighbors stale paths</help>
+ <valueHelp>
+ <format>u32:1-3600</format>
+ <description>Hold time in seconds</description>
+ </valueHelp>
+ <constraint>
+ <validator name="numeric" argument="--range 1-3600"/>
+ </constraint>
+ </properties>
+ </leafNode>
+ </children>
+ </node>
+ <leafNode name="graceful-shutdown">
+ <properties>
+ <help>Graceful shutdown</help>
+ <valueless/>
+ </properties>
+ </leafNode>
+ <leafNode name="log-neighbor-changes">
+ <properties>
+ <help>Log neighbor up/down changes and reset reason</help>
+ <valueless/>
+ </properties>
+ </leafNode>
+ <leafNode name="network-import-check">
+ <properties>
+ <help>Enable IGP route check for network statements</help>
+ <valueless/>
+ </properties>
+ </leafNode>
+ <leafNode name="no-client-to-client-reflection">
+ <properties>
+ <help>Disable client to client route reflection</help>
+ <valueless/>
+ </properties>
+ </leafNode>
+ <leafNode name="no-fast-external-failover">
+ <properties>
+ <help>Disable immediate session reset on peer link down event</help>
+ <valueless/>
+ </properties>
+ </leafNode>
+ <leafNode name="router-id">
+ <properties>
+ <help>BGP router id</help>
+ <valueHelp>
+ <format>ipv4</format>
+ <description>BGP router id</description>
+ </valueHelp>
+ <constraint>
+ <validator name="ipv4-address"/>
+ </constraint>
+ </properties>
+ </leafNode>
+ </children>
+</node>
+<tagNode name="peer-group">
+ <properties>
+ <help>BGP peer-group</help>
+ </properties>
+ <children>
+ <node name="address-family">
+ <properties>
+ <help>BGP peer-group address-family parameters</help>
+ </properties>
+ <children>
+ #include <include/bgp/bgp-neighbor-afi-ipv4-unicast.xml.i>
+ #include <include/bgp/bgp-neighbor-afi-ipv6-unicast.xml.i>
+ #include <include/bgp/bgp-neighbor-afi-l2vpn-evpn.xml.i>
+ </children>
+ </node>
+ #include <include/bgp/bgp-bfd.xml.i>
+ #include <include/bgp/bgp-capability.xml.i>
+ #include <include/bgp/bgp-description.xml.i>
+ #include <include/bgp/bgp-disable-capability-negotiation.xml.i>
+ #include <include/bgp/bgp-disable-connected-check.xml.i>
+ #include <include/bgp/bgp-ebgp-multihop.xml.i>
+ #include <include/bgp/bgp-local-as.xml.i>
+ #include <include/bgp/bgp-override-capability.xml.i>
+ #include <include/bgp/bgp-passive.xml.i>
+ #include <include/bgp/bgp-password.xml.i>
+ #include <include/bgp/bgp-remote-as.xml.i>
+ #include <include/bgp/bgp-shutdown.xml.i>
+ #include <include/bgp/bgp-ttl-security.xml.i>
+ #include <include/bgp/bgp-update-source.xml.i>
+ </children>
+</tagNode>
+#include <include/route-map.xml.i>
+<node name="timers">
+ <properties>
+ <help>BGP protocol timers</help>
+ </properties>
+ <children>
+ #include <include/bgp/bgp-timers-holdtime.xml.i>
+ #include <include/bgp/bgp-timers-keepalive.xml.i>
+ </children>
+</node>
+<!-- include end -->
diff --git a/interface-definitions/include/bgp-description.xml.i b/interface-definitions/include/bgp/bgp-description.xml.i
index e1766cb9f..308bbec12 100644
--- a/interface-definitions/include/bgp-description.xml.i
+++ b/interface-definitions/include/bgp/bgp-description.xml.i
@@ -1,7 +1,7 @@
-<!-- included start from bgp-description.xml.i -->
+<!-- include start from bgp-description.xml.i -->
<leafNode name="description">
<properties>
<help>Neighbor specific description</help>
</properties>
</leafNode>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/bgp-disable-capability-negotiation.xml.i b/interface-definitions/include/bgp/bgp-disable-capability-negotiation.xml.i
index a43c6e8b9..74c3321d9 100644
--- a/interface-definitions/include/bgp-disable-capability-negotiation.xml.i
+++ b/interface-definitions/include/bgp/bgp-disable-capability-negotiation.xml.i
@@ -1,8 +1,8 @@
-<!-- included start from bgp-disable-capability-negotiation.xml.i -->
+<!-- include start from bgp-disable-capability-negotiation.xml.i -->
<leafNode name="disable-capability-negotiation">
<properties>
<help>Disable capability negotiation with this neighbor</help>
<valueless/>
</properties>
</leafNode>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/bgp-disable-connected-check.xml.i b/interface-definitions/include/bgp/bgp-disable-connected-check.xml.i
index bb9098bf6..15142b0ac 100644
--- a/interface-definitions/include/bgp-disable-connected-check.xml.i
+++ b/interface-definitions/include/bgp/bgp-disable-connected-check.xml.i
@@ -1,8 +1,8 @@
-<!-- included start from bgp-disable-connected-check.xml.i -->
+<!-- include start from bgp-disable-connected-check.xml.i -->
<leafNode name="disable-connected-check">
<properties>
<help>Disable check to see if eBGP peer address is a connected route</help>
<valueless/>
</properties>
</leafNode>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/bgp-ebgp-multihop.xml.i b/interface-definitions/include/bgp/bgp-ebgp-multihop.xml.i
index 6459fcf47..48580af3c 100644
--- a/interface-definitions/include/bgp-ebgp-multihop.xml.i
+++ b/interface-definitions/include/bgp/bgp-ebgp-multihop.xml.i
@@ -1,4 +1,4 @@
-<!-- included start from bgp-ebgp-multihop.xml.i -->
+<!-- include start from bgp-ebgp-multihop.xml.i -->
<leafNode name="ebgp-multihop">
<properties>
<help>Allow this EBGP neighbor to not be on a directly connected network</help>
@@ -11,4 +11,4 @@
</constraint>
</properties>
</leafNode>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/bgp-local-as.xml.i b/interface-definitions/include/bgp/bgp-local-as.xml.i
index cf55ce476..7fc896a31 100644
--- a/interface-definitions/include/bgp-local-as.xml.i
+++ b/interface-definitions/include/bgp/bgp-local-as.xml.i
@@ -1,4 +1,4 @@
-<!-- included start from bgp-local-as.xml.i -->
+<!-- include start from bgp-local-as.xml.i -->
<tagNode name="local-as">
<properties>
<help>Local AS number [REQUIRED]</help>
@@ -19,4 +19,4 @@
</leafNode>
</children>
</tagNode>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/bgp-neighbor-afi-ipv4-unicast.xml.i b/interface-definitions/include/bgp/bgp-neighbor-afi-ipv4-unicast.xml.i
index ece277fbf..945483276 100644
--- a/interface-definitions/include/bgp-neighbor-afi-ipv4-unicast.xml.i
+++ b/interface-definitions/include/bgp/bgp-neighbor-afi-ipv4-unicast.xml.i
@@ -1,4 +1,4 @@
-<!-- included start from bgp-neighbor-afi-ipv4-unicast.xml.i -->
+<!-- include start from bgp-neighbor-afi-ipv4-unicast.xml.i -->
<node name="ipv4-unicast">
<properties>
<help>IPv4 BGP neighbor parameters</help>
@@ -9,11 +9,11 @@
<help>Advertise capabilities to this neighbor (IPv4)</help>
</properties>
<children>
- #include <include/bgp-afi-capability-orf.xml.i>
+ #include <include/bgp/bgp-afi-capability-orf.xml.i>
</children>
</node>
- #include <include/bgp-afi-ipv4-prefix-list.xml.i>
- #include <include/bgp-afi-common.xml.i>
+ #include <include/bgp/bgp-afi-ipv4-prefix-list.xml.i>
+ #include <include/bgp/bgp-afi-common.xml.i>
</children>
</node>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/bgp-neighbor-afi-ipv6-unicast.xml.i b/interface-definitions/include/bgp/bgp-neighbor-afi-ipv6-unicast.xml.i
index e43c34113..4cd676cb4 100644
--- a/interface-definitions/include/bgp-neighbor-afi-ipv6-unicast.xml.i
+++ b/interface-definitions/include/bgp/bgp-neighbor-afi-ipv6-unicast.xml.i
@@ -1,4 +1,4 @@
-<!-- included start from bgp-neighbor-afi-ipv6-unicast.xml.i -->
+<!-- include start from bgp-neighbor-afi-ipv6-unicast.xml.i -->
<node name="ipv6-unicast">
<properties>
<help>IPv6 BGP neighbor parameters</help>
@@ -9,12 +9,12 @@
<help>Advertise capabilities to this neighbor (IPv6)</help>
</properties>
<children>
- #include <include/bgp-afi-capability-orf.xml.i>
+ #include <include/bgp/bgp-afi-capability-orf.xml.i>
</children>
</node>
- #include <include/bgp-afi-ipv6-nexthop-local.xml.i>
- #include <include/bgp-afi-ipv6-prefix-list.xml.i>
- #include <include/bgp-afi-common.xml.i>
+ #include <include/bgp/bgp-afi-ipv6-nexthop-local.xml.i>
+ #include <include/bgp/bgp-afi-ipv6-prefix-list.xml.i>
+ #include <include/bgp/bgp-afi-common.xml.i>
</children>
</node>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/bgp/bgp-neighbor-afi-l2vpn-evpn.xml.i b/interface-definitions/include/bgp/bgp-neighbor-afi-l2vpn-evpn.xml.i
new file mode 100644
index 000000000..0a9c599fa
--- /dev/null
+++ b/interface-definitions/include/bgp/bgp-neighbor-afi-l2vpn-evpn.xml.i
@@ -0,0 +1,16 @@
+<!-- include start from bgp-neighbor-afi-l2vpn-evpn.xml.i -->
+<node name="l2vpn-evpn">
+ <properties>
+ <help>L2VPN EVPN BGP settings</help>
+ </properties>
+ <children>
+ #include <include/bgp/bgp-afi-allowas-in.xml.i>
+ #include <include/bgp/bgp-afi-attribute-unchanged.xml.i>
+ #include <include/bgp/bgp-afi-nexthop-self.xml.i>
+ #include <include/bgp/bgp-afi-route-map.xml.i>
+ #include <include/bgp/bgp-afi-route-reflector-client.xml.i>
+ #include <include/bgp/bgp-afi-route-server-client.xml.i>
+ #include <include/bgp/bgp-afi-soft-reconfiguration.xml.i>
+ </children>
+</node>
+<!-- include end -->
diff --git a/interface-definitions/include/bgp-override-capability.xml.i b/interface-definitions/include/bgp/bgp-override-capability.xml.i
index 88c277c8b..1e51a49d5 100644
--- a/interface-definitions/include/bgp-override-capability.xml.i
+++ b/interface-definitions/include/bgp/bgp-override-capability.xml.i
@@ -1,8 +1,8 @@
-<!-- included start from bgp-override-capability.xml.i -->
+<!-- include start from bgp-override-capability.xml.i -->
<leafNode name="override-capability">
<properties>
<help>Ignore capability negotiation with specified neighbor</help>
<valueless/>
</properties>
</leafNode>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/bgp-passive.xml.i b/interface-definitions/include/bgp/bgp-passive.xml.i
index ada961866..033cf8231 100644
--- a/interface-definitions/include/bgp-passive.xml.i
+++ b/interface-definitions/include/bgp/bgp-passive.xml.i
@@ -1,8 +1,8 @@
-<!-- included start from bgp-passive.xml.i -->
+<!-- include start from bgp-passive.xml.i -->
<leafNode name="passive">
<properties>
<help>Do not initiate a session with this neighbor</help>
<valueless/>
</properties>
</leafNode>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/bgp-password.xml.i b/interface-definitions/include/bgp/bgp-password.xml.i
index 5b68a2d71..f5878cce9 100644
--- a/interface-definitions/include/bgp-password.xml.i
+++ b/interface-definitions/include/bgp/bgp-password.xml.i
@@ -1,7 +1,7 @@
-<!-- included start from bgp-password.xml.i -->
+<!-- include start from bgp-password.xml.i -->
<leafNode name="password">
<properties>
<help>BGP MD5 password</help>
</properties>
</leafNode>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/bgp-peer-group.xml.i b/interface-definitions/include/bgp/bgp-peer-group.xml.i
index 73c80e0e4..8fc50794d 100644
--- a/interface-definitions/include/bgp-peer-group.xml.i
+++ b/interface-definitions/include/bgp/bgp-peer-group.xml.i
@@ -1,11 +1,14 @@
-<!-- included start from bgp-peer-group.xml.i -->
+<!-- include start from bgp-peer-group.xml.i -->
<leafNode name="peer-group">
<properties>
<help>Peer group for this peer</help>
+ <completionHelp>
+ <script>${vyos_completion_dir}/list_bgp_peer_groups.sh</script>
+ </completionHelp>
<valueHelp>
<format>txt</format>
<description>Peer-group name</description>
</valueHelp>
</properties>
</leafNode>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/bgp-remote-as.xml.i b/interface-definitions/include/bgp/bgp-remote-as.xml.i
index de3f4d2ad..f036fe13d 100644
--- a/interface-definitions/include/bgp-remote-as.xml.i
+++ b/interface-definitions/include/bgp/bgp-remote-as.xml.i
@@ -1,4 +1,4 @@
-<!-- included start from bgp-remote-as.xml.i -->
+<!-- include start from bgp-remote-as.xml.i -->
<leafNode name="remote-as">
<properties>
<help>Neighbor BGP AS number [REQUIRED]</help>
@@ -24,4 +24,4 @@
<constraintErrorMessage>Invalid AS number</constraintErrorMessage>
</properties>
</leafNode>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/bgp-route-target.xml.i b/interface-definitions/include/bgp/bgp-route-target.xml.i
index c3df56a74..c05ac5dc2 100644
--- a/interface-definitions/include/bgp-route-target.xml.i
+++ b/interface-definitions/include/bgp/bgp-route-target.xml.i
@@ -1,4 +1,4 @@
-<!-- included start from bgp-route-target.xml.i -->
+<!-- include start from bgp-route-target.xml.i -->
<node name="route-target">
<properties>
<help>Route Target</help>
@@ -42,4 +42,4 @@
</leafNode>
</children>
</node>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/bgp-shutdown.xml.i b/interface-definitions/include/bgp/bgp-shutdown.xml.i
index fefbfcebb..f920e9579 100644
--- a/interface-definitions/include/bgp-shutdown.xml.i
+++ b/interface-definitions/include/bgp/bgp-shutdown.xml.i
@@ -1,8 +1,8 @@
-<!-- included start from bgp-shutdown.xml.i -->
+<!-- include start from bgp-shutdown.xml.i -->
<leafNode name="shutdown">
<properties>
<help>Administratively shut down this neighbor</help>
<valueless/>
</properties>
</leafNode>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/bgp-timers-holdtime.xml.i b/interface-definitions/include/bgp/bgp-timers-holdtime.xml.i
index 09924574b..9c16127b5 100644
--- a/interface-definitions/include/bgp-timers-holdtime.xml.i
+++ b/interface-definitions/include/bgp/bgp-timers-holdtime.xml.i
@@ -1,4 +1,4 @@
-<!-- included start from bgp-timers-holdtime.xml.i -->
+<!-- include start from bgp-timers-holdtime.xml.i -->
<leafNode name="holdtime">
<properties>
<help>BGP hold timer for this neighbor</help>
@@ -15,4 +15,4 @@
</constraint>
</properties>
</leafNode>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/bgp-timers-keepalive.xml.i b/interface-definitions/include/bgp/bgp-timers-keepalive.xml.i
index 7d294c9d6..8c3e66c6a 100644
--- a/interface-definitions/include/bgp-timers-keepalive.xml.i
+++ b/interface-definitions/include/bgp/bgp-timers-keepalive.xml.i
@@ -1,4 +1,4 @@
-<!-- included start from bgp-timers-keepalive.xml.i -->
+<!-- include start from bgp-timers-keepalive.xml.i -->
<leafNode name="keepalive">
<properties>
<help>BGP keepalive interval for this neighbor</help>
@@ -11,4 +11,4 @@
</constraint>
</properties>
</leafNode>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/bgp-ttl-security.xml.i b/interface-definitions/include/bgp/bgp-ttl-security.xml.i
index 3f4d1786d..1fb1c2c55 100644
--- a/interface-definitions/include/bgp-ttl-security.xml.i
+++ b/interface-definitions/include/bgp/bgp-ttl-security.xml.i
@@ -1,4 +1,4 @@
-<!-- included start from bgp-ttl-security.xml.i -->
+<!-- include start from bgp-ttl-security.xml.i -->
<node name="ttl-security">
<properties>
<help>Ttl security mechanism</help>
@@ -18,4 +18,4 @@
</leafNode>
</children>
</node>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/bgp-update-source.xml.i b/interface-definitions/include/bgp/bgp-update-source.xml.i
index 3bb79598d..f4ccc3553 100644
--- a/interface-definitions/include/bgp-update-source.xml.i
+++ b/interface-definitions/include/bgp/bgp-update-source.xml.i
@@ -1,4 +1,4 @@
-<!-- included start from bgp-update-source.xml.i -->
+<!-- include start from bgp-update-source.xml.i -->
<leafNode name="update-source">
<!-- Need to check format interfaces -->
<properties>
@@ -26,4 +26,4 @@
</constraint>
</properties>
</leafNode>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/certificate-ca.xml.i b/interface-definitions/include/certificate-ca.xml.i
index df12746aa..b97378658 100644
--- a/interface-definitions/include/certificate-ca.xml.i
+++ b/interface-definitions/include/certificate-ca.xml.i
@@ -1,4 +1,4 @@
-<!-- included start from certificate-ca.xml.i -->
+<!-- include start from certificate-ca.xml.i -->
<leafNode name="ca-cert-file">
<properties>
<help>Certificate Authority in x509 PEM format</help>
@@ -11,4 +11,4 @@
</constraint>
</properties>
</leafNode>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/certificate-key.xml.i b/interface-definitions/include/certificate-key.xml.i
index 924823c76..1db9dd069 100644
--- a/interface-definitions/include/certificate-key.xml.i
+++ b/interface-definitions/include/certificate-key.xml.i
@@ -1,4 +1,4 @@
-<!-- included start from certificate-key.xml.i -->
+<!-- include start from certificate-key.xml.i -->
<leafNode name="key-file">
<properties>
<help>Certificate private key in x509 PEM format</help>
@@ -11,4 +11,4 @@
</constraint>
</properties>
</leafNode>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/certificate.xml.i b/interface-definitions/include/certificate.xml.i
index 724a8a27f..fb5be45cc 100644
--- a/interface-definitions/include/certificate.xml.i
+++ b/interface-definitions/include/certificate.xml.i
@@ -1,4 +1,4 @@
-<!-- included start from certificate.xml.i -->
+<!-- include start from certificate.xml.i -->
<leafNode name="cert-file">
<properties>
<help>Certificate public key in x509 PEM format</help>
@@ -11,4 +11,4 @@
</constraint>
</properties>
</leafNode>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/dhcp-options.xml.i b/interface-definitions/include/dhcp-options.xml.i
index 774714251..8972b53e9 100644
--- a/interface-definitions/include/dhcp-options.xml.i
+++ b/interface-definitions/include/dhcp-options.xml.i
@@ -1,4 +1,4 @@
-<!-- included start from dhcp-options.xml.i -->
+<!-- include start from dhcp-options.xml.i -->
<node name="dhcp-options">
<properties>
<help>DHCP client settings/options</help>
@@ -39,4 +39,4 @@
</leafNode>
</children>
</node>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/dhcp-server-domain-search.xml.i b/interface-definitions/include/dhcp-server-domain-search.xml.i
index 9b3568b72..4fc55097b 100644
--- a/interface-definitions/include/dhcp-server-domain-search.xml.i
+++ b/interface-definitions/include/dhcp-server-domain-search.xml.i
@@ -1,4 +1,4 @@
-<!-- included start from dhcp-server-domain-search.xml.i -->
+<!-- include start from dhcp-server-domain-search.xml.i -->
<leafNode name="domain-search">
<properties>
<help>Client Domain Name search list</help>
@@ -9,4 +9,4 @@
<multi/>
</properties>
</leafNode>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/dhcpv6-options.xml.i b/interface-definitions/include/dhcpv6-options.xml.i
index 33ba39592..a569659a4 100644
--- a/interface-definitions/include/dhcpv6-options.xml.i
+++ b/interface-definitions/include/dhcpv6-options.xml.i
@@ -1,4 +1,4 @@
-<!-- included start from dhcpv6-options.xml.i -->
+<!-- include start from dhcpv6-options.xml.i -->
<node name="dhcpv6-options">
<properties>
<help>DHCPv6 client settings/options</help>
@@ -97,4 +97,4 @@
</leafNode>
</children>
</node>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/generic-disable-node.xml.i b/interface-definitions/include/generic-disable-node.xml.i
index 520383afb..bb4fa5c4b 100644
--- a/interface-definitions/include/generic-disable-node.xml.i
+++ b/interface-definitions/include/generic-disable-node.xml.i
@@ -1,8 +1,8 @@
-<!-- included start from generic-disable-node.xml.i -->
+<!-- include start from generic-disable-node.xml.i -->
<leafNode name="disable">
<properties>
<help>Temporary disable</help>
<valueless/>
</properties>
</leafNode>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/interface-arp-cache-timeout.xml.i b/interface-definitions/include/interface-arp-cache-timeout.xml.i
index 6dfebfee4..09fd70afc 100644
--- a/interface-definitions/include/interface-arp-cache-timeout.xml.i
+++ b/interface-definitions/include/interface-arp-cache-timeout.xml.i
@@ -1,4 +1,4 @@
-<!-- included start from interface-arp-cache-timeout.xml.i -->
+<!-- include start from interface-arp-cache-timeout.xml.i -->
<leafNode name="arp-cache-timeout">
<properties>
<help>ARP cache entry timeout in seconds</help>
@@ -13,4 +13,4 @@
</properties>
<defaultValue>30</defaultValue>
</leafNode>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/interface-description.xml.i b/interface-definitions/include/interface-description.xml.i
index daf09d8bc..b16c562bb 100644
--- a/interface-definitions/include/interface-description.xml.i
+++ b/interface-definitions/include/interface-description.xml.i
@@ -1,4 +1,4 @@
-<!-- included start from interface-description.xml.i -->
+<!-- include start from interface-description.xml.i -->
<leafNode name="description">
<properties>
<help>Interface specific description</help>
@@ -8,4 +8,4 @@
<constraintErrorMessage>Description too long (limit 256 characters)</constraintErrorMessage>
</properties>
</leafNode>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/interface-dial-on-demand.xml.i b/interface-definitions/include/interface-dial-on-demand.xml.i
index 8fba8099d..5067e45df 100644
--- a/interface-definitions/include/interface-dial-on-demand.xml.i
+++ b/interface-definitions/include/interface-dial-on-demand.xml.i
@@ -1,8 +1,8 @@
-<!-- included start from interface-dial-on-demand.xml.i -->
+<!-- include start from interface-dial-on-demand.xml.i -->
<leafNode name="connect-on-demand">
<properties>
<help>Establishment connection automatically when traffic is sent</help>
<valueless/>
</properties>
</leafNode>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/interface-disable-arp-filter.xml.i b/interface-definitions/include/interface-disable-arp-filter.xml.i
index 4de3ca893..5f118d49c 100644
--- a/interface-definitions/include/interface-disable-arp-filter.xml.i
+++ b/interface-definitions/include/interface-disable-arp-filter.xml.i
@@ -1,8 +1,8 @@
-<!-- included start from interface-disable-arp-filter.xml.i -->
+<!-- include start from interface-disable-arp-filter.xml.i -->
<leafNode name="disable-arp-filter">
<properties>
<help>Disable ARP filter on this interface</help>
<valueless/>
</properties>
</leafNode>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/interface-disable-forwarding.xml.i b/interface-definitions/include/interface-disable-forwarding.xml.i
index 7cbb726ec..fdce8f846 100644
--- a/interface-definitions/include/interface-disable-forwarding.xml.i
+++ b/interface-definitions/include/interface-disable-forwarding.xml.i
@@ -1,8 +1,8 @@
-<!-- included start from interface-disable-forwarding.xml.i -->
+<!-- include start from interface-disable-forwarding.xml.i -->
<leafNode name="disable-forwarding">
<properties>
<help>Disable IPv4 forwarding on this interface</help>
<valueless/>
</properties>
</leafNode>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/interface-disable-link-detect.xml.i b/interface-definitions/include/interface-disable-link-detect.xml.i
index 4298b4b5d..60c5f635b 100644
--- a/interface-definitions/include/interface-disable-link-detect.xml.i
+++ b/interface-definitions/include/interface-disable-link-detect.xml.i
@@ -1,8 +1,8 @@
-<!-- included start from interface-disable-link-detect.xml.i -->
+<!-- include start from interface-disable-link-detect.xml.i -->
<leafNode name="disable-link-detect">
<properties>
<help>Ignore link state changes</help>
<valueless/>
</properties>
</leafNode>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/interface-disable.xml.i b/interface-definitions/include/interface-disable.xml.i
index 5d73d54ba..5a058df01 100644
--- a/interface-definitions/include/interface-disable.xml.i
+++ b/interface-definitions/include/interface-disable.xml.i
@@ -1,8 +1,8 @@
-<!-- included start from interface-disable.xml.i -->
+<!-- include start from interface-disable.xml.i -->
<leafNode name="disable">
<properties>
<help>Administratively disable interface</help>
<valueless/>
</properties>
</leafNode>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/interface-eapol.xml.i b/interface-definitions/include/interface-eapol.xml.i
index 8b33b4acf..fafa75f1a 100644
--- a/interface-definitions/include/interface-eapol.xml.i
+++ b/interface-definitions/include/interface-eapol.xml.i
@@ -1,4 +1,4 @@
-<!-- included start from interface-eapol.xml.i -->
+<!-- include start from interface-eapol.xml.i -->
<node name="eapol">
<properties>
<help>Extensible Authentication Protocol over Local Area Network</help>
@@ -9,4 +9,4 @@
#include <include/certificate-key.xml.i>
</children>
</node>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/interface-enable-arp-accept.xml.i b/interface-definitions/include/interface-enable-arp-accept.xml.i
index 688b3572e..bec08a708 100644
--- a/interface-definitions/include/interface-enable-arp-accept.xml.i
+++ b/interface-definitions/include/interface-enable-arp-accept.xml.i
@@ -1,8 +1,8 @@
-<!-- included start from interface-enable-arp-accept.xml.i -->
+<!-- include start from interface-enable-arp-accept.xml.i -->
<leafNode name="enable-arp-accept">
<properties>
<help>Enable ARP accept on this interface</help>
<valueless/>
</properties>
</leafNode>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/interface-enable-arp-announce.xml.i b/interface-definitions/include/interface-enable-arp-announce.xml.i
index c84bb7ea9..ef9e5db1e 100644
--- a/interface-definitions/include/interface-enable-arp-announce.xml.i
+++ b/interface-definitions/include/interface-enable-arp-announce.xml.i
@@ -1,8 +1,8 @@
-<!-- included start from interface-enable-arp-announce.xml.i -->
+<!-- include start from interface-enable-arp-announce.xml.i -->
<leafNode name="enable-arp-announce">
<properties>
<help>Enable ARP announce on this interface</help>
<valueless/>
</properties>
</leafNode>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/interface-enable-arp-ignore.xml.i b/interface-definitions/include/interface-enable-arp-ignore.xml.i
index 741771a89..0a33a2c9a 100644
--- a/interface-definitions/include/interface-enable-arp-ignore.xml.i
+++ b/interface-definitions/include/interface-enable-arp-ignore.xml.i
@@ -1,8 +1,8 @@
-<!-- included start from interface-enable-arp-ignore.xml.i -->
+<!-- include start from interface-enable-arp-ignore.xml.i -->
<leafNode name="enable-arp-ignore">
<properties>
<help>Enable ARP ignore on this interface</help>
<valueless/>
</properties>
</leafNode>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/interface-enable-proxy-arp.xml.i b/interface-definitions/include/interface-enable-proxy-arp.xml.i
index 08351e673..a0993539f 100644
--- a/interface-definitions/include/interface-enable-proxy-arp.xml.i
+++ b/interface-definitions/include/interface-enable-proxy-arp.xml.i
@@ -1,8 +1,8 @@
-<!-- included start from interface-enable-proxy-arp.xml.i -->
+<!-- include start from interface-enable-proxy-arp.xml.i -->
<leafNode name="enable-proxy-arp">
<properties>
<help>Enable proxy-arp on this interface</help>
<valueless/>
</properties>
</leafNode>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/interface-hw-id.xml.i b/interface-definitions/include/interface-hw-id.xml.i
index 55ef55add..78e8613d8 100644
--- a/interface-definitions/include/interface-hw-id.xml.i
+++ b/interface-definitions/include/interface-hw-id.xml.i
@@ -1,4 +1,4 @@
-<!-- included start from interface-hw-id.xml.i -->
+<!-- include start from interface-hw-id.xml.i -->
<leafNode name="hw-id">
<properties>
<help>Associate Ethernet Interface with given Media Access Control (MAC) address</help>
@@ -11,4 +11,4 @@
</constraint>
</properties>
</leafNode>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/interface-ipv4-options.xml.i b/interface-definitions/include/interface-ipv4-options.xml.i
index c63f89890..64672f164 100644
--- a/interface-definitions/include/interface-ipv4-options.xml.i
+++ b/interface-definitions/include/interface-ipv4-options.xml.i
@@ -1,4 +1,4 @@
-<!-- included start from interface-ipv4-options.xml.i -->
+<!-- include start from interface-ipv4-options.xml.i -->
<node name="ip">
<properties>
<help>IPv4 routing parameters</help>
@@ -15,4 +15,4 @@
#include <include/interface-source-validation.xml.i>
</children>
</node>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/interface-ipv6-options.xml.i b/interface-definitions/include/interface-ipv6-options.xml.i
index a94c6572b..a15aea9c1 100644
--- a/interface-definitions/include/interface-ipv6-options.xml.i
+++ b/interface-definitions/include/interface-ipv6-options.xml.i
@@ -1,4 +1,4 @@
-<!-- included start from interface-ipv6-options.xml.i -->
+<!-- include start from interface-ipv6-options.xml.i -->
<node name="ipv6">
<properties>
<help>IPv6 routing parameters</help>
@@ -9,4 +9,4 @@
#include <include/ipv6-dup-addr-detect-transmits.xml.i>
</children>
</node>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/interface-mac.xml.i b/interface-definitions/include/interface-mac.xml.i
index 87dc5fb60..160b42b2e 100644
--- a/interface-definitions/include/interface-mac.xml.i
+++ b/interface-definitions/include/interface-mac.xml.i
@@ -1,4 +1,4 @@
-<!-- included start from mac.xml.i -->
+<!-- include start from mac.xml.i -->
<leafNode name="mac">
<properties>
<help>Media Access Control (MAC) address</help>
@@ -11,4 +11,4 @@
</constraint>
</properties>
</leafNode>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/interface-mirror.xml.i b/interface-definitions/include/interface-mirror.xml.i
index d34132a9c..445e214fe 100644
--- a/interface-definitions/include/interface-mirror.xml.i
+++ b/interface-definitions/include/interface-mirror.xml.i
@@ -1,4 +1,4 @@
-<!-- included start from interface-mirror.xml.i -->
+<!-- include start from interface-mirror.xml.i -->
<node name="mirror">
<properties>
<help>Incoming/outgoing packet mirroring destination</help>
@@ -22,4 +22,4 @@
</leafNode>
</children>
</node>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/interface-mtu-1200-16000.xml.i b/interface-definitions/include/interface-mtu-1200-16000.xml.i
index 04b5ec8ac..0187c5991 100644
--- a/interface-definitions/include/interface-mtu-1200-16000.xml.i
+++ b/interface-definitions/include/interface-mtu-1200-16000.xml.i
@@ -1,4 +1,4 @@
-<!-- included start from interface-mtu-1200-16000.xml.i -->
+<!-- include start from interface-mtu-1200-16000.xml.i -->
<leafNode name="mtu">
<properties>
<help>Maximum Transmission Unit (MTU)</help>
@@ -13,4 +13,4 @@
</properties>
<defaultValue>1500</defaultValue>
</leafNode>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/interface-mtu-1450-16000.xml.i b/interface-definitions/include/interface-mtu-1450-16000.xml.i
index 41dd5fb00..84268586e 100644
--- a/interface-definitions/include/interface-mtu-1450-16000.xml.i
+++ b/interface-definitions/include/interface-mtu-1450-16000.xml.i
@@ -1,4 +1,4 @@
-<!-- included start from interface-mtu-1450-16000.xml.i -->
+<!-- include start from interface-mtu-1450-16000.xml.i -->
<leafNode name="mtu">
<properties>
<help>Maximum Transmission Unit (MTU)</help>
@@ -13,4 +13,4 @@
</properties>
<defaultValue>1500</defaultValue>
</leafNode>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/interface-mtu-64-8024.xml.i b/interface-definitions/include/interface-mtu-64-8024.xml.i
index 0a455bc64..6a7ab8a80 100644
--- a/interface-definitions/include/interface-mtu-64-8024.xml.i
+++ b/interface-definitions/include/interface-mtu-64-8024.xml.i
@@ -1,4 +1,4 @@
-<!-- included start from interface-mtu-68-8024.xml.i -->
+<!-- include start from interface-mtu-68-8024.xml.i -->
<leafNode name="mtu">
<properties>
<help>Maximum Transmission Unit (MTU)</help>
@@ -13,4 +13,4 @@
</properties>
<defaultValue>1500</defaultValue>
</leafNode>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/interface-mtu-68-1500.xml.i b/interface-definitions/include/interface-mtu-68-1500.xml.i
index 78c2c6920..ea333edcc 100644
--- a/interface-definitions/include/interface-mtu-68-1500.xml.i
+++ b/interface-definitions/include/interface-mtu-68-1500.xml.i
@@ -1,4 +1,4 @@
-<!-- included start from interface-mtu-68-1500.xml.i -->
+<!-- include start from interface-mtu-68-1500.xml.i -->
<leafNode name="mtu">
<properties>
<help>Maximum Transmission Unit (MTU)</help>
@@ -13,4 +13,4 @@
</properties>
<defaultValue>1500</defaultValue>
</leafNode>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/interface-mtu-68-16000.xml.i b/interface-definitions/include/interface-mtu-68-16000.xml.i
index 9f18464bf..a9107c027 100644
--- a/interface-definitions/include/interface-mtu-68-16000.xml.i
+++ b/interface-definitions/include/interface-mtu-68-16000.xml.i
@@ -1,4 +1,4 @@
-<!-- included start from interface-mtu-68-16000.xml.i -->
+<!-- include start from interface-mtu-68-16000.xml.i -->
<leafNode name="mtu">
<properties>
<help>Maximum Transmission Unit (MTU)</help>
@@ -13,4 +13,4 @@
</properties>
<defaultValue>1500</defaultValue>
</leafNode>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/interface-parameters-dont-fragment.xml.i b/interface-definitions/include/interface-parameters-dont-fragment.xml.i
index a16cc5dee..d6c276d67 100644
--- a/interface-definitions/include/interface-parameters-dont-fragment.xml.i
+++ b/interface-definitions/include/interface-parameters-dont-fragment.xml.i
@@ -1,8 +1,8 @@
-<!-- included start from interface-parameters-df.xml.i -->
+<!-- include start from interface-parameters-df.xml.i -->
<leafNode name="dont-fragment">
<properties>
<help>Specifies the usage of the dont fragment (DF) bit</help>
<valueless/>
</properties>
</leafNode>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/interface-parameters-flowlabel.xml.i b/interface-definitions/include/interface-parameters-flowlabel.xml.i
index 0723c4b47..dc651bc9c 100644
--- a/interface-definitions/include/interface-parameters-flowlabel.xml.i
+++ b/interface-definitions/include/interface-parameters-flowlabel.xml.i
@@ -1,4 +1,4 @@
-<!-- included start from interface-parameters-flowlabel.xml.i -->
+<!-- include start from interface-parameters-flowlabel.xml.i -->
<leafNode name="flowlabel">
<properties>
<help>Specifies the flow label to use in outgoing packets</help>
@@ -12,4 +12,4 @@
<constraintErrorMessage>Must be 'inherit' or a number</constraintErrorMessage>
</properties>
</leafNode>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/interface-parameters-key.xml.i b/interface-definitions/include/interface-parameters-key.xml.i
index e918ff0e8..1891b44b0 100644
--- a/interface-definitions/include/interface-parameters-key.xml.i
+++ b/interface-definitions/include/interface-parameters-key.xml.i
@@ -1,4 +1,4 @@
-<!-- included start from interface-parameters-key.xml.i -->
+<!-- include start from interface-parameters-key.xml.i -->
<leafNode name="key">
<properties>
<help>Tunnel key</help>
@@ -12,4 +12,4 @@
<constraintErrorMessage>key must be between 0-4294967295</constraintErrorMessage>
</properties>
</leafNode>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/interface-parameters-tos.xml.i b/interface-definitions/include/interface-parameters-tos.xml.i
index ebb537bed..06ec2febb 100644
--- a/interface-definitions/include/interface-parameters-tos.xml.i
+++ b/interface-definitions/include/interface-parameters-tos.xml.i
@@ -1,4 +1,4 @@
-<!-- included start from tunnel-parameters-tos.xml.i -->
+<!-- include start from tunnel-parameters-tos.xml.i -->
<leafNode name="tos">
<properties>
<help>Specifies TOS value to use in outgoing packets</help>
@@ -13,4 +13,4 @@
</properties>
<defaultValue>inherit</defaultValue>
</leafNode>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/interface-parameters-ttl.xml.i b/interface-definitions/include/interface-parameters-ttl.xml.i
index 83563ecb1..a2e13d8d1 100644
--- a/interface-definitions/include/interface-parameters-ttl.xml.i
+++ b/interface-definitions/include/interface-parameters-ttl.xml.i
@@ -1,4 +1,4 @@
-<!-- included start from interface-parameters-ttl.xml.i -->
+<!-- include start from interface-parameters-ttl.xml.i -->
<leafNode name="ttl">
<properties>
<help>Specifies TTL value to use in outgoing packets</help>
@@ -17,4 +17,4 @@
</properties>
<defaultValue>0</defaultValue>
</leafNode>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/interface-proxy-arp-pvlan.xml.i b/interface-definitions/include/interface-proxy-arp-pvlan.xml.i
index 02b96e353..484f8fd69 100644
--- a/interface-definitions/include/interface-proxy-arp-pvlan.xml.i
+++ b/interface-definitions/include/interface-proxy-arp-pvlan.xml.i
@@ -1,8 +1,8 @@
-<!-- included start from interface-proxy-arp-pvlan.xml.i -->
+<!-- include start from interface-proxy-arp-pvlan.xml.i -->
<leafNode name="proxy-arp-pvlan">
<properties>
<help>Enable private VLAN proxy ARP on this interface</help>
<valueless/>
</properties>
</leafNode>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/interface-source-validation.xml.i b/interface-definitions/include/interface-source-validation.xml.i
index 32cec464e..be58bce87 100644
--- a/interface-definitions/include/interface-source-validation.xml.i
+++ b/interface-definitions/include/interface-source-validation.xml.i
@@ -1,4 +1,4 @@
-<!-- included start from interface-source-validation.xml.i -->
+<!-- include start from interface-source-validation.xml.i -->
<leafNode name="source-validation">
<properties>
<help>Source validation by reversed path (RFC3704)</help>
@@ -22,4 +22,4 @@
</constraint>
</properties>
</leafNode>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/interface-vrf.xml.i b/interface-definitions/include/interface-vrf.xml.i
index e3d6b53e0..81ca0972b 100644
--- a/interface-definitions/include/interface-vrf.xml.i
+++ b/interface-definitions/include/interface-vrf.xml.i
@@ -1,4 +1,4 @@
-<!-- included start from interface-vrf.xml.i -->
+<!-- include start from interface-vrf.xml.i -->
<leafNode name="vrf">
<properties>
<help>VRF instance name</help>
@@ -11,4 +11,4 @@
</completionHelp>
</properties>
</leafNode>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/interface-xdp.xml.i b/interface-definitions/include/interface-xdp.xml.i
index d224c177f..21fcf131d 100644
--- a/interface-definitions/include/interface-xdp.xml.i
+++ b/interface-definitions/include/interface-xdp.xml.i
@@ -1,8 +1,8 @@
-<!-- included start from interface-vrf.xml.i -->
+<!-- include start from interface-vrf.xml.i -->
<leafNode name="xdp">
<properties>
<help>Enable eXpress Data Path</help>
<valueless/>
</properties>
</leafNode>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/ipv6-address-autoconf.xml.i b/interface-definitions/include/ipv6-address-autoconf.xml.i
index 580f060d7..a84293067 100644
--- a/interface-definitions/include/ipv6-address-autoconf.xml.i
+++ b/interface-definitions/include/ipv6-address-autoconf.xml.i
@@ -1,8 +1,8 @@
-<!-- included start from ipv6-address-autoconf.xml.i -->
+<!-- include start from ipv6-address-autoconf.xml.i -->
<leafNode name="autoconf">
<properties>
<help>Enable acquisition of IPv6 address using stateless autoconfig (SLAAC)</help>
<valueless/>
</properties>
</leafNode>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/ipv6-address-eui64.xml.i b/interface-definitions/include/ipv6-address-eui64.xml.i
index 093a1dc79..e06e88d52 100644
--- a/interface-definitions/include/ipv6-address-eui64.xml.i
+++ b/interface-definitions/include/ipv6-address-eui64.xml.i
@@ -1,4 +1,4 @@
-<!-- included start from ipv6-address-eui64.xml.i -->
+<!-- include start from ipv6-address-eui64.xml.i -->
<leafNode name="eui64">
<properties>
<help>Prefix for IPv6 address with MAC-based EUI-64</help>
@@ -12,4 +12,4 @@
<multi/>
</properties>
</leafNode>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/ipv6-address-no-default-link-local.xml.i b/interface-definitions/include/ipv6-address-no-default-link-local.xml.i
index 1c9e832dc..e803a4d60 100644
--- a/interface-definitions/include/ipv6-address-no-default-link-local.xml.i
+++ b/interface-definitions/include/ipv6-address-no-default-link-local.xml.i
@@ -1,8 +1,8 @@
-<!-- included start from ipv6-address-no-default-link-local.xml.i -->
+<!-- include start from ipv6-address-no-default-link-local.xml.i -->
<leafNode name="no-default-link-local">
<properties>
<help>Remove the default link-local address from the interface</help>
<valueless/>
</properties>
</leafNode>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/ipv6-address.xml.i b/interface-definitions/include/ipv6-address.xml.i
index 276456248..d934f9021 100644
--- a/interface-definitions/include/ipv6-address.xml.i
+++ b/interface-definitions/include/ipv6-address.xml.i
@@ -1,4 +1,4 @@
-<!-- included start from ipv6-address.xml.i -->
+<!-- include start from ipv6-address.xml.i -->
<node name="address">
<properties>
<help>IPv6 address configuration modes</help>
@@ -9,4 +9,4 @@
#include <include/ipv6-address-no-default-link-local.xml.i>
</children>
</node>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/ipv6-disable-forwarding.xml.i b/interface-definitions/include/ipv6-disable-forwarding.xml.i
index 14d9eada9..5f368256b 100644
--- a/interface-definitions/include/ipv6-disable-forwarding.xml.i
+++ b/interface-definitions/include/ipv6-disable-forwarding.xml.i
@@ -1,8 +1,8 @@
-<!-- included start from ipv6-disable-forwarding.xml.i -->
+<!-- include start from ipv6-disable-forwarding.xml.i -->
<leafNode name="disable-forwarding">
<properties>
<help>Disable IPv6 forwarding on this interface</help>
<valueless/>
</properties>
</leafNode>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/ipv6-dup-addr-detect-transmits.xml.i b/interface-definitions/include/ipv6-dup-addr-detect-transmits.xml.i
index 61e6669c4..c6265d71a 100644
--- a/interface-definitions/include/ipv6-dup-addr-detect-transmits.xml.i
+++ b/interface-definitions/include/ipv6-dup-addr-detect-transmits.xml.i
@@ -1,4 +1,4 @@
-<!-- included start from ipv6-dup-addr-detect-transmits.xml.i -->
+<!-- include start from ipv6-dup-addr-detect-transmits.xml.i -->
<leafNode name="dup-addr-detect-transmits">
<properties>
<help>Number of NS messages to send while performing DAD (default: 1)</help>
@@ -15,4 +15,4 @@
</constraint>
</properties>
</leafNode>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/isis-redistribute-ipv4.xml.i b/interface-definitions/include/isis-redistribute-ipv4.xml.i
index 97ab64250..774086a81 100644
--- a/interface-definitions/include/isis-redistribute-ipv4.xml.i
+++ b/interface-definitions/include/isis-redistribute-ipv4.xml.i
@@ -1,4 +1,4 @@
-<!-- included start from isis-redistribute-ipv4.xml.i -->
+<!-- include start from isis-redistribute-ipv4.xml.i -->
<node name="level-1">
<properties>
<help>Redistribute into level-1</help>
@@ -53,4 +53,4 @@
</leafNode>
</children>
</node>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/listen-address-ipv4.xml.i b/interface-definitions/include/listen-address-ipv4.xml.i
index 530dbf619..ee52cebe8 100644
--- a/interface-definitions/include/listen-address-ipv4.xml.i
+++ b/interface-definitions/include/listen-address-ipv4.xml.i
@@ -1,4 +1,4 @@
-<!-- included start from listen-address-ipv4.xml.i -->
+<!-- include start from listen-address-ipv4.xml.i -->
<leafNode name="listen-address">
<properties>
<help>Local IPv4 addresses for service to listen on</help>
@@ -15,4 +15,4 @@
</constraint>
</properties>
</leafNode>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/listen-address.xml.i b/interface-definitions/include/listen-address.xml.i
index 5bfb7eb38..9b86851c7 100644
--- a/interface-definitions/include/listen-address.xml.i
+++ b/interface-definitions/include/listen-address.xml.i
@@ -1,4 +1,4 @@
-<!-- included start from listen-address.xml.i -->
+<!-- include start from listen-address.xml.i -->
<leafNode name="listen-address">
<properties>
<help>Local IP addresses for service to listen on</help>
@@ -20,4 +20,4 @@
</constraint>
</properties>
</leafNode>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/nat-address.xml.i b/interface-definitions/include/nat-address.xml.i
index 846ef3dec..a6460ac0f 100644
--- a/interface-definitions/include/nat-address.xml.i
+++ b/interface-definitions/include/nat-address.xml.i
@@ -1,4 +1,4 @@
-<!-- included start from nat-address.xml.i -->
+<!-- include start from nat-address.xml.i -->
<leafNode name="address">
<properties>
<help>IP address, subnet, or range</help>
@@ -36,4 +36,4 @@
</constraint>
</properties>
</leafNode>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/nat-interface.xml.i b/interface-definitions/include/nat-interface.xml.i
index e42003530..68969472f 100644
--- a/interface-definitions/include/nat-interface.xml.i
+++ b/interface-definitions/include/nat-interface.xml.i
@@ -1,4 +1,4 @@
-<!-- included start from nat-interface.xml.i -->
+<!-- include start from nat-interface.xml.i -->
<leafNode name="outbound-interface">
<properties>
<help>Outbound interface of NAT traffic</help>
@@ -8,4 +8,4 @@
</completionHelp>
</properties>
</leafNode>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/nat-port.xml.i b/interface-definitions/include/nat-port.xml.i
index 6465c00e9..ebba43712 100644
--- a/interface-definitions/include/nat-port.xml.i
+++ b/interface-definitions/include/nat-port.xml.i
@@ -1,4 +1,4 @@
-<!-- included start from nat-port.xml.i -->
+<!-- include start from nat-port.xml.i -->
<leafNode name="port">
<properties>
<help>Port number</help>
@@ -16,4 +16,4 @@
</valueHelp>
</properties>
</leafNode>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/nat-rule.xml.i b/interface-definitions/include/nat-rule.xml.i
index 7ef90f07e..579d19bdd 100644
--- a/interface-definitions/include/nat-rule.xml.i
+++ b/interface-definitions/include/nat-rule.xml.i
@@ -1,4 +1,4 @@
-<!-- included start from nat-rule.xml.i -->
+<!-- include start from nat-rule.xml.i -->
<tagNode name="rule">
<properties>
<help>Rule number for NAT</help>
@@ -298,4 +298,4 @@
</node>
</children>
</tagNode>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/nat-translation-port.xml.i b/interface-definitions/include/nat-translation-port.xml.i
index a3e05316f..6e507353c 100644
--- a/interface-definitions/include/nat-translation-port.xml.i
+++ b/interface-definitions/include/nat-translation-port.xml.i
@@ -1,4 +1,4 @@
-<!-- included start from nat-translation-port.xml.i -->
+<!-- include start from nat-translation-port.xml.i -->
<leafNode name="port">
<properties>
<help>Port number</help>
@@ -12,4 +12,4 @@
</valueHelp>
</properties>
</leafNode>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/ospf-authentication.xml.i b/interface-definitions/include/ospf/ospf-authentication.xml.i
index efb29c1f0..322c002e4 100644
--- a/interface-definitions/include/ospf-authentication.xml.i
+++ b/interface-definitions/include/ospf/ospf-authentication.xml.i
@@ -1,4 +1,4 @@
-<!-- included start from ospf-authentication.xml.i -->
+<!-- include start from ospf/ospf-authentication.xml.i -->
<node name="authentication">
<properties>
<help>Authentication</help>
@@ -53,4 +53,4 @@
</leafNode>
</children>
</node>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/ospf/ospf-common-config.xml.i b/interface-definitions/include/ospf/ospf-common-config.xml.i
new file mode 100644
index 000000000..7316af670
--- /dev/null
+++ b/interface-definitions/include/ospf/ospf-common-config.xml.i
@@ -0,0 +1,761 @@
+<!-- include start from ospf/ospf-common-config.xml.i -->
+<tagNode name="access-list">
+ <properties>
+ <help>Access list to filter networks in routing updates</help>
+ <completionHelp>
+ <path>policy access-list</path>
+ </completionHelp>
+ <valueHelp>
+ <format>u32</format>
+ <description>Access-list number</description>
+ </valueHelp>
+ <constraint>
+ <validator name="numeric" argument="--range 0-4294967295"/>
+ </constraint>
+ </properties>
+ <children>
+ <leafNode name="export">
+ <properties>
+ <help>Filter for outgoing routing update [REQUIRED]</help>
+ <completionHelp>
+ <list>bgp connected kernel rip static</list>
+ </completionHelp>
+ <valueHelp>
+ <format>bgp</format>
+ <description>Filter BGP routes</description>
+ </valueHelp>
+ <valueHelp>
+ <format>connected</format>
+ <description>Filter connected routes</description>
+ </valueHelp>
+ <valueHelp>
+ <format>isis</format>
+ <description>Filter IS-IS routes</description>
+ </valueHelp>
+ <valueHelp>
+ <format>kernel</format>
+ <description>Filter Kernel routes</description>
+ </valueHelp>
+ <valueHelp>
+ <format>rip</format>
+ <description>Filter RIP routes</description>
+ </valueHelp>
+ <valueHelp>
+ <format>static</format>
+ <description>Filter static routes</description>
+ </valueHelp>
+ <constraint>
+ <regex>^(bgp|connected|isis|kernel|rip|static)$</regex>
+ </constraint>
+ <constraintErrorMessage>Must be bgp, connected, kernel, rip, or static</constraintErrorMessage>
+ <multi/>
+ </properties>
+ </leafNode>
+ </children>
+</tagNode>
+<tagNode name="area">
+ <properties>
+ <help>OSPF Area</help>
+ <valueHelp>
+ <format>u32</format>
+ <description>OSPF area in decimal notation</description>
+ </valueHelp>
+ <valueHelp>
+ <format>ipv4</format>
+ <description>OSPF area in dotted decimal notation</description>
+ </valueHelp>
+ <constraint>
+ <validator name="numeric" argument="--range 0-4294967295"/>
+ <validator name="ip-address"/>
+ </constraint>
+ </properties>
+ <children>
+ <node name="area-type">
+ <properties>
+ <help>Area type</help>
+ </properties>
+ <children>
+ <leafNode name="normal">
+ <properties>
+ <help>Normal OSPF area</help>
+ <valueless/>
+ </properties>
+ </leafNode>
+ <node name="nssa">
+ <properties>
+ <help>Nssa OSPF area</help>
+ </properties>
+ <children>
+ <leafNode name="default-cost">
+ <properties>
+ <help>Summary-default cost of nssa area</help>
+ <valueHelp>
+ <format>u32:0-16777215</format>
+ <description>Summary default cost</description>
+ </valueHelp>
+ <constraint>
+ <validator name="numeric" argument="--range 0-16777215"/>
+ </constraint>
+ </properties>
+ </leafNode>
+ <leafNode name="no-summary">
+ <properties>
+ <help>Do not inject inter-area routes into stub</help>
+ <valueless/>
+ </properties>
+ </leafNode>
+ <leafNode name="translate">
+ <properties>
+ <help>Configure NSSA-ABR (default: candidate)</help>
+ <completionHelp>
+ <list>always candidate never</list>
+ </completionHelp>
+ <valueHelp>
+ <format>always</format>
+ <description>NSSA-ABR to always translate</description>
+ </valueHelp>
+ <valueHelp>
+ <format>candidate</format>
+ <description>NSSA-ABR for translate election (default)</description>
+ </valueHelp>
+ <valueHelp>
+ <format>never</format>
+ <description>NSSA-ABR to never translate</description>
+ </valueHelp>
+ <constraint>
+ <regex>^(always|candidate|never)$</regex>
+ </constraint>
+ </properties>
+ <defaultValue>candidate</defaultValue>
+ </leafNode>
+ </children>
+ </node>
+ <node name="stub">
+ <properties>
+ <help>Stub OSPF area</help>
+ </properties>
+ <children>
+ <leafNode name="default-cost">
+ <properties>
+ <help>Summary-default cost of nssa area</help>
+ <valueHelp>
+ <format>u32:0-16777215</format>
+ <description>Summary default cost</description>
+ </valueHelp>
+ <constraint>
+ <validator name="numeric" argument="--range 0-16777215"/>
+ </constraint>
+ </properties>
+ </leafNode>
+ <leafNode name="no-summary">
+ <properties>
+ <help>Do not inject inter-area routes into stub</help>
+ <valueless/>
+ </properties>
+ </leafNode>
+ </children>
+ </node>
+ </children>
+ </node>
+ <leafNode name="authentication">
+ <properties>
+ <help>OSPF area authentication type</help>
+ <completionHelp>
+ <list>plaintext-password md5</list>
+ </completionHelp>
+ <valueHelp>
+ <format>plaintext-password</format>
+ <description>Use plain-text authentication</description>
+ </valueHelp>
+ <valueHelp>
+ <format>md5</format>
+ <description>Use md5 authentication</description>
+ </valueHelp>
+ <constraint>
+ <regex>^(plaintext-password|md5)$</regex>
+ </constraint>
+ </properties>
+ </leafNode>
+ <leafNode name="network">
+ <properties>
+ <help>OSPF network [REQUIRED]</help>
+ <valueHelp>
+ <format>ipv4net</format>
+ <description>OSPF network [REQUIRED]</description>
+ </valueHelp>
+ <constraint>
+ <validator name="ipv4-prefix"/>
+ </constraint>
+ <multi/>
+ </properties>
+ </leafNode>
+ <tagNode name="range">
+ <properties>
+ <help>Summarize routes matching prefix (border routers only)</help>
+ <valueHelp>
+ <format>ipv4net</format>
+ <description>Area range prefix</description>
+ </valueHelp>
+ <constraint>
+ <validator name="ipv4-prefix"/>
+ </constraint>
+ </properties>
+ <children>
+ <leafNode name="cost">
+ <properties>
+ <help>Metric for this range</help>
+ <valueHelp>
+ <format>u32:0-16777215</format>
+ <description>Metric for this range</description>
+ </valueHelp>
+ <constraint>
+ <validator name="numeric" argument="--range 0-16777215"/>
+ </constraint>
+ </properties>
+ </leafNode>
+ <leafNode name="not-advertise">
+ <properties>
+ <help>Do not advertise this range</help>
+ <valueless/>
+ </properties>
+ </leafNode>
+ <leafNode name="substitute">
+ <properties>
+ <help>Announce area range as another prefix</help>
+ <valueHelp>
+ <format>ipv4net</format>
+ <description>Announce area range as another prefix</description>
+ </valueHelp>
+ <constraint>
+ <validator name="ipv4-prefix"/>
+ </constraint>
+ </properties>
+ </leafNode>
+ </children>
+ </tagNode>
+ <leafNode name="shortcut">
+ <properties>
+ <help>Area shortcut mode</help>
+ <completionHelp>
+ <list>default disable enable</list>
+ </completionHelp>
+ <valueHelp>
+ <format>default</format>
+ <description>Set default</description>
+ </valueHelp>
+ <valueHelp>
+ <format>disable</format>
+ <description>Disable shortcutting mode</description>
+ </valueHelp>
+ <valueHelp>
+ <format>enable</format>
+ <description>Enable shortcutting mode</description>
+ </valueHelp>
+ <constraint>
+ <regex>^(default|disable|enable)$</regex>
+ </constraint>
+ </properties>
+ </leafNode>
+ <tagNode name="virtual-link">
+ <properties>
+ <help>Virtual link</help>
+ <valueHelp>
+ <format>ipv4</format>
+ <description>OSPF area in dotted decimal notation</description>
+ </valueHelp>
+ <constraint>
+ <validator name="numeric" argument="--range 0-4294967295"/>
+ <validator name="ip-address"/>
+ </constraint>
+ </properties>
+ <children>
+ #include <include/ospf/ospf-authentication.xml.i>
+ #include <include/ospf/ospf-intervals.xml.i>
+ </children>
+ </tagNode>
+ </children>
+</tagNode>
+<node name="auto-cost">
+ <properties>
+ <help>Calculate OSPF interface cost according to bandwidth (default: 100)</help>
+ </properties>
+ <children>
+ <leafNode name="reference-bandwidth">
+ <properties>
+ <help>Reference bandwidth method to assign OSPF cost</help>
+ <valueHelp>
+ <format>u32:1-4294967</format>
+ <description>Reference bandwidth cost in Mbits/sec</description>
+ </valueHelp>
+ <constraint>
+ <validator name="numeric" argument="--range 1-4294967"/>
+ </constraint>
+ </properties>
+ <defaultValue>100</defaultValue>
+ </leafNode>
+ </children>
+</node>
+<node name="default-information">
+ <properties>
+ <help>Control distribution of default information</help>
+ </properties>
+ <children>
+ <node name="originate">
+ <properties>
+ <help>Distribute a default route</help>
+ </properties>
+ <children>
+ <leafNode name="always">
+ <properties>
+ <help>Always advertise default route</help>
+ <valueless/>
+ </properties>
+ </leafNode>
+ #include <include/ospf/ospf-metric.xml.i>
+ #include <include/ospf/ospf-metric-type.xml.i>
+ #include <include/route-map.xml.i>
+ </children>
+ </node>
+ </children>
+</node>
+<leafNode name="default-metric">
+ <properties>
+ <help>Metric of redistributed routes</help>
+ <valueHelp>
+ <format>u32:0-16777214</format>
+ <description>Metric of redistributed routes</description>
+ </valueHelp>
+ <constraint>
+ <validator name="numeric" argument="--range 0-16777214"/>
+ </constraint>
+ </properties>
+</leafNode>
+<node name="distance">
+ <properties>
+ <help>Administrative distance</help>
+ </properties>
+ <children>
+ #include <include/ospf/ospf-distance-global.xml.i>
+ <node name="ospf">
+ <properties>
+ <help>OSPF administrative distance</help>
+ </properties>
+ <children>
+ #include <include/ospf/ospf-distance-per-protocol.xml.i>
+ </children>
+ </node>
+ </children>
+</node>
+<tagNode name="interface">
+ <properties>
+ <help>Interface related configuration</help>
+ <completionHelp>
+ <script>${vyos_completion_dir}/list_interfaces.py</script>
+ </completionHelp>
+ <valueHelp>
+ <format>txt</format>
+ <description>Interface name</description>
+ </valueHelp>
+ <constraint>
+ <validator name="interface-name"/>
+ </constraint>
+ </properties>
+ <children>
+ #include <include/ospf/ospf-authentication.xml.i>
+ #include <include/ospf/ospf-intervals.xml.i>
+ #include <include/ospf/ospf-interface-common.xml.i>
+ <leafNode name="bandwidth">
+ <properties>
+ <help>Bandwidth of interface (Megabit/sec)</help>
+ <valueHelp>
+ <format>u32:1-100000</format>
+ <description>Bandwidth in Megabit/sec (for calculating OSPF cost)</description>
+ </valueHelp>
+ <constraint>
+ <validator name="numeric" argument="--range 1-100000"/>
+ </constraint>
+ </properties>
+ </leafNode>
+ <leafNode name="hello-multiplier">
+ <properties>
+ <help>Hello multiplier factor</help>
+ <valueHelp>
+ <format>u32:1-10</format>
+ <description>Number of Hellos to send each second</description>
+ </valueHelp>
+ <constraint>
+ <validator name="numeric" argument="--range 1-10"/>
+ </constraint>
+ </properties>
+ </leafNode>
+ <leafNode name="network">
+ <properties>
+ <help>Network type</help>
+ <completionHelp>
+ <list>broadcast non-broadcast point-to-multipoint point-to-point</list>
+ </completionHelp>
+ <valueHelp>
+ <format>broadcast</format>
+ <description>Broadcast network type</description>
+ </valueHelp>
+ <valueHelp>
+ <format>non-broadcast</format>
+ <description>Non-broadcast network type</description>
+ </valueHelp>
+ <valueHelp>
+ <format>point-to-multipoint</format>
+ <description>Point-to-multipoint network type</description>
+ </valueHelp>
+ <valueHelp>
+ <format>point-to-point</format>
+ <description>Point-to-point network type</description>
+ </valueHelp>
+ <constraint>
+ <regex>^(broadcast|non-broadcast|point-to-multipoint|point-to-point)$</regex>
+ </constraint>
+ <constraintErrorMessage>Must be broadcast, non-broadcast, point-to-multipoint or point-to-point</constraintErrorMessage>
+ </properties>
+ </leafNode>
+ </children>
+</tagNode>
+<node name="log-adjacency-changes">
+ <properties>
+ <help>Log changes in adjacency state</help>
+ </properties>
+ <children>
+ <leafNode name="detail">
+ <properties>
+ <help>Log all state changes</help>
+ <valueless/>
+ </properties>
+ </leafNode>
+ </children>
+</node>
+<node name="max-metric">
+ <properties>
+ <help>OSPF maximum and infinite-distance metric</help>
+ </properties>
+ <children>
+ <node name="router-lsa">
+ <properties>
+ <help>Advertise own Router-LSA with infinite distance (stub router)</help>
+ </properties>
+ <children>
+ <leafNode name="administrative">
+ <properties>
+ <help>Administratively apply, for an indefinite period</help>
+ <valueless/>
+ </properties>
+ </leafNode>
+ <leafNode name="on-shutdown">
+ <properties>
+ <help>Advertise stub-router prior to full shutdown of OSPF</help>
+ <valueHelp>
+ <format>u32:5-100</format>
+ <description>Time (seconds) to advertise self as stub-router</description>
+ </valueHelp>
+ <constraint>
+ <validator name="numeric" argument="--range 5-100"/>
+ </constraint>
+ </properties>
+ </leafNode>
+ <leafNode name="on-startup">
+ <properties>
+ <help>Automatically advertise stub Router-LSA on startup of OSPF</help>
+ <valueHelp>
+ <format>u32:5-86400</format>
+ <description>Time (seconds) to advertise self as stub-router</description>
+ </valueHelp>
+ <constraint>
+ <validator name="numeric" argument="--range 5-86400"/>
+ </constraint>
+ </properties>
+ </leafNode>
+ </children>
+ </node>
+ </children>
+</node>
+<node name="mpls-te">
+ <properties>
+ <help>MultiProtocol Label Switching-Traffic Engineering (MPLS-TE) parameters</help>
+ </properties>
+ <children>
+ <leafNode name="enable">
+ <properties>
+ <help>Enable MPLS-TE functionality</help>
+ <valueless/>
+ </properties>
+ </leafNode>
+ <leafNode name="router-address">
+ <properties>
+ <help>Stable IP address of the advertising router</help>
+ <valueHelp>
+ <format>ipv4</format>
+ <description>Stable IP address of the advertising router</description>
+ </valueHelp>
+ <constraint>
+ <validator name="ipv4-address"/>
+ </constraint>
+ </properties>
+ <defaultValue>0.0.0.0</defaultValue>
+ </leafNode>
+ </children>
+</node>
+<tagNode name="neighbor">
+ <properties>
+ <help>Specify neighbor router</help>
+ <valueHelp>
+ <format>ipv4</format>
+ <description>Neighbor IP address</description>
+ </valueHelp>
+ <constraint>
+ <validator name="ipv4-address"/>
+ </constraint>
+ </properties>
+ <children>
+ <leafNode name="poll-interval">
+ <properties>
+ <help>Dead neighbor polling interval (default: 60)</help>
+ <valueHelp>
+ <format>u32:1-65535</format>
+ <description>Seconds between dead neighbor polling interval</description>
+ </valueHelp>
+ <constraint>
+ <validator name="numeric" argument="--range 1-65535"/>
+ </constraint>
+ </properties>
+ <defaultValue>60</defaultValue>
+ </leafNode>
+ <leafNode name="priority">
+ <properties>
+ <help>Neighbor priority in seconds (default: 0)</help>
+ <valueHelp>
+ <format>u32:0-255</format>
+ <description>Neighbor priority</description>
+ </valueHelp>
+ <constraint>
+ <validator name="numeric" argument="--range 0-255"/>
+ </constraint>
+ </properties>
+ <defaultValue>0</defaultValue>
+ </leafNode>
+ </children>
+</tagNode>
+<node name="parameters">
+ <properties>
+ <help>OSPF specific parameters</help>
+ </properties>
+ <children>
+ <leafNode name="abr-type">
+ <properties>
+ <help>OSPF ABR type (default: cisco)</help>
+ <completionHelp>
+ <list>cisco ibm shortcut standard</list>
+ </completionHelp>
+ <valueHelp>
+ <format>cisco</format>
+ <description>Cisco ABR type (default)</description>
+ </valueHelp>
+ <valueHelp>
+ <format>ibm</format>
+ <description>Ibm ABR type</description>
+ </valueHelp>
+ <valueHelp>
+ <format>shortcut</format>
+ <description>Shortcut ABR type</description>
+ </valueHelp>
+ <valueHelp>
+ <format>standard</format>
+ <description>Standard ABR type</description>
+ </valueHelp>
+ <constraint>
+ <regex>^(cisco|ibm|shortcut|standard)$</regex>
+ </constraint>
+ </properties>
+ <defaultValue>cisco</defaultValue>
+ </leafNode>
+ <leafNode name="opaque-lsa">
+ <properties>
+ <help>Enable the Opaque-LSA capability (rfc2370)</help>
+ <valueless/>
+ </properties>
+ </leafNode>
+ <leafNode name="rfc1583-compatibility">
+ <properties>
+ <help>Enable rfc1583 criteria for handling AS external routes</help>
+ <valueless/>
+ </properties>
+ </leafNode>
+ #include <include/ospf/ospf-router-id.xml.i>
+ </children>
+</node>
+#include <include/routing-passive-interface-xml.i>
+<leafNode name="passive-interface-exclude">
+ <properties>
+ <help>Interface to exclude when using 'passive-interface default'</help>
+ <completionHelp>
+ <script>${vyos_completion_dir}/list_interfaces.py</script>
+ </completionHelp>
+ <valueHelp>
+ <format>txt</format>
+ <description>Interface to exclude when suppressing routing updates</description>
+ </valueHelp>
+ <valueHelp>
+ <format>vlinkN</format>
+ <description>Virtual-link interface to exclude when suppressing routing updates</description>
+ </valueHelp>
+ <constraint>
+ <validator name="interface-name"/>
+ <regex>^(vlink[0-9]+)$</regex>
+ </constraint>
+ <multi/>
+ </properties>
+</leafNode>
+<node name="redistribute">
+ <properties>
+ <help>Redistribute information from another routing protocol</help>
+ </properties>
+ <children>
+ <node name="bgp">
+ <properties>
+ <help>Redistribute BGP routes</help>
+ </properties>
+ <children>
+ #include <include/ospf/ospf-metric.xml.i>
+ #include <include/ospf/ospf-metric-type.xml.i>
+ #include <include/route-map.xml.i>
+ </children>
+ </node>
+ <node name="connected">
+ <properties>
+ <help>Redistribute connected routes</help>
+ </properties>
+ <children>
+ #include <include/ospf/ospf-metric.xml.i>
+ #include <include/ospf/ospf-metric-type.xml.i>
+ #include <include/route-map.xml.i>
+ </children>
+ </node>
+ <node name="isis">
+ <properties>
+ <help>Redistribute IS-IS routes</help>
+ </properties>
+ <children>
+ #include <include/ospf/ospf-metric.xml.i>
+ #include <include/ospf/ospf-metric-type.xml.i>
+ #include <include/route-map.xml.i>
+ </children>
+ </node>
+ <node name="kernel">
+ <properties>
+ <help>Redistribute kernel routes</help>
+ </properties>
+ <children>
+ #include <include/ospf/ospf-metric.xml.i>
+ #include <include/ospf/ospf-metric-type.xml.i>
+ #include <include/route-map.xml.i>
+ </children>
+ </node>
+ <node name="rip">
+ <properties>
+ <help>Redistribute rip routes</help>
+ </properties>
+ <children>
+ #include <include/ospf/ospf-metric.xml.i>
+ #include <include/ospf/ospf-metric-type.xml.i>
+ #include <include/route-map.xml.i>
+ </children>
+ </node>
+ <node name="static">
+ <properties>
+ <help>Redistribute static routes</help>
+ </properties>
+ <children>
+ #include <include/ospf/ospf-metric.xml.i>
+ #include <include/ospf/ospf-metric-type.xml.i>
+ #include <include/route-map.xml.i>
+ </children>
+ </node>
+ </children>
+</node>
+<node name="refresh">
+ <properties>
+ <help>Adjust refresh parameters</help>
+ </properties>
+ <children>
+ <leafNode name="timers">
+ <properties>
+ <help>Refresh timer</help>
+ <valueHelp>
+ <format>u32:10-1800</format>
+ <description>Timer value in seconds</description>
+ </valueHelp>
+ <constraint>
+ <validator name="numeric" argument="--range 10-1800"/>
+ </constraint>
+ </properties>
+ </leafNode>
+ </children>
+</node>
+#include <include/route-map.xml.i>
+<node name="timers">
+ <properties>
+ <help>Adjust routing timers</help>
+ </properties>
+ <children>
+ <node name="throttle">
+ <properties>
+ <help>Throttling adaptive timers</help>
+ </properties>
+ <children>
+ <node name="spf">
+ <properties>
+ <help>OSPF SPF timers</help>
+ </properties>
+ <children>
+ <leafNode name="delay">
+ <properties>
+ <help>Delay from first change received till SPF calculation (default: 200)</help>
+ <valueHelp>
+ <format>u32:0-600000</format>
+ <description>Delay in milliseconds</description>
+ </valueHelp>
+ <constraint>
+ <validator name="numeric" argument="--range 0-600000"/>
+ </constraint>
+ </properties>
+ <defaultValue>200</defaultValue>
+ </leafNode>
+ <leafNode name="initial-holdtime">
+ <properties>
+ <help>Initial hold time between consecutive SPF calculations (default: 1000)</help>
+ <valueHelp>
+ <format>u32:0-600000</format>
+ <description>Initial hold time in milliseconds</description>
+ </valueHelp>
+ <constraint>
+ <validator name="numeric" argument="--range 0-600000"/>
+ </constraint>
+ </properties>
+ <defaultValue>1000</defaultValue>
+ </leafNode>
+ <leafNode name="max-holdtime">
+ <properties>
+ <help>Maximum hold time (default: 10000)</help>
+ <valueHelp>
+ <format>u32:0-600000</format>
+ <description>Max hold time in milliseconds</description>
+ </valueHelp>
+ <constraint>
+ <validator name="numeric" argument="--range 0-600000"/>
+ </constraint>
+ </properties>
+ <defaultValue>10000</defaultValue>
+ </leafNode>
+ </children>
+ </node>
+ </children>
+ </node>
+ </children>
+</node>
+<!-- include end -->
diff --git a/interface-definitions/include/ospf/ospf-distance-global.xml.i b/interface-definitions/include/ospf/ospf-distance-global.xml.i
new file mode 100644
index 000000000..08cd76cba
--- /dev/null
+++ b/interface-definitions/include/ospf/ospf-distance-global.xml.i
@@ -0,0 +1,14 @@
+<!-- include start from ospf/ospf-distance-global.xml.i -->
+<leafNode name="global">
+ <properties>
+ <help>Administrative distance</help>
+ <valueHelp>
+ <format>u32:1-255</format>
+ <description>Administrative distance</description>
+ </valueHelp>
+ <constraint>
+ <validator name="numeric" argument="--range 1-255"/>
+ </constraint>
+ </properties>
+</leafNode>
+<!-- include end -->
diff --git a/interface-definitions/include/ospf/ospf-distance-per-protocol.xml.i b/interface-definitions/include/ospf/ospf-distance-per-protocol.xml.i
new file mode 100644
index 000000000..d2c4b8b52
--- /dev/null
+++ b/interface-definitions/include/ospf/ospf-distance-per-protocol.xml.i
@@ -0,0 +1,38 @@
+<!-- include start from ospf/ospf-distance-per-protocol.xml.i -->
+<leafNode name="external">
+ <properties>
+ <help>Distance for external routes</help>
+ <valueHelp>
+ <format>u32:1-255</format>
+ <description>Distance for external routes</description>
+ </valueHelp>
+ <constraint>
+ <validator name="numeric" argument="--range 1-255"/>
+ </constraint>
+ </properties>
+</leafNode>
+<leafNode name="inter-area">
+ <properties>
+ <help>Distance for inter-area routes</help>
+ <valueHelp>
+ <format>u32:1-255</format>
+ <description>Distance for inter-area routes</description>
+ </valueHelp>
+ <constraint>
+ <validator name="numeric" argument="--range 1-255"/>
+ </constraint>
+ </properties>
+</leafNode>
+<leafNode name="intra-area">
+ <properties>
+ <help>Distance for intra-area routes</help>
+ <valueHelp>
+ <format>u32:1-255</format>
+ <description>Distance for intra-area routes</description>
+ </valueHelp>
+ <constraint>
+ <validator name="numeric" argument="--range 1-255"/>
+ </constraint>
+ </properties>
+</leafNode>
+<!-- include end -->
diff --git a/interface-definitions/include/ospf-interface-common.xml.i b/interface-definitions/include/ospf/ospf-interface-common.xml.i
index c3493faa3..c0069ccb5 100644
--- a/interface-definitions/include/ospf-interface-common.xml.i
+++ b/interface-definitions/include/ospf/ospf-interface-common.xml.i
@@ -1,4 +1,4 @@
-<!-- included start from ospf-interface-common.xml.i -->
+<!-- include start from ospf/ospf-interface-common.xml.i -->
<leafNode name="bfd">
<properties>
<help>Enable Bidirectional Forwarding Detection (BFD) support</help>
@@ -36,4 +36,4 @@
</properties>
<defaultValue>1</defaultValue>
</leafNode>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/ospf-intervals.xml.i b/interface-definitions/include/ospf/ospf-intervals.xml.i
index e532bd14b..fe220eceb 100644
--- a/interface-definitions/include/ospf-intervals.xml.i
+++ b/interface-definitions/include/ospf/ospf-intervals.xml.i
@@ -1,4 +1,4 @@
-<!-- included start from ospf-intervals.xml.i -->
+<!-- include start from ospf/ospf-intervals.xml.i -->
<leafNode name="dead-interval">
<properties>
<help>Interval after which a neighbor is declared dead (default: 40)</help>
@@ -51,4 +51,4 @@
</properties>
<defaultValue>1</defaultValue>
</leafNode>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/ospf-metric-type.xml.i b/interface-definitions/include/ospf/ospf-metric-type.xml.i
index 50f11960c..1e982c4bc 100644
--- a/interface-definitions/include/ospf-metric-type.xml.i
+++ b/interface-definitions/include/ospf/ospf-metric-type.xml.i
@@ -1,4 +1,4 @@
-<!-- included start from ospf-metric-type.xml.i -->
+<!-- include start from ospf/ospf-metric-type.xml.i -->
<leafNode name="metric-type">
<properties>
<help>OSPF metric type for default routes (default: 2)</help>
@@ -12,4 +12,4 @@
</properties>
<defaultValue>2</defaultValue>
</leafNode>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/ospf-metric.xml.i b/interface-definitions/include/ospf/ospf-metric.xml.i
index 3ce12e877..125aedea7 100644
--- a/interface-definitions/include/ospf-metric.xml.i
+++ b/interface-definitions/include/ospf/ospf-metric.xml.i
@@ -1,4 +1,4 @@
-<!-- included start from ospf-metric.xml.i -->
+<!-- include start from ospf/ospf-metric.xml.i -->
<leafNode name="metric">
<properties>
<help>OSPF default metric</help>
@@ -11,4 +11,4 @@
</constraint>
</properties>
</leafNode>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/ospf/ospf-router-id.xml.i b/interface-definitions/include/ospf/ospf-router-id.xml.i
new file mode 100644
index 000000000..5dbb52a36
--- /dev/null
+++ b/interface-definitions/include/ospf/ospf-router-id.xml.i
@@ -0,0 +1,14 @@
+<!-- include start from ospf/ospf-router-id.xml.i -->
+<leafNode name="router-id">
+ <properties>
+ <help>Override the default router identifier</help>
+ <valueHelp>
+ <format>ipv4</format>
+ <description>Override the default router identifier</description>
+ </valueHelp>
+ <constraint>
+ <validator name="ipv4-address"/>
+ </constraint>
+ </properties>
+</leafNode>
+<!-- include end -->
diff --git a/interface-definitions/include/port-number.xml.i b/interface-definitions/include/port-number.xml.i
index 81c192628..b62aef32b 100644
--- a/interface-definitions/include/port-number.xml.i
+++ b/interface-definitions/include/port-number.xml.i
@@ -1,4 +1,4 @@
-<!-- included start from port-number.xml.i -->
+<!-- include start from port-number.xml.i -->
<leafNode name="port">
<properties>
<help>Port number used by connection</help>
@@ -11,4 +11,4 @@
</constraint>
</properties>
</leafNode>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/radius-server-ipv4-ipv6.xml.i b/interface-definitions/include/radius-server-ipv4-ipv6.xml.i
index c57d39b6b..5b12bec62 100644
--- a/interface-definitions/include/radius-server-ipv4-ipv6.xml.i
+++ b/interface-definitions/include/radius-server-ipv4-ipv6.xml.i
@@ -1,4 +1,4 @@
-<!-- included start from radius-server-ipv4-ipv6.xml.i -->
+<!-- include start from radius-server-ipv4-ipv6.xml.i -->
<node name="radius">
<properties>
<help>RADIUS based user authentication</help>
@@ -49,4 +49,4 @@
</leafNode>
</children>
</node>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/radius-server-ipv4.xml.i b/interface-definitions/include/radius-server-ipv4.xml.i
index 15a421b9a..ab4c8e10e 100644
--- a/interface-definitions/include/radius-server-ipv4.xml.i
+++ b/interface-definitions/include/radius-server-ipv4.xml.i
@@ -1,4 +1,4 @@
-<!-- included start from radius-server-ipv4.xml.i -->
+<!-- include start from radius-server-ipv4.xml.i -->
<node name="radius">
<properties>
<help>RADIUS based user authentication</help>
@@ -24,4 +24,4 @@
</tagNode>
</children>
</node>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/radius-server-key.xml.i b/interface-definitions/include/radius-server-key.xml.i
index 32a01b402..c6301646b 100644
--- a/interface-definitions/include/radius-server-key.xml.i
+++ b/interface-definitions/include/radius-server-key.xml.i
@@ -1,7 +1,7 @@
-<!-- included start from radius-server-key.xml.i -->
+<!-- include start from radius-server-key.xml.i -->
<leafNode name="key">
<properties>
<help>Shared secret key</help>
</properties>
</leafNode>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/radius-server-port.xml.i b/interface-definitions/include/radius-server-port.xml.i
index 71b6bddb7..4e5d906bc 100644
--- a/interface-definitions/include/radius-server-port.xml.i
+++ b/interface-definitions/include/radius-server-port.xml.i
@@ -1,4 +1,4 @@
-<!-- included start from radius-server-port.xml.i -->
+<!-- include start from radius-server-port.xml.i -->
<leafNode name="port">
<properties>
<help>Authentication port</help>
@@ -12,4 +12,4 @@
</properties>
<defaultValue>1812</defaultValue>
</leafNode>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/rip-access-list.xml.i b/interface-definitions/include/rip-access-list.xml.i
index 0db6863e5..9d5366a0d 100644
--- a/interface-definitions/include/rip-access-list.xml.i
+++ b/interface-definitions/include/rip-access-list.xml.i
@@ -1,4 +1,4 @@
-<!-- included start from rip-access-list.xml.i -->
+<!-- include start from rip-access-list.xml.i -->
<node name="access-list">
<properties>
<help>Access-list</help>
@@ -36,4 +36,4 @@
</leafNode>
</children>
</node>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/rip-access-list6.xml.i b/interface-definitions/include/rip-access-list6.xml.i
index 6a8a37607..a57f2038d 100644
--- a/interface-definitions/include/rip-access-list6.xml.i
+++ b/interface-definitions/include/rip-access-list6.xml.i
@@ -1,4 +1,4 @@
-<!-- included start from rip-access-list.xml.i -->
+<!-- include start from rip-access-list.xml.i -->
<node name="access-list">
<properties>
<help>Access-list</help>
@@ -36,4 +36,4 @@
</leafNode>
</children>
</node>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/rip-default-information.xml.i b/interface-definitions/include/rip-default-information.xml.i
index 22a2f6ac7..9dbe744a1 100644
--- a/interface-definitions/include/rip-default-information.xml.i
+++ b/interface-definitions/include/rip-default-information.xml.i
@@ -1,4 +1,4 @@
-<!-- included start from rip-default-information.xml.i -->
+<!-- include start from rip-default-information.xml.i -->
<node name="default-information">
<properties>
<help>Control distribution of default route</help>
@@ -12,4 +12,4 @@
</leafNode>
</children>
</node>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/rip-default-metric.xml.i b/interface-definitions/include/rip-default-metric.xml.i
index a5e6016d6..e021e47dd 100644
--- a/interface-definitions/include/rip-default-metric.xml.i
+++ b/interface-definitions/include/rip-default-metric.xml.i
@@ -1,4 +1,4 @@
-<!-- included start from rip-default-metric.xml.i -->
+<!-- include start from rip-default-metric.xml.i -->
<leafNode name="default-metric">
<properties>
<help>Metric of redistributed routes</help>
@@ -11,4 +11,4 @@
</constraint>
</properties>
</leafNode>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/rip-interface.xml.i b/interface-definitions/include/rip-interface.xml.i
index 6279c16c8..1807a944a 100644
--- a/interface-definitions/include/rip-interface.xml.i
+++ b/interface-definitions/include/rip-interface.xml.i
@@ -1,4 +1,4 @@
-<!-- included start from rip-interface.xml.i -->
+<!-- include start from rip-interface.xml.i -->
<tagNode name="interface">
<properties>
<help>Interface name</help>
@@ -35,4 +35,4 @@
</node>
</children>
</tagNode>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/rip-prefix-list.xml.i b/interface-definitions/include/rip-prefix-list.xml.i
index 58969a86b..ec8a34266 100644
--- a/interface-definitions/include/rip-prefix-list.xml.i
+++ b/interface-definitions/include/rip-prefix-list.xml.i
@@ -1,4 +1,4 @@
-<!-- included start from rip-prefix-list.xml.i -->
+<!-- include start from rip-prefix-list.xml.i -->
<node name="prefix-list">
<properties>
<help>Prefix-list</help>
@@ -30,4 +30,4 @@
</leafNode>
</children>
</node>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/rip-prefix-list6.xml.i b/interface-definitions/include/rip-prefix-list6.xml.i
index f73f77d05..b1026bcd2 100644
--- a/interface-definitions/include/rip-prefix-list6.xml.i
+++ b/interface-definitions/include/rip-prefix-list6.xml.i
@@ -1,4 +1,4 @@
-<!-- included start from rip-prefix-list.xml.i -->
+<!-- include start from rip-prefix-list.xml.i -->
<node name="prefix-list">
<properties>
<help>Prefix-list</help>
@@ -30,4 +30,4 @@
</leafNode>
</children>
</node>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/rip-redistribute.xml.i b/interface-definitions/include/rip-redistribute.xml.i
index c7b9d2c09..1e47125e9 100644
--- a/interface-definitions/include/rip-redistribute.xml.i
+++ b/interface-definitions/include/rip-redistribute.xml.i
@@ -1,4 +1,4 @@
-<!-- included start from rip-redistribute.xml.i -->
+<!-- include start from rip-redistribute.xml.i -->
<leafNode name="metric">
<properties>
<help>Metric for redistributed routes</help>
@@ -11,5 +11,5 @@
</constraint>
</properties>
</leafNode>
-#include <include/ospf-route-map.xml.i>
-<!-- included end -->
+#include <include/route-map.xml.i>
+<!-- include end -->
diff --git a/interface-definitions/include/rip-timers.xml.i b/interface-definitions/include/rip-timers.xml.i
index 5ba19bb06..f43ea3f5f 100644
--- a/interface-definitions/include/rip-timers.xml.i
+++ b/interface-definitions/include/rip-timers.xml.i
@@ -1,4 +1,4 @@
-<!-- included start from rip-timers.xml.i -->
+<!-- include start from rip-timers.xml.i -->
<node name="timers">
<properties>
<help>RIPng timer values</help>
@@ -45,4 +45,4 @@
</leafNode>
</children>
</node>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/ospf-route-map.xml.i b/interface-definitions/include/route-map.xml.i
index 943a477c0..5a1c137b9 100644
--- a/interface-definitions/include/ospf-route-map.xml.i
+++ b/interface-definitions/include/route-map.xml.i
@@ -1,4 +1,4 @@
-<!-- included start from ospf-route-map.xml.i -->
+<!-- include start from route-map.xml.i -->
<leafNode name="route-map">
<properties>
<help>Route map reference</help>
@@ -11,4 +11,4 @@
</completionHelp>
</properties>
</leafNode>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/source-address-ipv4-ipv6.xml.i b/interface-definitions/include/source-address-ipv4-ipv6.xml.i
index 93cfd7c63..af3f9bb68 100644
--- a/interface-definitions/include/source-address-ipv4-ipv6.xml.i
+++ b/interface-definitions/include/source-address-ipv4-ipv6.xml.i
@@ -1,4 +1,4 @@
-<!-- included start from source-address-ipv4-ipv6.xml.i -->
+<!-- include start from source-address-ipv4-ipv6.xml.i -->
<leafNode name="source-address">
<properties>
<help>Source IP address used to initiate connection</help>
@@ -18,4 +18,4 @@
</constraint>
</properties>
</leafNode>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/source-address-ipv4.xml.i b/interface-definitions/include/source-address-ipv4.xml.i
index 2dff2c65e..86235df61 100644
--- a/interface-definitions/include/source-address-ipv4.xml.i
+++ b/interface-definitions/include/source-address-ipv4.xml.i
@@ -1,4 +1,4 @@
-<!-- included start from source-address-ipv4.xml.i -->
+<!-- include start from source-address-ipv4.xml.i -->
<leafNode name="source-address">
<properties>
<help>IPv4 source address used to initiiate connection</help>
@@ -14,4 +14,4 @@
</constraint>
</properties>
</leafNode>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/source-interface-ethernet.xml.i b/interface-definitions/include/source-interface-ethernet.xml.i
index d641f3cb1..ee04f2cd5 100644
--- a/interface-definitions/include/source-interface-ethernet.xml.i
+++ b/interface-definitions/include/source-interface-ethernet.xml.i
@@ -1,4 +1,4 @@
-<!-- included start from source-interface-ethernet.xml.i -->
+<!-- include start from source-interface-ethernet.xml.i -->
<leafNode name="source-interface">
<properties>
<help>Physical interface the traffic will go through</help>
@@ -11,4 +11,4 @@
</completionHelp>
</properties>
</leafNode>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/source-interface.xml.i b/interface-definitions/include/source-interface.xml.i
index 797206430..a9c2a0f9d 100644
--- a/interface-definitions/include/source-interface.xml.i
+++ b/interface-definitions/include/source-interface.xml.i
@@ -1,4 +1,4 @@
-<!-- included start from source-interface.xml.i -->
+<!-- include start from source-interface.xml.i -->
<leafNode name="source-interface">
<properties>
<help>Interface used to establish connection</help>
@@ -14,4 +14,4 @@
</constraint>
</properties>
</leafNode>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/static-route-blackhole.xml.i b/interface-definitions/include/static-route-blackhole.xml.i
index d0a0c2079..838a475d3 100644
--- a/interface-definitions/include/static-route-blackhole.xml.i
+++ b/interface-definitions/include/static-route-blackhole.xml.i
@@ -1,4 +1,4 @@
-<!-- included start from static-route-blackhole.xml.i -->
+<!-- include start from static-route-blackhole.xml.i -->
<node name="blackhole">
<properties>
<help>Silently discard packets when matched</help>
@@ -7,4 +7,4 @@
#include <include/static-route-distance.xml.i>
</children>
</node>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/static-route-distance.xml.i b/interface-definitions/include/static-route-distance.xml.i
index d6c0d3d82..da171fe1f 100644
--- a/interface-definitions/include/static-route-distance.xml.i
+++ b/interface-definitions/include/static-route-distance.xml.i
@@ -1,4 +1,4 @@
-<!-- included start from static-route-distance.xml.i -->
+<!-- include start from static-route-distance.xml.i -->
<leafNode name="distance">
<properties>
<help>Distance for this route</help>
@@ -11,4 +11,4 @@
</constraint>
</properties>
</leafNode>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/static-route-interface.xml.i b/interface-definitions/include/static-route-interface.xml.i
index 0f10837df..6670c0e33 100644
--- a/interface-definitions/include/static-route-interface.xml.i
+++ b/interface-definitions/include/static-route-interface.xml.i
@@ -1,4 +1,4 @@
-<!-- included start from static-route-interface.xml.i -->
+<!-- include start from static-route-interface.xml.i -->
<leafNode name="interface">
<properties>
<help>Gateway interface name</help>
@@ -14,4 +14,4 @@
</constraint>
</properties>
</leafNode>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/static-route-map.xml.i b/interface-definitions/include/static-route-map.xml.i
index 25542b8b1..48f5055aa 100644
--- a/interface-definitions/include/static-route-map.xml.i
+++ b/interface-definitions/include/static-route-map.xml.i
@@ -1,4 +1,4 @@
-<!-- included start from static-route-map.xml.i -->
+<!-- include start from static-route-map.xml.i -->
<leafNode name="route-map">
<properties>
<help>Filter routes installed in local route map</help>
@@ -7,4 +7,4 @@
</completionHelp>
</properties>
</leafNode>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/static-route-vrf.xml.i b/interface-definitions/include/static-route-vrf.xml.i
index 70f8b0be8..eda4d7aee 100644
--- a/interface-definitions/include/static-route-vrf.xml.i
+++ b/interface-definitions/include/static-route-vrf.xml.i
@@ -1,4 +1,4 @@
-<!-- included start from static-route-vrf.xml.i -->
+<!-- include start from static-route-vrf.xml.i -->
<leafNode name="vrf">
<properties>
<help>VRF to leak route</help>
@@ -16,4 +16,4 @@
</constraint>
</properties>
</leafNode>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/static-route.xml.i b/interface-definitions/include/static-route.xml.i
index 21fcbcd3f..94fbdd3d6 100644
--- a/interface-definitions/include/static-route.xml.i
+++ b/interface-definitions/include/static-route.xml.i
@@ -1,4 +1,4 @@
-<!-- included start from static-route.xml.i -->
+<!-- include start from static-route.xml.i -->
<tagNode name="route">
<properties>
<help>VRF static IPv4 route</help>
@@ -86,5 +86,5 @@
</tagNode>
</children>
</tagNode>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/static-route6.xml.i b/interface-definitions/include/static-route6.xml.i
index fcf97cd03..4522ef39b 100644
--- a/interface-definitions/include/static-route6.xml.i
+++ b/interface-definitions/include/static-route6.xml.i
@@ -1,4 +1,4 @@
-<!-- included start from static-route6.xml.i -->
+<!-- include start from static-route6.xml.i -->
<tagNode name="route6">
<properties>
<help>VRF static IPv6 route</help>
@@ -71,5 +71,5 @@
</tagNode>
</children>
</tagNode>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/tunnel-remote.xml.i b/interface-definitions/include/tunnel-remote.xml.i
index d5b50d3f6..324d100d4 100644
--- a/interface-definitions/include/tunnel-remote.xml.i
+++ b/interface-definitions/include/tunnel-remote.xml.i
@@ -1,4 +1,4 @@
-<!-- included start from tunnel-remote.xml.i -->
+<!-- include start from tunnel-remote.xml.i -->
<leafNode name="remote">
<properties>
<help>Tunnel remote address</help>
@@ -15,4 +15,4 @@
</constraint>
</properties>
</leafNode>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/vif-s.xml.i b/interface-definitions/include/vif-s.xml.i
index 01cb59efc..5760bb000 100644
--- a/interface-definitions/include/vif-s.xml.i
+++ b/interface-definitions/include/vif-s.xml.i
@@ -1,4 +1,4 @@
-<!-- included start from vif-s.xml.i -->
+<!-- include start from vif-s.xml.i -->
<tagNode name="vif-s">
<properties>
<help>QinQ TAG-S Virtual Local Area Network (VLAN) ID</help>
@@ -64,4 +64,4 @@
#include <include/interface-vrf.xml.i>
</children>
</tagNode>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/vif.xml.i b/interface-definitions/include/vif.xml.i
index bc60dd04d..0f09b993d 100644
--- a/interface-definitions/include/vif.xml.i
+++ b/interface-definitions/include/vif.xml.i
@@ -1,4 +1,4 @@
-<!-- included start from vif.xml.i -->
+<!-- include start from vif.xml.i -->
<tagNode name="vif">
<properties>
<help>Virtual Local Area Network (VLAN) ID</help>
@@ -49,4 +49,4 @@
#include <include/interface-mtu-68-16000.xml.i>
</children>
</tagNode>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/vpn-ipsec-encryption.xml.i b/interface-definitions/include/vpn-ipsec-encryption.xml.i
index 1c1d728fc..041ba9902 100644
--- a/interface-definitions/include/vpn-ipsec-encryption.xml.i
+++ b/interface-definitions/include/vpn-ipsec-encryption.xml.i
@@ -1,4 +1,4 @@
-<!-- included start from vpn-ipsec-encryption.xml.i -->
+<!-- include start from vpn-ipsec-encryption.xml.i -->
<leafNode name="encryption">
<properties>
<help>Encryption algorithm</help>
@@ -230,4 +230,4 @@
</constraint>
</properties>
</leafNode>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/vpn-ipsec-hash.xml.i b/interface-definitions/include/vpn-ipsec-hash.xml.i
index ca5976d27..93d57b622 100644
--- a/interface-definitions/include/vpn-ipsec-hash.xml.i
+++ b/interface-definitions/include/vpn-ipsec-hash.xml.i
@@ -1,4 +1,4 @@
-<!-- included start from pn-ipsec-hash.xml.i -->
+<!-- include start from pn-ipsec-hash.xml.i -->
<leafNode name="hash">
<properties>
<help>Hash algorithm</help>
@@ -62,4 +62,4 @@
</constraint>
</properties>
</leafNode>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/include/webproxy-url-filtering.xml.i b/interface-definitions/include/webproxy-url-filtering.xml.i
index 07db0948f..265bbff94 100644
--- a/interface-definitions/include/webproxy-url-filtering.xml.i
+++ b/interface-definitions/include/webproxy-url-filtering.xml.i
@@ -1,4 +1,4 @@
-<!-- included start from webproxy-url-filtering.xml.i -->
+<!-- include start from webproxy-url-filtering.xml.i -->
<leafNode name="allow-category">
<properties>
<help>Category to allow</help>
@@ -116,4 +116,4 @@
<multi/>
</properties>
</leafNode>
-<!-- included end -->
+<!-- include end -->
diff --git a/interface-definitions/protocols-bgp.xml.in b/interface-definitions/protocols-bgp.xml.in
index afcd8f727..cf897d04f 100644
--- a/interface-definitions/protocols-bgp.xml.in
+++ b/interface-definitions/protocols-bgp.xml.in
@@ -1,844 +1,21 @@
<?xml version="1.0"?>
-<!-- Border Gateway Protocol (BGP) configuration -->
<interfaceDefinition>
<node name="protocols">
<children>
<tagNode name="bgp" owner="${vyos_conf_scripts_dir}/protocols_bgp.py">
<properties>
<help>Border Gateway Protocol (BGP)</help>
+ <priority>820</priority>
<valueHelp>
<format>u32:1-4294967294</format>
- <description>AS number</description>
+ <description>Autonomous System Number</description>
</valueHelp>
<constraint>
<validator name="numeric" argument="--range 1-4294967294"/>
</constraint>
- <priority>820</priority>
</properties>
<children>
- <node name="address-family">
- <properties>
- <help>BGP address-family parameters</help>
- </properties>
- <children>
- <node name="ipv4-unicast">
- <properties>
- <help>IPv4 BGP settings</help>
- </properties>
- <children>
- <tagNode name="aggregate-address">
- <properties>
- <help>BGP aggregate network</help>
- <valueHelp>
- <format>ipv4net</format>
- <description>BGP aggregate network</description>
- </valueHelp>
- <constraint>
- <validator name="ipv4-prefix"/>
- </constraint>
- </properties>
- <children>
- #include <include/bgp-afi-aggregate-address.xml.i>
- </children>
- </tagNode>
- <tagNode name="network">
- <properties>
- <help>BGP network</help>
- <valueHelp>
- <format>ipv4net</format>
- <description>BGP network</description>
- </valueHelp>
- <constraint>
- <validator name="ipv4-prefix"/>
- </constraint>
- </properties>
- <children>
- <leafNode name="backdoor">
- <properties>
- <help>Network as a backdoor route</help>
- <valueless/>
- </properties>
- </leafNode>
- #include <include/bgp-route-map.xml.i>
- </children>
- </tagNode>
- #include <include/bgp-afi-maximum-paths.xml.i>
- <node name="redistribute">
- <properties>
- <help>Redistribute routes from other protocols into BGP</help>
- </properties>
- <children>
- <node name="connected">
- <properties>
- <help>Redistribute connected routes into BGP</help>
- </properties>
- <children>
- #include <include/bgp-afi-redistribute-metric-route-map.xml.i>
- </children>
- </node>
- <node name="isis">
- <properties>
- <help>Redistribute IS-IS routes into BGP</help>
- </properties>
- <children>
- #include <include/bgp-afi-redistribute-metric-route-map.xml.i>
- </children>
- </node>
- <node name="kernel">
- <properties>
- <help>Redistribute kernel routes into BGP</help>
- </properties>
- <children>
- #include <include/bgp-afi-redistribute-metric-route-map.xml.i>
- </children>
- </node>
- <node name="ospf">
- <properties>
- <help>Redistribute OSPF routes into BGP</help>
- </properties>
- <children>
- #include <include/bgp-afi-redistribute-metric-route-map.xml.i>
- </children>
- </node>
- <node name="rip">
- <properties>
- <help>Redistribute RIP routes into BGP</help>
- </properties>
- <children>
- #include <include/bgp-afi-redistribute-metric-route-map.xml.i>
- </children>
- </node>
- <node name="static">
- <properties>
- <help>Redistribute static routes into BGP</help>
- </properties>
- <children>
- #include <include/bgp-afi-redistribute-metric-route-map.xml.i>
- </children>
- </node>
- <leafNode name="table">
- <properties>
- <help>Redistribute non-main Kernel Routing Table</help>
- </properties>
- </leafNode>
- </children>
- </node>
- </children>
- </node>
- <node name="ipv6-unicast">
- <properties>
- <help>IPv6 BGP settings</help>
- </properties>
- <children>
- <tagNode name="aggregate-address">
- <properties>
- <help>BGP aggregate network</help>
- <valueHelp>
- <format>ipv6net</format>
- <description>Aggregate network</description>
- </valueHelp>
- <constraint>
- <validator name="ipv6-prefix"/>
- </constraint>
- </properties>
- <children>
- #include <include/bgp-afi-aggregate-address.xml.i>
- </children>
- </tagNode>
- <tagNode name="network">
- <properties>
- <help>BGP network</help>
- <valueHelp>
- <format>ipv6net</format>
- <description>Aggregate network</description>
- </valueHelp>
- <constraint>
- <validator name="ipv6-prefix"/>
- </constraint>
- </properties>
- <children>
- <leafNode name="path-limit">
- <properties>
- <help>AS-path hopcount limit</help>
- <valueHelp>
- <format>u32:0-255</format>
- <description>AS path hop count limit</description>
- </valueHelp>
- <constraint>
- <validator name="numeric" argument="--range 0-255"/>
- </constraint>
- </properties>
- </leafNode>
- #include <include/bgp-route-map.xml.i>
- </children>
- </tagNode>
- #include <include/bgp-afi-maximum-paths.xml.i>
- <node name="redistribute">
- <properties>
- <help>Redistribute routes from other protocols into BGP</help>
- </properties>
- <children>
- <node name="connected">
- <properties>
- <help>Redistribute connected routes into BGP</help>
- </properties>
- <children>
- #include <include/bgp-afi-redistribute-metric-route-map.xml.i>
- </children>
- </node>
- <node name="kernel">
- <properties>
- <help>Redistribute kernel routes into BGP</help>
- </properties>
- <children>
- #include <include/bgp-afi-redistribute-metric-route-map.xml.i>
- </children>
- </node>
- <node name="ospfv3">
- <properties>
- <help>Redistribute OSPFv3 routes into BGP</help>
- </properties>
- <children>
- #include <include/bgp-afi-redistribute-metric-route-map.xml.i>
- </children>
- </node>
- <node name="ripng">
- <properties>
- <help>Redistribute RIPng routes into BGP</help>
- </properties>
- <children>
- #include <include/bgp-afi-redistribute-metric-route-map.xml.i>
- </children>
- </node>
- <node name="static">
- <properties>
- <help>Redistribute static routes into BGP</help>
- </properties>
- <children>
- #include <include/bgp-afi-redistribute-metric-route-map.xml.i>
- </children>
- </node>
- <leafNode name="table">
- <properties>
- <help>Redistribute non-main Kernel Routing Table</help>
- </properties>
- </leafNode>
- </children>
- </node>
- </children>
- </node>
- <node name="l2vpn-evpn">
- <properties>
- <help>L2VPN EVPN BGP settings</help>
- </properties>
- <children>
- <leafNode name="advertise-all-vni">
- <properties>
- <help>Advertise All local VNIs</help>
- <valueless/>
- </properties>
- </leafNode>
- #include <include/bgp-afi-l2vpn-common.xml.i>
- <leafNode name="advertise-pip">
- <properties>
- <help>EVPN system primary IP</help>
- <valueHelp>
- <format>ipv4</format>
- <description>IP address</description>
- </valueHelp>
- <constraint>
- <validator name="ipv4-address"/>
- </constraint>
- </properties>
- </leafNode>
- <leafNode name="rt-auto-derive">
- <properties>
- <help>Auto derivation of Route Target (RFC8365)</help>
- <valueless/>
- </properties>
- </leafNode>
- <node name="flooding">
- <properties>
- <help>Specify handling for BUM packets</help>
- </properties>
- <children>
- <leafNode name="disable">
- <properties>
- <help>Do not flood any BUM packets</help>
- <valueless/>
- </properties>
- </leafNode>
- <leafNode name="head-end-replication">
- <properties>
- <help>Flood BUM packets using head-end replication</help>
- <valueless/>
- </properties>
- </leafNode>
- </children>
- </node>
- <tagNode name="vni">
- <properties>
- <help>VXLAN Network Identifier</help>
- <valueHelp>
- <format>u32:1-16777215</format>
- <description>VNI number</description>
- </valueHelp>
- <constraint>
- <validator name="numeric" argument="--range 1-16777215"/>
- </constraint>
- </properties>
- <children>
- #include <include/bgp-afi-l2vpn-common.xml.i>
- </children>
- </tagNode>
- </children>
- </node>
- </children>
- </node>
- <node name="listen">
- <properties>
- <help>Listen for and accept BGP dynamic neighbors from range</help>
- </properties>
- <children>
- <leafNode name="limit">
- <properties>
- <help>Maximum number of dynamic neighbors that can be created</help>
- <valueHelp>
- <format>u32:1-5000</format>
- <description>BGP neighbor limit</description>
- </valueHelp>
- <constraint>
- <validator name="numeric" argument="--range 1-5000"/>
- </constraint>
- </properties>
- </leafNode>
- <tagNode name="range">
- <properties>
- <help>BGP dynamic neighbors listen range</help>
- <valueHelp>
- <format>ipv4net</format>
- <description>IPv4 dynamic neighbors listen range</description>
- </valueHelp>
- <valueHelp>
- <format>ipv6net</format>
- <description>IPv6 dynamic neighbors listen range</description>
- </valueHelp>
- <constraint>
- <validator name="ipv4-prefix"/>
- <validator name="ipv6-prefix"/>
- </constraint>
- </properties>
- <children>
- #include <include/bgp-peer-group.xml.i>
- </children>
- </tagNode>
- </children>
- </node>
- <tagNode name="neighbor">
- <properties>
- <help>BGP neighbor</help>
- <valueHelp>
- <format>ipv4</format>
- <description>BGP neighbor IP address</description>
- </valueHelp>
- <valueHelp>
- <format>ipv6</format>
- <description>BGP neighbor IPv6 address</description>
- </valueHelp>
- <valueHelp>
- <format>txt</format>
- <description>Interface name</description>
- </valueHelp>
- <constraint>
- <validator name="ipv4-address"/>
- <validator name="ipv6-address"/>
- <validator name="interface-name"/>
- </constraint>
- </properties>
- <children>
- <node name="address-family">
- <properties>
- <help>Parameters relating to IPv4 or IPv6 routes</help>
- </properties>
- <children>
- #include <include/bgp-neighbor-afi-ipv4-unicast.xml.i>
- #include <include/bgp-neighbor-afi-ipv6-unicast.xml.i>
- #include <include/bgp-neighbor-afi-l2vpn-evpn.xml.i>
- </children>
- </node>
- <leafNode name="advertisement-interval">
- <properties>
- <help>Minimum interval for sending routing updates</help>
- <valueHelp>
- <format>u32:0-600</format>
- <description>Advertisement interval in seconds</description>
- </valueHelp>
- <constraint>
- <validator name="numeric" argument="--range 0-600"/>
- </constraint>
- </properties>
- </leafNode>
- #include <include/bgp-bfd.xml.i>
- #include <include/bgp-capability.xml.i>
- #include <include/bgp-description.xml.i>
- #include <include/bgp-disable-capability-negotiation.xml.i>
- #include <include/bgp-disable-connected-check.xml.i>
- #include <include/bgp-ebgp-multihop.xml.i>
- <node name="interface">
- <properties>
- <help>Interface parameters</help>
- </properties>
- <children>
- #include <include/bgp-peer-group.xml.i>
- #include <include/bgp-remote-as.xml.i>
- <node name="v6only">
- <properties>
- <help>Enable BGP with v6 link-local only</help>
- </properties>
- <children>
- #include <include/bgp-peer-group.xml.i>
- #include <include/bgp-remote-as.xml.i>
- </children>
- </node>
- </children>
- </node>
- #include <include/bgp-local-as.xml.i>
- #include <include/bgp-override-capability.xml.i>
- #include <include/bgp-passive.xml.i>
- #include <include/bgp-password.xml.i>
- #include <include/bgp-peer-group.xml.i>
- <leafNode name="port">
- <properties>
- <help>Neighbor BGP port</help>
- <valueHelp>
- <format>u32:1-65535</format>
- <description>Neighbor BGP port number</description>
- </valueHelp>
- <constraint>
- <validator name="numeric" argument="--range 1-65535"/>
- </constraint>
- </properties>
- </leafNode>
- #include <include/bgp-remote-as.xml.i>
- #include <include/bgp-shutdown.xml.i>
- <leafNode name="strict-capability-match">
- <properties>
- <help>Enable strict capability negotiation</help>
- <valueless/>
- </properties>
- </leafNode>
- <node name="timers">
- <properties>
- <help>Neighbor timers</help>
- </properties>
- <children>
- <leafNode name="connect">
- <properties>
- <help>BGP connect timer for this neighbor</help>
- <valueHelp>
- <format>u32:1-65535</format>
- <description>Connect timer in seconds</description>
- </valueHelp>
- <valueHelp>
- <format>0</format>
- <description>Disable connect timer</description>
- </valueHelp>
- <constraint>
- <validator name="numeric" argument="--range 0-65535"/>
- </constraint>
- </properties>
- </leafNode>
- #include <include/bgp-timers-holdtime.xml.i>
- #include <include/bgp-timers-keepalive.xml.i>
- </children>
- </node>
- #include <include/bgp-ttl-security.xml.i>
- #include <include/bgp-update-source.xml.i>
- </children>
- </tagNode>
- <node name="parameters">
- <properties>
- <help>BGP parameters</help>
- </properties>
- <children>
- <leafNode name="always-compare-med">
- <properties>
- <help>Always compare MEDs from different neighbors</help>
- <valueless/>
- </properties>
- </leafNode>
- <node name="bestpath">
- <properties>
- <help>Default bestpath selection mechanism</help>
- </properties>
- <children>
- <node name="as-path">
- <properties>
- <help>AS-path attribute comparison parameters</help>
- </properties>
- <children>
- <leafNode name="confed">
- <properties>
- <help>Compare AS-path lengths including confederation sets and sequences</help>
- <valueless/>
- </properties>
- </leafNode>
- <leafNode name="ignore">
- <properties>
- <help>Ignore AS-path length in selecting a route</help>
- <valueless/>
- </properties>
- </leafNode>
- <leafNode name="multipath-relax">
- <properties>
- <help>Allow load sharing across routes that have different AS paths (but same length)</help>
- <valueless/>
- </properties>
- </leafNode>
- </children>
- </node>
- <leafNode name="compare-routerid">
- <properties>
- <help>Compare the router-id for identical EBGP paths</help>
- <valueless/>
- </properties>
- </leafNode>
- <node name="med">
- <properties>
- <help>MED attribute comparison parameters</help>
- </properties>
- <children>
- <leafNode name="confed">
- <properties>
- <help>Compare MEDs among confederation paths</help>
- <valueless/>
- </properties>
- </leafNode>
- <leafNode name="missing-as-worst">
- <properties>
- <help>Treat missing route as a MED as the least preferred one</help>
- <valueless/>
- </properties>
- </leafNode>
- </children>
- </node>
- </children>
- </node>
- <leafNode name="cluster-id">
- <properties>
- <help>Route-reflector cluster-id</help>
- <valueHelp>
- <format>ipv4</format>
- <description>Route-reflector cluster-id</description>
- </valueHelp>
- <constraint>
- <validator name="ipv4-address"/>
- </constraint>
- </properties>
- </leafNode>
- <node name="confederation">
- <properties>
- <help>AS confederation parameters</help>
- </properties>
- <children>
- <leafNode name="identifier">
- <properties>
- <help>Confederation AS identifier [REQUIRED]</help>
- <valueHelp>
- <format>u32:1-4294967294</format>
- <description>Confederation AS id</description>
- </valueHelp>
- <constraint>
- <validator name="numeric" argument="--range 1-4294967294"/>
- </constraint>
- </properties>
- </leafNode>
- <leafNode name="peers">
- <properties>
- <help>Peer ASs in the BGP confederation</help>
- <valueHelp>
- <format>u32:1-4294967294</format>
- <description>Peer AS number</description>
- </valueHelp>
- <constraint>
- <validator name="numeric" argument="--range 1-4294967294"/>
- </constraint>
- </properties>
- </leafNode>
- </children>
- </node>
- <node name="dampening">
- <properties>
- <help>Enable route-flap dampening</help>
- </properties>
- <children>
- <leafNode name="half-life">
- <properties>
- <help>Half-life time for dampening [REQUIRED]</help>
- <valueHelp>
- <format>u32:1-45</format>
- <description>Half-life penalty in minutes</description>
- </valueHelp>
- <constraint>
- <validator name="numeric" argument="--range 1-45"/>
- </constraint>
- </properties>
- </leafNode>
- <leafNode name="max-suppress-time">
- <properties>
- <help>Maximum duration to suppress a stable route [REQUIRED]</help>
- <valueHelp>
- <format>u32:1-255</format>
- <description>Maximum suppress duration in minutes</description>
- </valueHelp>
- <constraint>
- <validator name="numeric" argument="--range 1-255"/>
- </constraint>
- </properties>
- </leafNode>
- <leafNode name="re-use">
- <properties>
- <help>Threshold to start reusing a route [REQUIRED]</help>
- <valueHelp>
- <format>u32:1-20000</format>
- <description>Re-use penalty points</description>
- </valueHelp>
- <constraint>
- <validator name="numeric" argument="--range 1-20000"/>
- </constraint>
- </properties>
- </leafNode>
- <leafNode name="start-suppress-time">
- <properties>
- <help>When to start suppressing a route [REQUIRED]</help>
- <valueHelp>
- <format>u32:1-20000</format>
- <description>Start-suppress penalty points</description>
- </valueHelp>
- <constraint>
- <validator name="numeric" argument="--range 1-20000"/>
- </constraint>
- </properties>
- </leafNode>
- </children>
- </node>
- <node name="default">
- <properties>
- <help>BGP defaults</help>
- </properties>
- <children>
- <leafNode name="local-pref">
- <properties>
- <help>Default local preference</help>
- <valueHelp>
- <format>u32</format>
- <description>Local preference</description>
- </valueHelp>
- <constraint>
- <validator name="numeric" argument="--range 0-4294967295"/>
- </constraint>
- </properties>
- </leafNode>
- <leafNode name="no-ipv4-unicast">
- <properties>
- <help>Deactivate IPv4 unicast for a peer by default</help>
- <valueless/>
- </properties>
- </leafNode>
- </children>
- </node>
- <leafNode name="deterministic-med">
- <properties>
- <help>Compare MEDs between different peers in the same AS</help>
- <valueless/>
- </properties>
- </leafNode>
- <node name="distance">
- <properties>
- <help>Administratives distances for BGP routes</help>
- </properties>
- <children>
- <node name="global">
- <properties>
- <help>Global administratives distances for BGP routes</help>
- </properties>
- <children>
- <leafNode name="external">
- <properties>
- <help>Administrative distance for external BGP routes</help>
- <valueHelp>
- <format>u32:1-255</format>
- <description>Administrative distance for external BGP routes</description>
- </valueHelp>
- <constraint>
- <validator name="numeric" argument="--range 1-255"/>
- </constraint>
- </properties>
- </leafNode>
- <leafNode name="internal">
- <properties>
- <help>Administrative distance for internal BGP routes</help>
- <valueHelp>
- <format>u32:1-255</format>
- <description>Administrative distance for internal BGP routes</description>
- </valueHelp>
- <constraint>
- <validator name="numeric" argument="--range 1-255"/>
- </constraint>
- </properties>
- </leafNode>
- <leafNode name="local">
- <properties>
- <help>Administrative distance for local BGP routes</help>
- <valueHelp>
- <format>u32:1-255</format>
- <description>Administrative distance for internal BGP routes</description>
- </valueHelp>
- <constraint>
- <validator name="numeric" argument="--range 1-255"/>
- </constraint>
- </properties>
- </leafNode>
- </children>
- </node>
- <tagNode name="prefix">
- <properties>
- <help>Administrative distance for a specific BGP prefix</help>
- <valueHelp>
- <format>ipv4net</format>
- <description>Administrative distance for a specific BGP prefix</description>
- </valueHelp>
- <constraint>
- <validator name="ipv4-prefix"/>
- </constraint>
- </properties>
- <children>
- <leafNode name="distance">
- <properties>
- <help>Administrative distance for prefix</help>
- <valueHelp>
- <format>u32:1-255</format>
- <description>Administrative distance for external BGP routes</description>
- </valueHelp>
- <constraint>
- <validator name="numeric" argument="--range 1-255"/>
- </constraint>
- </properties>
- </leafNode>
- </children>
- </tagNode>
- </children>
- </node>
- <leafNode name="ebgp-requires-policy">
- <properties>
- <help>Require in and out policy for eBGP peers (RFC8212)</help>
- <valueless/>
- </properties>
- </leafNode>
- <node name="graceful-restart">
- <properties>
- <help>Graceful restart capability parameters</help>
- </properties>
- <children>
- <leafNode name="stalepath-time">
- <properties>
- <help>Maximum time to hold onto restarting neighbors stale paths</help>
- <valueHelp>
- <format>u32:1-3600</format>
- <description>Hold time in seconds</description>
- </valueHelp>
- <constraint>
- <validator name="numeric" argument="--range 1-3600"/>
- </constraint>
- </properties>
- </leafNode>
- </children>
- </node>
- <leafNode name="graceful-shutdown">
- <properties>
- <help>Graceful shutdown</help>
- <valueless/>
- </properties>
- </leafNode>
- <leafNode name="log-neighbor-changes">
- <properties>
- <help>Log neighbor up/down changes and reset reason</help>
- <valueless/>
- </properties>
- </leafNode>
- <leafNode name="network-import-check">
- <properties>
- <help>Enable IGP route check for network statements</help>
- <valueless/>
- </properties>
- </leafNode>
- <leafNode name="no-client-to-client-reflection">
- <properties>
- <help>Disable client to client route reflection</help>
- <valueless/>
- </properties>
- </leafNode>
- <leafNode name="no-fast-external-failover">
- <properties>
- <help>Disable immediate session reset on peer link down event</help>
- <valueless/>
- </properties>
- </leafNode>
- <leafNode name="router-id">
- <properties>
- <help>BGP router id</help>
- <valueHelp>
- <format>ipv4</format>
- <description>BGP router id</description>
- </valueHelp>
- <constraint>
- <validator name="ipv4-address"/>
- </constraint>
- </properties>
- </leafNode>
- </children>
- </node>
- <tagNode name="peer-group">
- <properties>
- <help>BGP peer-group</help>
- </properties>
- <children>
- <node name="address-family">
- <properties>
- <help>BGP peer-group address-family parameters</help>
- </properties>
- <children>
- #include <include/bgp-neighbor-afi-ipv4-unicast.xml.i>
- #include <include/bgp-neighbor-afi-ipv6-unicast.xml.i>
- #include <include/bgp-neighbor-afi-l2vpn-evpn.xml.i>
- </children>
- </node>
- #include <include/bgp-bfd.xml.i>
- #include <include/bgp-capability.xml.i>
- #include <include/bgp-description.xml.i>
- #include <include/bgp-disable-capability-negotiation.xml.i>
- #include <include/bgp-disable-connected-check.xml.i>
- #include <include/bgp-ebgp-multihop.xml.i>
- #include <include/bgp-local-as.xml.i>
- #include <include/bgp-override-capability.xml.i>
- #include <include/bgp-passive.xml.i>
- #include <include/bgp-password.xml.i>
- #include <include/bgp-remote-as.xml.i>
- #include <include/bgp-shutdown.xml.i>
- #include <include/bgp-ttl-security.xml.i>
- #include <include/bgp-update-source.xml.i>
- </children>
- </tagNode>
- #include <include/bgp-route-map.xml.i>
- <node name="timers">
- <properties>
- <help>BGP protocol timers</help>
- </properties>
- <children>
- #include <include/bgp-timers-holdtime.xml.i>
- #include <include/bgp-timers-keepalive.xml.i>
- </children>
- </node>
+ #include <include/bgp/bgp-common-config.xml.i>
</children>
</tagNode>
</children>
diff --git a/interface-definitions/protocols-ospf.xml.in b/interface-definitions/protocols-ospf.xml.in
index b9c9fcc04..d9c3325ec 100644
--- a/interface-definitions/protocols-ospf.xml.in
+++ b/interface-definitions/protocols-ospf.xml.in
@@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
-<!-- Protocol OSPF configuration -->
<interfaceDefinition>
<node name="protocols">
<children>
@@ -9,822 +8,7 @@
<priority>620</priority>
</properties>
<children>
- <tagNode name="access-list">
- <properties>
- <help>Access list to filter networks in routing updates</help>
- <completionHelp>
- <path>policy access-list</path>
- </completionHelp>
- <valueHelp>
- <format>u32</format>
- <description>Access-list number</description>
- </valueHelp>
- <constraint>
- <validator name="numeric" argument="--range 0-4294967295"/>
- </constraint>
- </properties>
- <children>
- <leafNode name="export">
- <properties>
- <help>Filter for outgoing routing update [REQUIRED]</help>
- <completionHelp>
- <list>bgp connected kernel rip static</list>
- </completionHelp>
- <valueHelp>
- <format>bgp</format>
- <description>Filter BGP routes</description>
- </valueHelp>
- <valueHelp>
- <format>connected</format>
- <description>Filter connected routes</description>
- </valueHelp>
- <valueHelp>
- <format>isis</format>
- <description>Filter IS-IS routes</description>
- </valueHelp>
- <valueHelp>
- <format>kernel</format>
- <description>Filter Kernel routes</description>
- </valueHelp>
- <valueHelp>
- <format>rip</format>
- <description>Filter RIP routes</description>
- </valueHelp>
- <valueHelp>
- <format>static</format>
- <description>Filter static routes</description>
- </valueHelp>
- <constraint>
- <regex>^(bgp|connected|isis|kernel|rip|static)$</regex>
- </constraint>
- <constraintErrorMessage>Must be bgp, connected, kernel, rip, or static</constraintErrorMessage>
- <multi/>
- </properties>
- </leafNode>
- </children>
- </tagNode>
- <tagNode name="area">
- <properties>
- <help>OSPF Area</help>
- <valueHelp>
- <format>u32</format>
- <description>OSPF area in decimal notation</description>
- </valueHelp>
- <valueHelp>
- <format>ipv4</format>
- <description>OSPF area in dotted decimal notation</description>
- </valueHelp>
- <constraint>
- <validator name="numeric" argument="--range 0-4294967295"/>
- <validator name="ip-address"/>
- </constraint>
- </properties>
- <children>
- <node name="area-type">
- <properties>
- <help>Area type</help>
- </properties>
- <children>
- <leafNode name="normal">
- <properties>
- <help>Normal OSPF area</help>
- <valueless/>
- </properties>
- </leafNode>
- <node name="nssa">
- <properties>
- <help>Nssa OSPF area</help>
- </properties>
- <children>
- <leafNode name="default-cost">
- <properties>
- <help>Summary-default cost of nssa area</help>
- <valueHelp>
- <format>u32:0-16777215</format>
- <description>Summary default cost</description>
- </valueHelp>
- <constraint>
- <validator name="numeric" argument="--range 0-16777215"/>
- </constraint>
- </properties>
- </leafNode>
- <leafNode name="no-summary">
- <properties>
- <help>Do not inject inter-area routes into stub</help>
- <valueless/>
- </properties>
- </leafNode>
- <leafNode name="translate">
- <properties>
- <help>Configure NSSA-ABR (default: candidate)</help>
- <completionHelp>
- <list>always candidate never</list>
- </completionHelp>
- <valueHelp>
- <format>always</format>
- <description>NSSA-ABR to always translate</description>
- </valueHelp>
- <valueHelp>
- <format>candidate</format>
- <description>NSSA-ABR for translate election (default)</description>
- </valueHelp>
- <valueHelp>
- <format>never</format>
- <description>NSSA-ABR to never translate</description>
- </valueHelp>
- <constraint>
- <regex>^(always|candidate|never)$</regex>
- </constraint>
- </properties>
- <defaultValue>candidate</defaultValue>
- </leafNode>
- </children>
- </node>
- <node name="stub">
- <properties>
- <help>Stub OSPF area</help>
- </properties>
- <children>
- <leafNode name="default-cost">
- <properties>
- <help>Summary-default cost of nssa area</help>
- <valueHelp>
- <format>u32:0-16777215</format>
- <description>Summary default cost</description>
- </valueHelp>
- <constraint>
- <validator name="numeric" argument="--range 0-16777215"/>
- </constraint>
- </properties>
- </leafNode>
- <leafNode name="no-summary">
- <properties>
- <help>Do not inject inter-area routes into stub</help>
- <valueless/>
- </properties>
- </leafNode>
- </children>
- </node>
- </children>
- </node>
- <leafNode name="authentication">
- <properties>
- <help>OSPF area authentication type</help>
- <completionHelp>
- <list>plaintext-password md5</list>
- </completionHelp>
- <valueHelp>
- <format>plaintext-password</format>
- <description>Use plain-text authentication</description>
- </valueHelp>
- <valueHelp>
- <format>md5</format>
- <description>Use md5 authentication</description>
- </valueHelp>
- <constraint>
- <regex>^(plaintext-password|md5)$</regex>
- </constraint>
- </properties>
- </leafNode>
- <leafNode name="network">
- <properties>
- <help>OSPF network [REQUIRED]</help>
- <valueHelp>
- <format>ipv4net</format>
- <description>OSPF network [REQUIRED]</description>
- </valueHelp>
- <constraint>
- <validator name="ipv4-prefix"/>
- </constraint>
- <multi/>
- </properties>
- </leafNode>
- <tagNode name="range">
- <properties>
- <help>Summarize routes matching prefix (border routers only)</help>
- <valueHelp>
- <format>ipv4net</format>
- <description>Area range prefix</description>
- </valueHelp>
- <constraint>
- <validator name="ipv4-prefix"/>
- </constraint>
- </properties>
- <children>
- <leafNode name="cost">
- <properties>
- <help>Metric for this range</help>
- <valueHelp>
- <format>u32:0-16777215</format>
- <description>Metric for this range</description>
- </valueHelp>
- <constraint>
- <validator name="numeric" argument="--range 0-16777215"/>
- </constraint>
- </properties>
- </leafNode>
- <leafNode name="not-advertise">
- <properties>
- <help>Do not advertise this range</help>
- <valueless/>
- </properties>
- </leafNode>
- <leafNode name="substitute">
- <properties>
- <help>Announce area range as another prefix</help>
- <valueHelp>
- <format>ipv4net</format>
- <description>Announce area range as another prefix</description>
- </valueHelp>
- <constraint>
- <validator name="ipv4-prefix"/>
- </constraint>
- </properties>
- </leafNode>
- </children>
- </tagNode>
- <leafNode name="shortcut">
- <properties>
- <help>Area shortcut mode</help>
- <completionHelp>
- <list>default disable enable</list>
- </completionHelp>
- <valueHelp>
- <format>default</format>
- <description>Set default</description>
- </valueHelp>
- <valueHelp>
- <format>disable</format>
- <description>Disable shortcutting mode</description>
- </valueHelp>
- <valueHelp>
- <format>enable</format>
- <description>Enable shortcutting mode</description>
- </valueHelp>
- <constraint>
- <regex>^(default|disable|enable)$</regex>
- </constraint>
- </properties>
- </leafNode>
- <tagNode name="virtual-link">
- <properties>
- <help>Virtual link</help>
- <valueHelp>
- <format>ipv4</format>
- <description>OSPF area in dotted decimal notation</description>
- </valueHelp>
- <constraint>
- <validator name="numeric" argument="--range 0-4294967295"/>
- <validator name="ip-address"/>
- </constraint>
- </properties>
- <children>
- #include <include/ospf-authentication.xml.i>
- #include <include/ospf-intervals.xml.i>
- </children>
- </tagNode>
- </children>
- </tagNode>
- <node name="auto-cost">
- <properties>
- <help>Calculate OSPF interface cost according to bandwidth (default: 100)</help>
- </properties>
- <children>
- <leafNode name="reference-bandwidth">
- <properties>
- <help>Reference bandwidth method to assign OSPF cost</help>
- <valueHelp>
- <format>u32:1-4294967</format>
- <description>Reference bandwidth cost in Mbits/sec</description>
- </valueHelp>
- <constraint>
- <validator name="numeric" argument="--range 1-4294967"/>
- </constraint>
- </properties>
- <defaultValue>100</defaultValue>
- </leafNode>
- </children>
- </node>
- <node name="default-information">
- <properties>
- <help>Control distribution of default information</help>
- </properties>
- <children>
- <node name="originate">
- <properties>
- <help>Distribute a default route</help>
- </properties>
- <children>
- <leafNode name="always">
- <properties>
- <help>Always advertise default route</help>
- <valueless/>
- </properties>
- </leafNode>
- #include <include/ospf-metric.xml.i>
- #include <include/ospf-metric-type.xml.i>
- #include <include/ospf-route-map.xml.i>
- </children>
- </node>
- </children>
- </node>
- <leafNode name="default-metric">
- <properties>
- <help>Metric of redistributed routes</help>
- <valueHelp>
- <format>u32:0-16777214</format>
- <description>Metric of redistributed routes</description>
- </valueHelp>
- <constraint>
- <validator name="numeric" argument="--range 0-16777214"/>
- </constraint>
- </properties>
- </leafNode>
- <node name="distance">
- <properties>
- <help>Administrative distance</help>
- </properties>
- <children>
- <leafNode name="global">
- <properties>
- <help>OSPF administrative distance</help>
- <valueHelp>
- <format>u32:1-255</format>
- <description>Administrative distance</description>
- </valueHelp>
- <constraint>
- <validator name="numeric" argument="--range 1-255"/>
- </constraint>
- </properties>
- </leafNode>
- <node name="ospf">
- <properties>
- <help>OSPF administrative distance</help>
- </properties>
- <children>
- <leafNode name="external">
- <properties>
- <help>Distance for external routes</help>
- <valueHelp>
- <format>u32:1-255</format>
- <description>Distance for external routes</description>
- </valueHelp>
- <constraint>
- <validator name="numeric" argument="--range 1-255"/>
- </constraint>
- </properties>
- </leafNode>
- <leafNode name="inter-area">
- <properties>
- <help>Distance for inter-area routes</help>
- <valueHelp>
- <format>u32:1-255</format>
- <description>Distance for inter-area routes</description>
- </valueHelp>
- <constraint>
- <validator name="numeric" argument="--range 1-255"/>
- </constraint>
- </properties>
- </leafNode>
- <leafNode name="intra-area">
- <properties>
- <help>Distance for intra-area routes</help>
- <valueHelp>
- <format>u32:1-255</format>
- <description>Distance for intra-area routes</description>
- </valueHelp>
- <constraint>
- <validator name="numeric" argument="--range 1-255"/>
- </constraint>
- </properties>
- </leafNode>
- </children>
- </node>
- </children>
- </node>
- <tagNode name="interface">
- <properties>
- <help>Interface related configuration</help>
- <completionHelp>
- <script>${vyos_completion_dir}/list_interfaces.py</script>
- </completionHelp>
- <valueHelp>
- <format>txt</format>
- <description>Interface name</description>
- </valueHelp>
- <constraint>
- <validator name="interface-name"/>
- </constraint>
- </properties>
- <children>
- #include <include/ospf-authentication.xml.i>
- #include <include/ospf-intervals.xml.i>
- #include <include/ospf-interface-common.xml.i>
- <leafNode name="bandwidth">
- <properties>
- <help>Bandwidth of interface (Megabit/sec)</help>
- <valueHelp>
- <format>u32:1-100000</format>
- <description>Bandwidth in Megabit/sec (for calculating OSPF cost)</description>
- </valueHelp>
- <constraint>
- <validator name="numeric" argument="--range 1-100000"/>
- </constraint>
- </properties>
- </leafNode>
- <leafNode name="hello-multiplier">
- <properties>
- <help>Hello multiplier factor</help>
- <valueHelp>
- <format>u32:1-10</format>
- <description>Number of Hellos to send each second</description>
- </valueHelp>
- <constraint>
- <validator name="numeric" argument="--range 1-10"/>
- </constraint>
- </properties>
- </leafNode>
- <leafNode name="network">
- <properties>
- <help>Network type</help>
- <completionHelp>
- <list>broadcast non-broadcast point-to-multipoint point-to-point</list>
- </completionHelp>
- <valueHelp>
- <format>broadcast</format>
- <description>Broadcast network type</description>
- </valueHelp>
- <valueHelp>
- <format>non-broadcast</format>
- <description>Non-broadcast network type</description>
- </valueHelp>
- <valueHelp>
- <format>point-to-multipoint</format>
- <description>Point-to-multipoint network type</description>
- </valueHelp>
- <valueHelp>
- <format>point-to-point</format>
- <description>Point-to-point network type</description>
- </valueHelp>
- <constraint>
- <regex>^(broadcast|non-broadcast|point-to-multipoint|point-to-point)$</regex>
- </constraint>
- <constraintErrorMessage>Must be broadcast, non-broadcast, point-to-multipoint or point-to-point</constraintErrorMessage>
- </properties>
- </leafNode>
- </children>
- </tagNode>
- <node name="log-adjacency-changes">
- <properties>
- <help>Log changes in adjacency state</help>
- </properties>
- <children>
- <leafNode name="detail">
- <properties>
- <help>Log all state changes</help>
- <valueless/>
- </properties>
- </leafNode>
- </children>
- </node>
- <node name="max-metric">
- <properties>
- <help>OSPF maximum and infinite-distance metric</help>
- </properties>
- <children>
- <node name="router-lsa">
- <properties>
- <help>Advertise own Router-LSA with infinite distance (stub router)</help>
- </properties>
- <children>
- <leafNode name="administrative">
- <properties>
- <help>Administratively apply, for an indefinite period</help>
- <valueless/>
- </properties>
- </leafNode>
- <leafNode name="on-shutdown">
- <properties>
- <help>Advertise stub-router prior to full shutdown of OSPF</help>
- <valueHelp>
- <format>u32:5-100</format>
- <description>Time (seconds) to advertise self as stub-router</description>
- </valueHelp>
- <constraint>
- <validator name="numeric" argument="--range 5-100"/>
- </constraint>
- </properties>
- </leafNode>
- <leafNode name="on-startup">
- <properties>
- <help>Automatically advertise stub Router-LSA on startup of OSPF</help>
- <valueHelp>
- <format>u32:5-86400</format>
- <description>Time (seconds) to advertise self as stub-router</description>
- </valueHelp>
- <constraint>
- <validator name="numeric" argument="--range 5-86400"/>
- </constraint>
- </properties>
- </leafNode>
- </children>
- </node>
- </children>
- </node>
- <node name="mpls-te">
- <properties>
- <help>MultiProtocol Label Switching-Traffic Engineering (MPLS-TE) parameters</help>
- </properties>
- <children>
- <leafNode name="enable">
- <properties>
- <help>Enable MPLS-TE functionality</help>
- <valueless/>
- </properties>
- </leafNode>
- <leafNode name="router-address">
- <properties>
- <help>Stable IP address of the advertising router</help>
- <valueHelp>
- <format>ipv4</format>
- <description>Stable IP address of the advertising router</description>
- </valueHelp>
- <constraint>
- <validator name="ipv4-address"/>
- </constraint>
- </properties>
- <defaultValue>0.0.0.0</defaultValue>
- </leafNode>
- </children>
- </node>
- <tagNode name="neighbor">
- <properties>
- <help>Specify neighbor router</help>
- <valueHelp>
- <format>ipv4</format>
- <description>Neighbor IP address</description>
- </valueHelp>
- <constraint>
- <validator name="ipv4-address"/>
- </constraint>
- </properties>
- <children>
- <leafNode name="poll-interval">
- <properties>
- <help>Dead neighbor polling interval (default: 60)</help>
- <valueHelp>
- <format>u32:1-65535</format>
- <description>Seconds between dead neighbor polling interval</description>
- </valueHelp>
- <constraint>
- <validator name="numeric" argument="--range 1-65535"/>
- </constraint>
- </properties>
- <defaultValue>60</defaultValue>
- </leafNode>
- <leafNode name="priority">
- <properties>
- <help>Neighbor priority in seconds (default: 0)</help>
- <valueHelp>
- <format>u32:0-255</format>
- <description>Neighbor priority</description>
- </valueHelp>
- <constraint>
- <validator name="numeric" argument="--range 0-255"/>
- </constraint>
- </properties>
- <defaultValue>0</defaultValue>
- </leafNode>
- </children>
- </tagNode>
- <node name="parameters">
- <properties>
- <help>OSPF specific parameters</help>
- </properties>
- <children>
- <leafNode name="abr-type">
- <properties>
- <help>OSPF ABR type (default: cisco)</help>
- <completionHelp>
- <list>cisco ibm shortcut standard</list>
- </completionHelp>
- <valueHelp>
- <format>cisco</format>
- <description>Cisco ABR type (default)</description>
- </valueHelp>
- <valueHelp>
- <format>ibm</format>
- <description>Ibm ABR type</description>
- </valueHelp>
- <valueHelp>
- <format>shortcut</format>
- <description>Shortcut ABR type</description>
- </valueHelp>
- <valueHelp>
- <format>standard</format>
- <description>Standard ABR type</description>
- </valueHelp>
- <constraint>
- <regex>^(cisco|ibm|shortcut|standard)$</regex>
- </constraint>
- </properties>
- <defaultValue>cisco</defaultValue>
- </leafNode>
- <leafNode name="opaque-lsa">
- <properties>
- <help>Enable the Opaque-LSA capability (rfc2370)</help>
- <valueless/>
- </properties>
- </leafNode>
- <leafNode name="rfc1583-compatibility">
- <properties>
- <help>Enable rfc1583 criteria for handling AS external routes</help>
- <valueless/>
- </properties>
- </leafNode>
- <leafNode name="router-id">
- <properties>
- <help>Override the default router identifier</help>
- <valueHelp>
- <format>ipv4</format>
- <description>Override the default router identifier</description>
- </valueHelp>
- <constraint>
- <validator name="ipv4-address"/>
- </constraint>
- </properties>
- </leafNode>
- </children>
- </node>
- #include <include/routing-passive-interface-xml.i>
- <leafNode name="passive-interface-exclude">
- <properties>
- <help>Interface to exclude when using 'passive-interface default'</help>
- <completionHelp>
- <script>${vyos_completion_dir}/list_interfaces.py</script>
- </completionHelp>
- <valueHelp>
- <format>txt</format>
- <description>Interface to exclude when suppressing routing updates</description>
- </valueHelp>
- <valueHelp>
- <format>vlinkN</format>
- <description>Virtual-link interface to exclude when suppressing routing updates</description>
- </valueHelp>
- <constraint>
- <validator name="interface-name"/>
- <regex>^(vlink[0-9]+)$</regex>
- </constraint>
- <multi/>
- </properties>
- </leafNode>
- <node name="redistribute">
- <properties>
- <help>Redistribute information from another routing protocol</help>
- </properties>
- <children>
- <node name="bgp">
- <properties>
- <help>Redistribute BGP routes</help>
- </properties>
- <children>
- #include <include/ospf-metric.xml.i>
- #include <include/ospf-metric-type.xml.i>
- #include <include/ospf-route-map.xml.i>
- </children>
- </node>
- <node name="connected">
- <properties>
- <help>Redistribute connected routes</help>
- </properties>
- <children>
- #include <include/ospf-metric.xml.i>
- #include <include/ospf-metric-type.xml.i>
- #include <include/ospf-route-map.xml.i>
- </children>
- </node>
- <node name="isis">
- <properties>
- <help>Redistribute IS-IS routes</help>
- </properties>
- <children>
- #include <include/ospf-metric.xml.i>
- #include <include/ospf-metric-type.xml.i>
- #include <include/ospf-route-map.xml.i>
- </children>
- </node>
- <node name="kernel">
- <properties>
- <help>Redistribute kernel routes</help>
- </properties>
- <children>
- #include <include/ospf-metric.xml.i>
- #include <include/ospf-metric-type.xml.i>
- #include <include/ospf-route-map.xml.i>
- </children>
- </node>
- <node name="rip">
- <properties>
- <help>Redistribute rip routes</help>
- </properties>
- <children>
- #include <include/ospf-metric.xml.i>
- #include <include/ospf-metric-type.xml.i>
- #include <include/ospf-route-map.xml.i>
- </children>
- </node>
- <node name="static">
- <properties>
- <help>Redistribute static routes</help>
- </properties>
- <children>
- #include <include/ospf-metric.xml.i>
- #include <include/ospf-metric-type.xml.i>
- #include <include/ospf-route-map.xml.i>
- </children>
- </node>
- </children>
- </node>
- <node name="refresh">
- <properties>
- <help>Adjust refresh parameters</help>
- </properties>
- <children>
- <leafNode name="timers">
- <properties>
- <help>Refresh timer</help>
- <valueHelp>
- <format>u32:10-1800</format>
- <description>Timer value in seconds</description>
- </valueHelp>
- <constraint>
- <validator name="numeric" argument="--range 10-1800"/>
- </constraint>
- </properties>
- </leafNode>
- </children>
- </node>
- #include <include/ospf-route-map.xml.i>
- <node name="timers">
- <properties>
- <help>Adjust routing timers</help>
- </properties>
- <children>
- <node name="throttle">
- <properties>
- <help>Throttling adaptive timers</help>
- </properties>
- <children>
- <node name="spf">
- <properties>
- <help>OSPF SPF timers</help>
- </properties>
- <children>
- <leafNode name="delay">
- <properties>
- <help>Delay from first change received till SPF calculation (default: 200)</help>
- <valueHelp>
- <format>u32:0-600000</format>
- <description>Delay in milliseconds</description>
- </valueHelp>
- <constraint>
- <validator name="numeric" argument="--range 0-600000"/>
- </constraint>
- </properties>
- <defaultValue>200</defaultValue>
- </leafNode>
- <leafNode name="initial-holdtime">
- <properties>
- <help>Initial hold time between consecutive SPF calculations (default: 1000)</help>
- <valueHelp>
- <format>u32:0-600000</format>
- <description>Initial hold time in milliseconds</description>
- </valueHelp>
- <constraint>
- <validator name="numeric" argument="--range 0-600000"/>
- </constraint>
- </properties>
- <defaultValue>1000</defaultValue>
- </leafNode>
- <leafNode name="max-holdtime">
- <properties>
- <help>Maximum hold time (default: 10000)</help>
- <valueHelp>
- <format>u32:0-600000</format>
- <description>Max hold time in milliseconds</description>
- </valueHelp>
- <constraint>
- <validator name="numeric" argument="--range 0-600000"/>
- </constraint>
- </properties>
- <defaultValue>10000</defaultValue>
- </leafNode>
- </children>
- </node>
- </children>
- </node>
- </children>
- </node>
+ #include <include/ospf/ospf-common-config.xml.i>
</children>
</node>
</children>
diff --git a/interface-definitions/protocols-ospfv3.xml.in b/interface-definitions/protocols-ospfv3.xml.in
index 2559e2b03..06787b604 100644
--- a/interface-definitions/protocols-ospfv3.xml.in
+++ b/interface-definitions/protocols-ospfv3.xml.in
@@ -90,59 +90,13 @@
<help>Administrative distance</help>
</properties>
<children>
- <leafNode name="global">
- <properties>
- <help>OSPFv3 administrative distance</help>
- <valueHelp>
- <format>u32:1-255</format>
- <description>Administrative distance</description>
- </valueHelp>
- <constraint>
- <validator name="numeric" argument="--range 1-255"/>
- </constraint>
- </properties>
- </leafNode>
+ #include <include/ospf/ospf-distance-global.xml.i>
<node name="ospfv3">
<properties>
<help>OSPFv3 administrative distance</help>
</properties>
<children>
- <leafNode name="external">
- <properties>
- <help>Distance for external routes</help>
- <valueHelp>
- <format>u32:1-255</format>
- <description>Distance for external routes</description>
- </valueHelp>
- <constraint>
- <validator name="numeric" argument="--range 1-255"/>
- </constraint>
- </properties>
- </leafNode>
- <leafNode name="inter-area">
- <properties>
- <help>Distance for inter-area routes</help>
- <valueHelp>
- <format>u32:1-255</format>
- <description>Distance for inter-area routes</description>
- </valueHelp>
- <constraint>
- <validator name="numeric" argument="--range 1-255"/>
- </constraint>
- </properties>
- </leafNode>
- <leafNode name="intra-area">
- <properties>
- <help>Distance for intra-area routes</help>
- <valueHelp>
- <format>u32:1-255</format>
- <description>Distance for intra-area routes</description>
- </valueHelp>
- <constraint>
- <validator name="numeric" argument="--range 1-255"/>
- </constraint>
- </properties>
- </leafNode>
+ #include <include/ospf/ospf-distance-per-protocol.xml.i>
</children>
</node>
</children>
@@ -162,8 +116,8 @@
</constraint>
</properties>
<children>
- #include <include/ospf-intervals.xml.i>
- #include <include/ospf-interface-common.xml.i>
+ #include <include/ospf/ospf-intervals.xml.i>
+ #include <include/ospf/ospf-interface-common.xml.i>
<leafNode name="ifmtu">
<properties>
<help>Interface MTU</help>
@@ -222,18 +176,7 @@
<help>OSPFv3 specific parameters</help>
</properties>
<children>
- <leafNode name="router-id">
- <properties>
- <help>Override the default router identifier</help>
- <valueHelp>
- <format>ipv4</format>
- <description>Override the default router identifier</description>
- </valueHelp>
- <constraint>
- <validator name="ipv4-address"/>
- </constraint>
- </properties>
- </leafNode>
+ #include <include/ospf/ospf-router-id.xml.i>
</children>
</node>
<node name="redistribute">
@@ -246,7 +189,7 @@
<help>Redistribute BGP routes</help>
</properties>
<children>
- #include <include/ospf-route-map.xml.i>
+ #include <include/route-map.xml.i>
</children>
</node>
<node name="connected">
@@ -254,7 +197,7 @@
<help>Redistribute connected routes</help>
</properties>
<children>
- #include <include/ospf-route-map.xml.i>
+ #include <include/route-map.xml.i>
</children>
</node>
<node name="kernel">
@@ -262,7 +205,7 @@
<help>Redistribute kernel routes</help>
</properties>
<children>
- #include <include/ospf-route-map.xml.i>
+ #include <include/route-map.xml.i>
</children>
</node>
<node name="ripng">
@@ -270,7 +213,7 @@
<help>Redistribute RIPNG routes</help>
</properties>
<children>
- #include <include/ospf-route-map.xml.i>
+ #include <include/route-map.xml.i>
</children>
</node>
<node name="static">
@@ -278,12 +221,12 @@
<help>Redistribute static routes</help>
</properties>
<children>
- #include <include/ospf-route-map.xml.i>
+ #include <include/route-map.xml.i>
</children>
</node>
</children>
</node>
- #include <include/ospf-route-map.xml.i>
+ #include <include/route-map.xml.i>
</children>
</node>
</children>
diff --git a/interface-definitions/protocols-ripng.xml.in b/interface-definitions/protocols-ripng.xml.in
index e456c3f3b..3eac27788 100644
--- a/interface-definitions/protocols-ripng.xml.in
+++ b/interface-definitions/protocols-ripng.xml.in
@@ -137,7 +137,7 @@
<multi/>
</properties>
</leafNode>
- #include <include/ospf-route-map.xml.i>
+ #include <include/route-map.xml.i>
#include <include/rip-timers.xml.i>
</children>
</node>
diff --git a/interface-definitions/protocols-vrf.xml.in b/interface-definitions/protocols-vrf.xml.in
deleted file mode 100644
index 77297938b..000000000
--- a/interface-definitions/protocols-vrf.xml.in
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<interfaceDefinition>
- <node name="protocols">
- <children>
- <tagNode name="vrf" owner="${vyos_conf_scripts_dir}/protocols_vrf.py">
- <properties>
- <help>Name of VRF to add route for</help>
- <completionHelp>
- <path>vrf name</path>
- </completionHelp>
- <valueHelp>
- <format>txt</format>
- <description>VRF instance name</description>
- </valueHelp>
- <constraint>
- <validator name="vrf-name"/>
- </constraint>
- <constraintErrorMessage>VRF instance name must be 15 characters or less and can not\nbe named as regular network interfaces.\n</constraintErrorMessage>
- </properties>
- <children>
- <node name="static">
- <properties>
- <help>Static route parameters</help>
- </properties>
- <children>
- #include <include/static-route.xml.i>
- #include <include/static-route6.xml.i>
- </children>
- </node>
- #include <include/vni.xml.i>
- </children>
- </tagNode>
- </children>
- </node>
-</interfaceDefinition>
diff --git a/interface-definitions/vrf.xml.in b/interface-definitions/vrf.xml.in
index eca9e75a7..b1d25926e 100644
--- a/interface-definitions/vrf.xml.in
+++ b/interface-definitions/vrf.xml.in
@@ -15,17 +15,61 @@
</leafNode>
<tagNode name="name">
<properties>
- <help>VRF instance name</help>
+ <help>Virtual Routing and Forwarding instance</help>
<constraint>
<validator name="vrf-name"/>
</constraint>
<constraintErrorMessage>VRF instance name must be 15 characters or less and can not\nbe named as regular network interfaces.\n</constraintErrorMessage>
<valueHelp>
<format>txt</format>
- <description>Instance name</description>
+ <description>VRF instance name</description>
</valueHelp>
</properties>
<children>
+ #include <include/interface-description.xml.i>
+ #include <include/interface-disable.xml.i>
+ <node name="protocols">
+ <properties>
+ <help>Routing protocol parameters</help>
+ </properties>
+ <children>
+ <node name="static" owner="${vyos_conf_scripts_dir}/protocols_static.py $VAR(../../@)">
+ <properties>
+ <help>Static route parameters</help>
+ <priority>600</priority>
+ </properties>
+ <children>
+ #include <include/static-route.xml.i>
+ #include <include/static-route6.xml.i>
+ </children>
+ </node>
+ <tagNode name="bgp" owner="${vyos_conf_scripts_dir}/protocols_bgp.py $VAR(../../@)">
+ <properties>
+ <help>Border Gateway Protocol (BGP)</help>
+ <priority>820</priority>
+ <valueHelp>
+ <format>u32:1-4294967294</format>
+ <description>Autonomous System Number</description>
+ </valueHelp>
+ <constraint>
+ <validator name="numeric" argument="--range 1-4294967294"/>
+ </constraint>
+ </properties>
+ <children>
+ #include <include/bgp/bgp-common-config.xml.i>
+ </children>
+ </tagNode>
+ <node name="ospf" owner="${vyos_conf_scripts_dir}/protocols_ospf.py $VAR(../../@)">
+ <properties>
+ <help>Open Shortest Path First (OSPF)</help>
+ <priority>620</priority>
+ </properties>
+ <children>
+ #include <include/ospf/ospf-common-config.xml.i>
+ </children>
+ </node>
+ </children>
+ </node>
<leafNode name="table">
<properties>
<help>Routing table associated with this instance</help>
@@ -39,8 +83,6 @@
<constraintErrorMessage>VRF routing table must be in range from 100 to 2147483647</constraintErrorMessage>
</properties>
</leafNode>
- #include <include/interface-description.xml.i>
- #include <include/interface-disable.xml.i>
</children>
</tagNode>
</children>
diff --git a/python/vyos/util.py b/python/vyos/util.py
index 17a7dda91..e4de56cdb 100644
--- a/python/vyos/util.py
+++ b/python/vyos/util.py
@@ -646,7 +646,7 @@ def dict_search(path, dict):
c = c.get(p, {})
return c.get(parts[-1], None)
-def get_json_iface_options(interface):
+def get_interface_config(interface):
""" Returns the used encapsulation protocol for given interface.
If interface does not exist, None is returned.
"""
@@ -655,3 +655,16 @@ def get_json_iface_options(interface):
from json import loads
tmp = loads(cmd(f'ip -d -j link show {interface}'))[0]
return tmp
+
+def get_all_vrfs():
+ """ Return a dictionary of all system wide known VRF instances """
+ from json import loads
+ tmp = loads(cmd('ip -j vrf list'))
+ # Result is of type [{"name":"red","table":1000},{"name":"blue","table":2000}]
+ # so we will re-arrange it to a more nicer representation:
+ # {'red': {'table': 1000}, 'blue': {'table': 2000}}
+ data = {}
+ for entry in tmp:
+ name = entry.pop('name')
+ data[name] = entry
+ return data
diff --git a/smoketest/configs/vrf-bgp b/smoketest/configs/vrf-bgp
new file mode 100644
index 000000000..4ad372a36
--- /dev/null
+++ b/smoketest/configs/vrf-bgp
@@ -0,0 +1,166 @@
+interfaces {
+ ethernet eth0 {
+ address 192.0.2.1/24
+ }
+ ethernet eth1 {
+ vrf black
+ }
+ ethernet eth2 {
+ vrf black
+ }
+}
+protocols {
+ ospf {
+ area 0 {
+ network 192.0.2.0/24
+ }
+ interface eth0 {
+ authentication {
+ md5 {
+ key-id 10 {
+ md5-key ospfkey
+ }
+ }
+ }
+ }
+ log-adjacency-changes {
+ }
+ parameters {
+ abr-type cisco
+ router-id 1.2.3.4
+ }
+ passive-interface default
+ passive-interface-exclude eth0
+ }
+}
+system {
+ config-management {
+ commit-revisions 100
+ }
+ console {
+ device ttyS0 {
+ speed 115200
+ }
+ }
+ host-name vyos
+ login {
+ user vyos {
+ authentication {
+ encrypted-password $6$O5gJRlDYQpj$MtrCV9lxMnZPMbcxlU7.FI793MImNHznxGoMFgm3Q6QP3vfKJyOSRCt3Ka/GzFQyW1yZS4NS616NLHaIPPFHc0
+ plaintext-password ""
+ }
+ }
+ }
+ nt
+ ntp {
+ server 0.pool.ntp.org {
+ }
+ server 1.pool.ntp.org {
+ }
+ server 2.pool.ntp.org {
+ }
+ }
+ syslog {
+ global {
+ facility all {
+ level info
+ }
+ facility protocols {
+ level debug
+ }
+ }
+ }
+ time-zone Europe/Berlin
+}
+vrf {
+ name black {
+ protocols {
+ bgp 65000 {
+ address-family {
+ ipv4-unicast {
+ network 10.0.150.0/23 {
+ }
+ }
+ ipv6-unicast {
+ network 2001:db8:200::/40 {
+ }
+ }
+ }
+ neighbor 10.0.151.222 {
+ disable-send-community {
+ extended
+ standard
+ }
+ address-family {
+ ipv4-unicast {
+ default-originate {
+ }
+ soft-reconfiguration {
+ inbound
+ }
+ }
+ }
+ capability {
+ dynamic
+ }
+ remote-as 65010
+ }
+ neighbor 10.0.151.252 {
+ peer-group VYOSv4
+ }
+ neighbor 10.0.151.254 {
+ peer-group VYOSv4
+ }
+ neighbor 2001:db8:200:ffff::3 {
+ peer-group VYOSv6
+ }
+ neighbor 2001:db8:200:ffff::a {
+ peer-group VYOSv6
+ }
+ neighbor 2001:db8:200:ff::101:2 {
+ remote-as 65010
+ }
+ parameters {
+ default {
+ no-ipv4-unicast
+ }
+ log-neighbor-changes
+ router-id 10.0.151.251
+ }
+ peer-group VYOSv4 {
+ address-family {
+ ipv4-unicast {
+ nexthop-self {
+ }
+ }
+ }
+ capability {
+ dynamic
+ }
+ remote-as 65000
+ update-source dum0
+ }
+ peer-group VYOSv6 {
+ address-family {
+ ipv6-unicast {
+ nexthop-self {
+ }
+ }
+ }
+ capability {
+ dynamic
+ }
+ remote-as 65000
+ update-source dum0
+ }
+ }
+
+ }
+ table 2000
+ }
+}
+
+
+// Warning: Do not remove the following line.
+// vyos-config-version: "broadcast-relay@1:cluster@1:config-management@1:conntrack@2:conntrack-sync@1:dhcp-relay@2:dhcp-server@5:dhcpv6-server@1:dns-forwarding@3:firewall@5:https@2:interfaces@20:ipoe-server@1:ipsec@5:l2tp@3:lldp@1:mdns@1:nat@5:nat66@1:ntp@1:pppoe-server@5:pptp@2:qos@1:quagga@9:rpki@1:salt@1:snmp@2:ssh@2:sstp@3:system@20:vrf@2:vrrp@2:vyos-accel-ppp@2:wanloadbalance@3:webproxy@2:zone-policy@1"
+// Release version: 1.4-rolling-202103130218
diff --git a/smoketest/configs/vrf-ospf b/smoketest/configs/vrf-ospf
new file mode 100644
index 000000000..7855e86bf
--- /dev/null
+++ b/smoketest/configs/vrf-ospf
@@ -0,0 +1,145 @@
+interfaces {
+ ethernet eth0 {
+ address 192.0.2.1/24
+ }
+ ethernet eth1 {
+ vrf red
+ }
+ ethernet eth2 {
+ vrf blue
+ }
+}
+protocols {
+ ospf {
+ area 0 {
+ network 192.0.2.0/24
+ }
+ interface eth0 {
+ authentication {
+ md5 {
+ key-id 10 {
+ md5-key ospfkey
+ }
+ }
+ }
+ }
+ log-adjacency-changes {
+ }
+ parameters {
+ abr-type cisco
+ router-id 1.2.3.4
+ }
+ passive-interface default
+ passive-interface-exclude eth0
+ }
+}
+system {
+ config-management {
+ commit-revisions 100
+ }
+ console {
+ device ttyS0 {
+ speed 115200
+ }
+ }
+ host-name vyos
+ login {
+ user vyos {
+ authentication {
+ encrypted-password $6$O5gJRlDYQpj$MtrCV9lxMnZPMbcxlU7.FI793MImNHznxGoMFgm3Q6QP3vfKJyOSRCt3Ka/GzFQyW1yZS4NS616NLHaIPPFHc0
+ plaintext-password ""
+ }
+ }
+ }
+ nt
+ ntp {
+ server 0.pool.ntp.org {
+ }
+ server 1.pool.ntp.org {
+ }
+ server 2.pool.ntp.org {
+ }
+ }
+ syslog {
+ global {
+ facility all {
+ level info
+ }
+ facility protocols {
+ level debug
+ }
+ }
+ }
+ time-zone Europe/Berlin
+}
+vrf {
+ name blue {
+ protocols {
+ ospf {
+ area 0 {
+ network 172.18.201.0/24
+ }
+ interface eth2 {
+ authentication {
+ md5 {
+ key-id 30 {
+ md5-key vyoskey456
+ }
+ }
+ }
+ dead-interval 40
+ hello-interval 10
+ priority 1
+ retransmit-interval 5
+ transmit-delay 1
+ }
+ log-adjacency-changes {
+ }
+ parameters {
+ abr-type cisco
+ router-id 5.6.7.8
+ }
+ passive-interface default
+ passive-interface-exclude eth2
+ }
+ }
+ table 2000
+ }
+ name red {
+ protocols {
+ ospf {
+ area 0 {
+ network 172.18.202.0/24
+ }
+ interface eth1 {
+ authentication {
+ md5 {
+ key-id 20 {
+ md5-key vyoskey123
+ }
+ }
+ }
+ dead-interval 40
+ hello-interval 10
+ priority 1
+ retransmit-interval 5
+ transmit-delay 1
+ }
+ log-adjacency-changes {
+ }
+ parameters {
+ abr-type cisco
+ router-id 9.10.11.12
+ }
+ passive-interface default
+ passive-interface-exclude eth1
+ }
+ }
+ table 1000
+ }
+}
+
+
+// Warning: Do not remove the following line.
+// vyos-config-version: "broadcast-relay@1:cluster@1:config-management@1:conntrack@2:conntrack-sync@1:dhcp-relay@2:dhcp-server@5:dhcpv6-server@1:dns-forwarding@3:firewall@5:https@2:interfaces@20:ipoe-server@1:ipsec@5:l2tp@3:lldp@1:mdns@1:nat@5:nat66@1:ntp@1:pppoe-server@5:pptp@2:qos@1:quagga@9:rpki@1:salt@1:snmp@2:ssh@2:sstp@3:system@20:vrf@2:vrrp@2:vyos-accel-ppp@2:wanloadbalance@3:webproxy@2:zone-policy@1"
+// Release version: 1.4-rolling-202103130218
diff --git a/smoketest/scripts/cli/base_interfaces_test.py b/smoketest/scripts/cli/base_interfaces_test.py
index d038e9cb8..50cfa2607 100644
--- a/smoketest/scripts/cli/base_interfaces_test.py
+++ b/smoketest/scripts/cli/base_interfaces_test.py
@@ -29,7 +29,7 @@ from vyos.util import read_file
from vyos.util import cmd
from vyos.util import dict_search
from vyos.util import process_named_running
-from vyos.util import get_json_iface_options
+from vyos.util import get_interface_config
from vyos.validate import is_intf_addr_assigned
from vyos.validate import is_ipv6_link_local
@@ -353,7 +353,7 @@ class BasicInterfaceTest:
for interface in self._interfaces:
for vif_s in self._qinq_range:
- tmp = get_json_iface_options(f'{interface}.{vif_s}')
+ tmp = get_interface_config(f'{interface}.{vif_s}')
self.assertEqual(dict_search('linkinfo.info_data.protocol', tmp), '802.1ad')
for vif_c in self._vlan_range:
diff --git a/smoketest/scripts/cli/test_interfaces_erspan.py b/smoketest/scripts/cli/test_interfaces_erspan.py
index cbb41d0c9..4575c61ce 100755
--- a/smoketest/scripts/cli/test_interfaces_erspan.py
+++ b/smoketest/scripts/cli/test_interfaces_erspan.py
@@ -18,7 +18,7 @@ import unittest
from vyos.configsession import ConfigSession
from vyos.configsession import ConfigSessionError
-from vyos.util import get_json_iface_options
+from vyos.util import get_interface_config
from base_interfaces_test import BasicInterfaceTest
@@ -52,7 +52,7 @@ class ERSPanTunnelInterfaceTest(BasicInterfaceTest.BaseTest):
self.session.commit()
- conf = get_json_iface_options(interface)
+ conf = get_interface_config(interface)
self.assertEqual(interface, conf['ifname'])
self.assertEqual(encapsulation, conf['linkinfo']['info_kind'])
self.assertEqual(mtu, conf['mtu'])
@@ -73,7 +73,7 @@ class ERSPanTunnelInterfaceTest(BasicInterfaceTest.BaseTest):
self.session.commit()
- conf = get_json_iface_options(interface)
+ conf = get_interface_config(interface)
self.assertEqual(interface, conf['ifname'])
self.assertEqual(encapsulation, conf['linkinfo']['info_kind'])
self.assertEqual(mtu, conf['mtu'])
diff --git a/smoketest/scripts/cli/test_interfaces_geneve.py b/smoketest/scripts/cli/test_interfaces_geneve.py
index 7edd4528e..e8e8e5a2c 100755
--- a/smoketest/scripts/cli/test_interfaces_geneve.py
+++ b/smoketest/scripts/cli/test_interfaces_geneve.py
@@ -18,7 +18,7 @@ import unittest
from vyos.configsession import ConfigSession
from vyos.ifconfig import Interface
-from vyos.util import get_json_iface_options
+from vyos.util import get_interface_config
from base_interfaces_test import BasicInterfaceTest
@@ -51,7 +51,7 @@ class GeneveInterfaceTest(BasicInterfaceTest.BaseTest):
ttl = 20
for interface in self._interfaces:
- options = get_json_iface_options(interface)
+ options = get_interface_config(interface)
vni = options['linkinfo']['info_data']['id']
self.assertIn(f'vni {vni}', self._options[interface])
diff --git a/smoketest/scripts/cli/test_interfaces_macsec.py b/smoketest/scripts/cli/test_interfaces_macsec.py
index 2f1898b6f..31071a0f7 100755
--- a/smoketest/scripts/cli/test_interfaces_macsec.py
+++ b/smoketest/scripts/cli/test_interfaces_macsec.py
@@ -25,7 +25,7 @@ from vyos.configsession import ConfigSessionError
from vyos.ifconfig import Section
from vyos.util import cmd
from vyos.util import read_file
-from vyos.util import get_json_iface_options
+from vyos.util import get_interface_config
from vyos.util import process_named_running
def get_config_value(interface, key):
@@ -34,7 +34,7 @@ def get_config_value(interface, key):
return tmp[0]
def get_cipher(interface):
- tmp = get_json_iface_options(interface)
+ tmp = get_interface_config(interface)
return tmp['linkinfo']['info_data']['cipher_suite'].lower()
class MACsecInterfaceTest(BasicInterfaceTest.BaseTest):
diff --git a/smoketest/scripts/cli/test_interfaces_tunnel.py b/smoketest/scripts/cli/test_interfaces_tunnel.py
index cad6764e6..3dddb5ef0 100755
--- a/smoketest/scripts/cli/test_interfaces_tunnel.py
+++ b/smoketest/scripts/cli/test_interfaces_tunnel.py
@@ -18,7 +18,7 @@ import unittest
from vyos.configsession import ConfigSession
from vyos.configsession import ConfigSessionError
-from vyos.util import get_json_iface_options
+from vyos.util import get_interface_config
from vyos.template import inc_ip
from base_interfaces_test import BasicInterfaceTest
@@ -84,7 +84,7 @@ class TunnelInterfaceTest(BasicInterfaceTest.BaseTest):
# Check if commit is ok
self.session.commit()
- conf = get_json_iface_options(interface)
+ conf = get_interface_config(interface)
if encapsulation not in ['sit', 'gretap']:
self.assertEqual(source_if, conf['link'])
@@ -132,7 +132,7 @@ class TunnelInterfaceTest(BasicInterfaceTest.BaseTest):
# Check if commit is ok
self.session.commit()
- conf = get_json_iface_options(interface)
+ conf = get_interface_config(interface)
if encapsulation not in ['ip6gretap']:
self.assertEqual(source_if, conf['link'])
@@ -192,7 +192,7 @@ class TunnelInterfaceTest(BasicInterfaceTest.BaseTest):
# Check if commit is ok
self.session.commit()
- conf = get_json_iface_options(interface)
+ conf = get_interface_config(interface)
self.assertEqual(mtu, conf['mtu'])
self.assertEqual(interface, conf['ifname'])
self.assertEqual(encapsulation, conf['linkinfo']['info_kind'])
@@ -214,7 +214,7 @@ class TunnelInterfaceTest(BasicInterfaceTest.BaseTest):
# Check if commit is ok
self.session.commit()
- conf = get_json_iface_options(interface)
+ conf = get_interface_config(interface)
self.assertEqual(mtu, conf['mtu'])
self.assertEqual(interface, conf['ifname'])
self.assertEqual(encapsulation, conf['linkinfo']['info_kind'])
@@ -228,7 +228,7 @@ class TunnelInterfaceTest(BasicInterfaceTest.BaseTest):
# Check if commit is ok
self.session.commit()
- conf = get_json_iface_options(interface)
+ conf = get_interface_config(interface)
self.assertEqual(new_remote, conf['linkinfo']['info_data']['remote'])
if __name__ == '__main__':
diff --git a/smoketest/scripts/cli/test_interfaces_vxlan.py b/smoketest/scripts/cli/test_interfaces_vxlan.py
index b66315c5e..2a04b0477 100755
--- a/smoketest/scripts/cli/test_interfaces_vxlan.py
+++ b/smoketest/scripts/cli/test_interfaces_vxlan.py
@@ -18,7 +18,7 @@ import unittest
from vyos.configsession import ConfigSession
from vyos.ifconfig import Interface
-from vyos.util import get_json_iface_options
+from vyos.util import get_interface_config
from base_interfaces_test import BasicInterfaceTest
@@ -52,7 +52,7 @@ class VXLANInterfaceTest(BasicInterfaceTest.BaseTest):
ttl = 20
for interface in self._interfaces:
- options = get_json_iface_options(interface)
+ options = get_interface_config(interface)
vni = options['linkinfo']['info_data']['id']
self.assertIn(f'vni {vni}', self._options[interface])
diff --git a/smoketest/scripts/cli/test_protocols_bgp.py b/smoketest/scripts/cli/test_protocols_bgp.py
index 9aa1541cf..7d397b55e 100755
--- a/smoketest/scripts/cli/test_protocols_bgp.py
+++ b/smoketest/scripts/cli/test_protocols_bgp.py
@@ -128,17 +128,19 @@ peer_group_config = {
},
}
-def getFRRBGPconfig():
- return cmd(f'vtysh -c "show run" | sed -n "/^router bgp {ASN}/,/^!/p"')
+def getFRRBGPconfig(vrf=None):
+ if vrf:
+ return cmd(f'vtysh -c "show run" | sed -n "/^router bgp {ASN} vrf {vrf}$/,/^!/p"')
+ return cmd(f'vtysh -c "show run" | sed -n "/^router bgp {ASN}$/,/^!/p"')
def getFRRBgpAfiConfig(afi):
- return cmd(f'vtysh -c "show run" | sed -n "/^router bgp {ASN}/,/^!/p" | sed -n "/^ address-family {afi} unicast/,/^ exit-address-family/p"')
+ return cmd(f'vtysh -c "show run" | sed -n "/^router bgp {ASN}$/,/^!/p" | sed -n "/^ address-family {afi} unicast/,/^ exit-address-family/p"')
def getFRRBGPVNIconfig(vni):
- return cmd(f'vtysh -c "show run" | sed -n "/^ vni {vni}/,/^!/p"')
+ return cmd(f'vtysh -c "show run" | sed -n "/^ vni {vni}$/,/^!/p"')
def getFRRRPKIconfig():
- return cmd(f'vtysh -c "show run" | sed -n "/^rpki/,/^!/p"')
+ return cmd(f'vtysh -c "show run" | sed -n "/^rpki$/,/^!/p"')
class TestProtocolsBGP(unittest.TestCase):
def setUp(self):
@@ -551,5 +553,27 @@ class TestProtocolsBGP(unittest.TestCase):
self.assertIn(f' advertise-default-gw', vniconfig)
self.assertIn(f' advertise-svi-ip', vniconfig)
+ def test_bgp_08_vrf_simple(self):
+ router_id = '127.0.0.3'
+ vrfs = ['red', 'green', 'blue']
+ # It is safe to assume that when the basic VRF test works, all
+ # other OSPF related features work, as we entirely inherit the CLI
+ # templates and Jinja2 FRR template.
+ table = '1000'
+ for vrf in vrfs:
+ vrf_base = ['vrf', 'name', vrf]
+ self.session.set(vrf_base + ['table', table])
+ self.session.set(vrf_base + ['protocols', 'bgp', ASN, 'parameters', 'router-id', router_id])
+ table = str(int(table) + 1000)
+
+ self.session.commit()
+
+ for vrf in vrfs:
+ # Verify FRR bgpd configuration
+ frrconfig = getFRRBGPconfig(vrf)
+
+ self.assertIn(f'router bgp {ASN} vrf {vrf}', frrconfig)
+ self.assertIn(f' bgp router-id {router_id}', frrconfig)
+
if __name__ == '__main__':
unittest.main(verbosity=2)
diff --git a/smoketest/scripts/cli/test_protocols_ospf.py b/smoketest/scripts/cli/test_protocols_ospf.py
index d9a6c17e4..532d84cc8 100755
--- a/smoketest/scripts/cli/test_protocols_ospf.py
+++ b/smoketest/scripts/cli/test_protocols_ospf.py
@@ -27,8 +27,10 @@ base_path = ['protocols', 'ospf']
route_map = 'foo-bar-baz10'
-def getFRROSPFconfig():
- return cmd('vtysh -c "show run" | sed -n "/^router ospf/,/^!/p"')
+def getFRRconfig(vrf=None):
+ if vrf:
+ return cmd(f'vtysh -c "show run" | sed -n "/^router ospf vrf {vrf}$/,/^!/p"')
+ return cmd('vtysh -c "show run" | sed -n "/^router ospf$/,/^!/p"')
def getFRRInterfaceConfig(interface):
return cmd(f'vtysh -c "show run" | sed -n "/^interface {interface}$/,/^!/p"')
@@ -45,6 +47,7 @@ class TestProtocolsOSPF(unittest.TestCase):
self.session.delete(['policy', 'route-map', route_map])
self.session.delete(base_path)
+
self.session.commit()
del self.session
@@ -54,12 +57,11 @@ class TestProtocolsOSPF(unittest.TestCase):
self.session.commit()
# Verify FRR ospfd configuration
- frrconfig = getFRROSPFconfig()
+ frrconfig = getFRRconfig()
self.assertIn(f'router ospf', frrconfig)
self.assertIn(f' auto-cost reference-bandwidth 100', frrconfig)
self.assertIn(f' timers throttle spf 200 1000 10000', frrconfig) # defaults
-
def test_ospf_02_simple(self):
router_id = '127.0.0.1'
abr_type = 'ibm'
@@ -76,7 +78,7 @@ class TestProtocolsOSPF(unittest.TestCase):
self.session.commit()
# Verify FRR ospfd configuration
- frrconfig = getFRROSPFconfig()
+ frrconfig = getFRRconfig()
self.assertIn(f'router ospf', frrconfig)
self.assertIn(f' auto-cost reference-bandwidth {bandwidth}', frrconfig)
self.assertIn(f' ospf router-id {router_id}', frrconfig)
@@ -100,7 +102,7 @@ class TestProtocolsOSPF(unittest.TestCase):
self.session.commit()
# Verify FRR ospfd configuration
- frrconfig = getFRROSPFconfig()
+ frrconfig = getFRRconfig()
self.assertIn(f'router ospf', frrconfig)
self.assertIn(f' timers throttle spf 200 1000 10000', frrconfig) # defaults
for ptotocol in protocols:
@@ -121,7 +123,7 @@ class TestProtocolsOSPF(unittest.TestCase):
self.session.commit()
# Verify FRR ospfd configuration
- frrconfig = getFRROSPFconfig()
+ frrconfig = getFRRconfig()
self.assertIn(f'router ospf', frrconfig)
self.assertIn(f' timers throttle spf 200 1000 10000', frrconfig) # defaults
self.assertIn(f' default-information originate metric {metric} metric-type {metric_type} route-map {route_map}', frrconfig)
@@ -131,7 +133,7 @@ class TestProtocolsOSPF(unittest.TestCase):
self.session.commit()
# Verify FRR ospfd configuration
- frrconfig = getFRROSPFconfig()
+ frrconfig = getFRRconfig()
self.assertIn(f' default-information originate always metric {metric} metric-type {metric_type} route-map {route_map}', frrconfig)
@@ -158,7 +160,7 @@ class TestProtocolsOSPF(unittest.TestCase):
self.session.commit()
# Verify FRR ospfd configuration
- frrconfig = getFRROSPFconfig()
+ frrconfig = getFRRconfig()
self.assertIn(f'router ospf', frrconfig)
self.assertIn(f' mpls-te on', frrconfig)
self.assertIn(f' mpls-te router-address 0.0.0.0', frrconfig) # default
@@ -173,7 +175,7 @@ class TestProtocolsOSPF(unittest.TestCase):
self.session.set(base_path + ['distance', 'ospf', 'inter-area', inter_area])
self.session.commit()
- frrconfig = getFRROSPFconfig()
+ frrconfig = getFRRconfig()
self.assertIn(f' distance ospf intra-area {intra_area} inter-area {inter_area} external {external}', frrconfig)
@@ -189,7 +191,7 @@ class TestProtocolsOSPF(unittest.TestCase):
self.session.commit()
# Verify FRR ospfd configuration
- frrconfig = getFRROSPFconfig()
+ frrconfig = getFRRconfig()
self.assertIn(f'router ospf', frrconfig)
for neighbor in neighbors:
self.assertIn(f' neighbor {neighbor} priority {priority} poll-interval {poll_interval}', frrconfig) # default
@@ -205,7 +207,7 @@ class TestProtocolsOSPF(unittest.TestCase):
self.session.commit()
# Verify FRR ospfd configuration
- frrconfig = getFRROSPFconfig()
+ frrconfig = getFRRconfig()
self.assertIn(f'router ospf', frrconfig)
self.assertIn(f' passive-interface default', frrconfig) # default
for interface in interfaces:
@@ -227,7 +229,7 @@ class TestProtocolsOSPF(unittest.TestCase):
self.session.commit()
# Verify FRR ospfd configuration
- frrconfig = getFRROSPFconfig()
+ frrconfig = getFRRconfig()
self.assertIn(f'router ospf', frrconfig)
for protocol in redistribute:
if protocol in ['kernel', 'static']:
@@ -235,6 +237,7 @@ class TestProtocolsOSPF(unittest.TestCase):
else:
self.assertIn(f' redistribute {protocol} metric {metric} metric-type {metric_type} route-map {route_map}', frrconfig)
+
def test_ospf_09_virtual_link(self):
networks = ['10.0.0.0/8', '172.16.0.0/12', '192.168.0.0/16']
area = '10'
@@ -257,7 +260,7 @@ class TestProtocolsOSPF(unittest.TestCase):
self.session.commit()
# Verify FRR ospfd configuration
- frrconfig = getFRROSPFconfig()
+ frrconfig = getFRRconfig()
import pprint
# From time to time the CI fails with an error like:
# ======================================================================
@@ -277,6 +280,7 @@ class TestProtocolsOSPF(unittest.TestCase):
for network in networks:
self.assertIn(f' network {network} area {area}', frrconfig)
+
def test_ospf_10_interface_configureation(self):
interfaces = Section.interfaces('ethernet')
password = 'vyos1234'
@@ -308,5 +312,37 @@ class TestProtocolsOSPF(unittest.TestCase):
self.assertIn(f' ip ospf priority {priority}', config)
self.assertIn(f' bandwidth {bandwidth}', config)
+
+ def test_ospf_11_vrfs(self):
+ vrfs = ['red', 'green', 'blue']
+ # It is safe to assume that when the basic VRF test works, all
+ # other OSPF related features work, as we entirely inherit the CLI
+ # templates and Jinja2 FRR template.
+ table = '1000'
+ for vrf in vrfs:
+ vrf_base = ['vrf', 'name', vrf]
+ self.session.set(vrf_base + ['table', table])
+ self.session.set(vrf_base + ['protocols', 'ospf'])
+ table = str(int(table) + 1000)
+
+ # Also set a default VRF OSPF config
+ self.session.set(base_path)
+ self.session.commit()
+
+ # Verify FRR ospfd configuration
+ frrconfig = getFRRconfig()
+ self.assertIn(f'router ospf', frrconfig)
+ self.assertIn(f' auto-cost reference-bandwidth 100', frrconfig)
+ self.assertIn(f' timers throttle spf 200 1000 10000', frrconfig) # defaults
+
+ for vrf in vrfs:
+ frrconfig = getFRRconfig(vrf)
+ self.assertIn(f'router ospf vrf {vrf}', frrconfig)
+ self.assertIn(f' auto-cost reference-bandwidth 100', frrconfig)
+ self.assertIn(f' timers throttle spf 200 1000 10000', frrconfig) # defaults
+
+ self.session.delete(['vrf', 'name', vrf])
+
+
if __name__ == '__main__':
unittest.main(verbosity=2)
diff --git a/smoketest/scripts/cli/test_protocols_static.py b/smoketest/scripts/cli/test_protocols_static.py
index cf591f060..28ae5e2dd 100755
--- a/smoketest/scripts/cli/test_protocols_static.py
+++ b/smoketest/scripts/cli/test_protocols_static.py
@@ -21,6 +21,7 @@ from vyos.configsession import ConfigSession
from vyos.configsession import ConfigSessionError
from vyos.template import is_ipv6
from vyos.util import cmd
+from vyos.util import get_interface_config
base_path = ['protocols', 'static']
vrf_path = ['protocols', 'vrf']
@@ -85,7 +86,6 @@ routes = {
},
}
-vrfs = ['red', 'green', 'blue']
tables = ['80', '81', '82']
class StaticRouteTest(unittest.TestCase):
@@ -99,9 +99,6 @@ class StaticRouteTest(unittest.TestCase):
route_type = 'route6'
self.session.delete(base_path + [route_type, route])
- for vrf in vrfs:
- self.session.delete(vrf_path + [vrf])
-
for table in tables:
self.session.delete(base_path + ['table', table])
@@ -290,47 +287,65 @@ class StaticRouteTest(unittest.TestCase):
def test_protocols_vrf_static(self):
- for vrf in vrfs:
+ # Create VRF instances and apply the static routes from above to FRR.
+ # Re-read the configured routes and match them if they are programmed
+ # properly. This also includes VRF leaking
+ vrfs = {
+ 'red' : { 'table' : '1000' },
+ 'green' : { 'table' : '2000' },
+ 'blue' : { 'table' : '3000' },
+ }
+
+ for vrf, vrf_config in vrfs.items():
+ vrf_base_path = ['vrf', 'name', vrf]
+ self.session.set(vrf_base_path + ['table', vrf_config['table']])
+
for route, route_config in routes.items():
route_type = 'route'
if is_ipv6(route):
route_type = 'route6'
- base = vrf_path + [vrf, 'static', route_type, route]
+ route_base_path = vrf_base_path + ['protocols', 'static', route_type, route]
if 'next_hop' in route_config:
for next_hop, next_hop_config in route_config['next_hop'].items():
- self.session.set(base + ['next-hop', next_hop])
+ self.session.set(route_base_path + ['next-hop', next_hop])
if 'disable' in next_hop_config:
- self.session.set(base + ['next-hop', next_hop, 'disable'])
+ self.session.set(route_base_path + ['next-hop', next_hop, 'disable'])
if 'distance' in next_hop_config:
- self.session.set(base + ['next-hop', next_hop, 'distance', next_hop_config['distance']])
+ self.session.set(route_base_path + ['next-hop', next_hop, 'distance', next_hop_config['distance']])
if 'interface' in next_hop_config:
- self.session.set(base + ['next-hop', next_hop, 'interface', next_hop_config['interface']])
+ self.session.set(route_base_path + ['next-hop', next_hop, 'interface', next_hop_config['interface']])
if 'vrf' in next_hop_config:
- self.session.set(base + ['next-hop', next_hop, 'vrf', next_hop_config['vrf']])
+ self.session.set(route_base_path + ['next-hop', next_hop, 'vrf', next_hop_config['vrf']])
if 'interface' in route_config:
for interface, interface_config in route_config['interface'].items():
- self.session.set(base + ['interface', interface])
+ self.session.set(route_base_path + ['interface', interface])
if 'disable' in interface_config:
- self.session.set(base + ['interface', interface, 'disable'])
+ self.session.set(route_base_path + ['interface', interface, 'disable'])
if 'distance' in interface_config:
- self.session.set(base + ['interface', interface, 'distance', interface_config['distance']])
+ self.session.set(route_base_path + ['interface', interface, 'distance', interface_config['distance']])
if 'vrf' in interface_config:
- self.session.set(base + ['interface', interface, 'vrf', interface_config['vrf']])
+ self.session.set(route_base_path + ['interface', interface, 'vrf', interface_config['vrf']])
if 'blackhole' in route_config:
- self.session.set(base + ['blackhole'])
+ self.session.set(route_base_path + ['blackhole'])
if 'distance' in route_config['blackhole']:
- self.session.set(base + ['blackhole', 'distance', route_config['blackhole']['distance']])
+ self.session.set(route_base_path + ['blackhole', 'distance', route_config['blackhole']['distance']])
if 'tag' in route_config['blackhole']:
- self.session.set(base + ['blackhole', 'tag', route_config['blackhole']['tag']])
+ self.session.set(route_base_path + ['blackhole', 'tag', route_config['blackhole']['tag']])
# commit changes
self.session.commit()
- for vrf in vrfs:
+ for vrf, vrf_config in vrfs.items():
+ tmp = get_interface_config(vrf)
+
+ # Compare VRF table ID
+ self.assertEqual(tmp['linkinfo']['info_data']['table'], int(vrf_config['table']))
+ self.assertEqual(tmp['linkinfo']['info_kind'], 'vrf')
+
# Verify FRR bgpd configuration
frrconfig = getFRRCconfig(vrf)
self.assertIn(f'vrf {vrf}', frrconfig)
@@ -380,6 +395,7 @@ class StaticRouteTest(unittest.TestCase):
self.assertIn(tmp, frrconfig)
+ self.session.delete(['vrf'])
if __name__ == '__main__':
unittest.main(verbosity=2)
diff --git a/smoketest/scripts/cli/test_vrf.py b/smoketest/scripts/cli/test_vrf.py
index 8e977d407..aac115663 100755
--- a/smoketest/scripts/cli/test_vrf.py
+++ b/smoketest/scripts/cli/test_vrf.py
@@ -33,12 +33,6 @@ from vyos.validate import is_intf_addr_assigned
base_path = ['vrf']
vrfs = ['red', 'green', 'blue', 'foo-bar', 'baz_foo']
-def get_vrf_ipv4_routes(vrf):
- return json.loads(cmd(f'ip -4 -j route show vrf {vrf}'))
-
-def get_vrf_ipv6_routes(vrf):
- return json.loads(cmd(f'ip -6 -j route show vrf {vrf}'))
-
class VRFTest(unittest.TestCase):
_interfaces = []
diff --git a/src/completion/list_bgp_peer_groups.sh b/src/completion/list_bgp_peer_groups.sh
new file mode 100755
index 000000000..4503d608f
--- /dev/null
+++ b/src/completion/list_bgp_peer_groups.sh
@@ -0,0 +1,23 @@
+#!/bin/sh
+# Copyright (C) 2021 VyOS maintainers and contributors
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License version 2 or later as
+# published by the Free Software Foundation.
+#
+# This program 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# Return BGP peer-groups from CLI
+
+declare -a vals
+eval "bgp_as=$(cli-shell-api listNodes protocols bgp)"
+eval "vals=($(cli-shell-api listNodes protocols bgp $bgp_as peer-group))"
+
+echo -n ${vals[@]}
+exit 0
diff --git a/src/conf_mode/interfaces-tunnel.py b/src/conf_mode/interfaces-tunnel.py
index b63312750..cab94a5b0 100755
--- a/src/conf_mode/interfaces-tunnel.py
+++ b/src/conf_mode/interfaces-tunnel.py
@@ -34,7 +34,7 @@ from vyos.ifconfig import Interface
from vyos.ifconfig import TunnelIf
from vyos.template import is_ipv4
from vyos.template import is_ipv6
-from vyos.util import get_json_iface_options
+from vyos.util import get_interface_config
from vyos.util import dict_search
from vyos import ConfigError
from vyos import airbag
@@ -103,7 +103,7 @@ def apply(tunnel):
# There is no other solution to destroy and recreate the tunnel.
encap = ''
remote = ''
- tmp = get_json_iface_options(interface)
+ tmp = get_interface_config(interface)
if tmp:
encap = dict_search('linkinfo.info_kind', tmp)
remote = dict_search('linkinfo.info_data.remote', tmp)
diff --git a/src/conf_mode/protocols_bgp.py b/src/conf_mode/protocols_bgp.py
index 7dede74a1..43ca37f9d 100755
--- a/src/conf_mode/protocols_bgp.py
+++ b/src/conf_mode/protocols_bgp.py
@@ -17,6 +17,7 @@
import os
from sys import exit
+from sys import argv
from vyos.config import Config
from vyos.configdict import dict_merge
@@ -37,11 +38,24 @@ def get_config(config=None):
conf = config
else:
conf = Config()
- base = ['protocols', 'bgp']
+
+ vrf = None
+ if len(argv) > 1:
+ vrf = argv[1]
+
+ base_path = ['protocols', 'bgp']
+
+ # eqivalent of the C foo ? 'a' : 'b' statement
+ base = vrf and ['vrf', 'name', vrf, 'protocols', 'bgp'] or base_path
bgp = conf.get_config_dict(base, key_mangling=('-', '_'), get_first_key=True)
- # Bail out early if configuration tree does not exist
+ # Assign the name of our VRF context. This MUST be done before the return
+ # statement below, else on deletion we will delete the default instance
+ # instead of the VRF instance.
+ if vrf: bgp.update({'vrf' : vrf})
+
if not conf.exists(base):
+ bgp.update({'deleted' : ''})
return bgp
# We also need some additional information from the config,
@@ -80,11 +94,20 @@ def verify(bgp):
if not bgp:
return None
- # Check if declared more than one ASN
- if len(bgp) > 1:
- raise ConfigError('Only one BGP AS number can be defined!')
+ # FRR bgpd only supports one Autonomous System Number, verify this!
+ asn = 0
+ for key in bgp:
+ if key.isnumeric():
+ asn +=1
+ if asn > 1:
+ raise ConfigError('Only one BGP AS number can be defined!')
for asn, asn_config in bgp.items():
+ # Workaround for https://phabricator.vyos.net/T1711
+ # We also have a vrf, and deleted key now - so we can only veriy "numbers"
+ if not asn.isnumeric():
+ continue
+
# Common verification for both peer-group and neighbor statements
for neighbor in ['neighbor', 'peer_group']:
# bail out early if there is no neighbor or peer-group statement
@@ -175,7 +198,7 @@ def verify(bgp):
return None
def generate(bgp):
- if not bgp:
+ if not bgp or 'deleted' in bgp:
bgp['new_frr_config'] = ''
return None
@@ -183,6 +206,8 @@ def generate(bgp):
# of the config dict
asn = list(bgp.keys())[0]
bgp[asn]['asn'] = asn
+ if 'vrf' in bgp:
+ bgp[asn]['vrf'] = bgp['vrf']
bgp['new_frr_config'] = render_to_string('frr/bgp.frr.tmpl', bgp[asn])
return None
@@ -191,7 +216,13 @@ def apply(bgp):
# Save original configuration prior to starting any commit actions
frr_cfg = frr.FRRConfig()
frr_cfg.load_configuration(frr_daemon)
- frr_cfg.modify_section(f'^router bgp \d+$', '')
+
+ if 'vrf' in bgp:
+ vrf = bgp['vrf']
+ frr_cfg.modify_section(f'^router bgp \d+ vrf {vrf}$', '')
+ else:
+ frr_cfg.modify_section('^router bgp \d+$', '')
+
frr_cfg.add_before(r'(ip prefix-list .*|route-map .*|line vty)', bgp['new_frr_config'])
frr_cfg.commit_configuration(frr_daemon)
diff --git a/src/conf_mode/protocols_ospf.py b/src/conf_mode/protocols_ospf.py
index aefe7c23e..ef2aeda7f 100755
--- a/src/conf_mode/protocols_ospf.py
+++ b/src/conf_mode/protocols_ospf.py
@@ -17,14 +17,17 @@
import os
from sys import exit
+from sys import argv
from vyos.config import Config
from vyos.configdict import dict_merge
+from vyos.configdict import node_changed
from vyos.configverify import verify_route_maps
from vyos.configverify import verify_interface_exists
from vyos.template import render_to_string
from vyos.util import call
from vyos.util import dict_search
+from vyos.util import get_interface_config
from vyos.xml import defaults
from vyos import ConfigError
from vyos import frr
@@ -38,16 +41,33 @@ def get_config(config=None):
conf = config
else:
conf = Config()
- base = ['protocols', 'ospf']
+
+ vrf = None
+ if len(argv) > 1:
+ vrf = argv[1]
+
+ base_path = ['protocols', 'ospf']
+
+ # eqivalent of the C foo ? 'a' : 'b' statement
+ base = vrf and ['vrf', 'name', vrf, 'protocols', 'ospf'] or base_path
ospf = conf.get_config_dict(base, key_mangling=('-', '_'), get_first_key=True)
+ # Assign the name of our VRF context. This MUST be done before the return
+ # statement below, else on deletion we will delete the default instance
+ # instead of the VRF instance.
+ if vrf: ospf['vrf'] = vrf
+
# Bail out early if configuration tree does not exist
if not conf.exists(base):
+ ospf.update({'deleted' : ''})
return ospf
# We have gathered the dict representation of the CLI, but there are default
# options which we need to update into the dictionary retrived.
- default_values = defaults(base)
+ # XXX: Note that we can not call defaults(base), as defaults does not work
+ # on an instance of a tag node. As we use the exact same CLI definition for
+ # both the non-vrf and vrf version this is absolutely safe!
+ default_values = defaults(base_path)
# We have to cleanup the default dict, as default values could enable features
# which are not explicitly enabled on the CLI. Example: default-information
@@ -99,6 +119,14 @@ def get_config(config=None):
ospf['interface'][interface] = dict_merge(default_values,
ospf['interface'][interface])
+ # As we no re-use this Python handler for both VRF and non VRF instances for
+ # OSPF we need to find out if any interfaces changed so properly adjust
+ # the FRR configuration and not by acctident change interfaces from a
+ # different VRF.
+ interfaces_removed = node_changed(conf, base + ['interface'])
+ if interfaces_removed:
+ ospf['interface_removed'] = list(interfaces_removed)
+
# We also need some additional information from the config, prefix-lists
# and route-maps for instance. They will be used in verify()
base = ['policy']
@@ -121,12 +149,22 @@ def verify(ospf):
# time. FRR will only activate the last option set via CLI.
if {'hello_multiplier', 'dead_interval'} <= set(ospf['interface'][interface]):
raise ConfigError(f'Can not use hello-multiplier and dead-interval ' \
- f'concurrently for "{interface}"!')
+ f'concurrently for {interface}!')
+
+ if 'vrf' in ospf:
+ # If interface specific options are set, we must ensure that the
+ # interface is bound to our requesting VRF. Due to the VyOS/Vyatta
+ # priorities the interface is bound to the VRF after creation of
+ # the VRF itself, and before any routing protocol is configured.
+ vrf = ospf['vrf']
+ tmp = get_interface_config(interface)
+ if 'master' not in tmp or tmp['master'] != vrf:
+ raise ConfigError(f'Interface {interface} is not a member of VRF {vrf}!')
return None
def generate(ospf):
- if not ospf:
+ if not ospf or 'deleted' in ospf:
ospf['new_frr_config'] = ''
return None
@@ -137,8 +175,19 @@ def apply(ospf):
# Save original configuration prior to starting any commit actions
frr_cfg = frr.FRRConfig()
frr_cfg.load_configuration(frr_daemon)
- frr_cfg.modify_section(r'^interface \S+', '')
- frr_cfg.modify_section('^router ospf$', '')
+
+ if 'vrf' in ospf:
+ vrf = ospf['vrf']
+ frr_cfg.modify_section(f'^router ospf vrf {vrf}$', '')
+ else:
+ frr_cfg.modify_section('^router ospf$', '')
+
+ for key in ['interface', 'interface_removed']:
+ if key not in ospf:
+ continue
+ for interface in ospf[key]:
+ frr_cfg.modify_section(f'^interface {interface}$', '')
+
frr_cfg.add_before(r'(ip prefix-list .*|route-map .*|line vty)', ospf['new_frr_config'])
frr_cfg.commit_configuration(frr_daemon)
diff --git a/src/conf_mode/protocols_static.py b/src/conf_mode/protocols_static.py
index 5d101b33e..51b4acfc8 100755
--- a/src/conf_mode/protocols_static.py
+++ b/src/conf_mode/protocols_static.py
@@ -17,6 +17,7 @@
import os
from sys import exit
+from sys import argv
from vyos.config import Config
from vyos.template import render_to_string
@@ -34,8 +35,19 @@ def get_config(config=None):
conf = config
else:
conf = Config()
- base = ['protocols', 'static']
+
+ vrf = None
+ if len(argv) > 1:
+ vrf = argv[1]
+
+ base_path = ['protocols', 'static']
+ # eqivalent of the C foo ? 'a' : 'b' statement
+ base = vrf and ['vrf', 'name', vrf, 'protocols', 'static'] or base_path
static = conf.get_config_dict(base, key_mangling=('-', '_'), get_first_key=True)
+
+ # Assign the name of our VRF context
+ if vrf: static['vrf'] = vrf
+
return static
def verify(static):
@@ -50,8 +62,14 @@ def apply(static):
# Save original configuration prior to starting any commit actions
frr_cfg = frr.FRRConfig()
frr_cfg.load_configuration(frr_daemon)
- frr_cfg.modify_section(r'^ip route .*', '')
- frr_cfg.modify_section(r'^ipv6 route .*', '')
+
+ if 'vrf' in static:
+ vrf = static['vrf']
+ frr_cfg.modify_section(f'^vrf {vrf}$', '')
+ else:
+ frr_cfg.modify_section(r'^ip route .*', '')
+ frr_cfg.modify_section(r'^ipv6 route .*', '')
+
frr_cfg.add_before(r'(interface .*|line vty)', static['new_frr_config'])
frr_cfg.commit_configuration(frr_daemon)
diff --git a/src/conf_mode/protocols_vrf.py b/src/conf_mode/protocols_vrf.py
deleted file mode 100755
index 227e7d5e1..000000000
--- a/src/conf_mode/protocols_vrf.py
+++ /dev/null
@@ -1,72 +0,0 @@
-#!/usr/bin/env python3
-#
-# Copyright (C) 2021 VyOS maintainers and contributors
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License version 2 or later as
-# published by the Free Software Foundation.
-#
-# This program 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 General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see <http://www.gnu.org/licenses/>.
-
-import os
-
-from sys import exit
-
-from vyos.config import Config
-from vyos.template import render_to_string
-from vyos.util import call
-from vyos import ConfigError
-from vyos import frr
-from vyos import airbag
-airbag.enable()
-
-frr_daemon = 'staticd'
-
-def get_config(config=None):
- if config:
- conf = config
- else:
- conf = Config()
- base = ['protocols', 'vrf']
- vrf = conf.get_config_dict(base, key_mangling=('-', '_'))
- return vrf
-
-def verify(vrf):
-
- return None
-
-def generate(vrf):
- vrf['new_frr_config'] = render_to_string('frr/vrf.frr.tmpl', vrf)
- return None
-
-def apply(vrf):
- # Save original configuration prior to starting any commit actions
- frr_cfg = frr.FRRConfig()
- frr_cfg.load_configuration(frr_daemon)
- frr_cfg.modify_section(r'vrf \S+', '')
- frr_cfg.add_before(r'(ip prefix-list .*|route-map .*|line vty)', vrf['new_frr_config'])
- frr_cfg.commit_configuration(frr_daemon)
-
- # If FRR config is blank, rerun the blank commit x times due to frr-reload
- # behavior/bug not properly clearing out on one commit.
- if vrf['new_frr_config'] == '':
- for a in range(5):
- frr_cfg.commit_configuration(frr_daemon)
-
- return None
-
-if __name__ == '__main__':
- try:
- c = get_config()
- verify(c)
- generate(c)
- apply(c)
- except ConfigError as e:
- print(e)
- exit(1)
diff --git a/src/migration-scripts/vrf/1-to-2 b/src/migration-scripts/vrf/1-to-2
new file mode 100755
index 000000000..20128e957
--- /dev/null
+++ b/src/migration-scripts/vrf/1-to-2
@@ -0,0 +1,61 @@
+#!/usr/bin/env python3
+#
+# Copyright (C) 2021 VyOS maintainers and contributors
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License version 2 or later as
+# published by the Free Software Foundation.
+#
+# This program 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# - T3344: migrate routing options from "protocols vrf" to "vrf <name> protocols"
+
+from sys import argv
+from sys import exit
+from vyos.configtree import ConfigTree
+
+if (len(argv) < 2):
+ print("Must specify file name!")
+ exit(1)
+
+file_name = argv[1]
+
+with open(file_name, 'r') as f:
+ config_file = f.read()
+
+base = ['protocols', 'vrf']
+config = ConfigTree(config_file)
+
+if not config.exists(base):
+ # Nothing to do
+ exit(0)
+
+vrf_base = ['vrf', 'name']
+config.set(vrf_base)
+config.set_tag(vrf_base)
+
+# Copy all existing static routes to the new base node under "vrf name <name> protocols static"
+for vrf in config.list_nodes(base):
+ static_base = base + [vrf, 'static']
+ if not config.exists(static_base):
+ continue
+
+ new_static_base = vrf_base + [vrf, 'protocols']
+ config.set(new_static_base)
+ config.copy(static_base, new_static_base + ['static'])
+
+# Now delete the old configuration
+config.delete(base)
+
+try:
+ with open(file_name, 'w') as f:
+ f.write(config.to_string())
+except OSError as e:
+ print("Failed to save the modified config: {}".format(e))
+ exit(1)