From 4809b0c02f5681562a1f460528f0bd09ad9f8eef Mon Sep 17 00:00:00 2001 From: kaushik Date: Wed, 15 Apr 2020 00:11:31 +0530 Subject: [PATCH 1/5] Commands added for supporting IPv4 MPLS Layer 3 VPN. 1. New address-family ipv4-vpn added. 2. New neighbor command added for address-family ipv4-vpn. 3. New label command added inside address-family ipv4-unicast. 4. Json script for all the above commands are handled. Signed-off-by: kaushik Signed-off-by: harios --- scripts/frr/configs/commands/bgp.json | 34 ++++- scripts/frr/configs/commands/bgp_vrf.json | 35 +++++ yang/vyatta-protocols-frr-bgp-v1.yang | 173 ++++++++++++++++++++++ 3 files changed, 241 insertions(+), 1 deletion(-) diff --git a/scripts/frr/configs/commands/bgp.json b/scripts/frr/configs/commands/bgp.json index e9d25d8..5e41b5f 100644 --- a/scripts/frr/configs/commands/bgp.json +++ b/scripts/frr/configs/commands/bgp.json @@ -52,7 +52,10 @@ "/protocols/bgp/@element/address-family/ipv4-unicast/parameters/dampening": "bgp dampening $if|{/half-life/@text},|half-life in {/@dict}$", "/protocols/bgp/@element/address-family/ipv4-unicast/parameters/distance/global": "distance bgp {/external/@text} {/internal/@text} {/local/@text}", "/protocols/bgp/@element/address-family/ipv4-unicast/network/@element": "network {/tagnode/@text} [route-map {/route-map/@text},] $if|backdoor,|backdoor in {/@dict}$", - + "/protocols/bgp/@element/address-family/ipv4-unicast/label/vpn/export": "label vpn export {/@text}", + "/protocols/bgp/@element/address-family/ipv4-vpn/@enter": "address-family ipv4 vpn", + "/protocols/bgp/@element/address-family/ipv4-vpn/@exit": "exit-address-family", + "/protocols/bgp/@element/address-family/ipv4-vpn/network/@element": "network {/addr/@text} rd {/rd/@text} label {/label/@text} [route-map {/route-map/@text},]", "/protocols/bgp/@element/address-family/ipv6-unicast/@enter": "address-family ipv6 unicast", "/protocols/bgp/@element/address-family/ipv6-unicast/@exit": "exit-address-family", "/protocols/bgp/@element/address-family/ipv6-unicast/aggregate-address/@element": "aggregate-address {/tagnode/@text} $if|as-set,summary-only,|as-set in {/@dict}, summary-only in {/@dict}$", @@ -94,6 +97,35 @@ "/protocols/bgp/@element/neighbor/@element/address-family/ipv4-unicast/unsuppress-map": "neighbor {/../../../tagnode/@text} unsuppress-map {/@text}", "/protocols/bgp/@element/neighbor/@element/address-family/ipv4-unicast/weight": "neighbor {/../../../tagnode/@text} weight {/@text}", + "/protocols/bgp/@element/neighbor/@element/address-family/ipv4-vpn/@enter": "address-family ipv4 vpn", + "/protocols/bgp/@element/neighbor/@element/address-family/ipv4-vpn/@exit": "exit-address-family", + "/protocols/bgp/@element/neighbor/@element/address-family/ipv4-vpn": ["[neighbor {/../../tagnode/@text} peer-group {/peer-group/@text},]", "neighbor {/../../tagnode/@text} activate"], + "/protocols/bgp/@element/neighbor/@element/address-family/ipv4-vpn/allowas-in": "neighbor {/../../../tagnode/@text} allowas-in", + "/protocols/bgp/@element/neighbor/@element/address-family/ipv4-vpn/allowas-in/number": "neighbor {/../../../../tagnode/@text} allowas-in {/@text}", + "/protocols/bgp/@element/neighbor/@element/address-family/ipv4-vpn/attribute-unchanged": "neighbor {/../../../tagnode/@text} attribute-unchanged $if|as-path,|as-path in {/@dict}$ $if|med,|med in {/@dict}$ $if|next-hop,|next-hop in {/@dict}$", + "/protocols/bgp/@element/neighbor/@element/address-family/ipv4-vpn/capability/orf/prefix-list/send": "neighbor {/../../../../../../tagnode/@text} capability orf prefix-list send", + "/protocols/bgp/@element/neighbor/@element/address-family/ipv4-vpn/capability/orf/prefix-list/receive": "neighbor {/../../../../../../tagnode/@text} capability orf prefix-list receive", + "/protocols/bgp/@element/neighbor/@element/address-family/ipv4-vpn/default-originate": "neighbor {/../../../tagnode/@text} default-originate [route-map {/route-map/@text},]", + "/protocols/bgp/@element/neighbor/@element/address-family/ipv4-vpn/disable-send-community/standard": "no neighbor {/../../../../tagnode/@text} send-community standard", + "/protocols/bgp/@element/neighbor/@element/address-family/ipv4-vpn/disable-send-community/extended": "no neighbor {/../../../../tagnode/@text} send-community extended", + "/protocols/bgp/@element/neighbor/@element/address-family/ipv4-vpn/distribute-list/export": "neighbor {/../../../../tagnode/@text} distribute-list {/@text} out", + "/protocols/bgp/@element/neighbor/@element/address-family/ipv4-vpn/distribute-list/import": "neighbor {/../../../../tagnode/@text} distribute-list {/@text} in", + "/protocols/bgp/@element/neighbor/@element/address-family/ipv4-vpn/filter-list/export": "neighbor {/../../../../tagnode/@text} filter-list {/@text} out", + "/protocols/bgp/@element/neighbor/@element/address-family/ipv4-vpn/filter-list/import": "neighbor {/../../../../tagnode/@text} filter-list {/@text} in", + "/protocols/bgp/@element/neighbor/@element/address-family/ipv4-vpn/maximum-prefix/@element": "neighbor {/../../../../tagnode/@text} maximum-prefix {/tagnode/@text} $if|{/threshold/@element/tagnode/@text},|threshold in {/@dict}$", + "/protocols/bgp/@element/neighbor/@element/address-family/ipv4-vpn/maximum-prefix/@element/threshold/@element": "neighbor {/../../../../../../tagnode/@text} maximum-prefix {/../../tagnode/@text} {/tagnode/@text} $if|warning-only,|warning-only in {/@dict}$", + "/protocols/bgp/@element/neighbor/@element/address-family/ipv4-vpn/nexthop-self": "neighbor {/../../../tagnode/@text} next-hop-self", + "/protocols/bgp/@element/neighbor/@element/address-family/ipv4-vpn/prefix-list/export": "neighbor {/../../../../tagnode/@text} prefix-list {/@text} out", + "/protocols/bgp/@element/neighbor/@element/address-family/ipv4-vpn/prefix-list/import": "neighbor {/../../../../tagnode/@text} prefix-list {/@text} in", + "/protocols/bgp/@element/neighbor/@element/address-family/ipv4-vpn/remove-private-as": "neighbor {/../../../tagnode/@text} remove-private-AS", + "/protocols/bgp/@element/neighbor/@element/address-family/ipv4-vpn/route-reflector-client": "neighbor {/../../../tagnode/@text} route-reflector-client", + "/protocols/bgp/@element/neighbor/@element/address-family/ipv4-vpn/route-server-client": "neighbor {/../../../tagnode/@text} route-server-client", + "/protocols/bgp/@element/neighbor/@element/address-family/ipv4-vpn/soft-reconfiguration/inbound": "neighbor {/../../../../tagnode/@text} soft-reconfiguration inbound", + "/protocols/bgp/@element/neighbor/@element/address-family/ipv4-vpn/route-map/import": "neighbor {/../../../../tagnode/@text} route-map {/@text} in", + "/protocols/bgp/@element/neighbor/@element/address-family/ipv4-vpn/route-map/export": "neighbor {/../../../../tagnode/@text} route-map {/@text} out", + "/protocols/bgp/@element/neighbor/@element/address-family/ipv4-vpn/unsuppress-map": "neighbor {/../../../tagnode/@text} unsuppress-map {/@text}", + "/protocols/bgp/@element/neighbor/@element/address-family/ipv4-vpn/weight": "neighbor {/../../../tagnode/@text} weight {/@text}", + "/protocols/bgp/@element/neighbor/@element/address-family/ipv6-unicast/@enter": "address-family ipv6 unicast", "/protocols/bgp/@element/neighbor/@element/address-family/ipv6-unicast/@exit": "exit-address-family", "/protocols/bgp/@element/neighbor/@element/address-family/ipv6-unicast": ["[neighbor {/../../tagnode/@text} peer-group {/peer-group/@text},]", "neighbor {/../../tagnode/@text} activate"], diff --git a/scripts/frr/configs/commands/bgp_vrf.json b/scripts/frr/configs/commands/bgp_vrf.json index 68e7687..73b7975 100644 --- a/scripts/frr/configs/commands/bgp_vrf.json +++ b/scripts/frr/configs/commands/bgp_vrf.json @@ -55,6 +55,11 @@ "/routing/routing-instance/@element/protocols/bgp/@element/address-family/ipv4-unicast/parameters/dampening": "bgp dampening $if|{/half-life/@text},|half-life in {/@dict}$", "/routing/routing-instance/@element/protocols/bgp/@element/address-family/ipv4-unicast/parameters/distance/global": "distance bgp {/external/@text} {/internal/@text} {/local/@text}", "/routing/routing-instance/@element/protocols/bgp/@element/address-family/ipv4-unicast/network/@element": "network {/tagnode/@text} [route-map {/route-map/@text},] $if|backdoor,|backdoor in {/@dict}$", + "/routing/routing-instance/@element/protocols/bgp/@element/address-family/ipv4-unicast/label/vpn/export": "label vpn export {/@text}", + + "/routing/routing-instance/@element/protocols/bgp/@element/address-family/ipv4-vpn/@enter": "address-family ipv4 vpn", + "/routing/routing-instance/@element/protocols/bgp/@element/address-family/ipv4-vpn/@exit": "exit-address-family", + "/routing/routing-instance/@element/protocols/bgp/@element/address-family/ipv4-vpn/network/@element": "network {/addr/@text} rd {/rd/@text} label {/label/@text} [route-map {/route-map/@text},]", "/routing/routing-instance/@element/protocols/bgp/@element/address-family/ipv6-unicast/@enter": "address-family ipv6 unicast", "/routing/routing-instance/@element/protocols/bgp/@element/address-family/ipv6-unicast/@exit": "exit-address-family", @@ -100,6 +105,36 @@ "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/ipv4-unicast/unsuppress-map": "neighbor {/../../../tagnode/@text} unsuppress-map {/@text}", "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/ipv4-unicast/weight": "neighbor {/../../../tagnode/@text} weight {/@text}", + "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/ipv4-vpn/@enter": "address-family ipv4 vpn", + "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/ipv4-vpn/@exit": "exit-address-family", + "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/ipv4-vpn": ["[neighbor {/../../tagnode/@text} peer-group {/peer-group/@text},]", "neighbor {/../../tagnode/@text} activate"], + "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/ipv4-vpn/allowas-in": "neighbor {/../../../tagnode/@text} allowas-in", + "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/ipv4-vpn/allowas-in/number": "neighbor {/../../../../tagnode/@text} allowas-in {/@text}", + "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/ipv4-vpn/attribute-unchanged": "neighbor {/../../../tagnode/@text} attribute-unchanged $if|as-path,|as-path in {/@dict}$ $if|med,|med in {/@dict}$ $if|next-hop,|next-hop in {/@dict}$", + "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/ipv4-vpn/capability/orf/prefix-list/send": "neighbor {/../../../../../../tagnode/@text} capability orf prefix-list send", + "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/ipv4-vpn/capability/orf/prefix-list/receive": "neighbor {/../../../../../../tagnode/@text} capability orf prefix-list receive", + "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/ipv4-vpn/default-originate": "neighbor {/../../../tagnode/@text} default-originate [route-map {/route-map/@text},]", + "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/ipv4-vpn/disable-send-community/standard": "no neighbor {/../../../../tagnode/@text} send-community standard", + "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/ipv4-vpn/disable-send-community/extended": "no neighbor {/../../../../tagnode/@text} send-community extended", + "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/ipv4-vpn/distribute-list/export": "neighbor {/../../../../tagnode/@text} distribute-list {/@text} out", + "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/ipv4-vpn/distribute-list/import": "neighbor {/../../../../tagnode/@text} distribute-list {/@text} in", + "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/ipv4-vpn/filter-list/export": "neighbor {/../../../../tagnode/@text} filter-list {/@text} out", + "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/ipv4-vpn/filter-list/import": "neighbor {/../../../../tagnode/@text} filter-list {/@text} in", + "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/ipv4-vpn/maximum-prefix/@element": "neighbor {/../../../../tagnode/@text} maximum-prefix {/tagnode/@text} $if|{/threshold/@element/tagnode/@text},|threshold in {/@dict}$", + "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/ipv4-vpn/maximum-prefix/@element/threshold/@element": "neighbor {/../../../../../../tagnode/@text} maximum-prefix {/../../tagnode/@text} {/tagnode/@text} $if|warning-only,|warning-only in {/@dict}$", + "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/ipv4-vpn/nexthop-self": "neighbor {/../../../tagnode/@text} next-hop-self", + "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/ipv4-vpn/prefix-list/export": "neighbor {/../../../../tagnode/@text} prefix-list {/@text} out", + "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/ipv4-vpn/prefix-list/import": "neighbor {/../../../../tagnode/@text} prefix-list {/@text} in", + "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/ipv4-vpn/remove-private-as": "neighbor {/../../../tagnode/@text} remove-private-AS", + "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/ipv4-vpn/route-reflector-client": "neighbor {/../../../tagnode/@text} route-reflector-client", + "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/ipv4-vpn/route-server-client": "neighbor {/../../../tagnode/@text} route-server-client", + "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/ipv4-vpn/soft-reconfiguration/inbound": "neighbor {/../../../../tagnode/@text} soft-reconfiguration inbound", + "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/ipv4-vpn/route-map/import": "neighbor {/../../../../tagnode/@text} route-map {/@text} in", + "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/ipv4-vpn/route-map/export": "neighbor {/../../../../tagnode/@text} route-map {/@text} out", + "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/ipv4-vpn/unsuppress-map": "neighbor {/../../../tagnode/@text} unsuppress-map {/@text}", + "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/ipv4-vpn/weight": "neighbor {/../../../tagnode/@text} weight {/@text}", + + "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/ipv6-unicast/@enter": "address-family ipv6 unicast", "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/ipv6-unicast/@exit": "exit-address-family", "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/ipv6-unicast": ["[neighbor {/../../tagnode/@text} peer-group {/peer-group/@text},]", "neighbor {/../../tagnode/@text} activate"], diff --git a/yang/vyatta-protocols-frr-bgp-v1.yang b/yang/vyatta-protocols-frr-bgp-v1.yang index 6552eed..48e323e 100644 --- a/yang/vyatta-protocols-frr-bgp-v1.yang +++ b/yang/vyatta-protocols-frr-bgp-v1.yang @@ -68,6 +68,32 @@ module vyatta-protocols-frr-bgp-v1 { description "Inital version."; } + typedef rt-rd { + type union { + type string { + //ASN:NN format. Allowing 2-byte:4-byte (65535:4294967295) + pattern '([0-9]|[1-9]\d{1,3}|[1-5]\d{4}|6[0-4]\d{3}|65[0-4]\d{2}|655[0-2]\d|6553[0-5])' + + ':' + + '([0-9]|[1-9]\d{1,8}|[1-3]\d{9}|4[0-1]\d{8}|42[0-8]\d{7}|429[0-3]\d{6}|4294[0-8]\d{5}|' + + '42949[0-5]\d{4}|429496[0-6]\d{3}|4294967[0-1]\d{2}|42949672[0-8]\d|429496729[0-5])'; + } + type string { + //ASN:NN format. Allowing 4-byte:2-byte (4294967295:65535) + pattern '([0-9]|[1-9]\d{1,8}|[1-3]\d{9}|4[0-1]\d{8}|42[0-8]\d{7}|429[0-3]\d{6}|4294[0-8]\d{5}|' + + '42949[0-5]\d{4}|429496[0-6]\d{3}|4294967[0-1]\d{2}|42949672[0-8]\d|429496729[0-5])' + + ':' + + '([0-9]|[1-9]\d{1,3}|[1-5]\d{4}|6[0-4]\d{3}|65[0-4]\d{2}|655[0-2]\d|6553[0-5])'; + } + type string { + //IPAddress:NN format. Allowing IpAddress:2-byte + pattern '(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}' + + '([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])' + + ':' + + '([0-9]|[1-9]\d{1,3}|[1-5]\d{4}|6[0-4]\d{3}|65[0-4]\d{2}|655[0-2]\d|6553[0-5])'; + } + } + } + grouping route-map-group { leaf route-map { description "Route-map for filtering"; @@ -216,6 +242,41 @@ module vyatta-protocols-frr-bgp-v1 { } } + grouping network-ipv4-vpn { + list network { + description "BGP network"; + configd:help "BGP network"; + key "addr"; + leaf addr { + description "BGP network"; + type types:ipv4-prefix { + configd:normalize "normalize ipv4-prefix"; + } + configd:help "BGP network"; + } + leaf rd { + description "Specify Route Distinguisher"; + configd:help "Specify Route Distinguisher"; + configd:pattern-help "ASN:NN or IPAddress:NN"; + type rt-rd; + default "100:1"; + } + leaf label { + description "VPN NLRI label"; + configd:help "VPN NLRI label"; + type uint32 { + range 0..1048575; + } + default "10"; + } + uses route-map-group { + refine route-map { + configd:help "Route-map to modify network"; + } + } + } + } + grouping network-ipv4 { list network { description "BGP network"; @@ -1291,6 +1352,95 @@ module vyatta-protocols-frr-bgp-v1 { } uses neigh_peer_grp_ipv4_lists; } + + container ipv4-vpn { + description "BGP neighbor parameters"; + presence "Enables BGP neighbor IPv4 parameters"; + configd:help "BGP neighbor parameters"; + uses peer-grp-neighbor-afi-common-settings { + refine filter-list/export { + must "not(../../peer-group)" { + error-message "You may not configure filter-list export for a neighbor in peer-group\n"; + } + } + refine route-map/export { + must "not(../../peer-group)" { + error-message "You may not configure route-map export for a neighbor in peer-group\n"; + } + } + refine attribute-unchanged { + must "not(../peer-group)" { + error-message "You may not configure attribute-unchanged for a neighbor in peer-group\n"; + } + } + refine remove-private-as { + must "not(../peer-group)" { + error-message "You may not configure remove-private-as for a neighbor in peer-group\n"; + } + } + refine route-reflector-client { + must "not(../peer-group)" { + error-message "You may not configure route-reflector-client for a neighbor in peer-group\n"; + } + } + refine disable-send-community { + must "not(../peer-group)" { + error-message "You may not configure disable-send-community for a neighbor in peer-group\n"; + } + } + refine capability/orf { + must "not(../../peer-group)" { + error-message "You may not configure capability orf for a neighbor in peer-group"; + } + } + refine default-originate { + must "not(../peer-group)" { + error-message "You may not configure default-originate for a neighbor in peer-group\n"; + } + } + refine unsuppress-map { + must "not(../peer-group)" { + error-message "You may not configure unsuppress-map for a neighbor in peer-group\n"; + } + } + refine nexthop-self { + must "not(../peer-group)" { + error-message "You may not configure nexthop-self for a neighbor in peer-group\n"; + } + } + refine route-server-client { + must "not(../peer-group)" { + error-message "You may not configure route-server-client for a neighbor in peer-group\n"; + } + } + } + uses neigh_peer_grp_ipv4_lists { + refine distribute-list { + must "not(../../../../peer-group[tagnode = current()/../peer-group]/address-family/ipv4-unicast/prefix-list)" { + error-message "You may not configure distribute-list when prefix-list is set in peer-group"; + } + } + refine prefix-list { + must "not(../../../../peer-group[tagnode = current()/../peer-group]/address-family/ipv4-unicast/distribute-list)" { + error-message "You may not configure prefix-list when distribute-list is set in peer-group"; + } + } + } + leaf peer-group { + description "IPv4 peer group for this peer"; + type leafref { + path "../../../../peer-group/tagnode"; + } + configd:help "IPv4 peer group for this peer"; + must "../../../../peer-group[tagnode=current()]/address-family/ipv4-unicast" { + error-message 'You must configure address-family ipv4-unicast in peer-group'; + } + must "not(../../ipv6-unicast/peer-group) or (current() = ../../ipv6-unicast/peer-group)" { + error-message 'You must configure same peer-group for all address-families'; + } + } + } + container ipv6-unicast { description "BGP peer-group IPv6 unicast parameters"; presence "Enables BGP peer-group IPv6 unicast parameters"; @@ -1626,10 +1776,33 @@ module vyatta-protocols-frr-bgp-v1 { uses parameters-distance; uses parameters-dampening; } + container label { + description "label value for VRF"; + configd:help "label value for VRF"; + container vpn { + description "Between current address-family and vpn"; + configd:help "Between current address-family and vpn"; + leaf export { + description "For routes leaked from current address-family to vpn"; + configd:help "For routes leaked from current address-family to vpn"; + type uint32 { + range 0..1048575; + } + } + } + } uses ipv4-aggregate-address; uses network-ipv4; uses redistribute-ipv4; } + + container ipv4-vpn { + description "BGP IPv4 VPN settings"; + presence "Enables BGP IPv4 VPN settings"; + configd:help "BGP IPv4 VPN settings"; + uses network-ipv4-vpn; + } + container ipv6-unicast { description "Enable BGP IPv6 settings"; presence "Enables BGP IPv6 settings"; From a1649dbc5f26eb59c80c0efe6f570af9d4d0803c Mon Sep 17 00:00:00 2001 From: kaushik Date: Wed, 15 Apr 2020 22:10:19 +0530 Subject: [PATCH 2/5] Commands added for supporting IPv4 MPLS Layer 3 VPN. 1. The container ipv4-vpn added under bgp-params-neighbor grouping. 2. The issue with indentation is resolved. Signed-off-by: harios --- yang/vyatta-protocols-frr-bgp-v1.yang | 339 +++++++++++++------------- 1 file changed, 171 insertions(+), 168 deletions(-) diff --git a/yang/vyatta-protocols-frr-bgp-v1.yang b/yang/vyatta-protocols-frr-bgp-v1.yang index 48e323e..5796ad1 100644 --- a/yang/vyatta-protocols-frr-bgp-v1.yang +++ b/yang/vyatta-protocols-frr-bgp-v1.yang @@ -68,31 +68,31 @@ module vyatta-protocols-frr-bgp-v1 { description "Inital version."; } - typedef rt-rd { - type union { - type string { - //ASN:NN format. Allowing 2-byte:4-byte (65535:4294967295) - pattern '([0-9]|[1-9]\d{1,3}|[1-5]\d{4}|6[0-4]\d{3}|65[0-4]\d{2}|655[0-2]\d|6553[0-5])' - + ':' - + '([0-9]|[1-9]\d{1,8}|[1-3]\d{9}|4[0-1]\d{8}|42[0-8]\d{7}|429[0-3]\d{6}|4294[0-8]\d{5}|' - + '42949[0-5]\d{4}|429496[0-6]\d{3}|4294967[0-1]\d{2}|42949672[0-8]\d|429496729[0-5])'; - } - type string { - //ASN:NN format. Allowing 4-byte:2-byte (4294967295:65535) - pattern '([0-9]|[1-9]\d{1,8}|[1-3]\d{9}|4[0-1]\d{8}|42[0-8]\d{7}|429[0-3]\d{6}|4294[0-8]\d{5}|' - + '42949[0-5]\d{4}|429496[0-6]\d{3}|4294967[0-1]\d{2}|42949672[0-8]\d|429496729[0-5])' - + ':' - + '([0-9]|[1-9]\d{1,3}|[1-5]\d{4}|6[0-4]\d{3}|65[0-4]\d{2}|655[0-2]\d|6553[0-5])'; - } - type string { - //IPAddress:NN format. Allowing IpAddress:2-byte - pattern '(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}' - + '([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])' - + ':' - + '([0-9]|[1-9]\d{1,3}|[1-5]\d{4}|6[0-4]\d{3}|65[0-4]\d{2}|655[0-2]\d|6553[0-5])'; - } - } - } + typedef rt-rd { + type union { + type string { + //ASN:NN format. Allowing 2-byte:4-byte (65535:4294967295) + pattern '([0-9]|[1-9]\d{1,3}|[1-5]\d{4}|6[0-4]\d{3}|65[0-4]\d{2}|655[0-2]\d|6553[0-5])' + + ':' + + '([0-9]|[1-9]\d{1,8}|[1-3]\d{9}|4[0-1]\d{8}|42[0-8]\d{7}|429[0-3]\d{6}|4294[0-8]\d{5}|' + + '42949[0-5]\d{4}|429496[0-6]\d{3}|4294967[0-1]\d{2}|42949672[0-8]\d|429496729[0-5])'; + } + type string { + //ASN:NN format. Allowing 4-byte:2-byte (4294967295:65535) + pattern '([0-9]|[1-9]\d{1,8}|[1-3]\d{9}|4[0-1]\d{8}|42[0-8]\d{7}|429[0-3]\d{6}|4294[0-8]\d{5}|' + + '42949[0-5]\d{4}|429496[0-6]\d{3}|4294967[0-1]\d{2}|42949672[0-8]\d|429496729[0-5])' + + ':' + + '([0-9]|[1-9]\d{1,3}|[1-5]\d{4}|6[0-4]\d{3}|65[0-4]\d{2}|655[0-2]\d|6553[0-5])'; + } + type string { + //IPAddress:NN format. Allowing IpAddress:2-byte + pattern '(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}' + + '([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])' + + ':' + + '([0-9]|[1-9]\d{1,3}|[1-5]\d{4}|6[0-4]\d{3}|65[0-4]\d{2}|655[0-2]\d|6553[0-5])'; + } + } + } grouping route-map-group { leaf route-map { @@ -242,40 +242,40 @@ module vyatta-protocols-frr-bgp-v1 { } } - grouping network-ipv4-vpn { - list network { - description "BGP network"; - configd:help "BGP network"; - key "addr"; - leaf addr { - description "BGP network"; - type types:ipv4-prefix { - configd:normalize "normalize ipv4-prefix"; - } - configd:help "BGP network"; - } - leaf rd { - description "Specify Route Distinguisher"; - configd:help "Specify Route Distinguisher"; - configd:pattern-help "ASN:NN or IPAddress:NN"; - type rt-rd; - default "100:1"; - } - leaf label { - description "VPN NLRI label"; - configd:help "VPN NLRI label"; - type uint32 { - range 0..1048575; - } - default "10"; - } - uses route-map-group { - refine route-map { - configd:help "Route-map to modify network"; - } - } - } - } + grouping network-ipv4-vpn { + list network { + description "BGP network"; + configd:help "BGP network"; + key "addr"; + leaf addr { + description "BGP network"; + type types:ipv4-prefix { + configd:normalize "normalize ipv4-prefix"; + } + configd:help "BGP network"; + } + leaf rd { + description "Specify Route Distinguisher"; + configd:help "Specify Route Distinguisher"; + configd:pattern-help "ASN:NN or IPAddress:NN"; + type rt-rd; + default "100:1"; + } + leaf label { + description "VPN NLRI label"; + configd:help "VPN NLRI label"; + type uint32 { + range 0..1048575; + } + default "10"; + } + uses route-map-group { + refine route-map { + configd:help "Route-map to modify network"; + } + } + } + } grouping network-ipv4 { list network { @@ -1353,94 +1353,6 @@ module vyatta-protocols-frr-bgp-v1 { uses neigh_peer_grp_ipv4_lists; } - container ipv4-vpn { - description "BGP neighbor parameters"; - presence "Enables BGP neighbor IPv4 parameters"; - configd:help "BGP neighbor parameters"; - uses peer-grp-neighbor-afi-common-settings { - refine filter-list/export { - must "not(../../peer-group)" { - error-message "You may not configure filter-list export for a neighbor in peer-group\n"; - } - } - refine route-map/export { - must "not(../../peer-group)" { - error-message "You may not configure route-map export for a neighbor in peer-group\n"; - } - } - refine attribute-unchanged { - must "not(../peer-group)" { - error-message "You may not configure attribute-unchanged for a neighbor in peer-group\n"; - } - } - refine remove-private-as { - must "not(../peer-group)" { - error-message "You may not configure remove-private-as for a neighbor in peer-group\n"; - } - } - refine route-reflector-client { - must "not(../peer-group)" { - error-message "You may not configure route-reflector-client for a neighbor in peer-group\n"; - } - } - refine disable-send-community { - must "not(../peer-group)" { - error-message "You may not configure disable-send-community for a neighbor in peer-group\n"; - } - } - refine capability/orf { - must "not(../../peer-group)" { - error-message "You may not configure capability orf for a neighbor in peer-group"; - } - } - refine default-originate { - must "not(../peer-group)" { - error-message "You may not configure default-originate for a neighbor in peer-group\n"; - } - } - refine unsuppress-map { - must "not(../peer-group)" { - error-message "You may not configure unsuppress-map for a neighbor in peer-group\n"; - } - } - refine nexthop-self { - must "not(../peer-group)" { - error-message "You may not configure nexthop-self for a neighbor in peer-group\n"; - } - } - refine route-server-client { - must "not(../peer-group)" { - error-message "You may not configure route-server-client for a neighbor in peer-group\n"; - } - } - } - uses neigh_peer_grp_ipv4_lists { - refine distribute-list { - must "not(../../../../peer-group[tagnode = current()/../peer-group]/address-family/ipv4-unicast/prefix-list)" { - error-message "You may not configure distribute-list when prefix-list is set in peer-group"; - } - } - refine prefix-list { - must "not(../../../../peer-group[tagnode = current()/../peer-group]/address-family/ipv4-unicast/distribute-list)" { - error-message "You may not configure prefix-list when distribute-list is set in peer-group"; - } - } - } - leaf peer-group { - description "IPv4 peer group for this peer"; - type leafref { - path "../../../../peer-group/tagnode"; - } - configd:help "IPv4 peer group for this peer"; - must "../../../../peer-group[tagnode=current()]/address-family/ipv4-unicast" { - error-message 'You must configure address-family ipv4-unicast in peer-group'; - } - must "not(../../ipv6-unicast/peer-group) or (current() = ../../ipv6-unicast/peer-group)" { - error-message 'You must configure same peer-group for all address-families'; - } - } - } - container ipv6-unicast { description "BGP peer-group IPv6 unicast parameters"; presence "Enables BGP peer-group IPv6 unicast parameters"; @@ -1671,6 +1583,95 @@ module vyatta-protocols-frr-bgp-v1 { } } } + + container ipv4-vpn { + description "BGP neighbor parameters"; + presence "Enables BGP neighbor IPv4 parameters"; + configd:help "BGP neighbor parameters"; + uses peer-grp-neighbor-afi-common-settings { + refine filter-list/export { + must "not(../../peer-group)" { + error-message "You may not configure filter-list export for a neighbor in peer-group\n"; + } + } + refine route-map/export { + must "not(../../peer-group)" { + error-message "You may not configure route-map export for a neighbor in peer-group\n"; + } + } + refine attribute-unchanged { + must "not(../peer-group)" { + error-message "You may not configure attribute-unchanged for a neighbor in peer-group\n"; + } + } + refine remove-private-as { + must "not(../peer-group)" { + error-message "You may not configure remove-private-as for a neighbor in peer-group\n"; + } + } + refine route-reflector-client { + must "not(../peer-group)" { + error-message "You may not configure route-reflector-client for a neighbor in peer-group\n"; + } + } + refine disable-send-community { + must "not(../peer-group)" { + error-message "You may not configure disable-send-community for a neighbor in peer-group\n"; + } + } + refine capability/orf { + must "not(../../peer-group)" { + error-message "You may not configure capability orf for a neighbor in peer-group"; + } + } + refine default-originate { + must "not(../peer-group)" { + error-message "You may not configure default-originate for a neighbor in peer-group\n"; + } + } + refine unsuppress-map { + must "not(../peer-group)" { + error-message "You may not configure unsuppress-map for a neighbor in peer-group\n"; + } + } + refine nexthop-self { + must "not(../peer-group)" { + error-message "You may not configure nexthop-self for a neighbor in peer-group\n"; + } + } + refine route-server-client { + must "not(../peer-group)" { + error-message "You may not configure route-server-client for a neighbor in peer-group\n"; + } + } + } + uses neigh_peer_grp_ipv4_lists { + refine distribute-list { + must "not(../../../../peer-group[tagnode = current()/../peer-group]/address-family/ipv4-unicast/prefix-list)" { + error-message "You may not configure distribute-list when prefix-list is set in peer-group"; + } + } + refine prefix-list { + must "not(../../../../peer-group[tagnode = current()/../peer-group]/address-family/ipv4-unicast/distribute-list)" { + error-message "You may not configure prefix-list when distribute-list is set in peer-group"; + } + } + } + leaf peer-group { + description "IPv4 peer group for this peer"; + type leafref { + path "../../../../peer-group/tagnode"; + } + configd:help "IPv4 peer group for this peer"; + must "../../../../peer-group[tagnode=current()]/address-family/ipv4-unicast" { + error-message 'You must configure address-family ipv4-unicast in peer-group'; + } + must "not(../../ipv6-unicast/peer-group) or (current() = ../../ipv6-unicast/peer-group)" { + error-message 'You must configure same peer-group for all address-families'; + } + } + } + container ipv6-unicast { description "BGP neighbor parameters"; presence "Enables BGP neighbor IPv6 parameters"; @@ -1776,32 +1777,34 @@ module vyatta-protocols-frr-bgp-v1 { uses parameters-distance; uses parameters-dampening; } - container label { - description "label value for VRF"; - configd:help "label value for VRF"; - container vpn { - description "Between current address-family and vpn"; - configd:help "Between current address-family and vpn"; - leaf export { - description "For routes leaked from current address-family to vpn"; - configd:help "For routes leaked from current address-family to vpn"; - type uint32 { - range 0..1048575; - } - } - } - } + + container label { + description "label value for VRF"; + configd:help "label value for VRF"; + container vpn { + description "Between current address-family and vpn"; + configd:help "Between current address-family and vpn"; + leaf export { + description "For routes leaked from current address-family to vpn"; + configd:help "For routes leaked from current address-family to vpn"; + type uint32 { + range 0..1048575; + } + } + } + } + uses ipv4-aggregate-address; uses network-ipv4; uses redistribute-ipv4; } - container ipv4-vpn { - description "BGP IPv4 VPN settings"; - presence "Enables BGP IPv4 VPN settings"; - configd:help "BGP IPv4 VPN settings"; - uses network-ipv4-vpn; - } + container ipv4-vpn { + description "BGP IPv4 VPN settings"; + presence "Enables BGP IPv4 VPN settings"; + configd:help "BGP IPv4 VPN settings"; + uses network-ipv4-vpn; + } container ipv6-unicast { description "Enable BGP IPv6 settings"; From 7a05e84e41ef701d4d3484f89a3a8616bf0f3ed0 Mon Sep 17 00:00:00 2001 From: harios Date: Thu, 16 Apr 2020 16:57:59 +0530 Subject: [PATCH 3/5] Commands added for supporting IPv4 MPLS Layer 3 VPN. 1. Revision added. 2. Rectified indentation. Signed-off-by: harios --- yang/vyatta-protocols-frr-bgp-v1.yang | 61 ++++++++++++++++++--------- 1 file changed, 40 insertions(+), 21 deletions(-) diff --git a/yang/vyatta-protocols-frr-bgp-v1.yang b/yang/vyatta-protocols-frr-bgp-v1.yang index 5796ad1..20dc5d7 100644 --- a/yang/vyatta-protocols-frr-bgp-v1.yang +++ b/yang/vyatta-protocols-frr-bgp-v1.yang @@ -64,8 +64,8 @@ module vyatta-protocols-frr-bgp-v1 { SPDX-License-Identifier: BSD-3-Clause The YANG module package for vyatta-protocols-frr-bgp-v1"; - revision 2018-10-30 { - description "Inital version."; + revision 2020-04-16 { + description "Added commands to support IPv4 mpls l3 vpn."; } typedef rt-rd { @@ -1591,69 +1591,84 @@ module vyatta-protocols-frr-bgp-v1 { uses peer-grp-neighbor-afi-common-settings { refine filter-list/export { must "not(../../peer-group)" { - error-message "You may not configure filter-list export for a neighbor in peer-group\n"; + error-message "You may not configure + filter-list export for a neighbor in peer-group\n"; } } refine route-map/export { must "not(../../peer-group)" { - error-message "You may not configure route-map export for a neighbor in peer-group\n"; + error-message "You may not configure + route-map export for a neighbor in peer-group\n"; } } refine attribute-unchanged { must "not(../peer-group)" { - error-message "You may not configure attribute-unchanged for a neighbor in peer-group\n"; + error-message "You may not configure + attribute-unchanged for a neighbor in peer-group\n"; } } refine remove-private-as { must "not(../peer-group)" { - error-message "You may not configure remove-private-as for a neighbor in peer-group\n"; + error-message "You may not configure + remove-private-as for a neighbor in peer-group\n"; } } refine route-reflector-client { must "not(../peer-group)" { - error-message "You may not configure route-reflector-client for a neighbor in peer-group\n"; + error-message "You may not configure + route-reflector-client for a neighbor in peer-group\n"; } } refine disable-send-community { must "not(../peer-group)" { - error-message "You may not configure disable-send-community for a neighbor in peer-group\n"; + error-message "You may not configure + disable-send-community for a neighbor in peer-group\n"; } } refine capability/orf { must "not(../../peer-group)" { - error-message "You may not configure capability orf for a neighbor in peer-group"; + error-message "You may not configure + capability orf for a neighbor in peer-group"; } } refine default-originate { must "not(../peer-group)" { - error-message "You may not configure default-originate for a neighbor in peer-group\n"; + error-message "You may not configure + default-originate for a neighbor in peer-group\n"; } } refine unsuppress-map { must "not(../peer-group)" { - error-message "You may not configure unsuppress-map for a neighbor in peer-group\n"; + error-message "You may not configure + unsuppress-map for a neighbor in peer-group\n"; } } refine nexthop-self { must "not(../peer-group)" { - error-message "You may not configure nexthop-self for a neighbor in peer-group\n"; + error-message "You may not configure + nexthop-self for a neighbor in peer-group\n"; } } refine route-server-client { must "not(../peer-group)" { - error-message "You may not configure route-server-client for a neighbor in peer-group\n"; + error-message "You may not configure + route-server-client for a neighbor in peer-group\n"; } } } uses neigh_peer_grp_ipv4_lists { refine distribute-list { - must "not(../../../../peer-group[tagnode = current()/../peer-group]/address-family/ipv4-unicast/prefix-list)" { - error-message "You may not configure distribute-list when prefix-list is set in peer-group"; + must "not(../../../../peer-group[tagnode = current()/../peer-group]/ + address-family/ipv4-unicast/prefix-list)" { + error-message "You may not configure + distribute-list when prefix-list is set in peer-group"; } } refine prefix-list { - must "not(../../../../peer-group[tagnode = current()/../peer-group]/address-family/ipv4-unicast/distribute-list)" { - error-message "You may not configure prefix-list when distribute-list is set in peer-group"; + must "not(../../../../peer-group[tagnode = current()/../peer-group]/ + address-family/ipv4-unicast/distribute-list)" { + error-message "You may not configure + prefix-list when distribute-list is set in peer-group"; } } } @@ -1663,11 +1678,15 @@ module vyatta-protocols-frr-bgp-v1 { path "../../../../peer-group/tagnode"; } configd:help "IPv4 peer group for this peer"; - must "../../../../peer-group[tagnode=current()]/address-family/ipv4-unicast" { - error-message 'You must configure address-family ipv4-unicast in peer-group'; + must "../../../../peer-group[tagnode=current()]/ + address-family/ipv4-unicast" { + error-message 'You must configure + address-family ipv4-unicast in peer-group'; } - must "not(../../ipv6-unicast/peer-group) or (current() = ../../ipv6-unicast/peer-group)" { - error-message 'You must configure same peer-group for all address-families'; + must "not(../../ipv6-unicast/peer-group) or + (current() = ../../ipv6-unicast/peer-group)" { + error-message 'You must configure same + peer-group for all address-families'; } } } From bf6b3c1136a909ae5e00db33e5d0777a1bb0358b Mon Sep 17 00:00:00 2001 From: harios Date: Fri, 17 Apr 2020 20:05:22 +0530 Subject: [PATCH 4/5] Commands added for supporting IPv4 MPLS Layer 3 VPN. 1 Added correctly the new revision statement for the changes. Signed-off-by: harios --- yang/vyatta-protocols-frr-bgp-v1.yang | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/yang/vyatta-protocols-frr-bgp-v1.yang b/yang/vyatta-protocols-frr-bgp-v1.yang index 20dc5d7..f9e42d5 100644 --- a/yang/vyatta-protocols-frr-bgp-v1.yang +++ b/yang/vyatta-protocols-frr-bgp-v1.yang @@ -68,6 +68,10 @@ module vyatta-protocols-frr-bgp-v1 { description "Added commands to support IPv4 mpls l3 vpn."; } + revision 2018-10-30 { + description "Inital version."; + } + typedef rt-rd { type union { type string { From b75fdd848bc52a68220be2a3c9656d76f376ff3f Mon Sep 17 00:00:00 2001 From: harios Date: Tue, 19 May 2020 17:41:27 +0530 Subject: [PATCH 5/5] Commands added for supporting 6VPE and 6PE features. 1. Added "vpnv6-unicast" and "ipv6-labeled-unicast" address family in bgp. 2. Added support for "label vpn export auto" in bgp. 3. The address-family "ipv4-vpn" is now replaced with "vpnv4-unicast". Signed-off-by: harios --- scripts/frr/configs/commands/bgp.json | 129 +++++++--- scripts/frr/configs/commands/bgp_vrf.json | 126 +++++++--- yang/vyatta-protocols-frr-bgp-v1.yang | 289 +++++++++++++++++++++- 3 files changed, 475 insertions(+), 69 deletions(-) diff --git a/scripts/frr/configs/commands/bgp.json b/scripts/frr/configs/commands/bgp.json index 5e41b5f..fb90055 100644 --- a/scripts/frr/configs/commands/bgp.json +++ b/scripts/frr/configs/commands/bgp.json @@ -53,9 +53,14 @@ "/protocols/bgp/@element/address-family/ipv4-unicast/parameters/distance/global": "distance bgp {/external/@text} {/internal/@text} {/local/@text}", "/protocols/bgp/@element/address-family/ipv4-unicast/network/@element": "network {/tagnode/@text} [route-map {/route-map/@text},] $if|backdoor,|backdoor in {/@dict}$", "/protocols/bgp/@element/address-family/ipv4-unicast/label/vpn/export": "label vpn export {/@text}", - "/protocols/bgp/@element/address-family/ipv4-vpn/@enter": "address-family ipv4 vpn", - "/protocols/bgp/@element/address-family/ipv4-vpn/@exit": "exit-address-family", - "/protocols/bgp/@element/address-family/ipv4-vpn/network/@element": "network {/addr/@text} rd {/rd/@text} label {/label/@text} [route-map {/route-map/@text},]", + "/protocols/bgp/@element/address-family/vpnv4-unicast/@enter": "address-family ipv4 vpn", + "/protocols/bgp/@element/address-family/vpnv4-unicast/@exit": "exit-address-family", + "/protocols/bgp/@element/address-family/vpnv4-unicast/network/@element": "network {/addr/@text} rd {/rd/@text} label {/label/@text} [route-map {/route-map/@text},]", + + "/protocols/bgp/@element/address-family/vpnv6-unicast/@enter": "address-family ipv6 vpn", + "/protocols/bgp/@element/address-family/vpnv6-unicast/@exit": "exit-address-family", + "/protocols/bgp/@element/address-family/vpnv6-unicast/network/@element": "network {/addr/@text} rd {/rd/@text} label {/label/@text} [route-map {/route-map/@text},]", + "/protocols/bgp/@element/address-family/ipv6-unicast/@enter": "address-family ipv6 unicast", "/protocols/bgp/@element/address-family/ipv6-unicast/@exit": "exit-address-family", "/protocols/bgp/@element/address-family/ipv6-unicast/aggregate-address/@element": "aggregate-address {/tagnode/@text} $if|as-set,summary-only,|as-set in {/@dict}, summary-only in {/@dict}$", @@ -67,6 +72,7 @@ "/protocols/bgp/@element/address-family/ipv6-unicast/parameters/dampening": "bgp dampening $if|{/half-life/@text},|half-life in {/@dict}$", "/protocols/bgp/@element/address-family/ipv6-unicast/parameters/distance/global": "distance bgp {/external/@text} {/internal/@text} {/local/@text}", "/protocols/bgp/@element/address-family/ipv6-unicast/network/@element": "network {/tagnode/@text} [route-map {/route-map/@text},]", + "/protocols/bgp/@element/address-family/ipv6-unicast/label/vpn/export": "label vpn export {/@text}", "/protocols/bgp/@element/neighbor/@element/address-family/ipv4-unicast/@enter": "address-family ipv4 unicast", "/protocols/bgp/@element/neighbor/@element/address-family/ipv4-unicast/@exit": "exit-address-family", @@ -97,34 +103,34 @@ "/protocols/bgp/@element/neighbor/@element/address-family/ipv4-unicast/unsuppress-map": "neighbor {/../../../tagnode/@text} unsuppress-map {/@text}", "/protocols/bgp/@element/neighbor/@element/address-family/ipv4-unicast/weight": "neighbor {/../../../tagnode/@text} weight {/@text}", - "/protocols/bgp/@element/neighbor/@element/address-family/ipv4-vpn/@enter": "address-family ipv4 vpn", - "/protocols/bgp/@element/neighbor/@element/address-family/ipv4-vpn/@exit": "exit-address-family", - "/protocols/bgp/@element/neighbor/@element/address-family/ipv4-vpn": ["[neighbor {/../../tagnode/@text} peer-group {/peer-group/@text},]", "neighbor {/../../tagnode/@text} activate"], - "/protocols/bgp/@element/neighbor/@element/address-family/ipv4-vpn/allowas-in": "neighbor {/../../../tagnode/@text} allowas-in", - "/protocols/bgp/@element/neighbor/@element/address-family/ipv4-vpn/allowas-in/number": "neighbor {/../../../../tagnode/@text} allowas-in {/@text}", - "/protocols/bgp/@element/neighbor/@element/address-family/ipv4-vpn/attribute-unchanged": "neighbor {/../../../tagnode/@text} attribute-unchanged $if|as-path,|as-path in {/@dict}$ $if|med,|med in {/@dict}$ $if|next-hop,|next-hop in {/@dict}$", - "/protocols/bgp/@element/neighbor/@element/address-family/ipv4-vpn/capability/orf/prefix-list/send": "neighbor {/../../../../../../tagnode/@text} capability orf prefix-list send", - "/protocols/bgp/@element/neighbor/@element/address-family/ipv4-vpn/capability/orf/prefix-list/receive": "neighbor {/../../../../../../tagnode/@text} capability orf prefix-list receive", - "/protocols/bgp/@element/neighbor/@element/address-family/ipv4-vpn/default-originate": "neighbor {/../../../tagnode/@text} default-originate [route-map {/route-map/@text},]", - "/protocols/bgp/@element/neighbor/@element/address-family/ipv4-vpn/disable-send-community/standard": "no neighbor {/../../../../tagnode/@text} send-community standard", - "/protocols/bgp/@element/neighbor/@element/address-family/ipv4-vpn/disable-send-community/extended": "no neighbor {/../../../../tagnode/@text} send-community extended", - "/protocols/bgp/@element/neighbor/@element/address-family/ipv4-vpn/distribute-list/export": "neighbor {/../../../../tagnode/@text} distribute-list {/@text} out", - "/protocols/bgp/@element/neighbor/@element/address-family/ipv4-vpn/distribute-list/import": "neighbor {/../../../../tagnode/@text} distribute-list {/@text} in", - "/protocols/bgp/@element/neighbor/@element/address-family/ipv4-vpn/filter-list/export": "neighbor {/../../../../tagnode/@text} filter-list {/@text} out", - "/protocols/bgp/@element/neighbor/@element/address-family/ipv4-vpn/filter-list/import": "neighbor {/../../../../tagnode/@text} filter-list {/@text} in", - "/protocols/bgp/@element/neighbor/@element/address-family/ipv4-vpn/maximum-prefix/@element": "neighbor {/../../../../tagnode/@text} maximum-prefix {/tagnode/@text} $if|{/threshold/@element/tagnode/@text},|threshold in {/@dict}$", - "/protocols/bgp/@element/neighbor/@element/address-family/ipv4-vpn/maximum-prefix/@element/threshold/@element": "neighbor {/../../../../../../tagnode/@text} maximum-prefix {/../../tagnode/@text} {/tagnode/@text} $if|warning-only,|warning-only in {/@dict}$", - "/protocols/bgp/@element/neighbor/@element/address-family/ipv4-vpn/nexthop-self": "neighbor {/../../../tagnode/@text} next-hop-self", - "/protocols/bgp/@element/neighbor/@element/address-family/ipv4-vpn/prefix-list/export": "neighbor {/../../../../tagnode/@text} prefix-list {/@text} out", - "/protocols/bgp/@element/neighbor/@element/address-family/ipv4-vpn/prefix-list/import": "neighbor {/../../../../tagnode/@text} prefix-list {/@text} in", - "/protocols/bgp/@element/neighbor/@element/address-family/ipv4-vpn/remove-private-as": "neighbor {/../../../tagnode/@text} remove-private-AS", - "/protocols/bgp/@element/neighbor/@element/address-family/ipv4-vpn/route-reflector-client": "neighbor {/../../../tagnode/@text} route-reflector-client", - "/protocols/bgp/@element/neighbor/@element/address-family/ipv4-vpn/route-server-client": "neighbor {/../../../tagnode/@text} route-server-client", - "/protocols/bgp/@element/neighbor/@element/address-family/ipv4-vpn/soft-reconfiguration/inbound": "neighbor {/../../../../tagnode/@text} soft-reconfiguration inbound", - "/protocols/bgp/@element/neighbor/@element/address-family/ipv4-vpn/route-map/import": "neighbor {/../../../../tagnode/@text} route-map {/@text} in", - "/protocols/bgp/@element/neighbor/@element/address-family/ipv4-vpn/route-map/export": "neighbor {/../../../../tagnode/@text} route-map {/@text} out", - "/protocols/bgp/@element/neighbor/@element/address-family/ipv4-vpn/unsuppress-map": "neighbor {/../../../tagnode/@text} unsuppress-map {/@text}", - "/protocols/bgp/@element/neighbor/@element/address-family/ipv4-vpn/weight": "neighbor {/../../../tagnode/@text} weight {/@text}", + "/protocols/bgp/@element/neighbor/@element/address-family/vpnv4-unicast/@enter": "address-family ipv4 vpn", + "/protocols/bgp/@element/neighbor/@element/address-family/vpnv4-unicast/@exit": "exit-address-family", + "/protocols/bgp/@element/neighbor/@element/address-family/vpnv4-unicast": ["[neighbor {/../../tagnode/@text} peer-group {/peer-group/@text},]", "neighbor {/../../tagnode/@text} activate"], + "/protocols/bgp/@element/neighbor/@element/address-family/vpnv4-unicast/allowas-in": "neighbor {/../../../tagnode/@text} allowas-in", + "/protocols/bgp/@element/neighbor/@element/address-family/vpnv4-unicast/allowas-in/number": "neighbor {/../../../../tagnode/@text} allowas-in {/@text}", + "/protocols/bgp/@element/neighbor/@element/address-family/vpnv4-unicast/attribute-unchanged": "neighbor {/../../../tagnode/@text} attribute-unchanged $if|as-path,|as-path in {/@dict}$ $if|med,|med in {/@dict}$ $if|next-hop,|next-hop in {/@dict}$", + "/protocols/bgp/@element/neighbor/@element/address-family/vpnv4-unicast/capability/orf/prefix-list/send": "neighbor {/../../../../../../tagnode/@text} capability orf prefix-list send", + "/protocols/bgp/@element/neighbor/@element/address-family/vpnv4-unicast/capability/orf/prefix-list/receive": "neighbor {/../../../../../../tagnode/@text} capability orf prefix-list receive", + "/protocols/bgp/@element/neighbor/@element/address-family/vpnv4-unicast/default-originate": "neighbor {/../../../tagnode/@text} default-originate [route-map {/route-map/@text},]", + "/protocols/bgp/@element/neighbor/@element/address-family/vpnv4-unicast/disable-send-community/standard": "no neighbor {/../../../../tagnode/@text} send-community standard", + "/protocols/bgp/@element/neighbor/@element/address-family/vpnv4-unicast/disable-send-community/extended": "no neighbor {/../../../../tagnode/@text} send-community extended", + "/protocols/bgp/@element/neighbor/@element/address-family/vpnv4-unicast/distribute-list/export": "neighbor {/../../../../tagnode/@text} distribute-list {/@text} out", + "/protocols/bgp/@element/neighbor/@element/address-family/vpnv4-unicast/distribute-list/import": "neighbor {/../../../../tagnode/@text} distribute-list {/@text} in", + "/protocols/bgp/@element/neighbor/@element/address-family/vpnv4-unicast/filter-list/export": "neighbor {/../../../../tagnode/@text} filter-list {/@text} out", + "/protocols/bgp/@element/neighbor/@element/address-family/vpnv4-unicast/filter-list/import": "neighbor {/../../../../tagnode/@text} filter-list {/@text} in", + "/protocols/bgp/@element/neighbor/@element/address-family/vpnv4-unicast/maximum-prefix/@element": "neighbor {/../../../../tagnode/@text} maximum-prefix {/tagnode/@text} $if|{/threshold/@element/tagnode/@text},|threshold in {/@dict}$", + "/protocols/bgp/@element/neighbor/@element/address-family/vpnv4-unicast/maximum-prefix/@element/threshold/@element": "neighbor {/../../../../../../tagnode/@text} maximum-prefix {/../../tagnode/@text} {/tagnode/@text} $if|warning-only,|warning-only in {/@dict}$", + "/protocols/bgp/@element/neighbor/@element/address-family/vpnv4-unicast/nexthop-self": "neighbor {/../../../tagnode/@text} next-hop-self", + "/protocols/bgp/@element/neighbor/@element/address-family/vpnv4-unicast/prefix-list/export": "neighbor {/../../../../tagnode/@text} prefix-list {/@text} out", + "/protocols/bgp/@element/neighbor/@element/address-family/vpnv4-unicast/prefix-list/import": "neighbor {/../../../../tagnode/@text} prefix-list {/@text} in", + "/protocols/bgp/@element/neighbor/@element/address-family/vpnv4-unicast/remove-private-as": "neighbor {/../../../tagnode/@text} remove-private-AS", + "/protocols/bgp/@element/neighbor/@element/address-family/vpnv4-unicast/route-reflector-client": "neighbor {/../../../tagnode/@text} route-reflector-client", + "/protocols/bgp/@element/neighbor/@element/address-family/vpnv4-unicast/route-server-client": "neighbor {/../../../tagnode/@text} route-server-client", + "/protocols/bgp/@element/neighbor/@element/address-family/vpnv4-unicast/soft-reconfiguration/inbound": "neighbor {/../../../../tagnode/@text} soft-reconfiguration inbound", + "/protocols/bgp/@element/neighbor/@element/address-family/vpnv4-unicast/route-map/import": "neighbor {/../../../../tagnode/@text} route-map {/@text} in", + "/protocols/bgp/@element/neighbor/@element/address-family/vpnv4-unicast/route-map/export": "neighbor {/../../../../tagnode/@text} route-map {/@text} out", + "/protocols/bgp/@element/neighbor/@element/address-family/vpnv4-unicast/unsuppress-map": "neighbor {/../../../tagnode/@text} unsuppress-map {/@text}", + "/protocols/bgp/@element/neighbor/@element/address-family/vpnv4-unicast/weight": "neighbor {/../../../tagnode/@text} weight {/@text}", "/protocols/bgp/@element/neighbor/@element/address-family/ipv6-unicast/@enter": "address-family ipv6 unicast", "/protocols/bgp/@element/neighbor/@element/address-family/ipv6-unicast/@exit": "exit-address-family", @@ -154,7 +160,66 @@ "/protocols/bgp/@element/neighbor/@element/address-family/ipv6-unicast/route-map/export": "neighbor {/../../../../tagnode/@text} route-map {/@text} out", "/protocols/bgp/@element/neighbor/@element/address-family/ipv6-unicast/unsuppress-map": "neighbor {/../../../tagnode/@text} unsuppress-map {/@text}", "/protocols/bgp/@element/neighbor/@element/address-family/ipv6-unicast/weight": "neighbor {/../../../tagnode/@text} weight {/@text}", - + + "/protocols/bgp/@element/neighbor/@element/address-family/vpnv6-unicast/@enter": "address-family ipv6 vpn", + "/protocols/bgp/@element/neighbor/@element/address-family/vpnv6-unicast/@exit": "exit-address-family", + "/protocols/bgp/@element/neighbor/@element/address-family/vpnv6-unicast": ["[neighbor {/../../tagnode/@text} peer-group {/peer-group/@text},]", "neighbor {/../../tagnode/@text} activate"], + "/protocols/bgp/@element/neighbor/@element/address-family/vpnv6-unicast/allowas-in": "neighbor {/../../../tagnode/@text} allowas-in", + "/protocols/bgp/@element/neighbor/@element/address-family/vpnv6-unicast/allowas-in/number": "neighbor {/../../../../tagnode/@text} allowas-in {/@text}", + "/protocols/bgp/@element/neighbor/@element/address-family/vpnv6-unicast/attribute-unchanged": "neighbor {/../../../tagnode/@text} attribute-unchanged $if|as-path,|as-path in {/@dict}$ $if|med,|med in {/@dict}$ $if|next-hop,|next-hop in {/@dict}$", + "/protocols/bgp/@element/neighbor/@element/address-family/vpnv6-unicast/capability/orf/prefix-list/send": "neighbor {/../../../../../../tagnode/@text} capability orf prefix-list send", + "/protocols/bgp/@element/neighbor/@element/address-family/vpnv6-unicast/capability/orf/prefix-list/receive": "neighbor {/../../../../../../tagnode/@text} capability orf prefix-list receive", + "/protocols/bgp/@element/neighbor/@element/address-family/vpnv6-unicast/default-originate": "neighbor {/../../../tagnode/@text} default-originate [route-map {/route-map/@text},]", + "/protocols/bgp/@element/neighbor/@element/address-family/vpnv6-unicast/disable-send-community/standard": "no neighbor {/../../../../tagnode/@text} send-community standard", + "/protocols/bgp/@element/neighbor/@element/address-family/vpnv6-unicast/disable-send-community/extended": "no neighbor {/../../../../tagnode/@text} send-community extended", + "/protocols/bgp/@element/neighbor/@element/address-family/vpnv6-unicast/distribute-list/export": "neighbor {/../../../../tagnode/@text} distribute-list {/@text} out", + "/protocols/bgp/@element/neighbor/@element/address-family/vpnv6-unicast/distribute-list/import": "neighbor {/../../../../tagnode/@text} distribute-list {/@text} in", + "/protocols/bgp/@element/neighbor/@element/address-family/vpnv6-unicast/filter-list/export": "neighbor {/../../../../tagnode/@text} filter-list {/@text} out", + "/protocols/bgp/@element/neighbor/@element/address-family/vpnv6-unicast/filter-list/import": "neighbor {/../../../../tagnode/@text} filter-list {/@text} in", + "/protocols/bgp/@element/neighbor/@element/address-family/vpnv6-unicast/maximum-prefix/@element": "neighbor {/../../../../tagnode/@text} maximum-prefix {/tagnode/@text} $if|{/threshold/@element/tagnode/@text},|threshold in {/@dict}$", + "/protocols/bgp/@element/neighbor/@element/address-family/vpnv6-unicast/maximum-prefix/@element/threshold/@element": "neighbor {/../../../../../../tagnode/@text} maximum-prefix {/../../tagnode/@text} {/tagnode/@text} $if|warning-only,|warning-only in {/@dict}$", + "/protocols/bgp/@element/neighbor/@element/address-family/vpnv6-unicast/nexthop-self": "neighbor {/../../../tagnode/@text} next-hop-self", + "/protocols/bgp/@element/neighbor/@element/address-family/vpnv6-unicast/prefix-list/export": "neighbor {/../../../../tagnode/@text} prefix-list {/@text} out", + "/protocols/bgp/@element/neighbor/@element/address-family/vpnv6-unicast/prefix-list/import": "neighbor {/../../../../tagnode/@text} prefix-list {/@text} in", + "/protocols/bgp/@element/neighbor/@element/address-family/vpnv6-unicast/remove-private-as": "neighbor {/../../../tagnode/@text} remove-private-AS", + "/protocols/bgp/@element/neighbor/@element/address-family/vpnv6-unicast/route-reflector-client": "neighbor {/../../../tagnode/@text} route-reflector-client", + "/protocols/bgp/@element/neighbor/@element/address-family/vpnv6-unicast/route-server-client": "neighbor {/../../../tagnode/@text} route-server-client", + "/protocols/bgp/@element/neighbor/@element/address-family/vpnv6-unicast/soft-reconfiguration/inbound": "neighbor {/../../../../tagnode/@text} soft-reconfiguration inbound", + "/protocols/bgp/@element/neighbor/@element/address-family/vpnv6-unicast/route-map/import": "neighbor {/../../../../tagnode/@text} route-map {/@text} in", + "/protocols/bgp/@element/neighbor/@element/address-family/vpnv6-unicast/route-map/export": "neighbor {/../../../../tagnode/@text} route-map {/@text} out", + "/protocols/bgp/@element/neighbor/@element/address-family/vpnv6-unicast/unsuppress-map": "neighbor {/../../../tagnode/@text} unsuppress-map {/@text}", + "/protocols/bgp/@element/neighbor/@element/address-family/vpnv6-unicast/weight": "neighbor {/../../../tagnode/@text} weight {/@text}", + + + "/protocols/bgp/@element/neighbor/@element/address-family/ipv6-labeled-unicast/@enter": "address-family ipv6 labeled-unicast", + "/protocols/bgp/@element/neighbor/@element/address-family/ipv6-labeled-unicast/@exit": "exit-address-family", + "/protocols/bgp/@element/neighbor/@element/address-family/ipv6-labeled-unicast": ["[neighbor {/../../tagnode/@text} peer-group {/peer-group/@text},]", "neighbor {/../../tagnode/@text} activate"], + "/protocols/bgp/@element/neighbor/@element/address-family/ipv6-labeled-unicast/allowas-in": "neighbor {/../../../tagnode/@text} allowas-in", + "/protocols/bgp/@element/neighbor/@element/address-family/ipv6-labeled-unicast/allowas-in/number": "neighbor {/../../../../tagnode/@text} allowas-in {/@text}", + "/protocols/bgp/@element/neighbor/@element/address-family/ipv6-labeled-unicast/attribute-unchanged": "neighbor {/../../../tagnode/@text} attribute-unchanged $if|as-path,|as-path in {/@dict}$ $if|med,|med in {/@dict}$ $if|next-hop,|next-hop in {/@dict}$", + "/protocols/bgp/@element/neighbor/@element/address-family/ipv6-labeled-unicast/capability/orf/prefix-list/send": "neighbor {/../../../../../../tagnode/@text} capability orf prefix-list send", + "/protocols/bgp/@element/neighbor/@element/address-family/ipv6-labeled-unicast/capability/orf/prefix-list/receive": "neighbor {/../../../../../../tagnode/@text} capability orf prefix-list receive", + "/protocols/bgp/@element/neighbor/@element/address-family/ipv6-labeled-unicast/default-originate": "neighbor {/../../../tagnode/@text} default-originate [route-map {/route-map/@text},]", + "/protocols/bgp/@element/neighbor/@element/address-family/ipv6-labeled-unicast/disable-send-community/standard": "no neighbor {/../../../../tagnode/@text} send-community standard", + "/protocols/bgp/@element/neighbor/@element/address-family/ipv6-labeled-unicast/disable-send-community/extended": "no neighbor {/../../../../tagnode/@text} send-community extended", + "/protocols/bgp/@element/neighbor/@element/address-family/ipv6-labeled-unicast/distribute-list/export": "neighbor {/../../../../tagnode/@text} distribute-list {/@text} out", + "/protocols/bgp/@element/neighbor/@element/address-family/ipv6-labeled-unicast/distribute-list/import": "neighbor {/../../../../tagnode/@text} distribute-list {/@text} in", + "/protocols/bgp/@element/neighbor/@element/address-family/ipv6-labeled-unicast/filter-list/export": "neighbor {/../../../../tagnode/@text} filter-list {/@text} out", + "/protocols/bgp/@element/neighbor/@element/address-family/ipv6-labeled-unicast/filter-list/import": "neighbor {/../../../../tagnode/@text} filter-list {/@text} in", + "/protocols/bgp/@element/neighbor/@element/address-family/ipv6-labeled-unicast/maximum-prefix/@element": "neighbor {/../../../../tagnode/@text} maximum-prefix {/tagnode/@text} $if|{/threshold/@element/tagnode/@text},|threshold in {/@dict}$", + "/protocols/bgp/@element/neighbor/@element/address-family/ipv6-labeled-unicast/maximum-prefix/@element/threshold/@element": "neighbor {/../../../../../../tagnode/@text} maximum-prefix {/../../tagnode/@text} {/tagnode/@text} $if|warning-only,|warning-only in {/@dict}$", + "/protocols/bgp/@element/neighbor/@element/address-family/ipv6-labeled-unicast/nexthop-self": "neighbor {/../../../tagnode/@text} next-hop-self", + "/protocols/bgp/@element/neighbor/@element/address-family/ipv6-labeled-unicast/prefix-list/export": "neighbor {/../../../../tagnode/@text} prefix-list {/@text} out", + "/protocols/bgp/@element/neighbor/@element/address-family/ipv6-labeled-unicast/prefix-list/import": "neighbor {/../../../../tagnode/@text} prefix-list {/@text} in", + "/protocols/bgp/@element/neighbor/@element/address-family/ipv6-labeled-unicast/remove-private-as": "neighbor {/../../../tagnode/@text} remove-private-AS", + "/protocols/bgp/@element/neighbor/@element/address-family/ipv6-labeled-unicast/route-reflector-client": "neighbor {/../../../tagnode/@text} route-reflector-client", + "/protocols/bgp/@element/neighbor/@element/address-family/ipv6-labeled-unicast/route-server-client": "neighbor {/../../../tagnode/@text} route-server-client", + "/protocols/bgp/@element/neighbor/@element/address-family/ipv6-labeled-unicast/soft-reconfiguration/inbound": "neighbor {/../../../../tagnode/@text} soft-reconfiguration inbound", + "/protocols/bgp/@element/neighbor/@element/address-family/ipv6-labeled-unicast/route-map/import": "neighbor {/../../../../tagnode/@text} route-map {/@text} in", + "/protocols/bgp/@element/neighbor/@element/address-family/ipv6-labeled-unicast/route-map/export": "neighbor {/../../../../tagnode/@text} route-map {/@text} out", + "/protocols/bgp/@element/neighbor/@element/address-family/ipv6-labeled-unicast/unsuppress-map": "neighbor {/../../../tagnode/@text} unsuppress-map {/@text}", + "/protocols/bgp/@element/neighbor/@element/address-family/ipv6-labeled-unicast/weight": "neighbor {/../../../tagnode/@text} weight {/@text}", + "/protocols/bgp/@element/peer-group/@element": "neighbor {/tagnode/@text} peer-group", "/protocols/bgp/@element/peer-group/@element/advertisement-interval": "neighbor {/../tagnode/@text} advertisement-interval {/@text}", "/protocols/bgp/@element/peer-group/@element/capability/dynamic": "neighbor {/../../tagnode/@text} capability dynamic", diff --git a/scripts/frr/configs/commands/bgp_vrf.json b/scripts/frr/configs/commands/bgp_vrf.json index 73b7975..a31d49c 100644 --- a/scripts/frr/configs/commands/bgp_vrf.json +++ b/scripts/frr/configs/commands/bgp_vrf.json @@ -57,9 +57,9 @@ "/routing/routing-instance/@element/protocols/bgp/@element/address-family/ipv4-unicast/network/@element": "network {/tagnode/@text} [route-map {/route-map/@text},] $if|backdoor,|backdoor in {/@dict}$", "/routing/routing-instance/@element/protocols/bgp/@element/address-family/ipv4-unicast/label/vpn/export": "label vpn export {/@text}", - "/routing/routing-instance/@element/protocols/bgp/@element/address-family/ipv4-vpn/@enter": "address-family ipv4 vpn", - "/routing/routing-instance/@element/protocols/bgp/@element/address-family/ipv4-vpn/@exit": "exit-address-family", - "/routing/routing-instance/@element/protocols/bgp/@element/address-family/ipv4-vpn/network/@element": "network {/addr/@text} rd {/rd/@text} label {/label/@text} [route-map {/route-map/@text},]", + "/routing/routing-instance/@element/protocols/bgp/@element/address-family/vpnv4-unicast/@enter": "address-family ipv4 vpn", + "/routing/routing-instance/@element/protocols/bgp/@element/address-family/vpnv4-unicast/@exit": "exit-address-family", + "/routing/routing-instance/@element/protocols/bgp/@element/address-family/vpnv4-unicast/network/@element": "network {/addr/@text} rd {/rd/@text} label {/label/@text} [route-map {/route-map/@text},]", "/routing/routing-instance/@element/protocols/bgp/@element/address-family/ipv6-unicast/@enter": "address-family ipv6 unicast", "/routing/routing-instance/@element/protocols/bgp/@element/address-family/ipv6-unicast/@exit": "exit-address-family", @@ -75,6 +75,12 @@ "/routing/routing-instance/@element/protocols/bgp/@element/address-family/ipv6-unicast/parameters/dampening": "bgp dampening $if|{/half-life/@text},|half-life in {/@dict}$", "/routing/routing-instance/@element/protocols/bgp/@element/address-family/ipv6-unicast/parameters/distance/global": "distance bgp {/external/@text} {/internal/@text} {/local/@text}", "/routing/routing-instance/@element/protocols/bgp/@element/address-family/ipv6-unicast/network/@element": "network {/tagnode/@text} [route-map {/route-map/@text},]", + "/routing/routing-instance/@element/protocols/bgp/@element/address-family/ipv6-unicast/label/vpn/export": "label vpn export {/@text}", + + "/routing/routing-instance/@element/protocols/bgp/@element/address-family/vpnv6-unicast/@enter": "address-family ipv6 vpn", + "/routing/routing-instance/@element/protocols/bgp/@element/address-family/vpnv6-unicast/@exit": "exit-address-family", + "/routing/routing-instance/@element/protocols/bgp/@element/address-family/vpnv6-unicast/network/@element": "network {/addr/@text} rd {/rd/@text} label {/label/@text} [route-map {/route-map/@text},]", + "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/ipv4-unicast/@enter": "address-family ipv4 unicast", "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/ipv4-unicast/@exit": "exit-address-family", @@ -105,34 +111,34 @@ "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/ipv4-unicast/unsuppress-map": "neighbor {/../../../tagnode/@text} unsuppress-map {/@text}", "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/ipv4-unicast/weight": "neighbor {/../../../tagnode/@text} weight {/@text}", - "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/ipv4-vpn/@enter": "address-family ipv4 vpn", - "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/ipv4-vpn/@exit": "exit-address-family", - "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/ipv4-vpn": ["[neighbor {/../../tagnode/@text} peer-group {/peer-group/@text},]", "neighbor {/../../tagnode/@text} activate"], - "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/ipv4-vpn/allowas-in": "neighbor {/../../../tagnode/@text} allowas-in", - "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/ipv4-vpn/allowas-in/number": "neighbor {/../../../../tagnode/@text} allowas-in {/@text}", - "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/ipv4-vpn/attribute-unchanged": "neighbor {/../../../tagnode/@text} attribute-unchanged $if|as-path,|as-path in {/@dict}$ $if|med,|med in {/@dict}$ $if|next-hop,|next-hop in {/@dict}$", - "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/ipv4-vpn/capability/orf/prefix-list/send": "neighbor {/../../../../../../tagnode/@text} capability orf prefix-list send", - "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/ipv4-vpn/capability/orf/prefix-list/receive": "neighbor {/../../../../../../tagnode/@text} capability orf prefix-list receive", - "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/ipv4-vpn/default-originate": "neighbor {/../../../tagnode/@text} default-originate [route-map {/route-map/@text},]", - "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/ipv4-vpn/disable-send-community/standard": "no neighbor {/../../../../tagnode/@text} send-community standard", - "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/ipv4-vpn/disable-send-community/extended": "no neighbor {/../../../../tagnode/@text} send-community extended", - "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/ipv4-vpn/distribute-list/export": "neighbor {/../../../../tagnode/@text} distribute-list {/@text} out", - "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/ipv4-vpn/distribute-list/import": "neighbor {/../../../../tagnode/@text} distribute-list {/@text} in", - "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/ipv4-vpn/filter-list/export": "neighbor {/../../../../tagnode/@text} filter-list {/@text} out", - "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/ipv4-vpn/filter-list/import": "neighbor {/../../../../tagnode/@text} filter-list {/@text} in", - "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/ipv4-vpn/maximum-prefix/@element": "neighbor {/../../../../tagnode/@text} maximum-prefix {/tagnode/@text} $if|{/threshold/@element/tagnode/@text},|threshold in {/@dict}$", - "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/ipv4-vpn/maximum-prefix/@element/threshold/@element": "neighbor {/../../../../../../tagnode/@text} maximum-prefix {/../../tagnode/@text} {/tagnode/@text} $if|warning-only,|warning-only in {/@dict}$", - "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/ipv4-vpn/nexthop-self": "neighbor {/../../../tagnode/@text} next-hop-self", - "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/ipv4-vpn/prefix-list/export": "neighbor {/../../../../tagnode/@text} prefix-list {/@text} out", - "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/ipv4-vpn/prefix-list/import": "neighbor {/../../../../tagnode/@text} prefix-list {/@text} in", - "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/ipv4-vpn/remove-private-as": "neighbor {/../../../tagnode/@text} remove-private-AS", - "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/ipv4-vpn/route-reflector-client": "neighbor {/../../../tagnode/@text} route-reflector-client", - "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/ipv4-vpn/route-server-client": "neighbor {/../../../tagnode/@text} route-server-client", - "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/ipv4-vpn/soft-reconfiguration/inbound": "neighbor {/../../../../tagnode/@text} soft-reconfiguration inbound", - "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/ipv4-vpn/route-map/import": "neighbor {/../../../../tagnode/@text} route-map {/@text} in", - "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/ipv4-vpn/route-map/export": "neighbor {/../../../../tagnode/@text} route-map {/@text} out", - "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/ipv4-vpn/unsuppress-map": "neighbor {/../../../tagnode/@text} unsuppress-map {/@text}", - "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/ipv4-vpn/weight": "neighbor {/../../../tagnode/@text} weight {/@text}", + "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/vpnv4-unicast/@enter": "address-family ipv4 vpn", + "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/vpnv4-unicast/@exit": "exit-address-family", + "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/vpnv4-unicast": ["[neighbor {/../../tagnode/@text} peer-group {/peer-group/@text},]", "neighbor {/../../tagnode/@text} activate"], + "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/vpnv4-unicast/allowas-in": "neighbor {/../../../tagnode/@text} allowas-in", + "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/vpnv4-unicast/allowas-in/number": "neighbor {/../../../../tagnode/@text} allowas-in {/@text}", + "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/vpnv4-unicast/attribute-unchanged": "neighbor {/../../../tagnode/@text} attribute-unchanged $if|as-path,|as-path in {/@dict}$ $if|med,|med in {/@dict}$ $if|next-hop,|next-hop in {/@dict}$", + "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/vpnv4-unicast/capability/orf/prefix-list/send": "neighbor {/../../../../../../tagnode/@text} capability orf prefix-list send", + "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/vpnv4-unicast/capability/orf/prefix-list/receive": "neighbor {/../../../../../../tagnode/@text} capability orf prefix-list receive", + "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/vpnv4-unicast/default-originate": "neighbor {/../../../tagnode/@text} default-originate [route-map {/route-map/@text},]", + "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/vpnv4-unicast/disable-send-community/standard": "no neighbor {/../../../../tagnode/@text} send-community standard", + "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/vpnv4-unicast/disable-send-community/extended": "no neighbor {/../../../../tagnode/@text} send-community extended", + "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/vpnv4-unicast/distribute-list/export": "neighbor {/../../../../tagnode/@text} distribute-list {/@text} out", + "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/vpnv4-unicast/distribute-list/import": "neighbor {/../../../../tagnode/@text} distribute-list {/@text} in", + "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/vpnv4-unicast/filter-list/export": "neighbor {/../../../../tagnode/@text} filter-list {/@text} out", + "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/vpnv4-unicast/filter-list/import": "neighbor {/../../../../tagnode/@text} filter-list {/@text} in", + "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/vpnv4-unicast/maximum-prefix/@element": "neighbor {/../../../../tagnode/@text} maximum-prefix {/tagnode/@text} $if|{/threshold/@element/tagnode/@text},|threshold in {/@dict}$", + "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/vpnv4-unicast/maximum-prefix/@element/threshold/@element": "neighbor {/../../../../../../tagnode/@text} maximum-prefix {/../../tagnode/@text} {/tagnode/@text} $if|warning-only,|warning-only in {/@dict}$", + "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/vpnv4-unicast/nexthop-self": "neighbor {/../../../tagnode/@text} next-hop-self", + "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/vpnv4-unicast/prefix-list/export": "neighbor {/../../../../tagnode/@text} prefix-list {/@text} out", + "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/vpnv4-unicast/prefix-list/import": "neighbor {/../../../../tagnode/@text} prefix-list {/@text} in", + "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/vpnv4-unicast/remove-private-as": "neighbor {/../../../tagnode/@text} remove-private-AS", + "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/vpnv4-unicast/route-reflector-client": "neighbor {/../../../tagnode/@text} route-reflector-client", + "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/vpnv4-unicast/route-server-client": "neighbor {/../../../tagnode/@text} route-server-client", + "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/vpnv4-unicast/soft-reconfiguration/inbound": "neighbor {/../../../../tagnode/@text} soft-reconfiguration inbound", + "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/vpnv4-unicast/route-map/import": "neighbor {/../../../../tagnode/@text} route-map {/@text} in", + "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/vpnv4-unicast/route-map/export": "neighbor {/../../../../tagnode/@text} route-map {/@text} out", + "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/vpnv4-unicast/unsuppress-map": "neighbor {/../../../tagnode/@text} unsuppress-map {/@text}", + "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/vpnv4-unicast/weight": "neighbor {/../../../tagnode/@text} weight {/@text}", "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/ipv6-unicast/@enter": "address-family ipv6 unicast", @@ -163,7 +169,65 @@ "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/ipv6-unicast/route-map/export": "neighbor {/../../../../tagnode/@text} route-map {/@text} out", "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/ipv6-unicast/unsuppress-map": "neighbor {/../../../tagnode/@text} unsuppress-map {/@text}", "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/ipv6-unicast/weight": "neighbor {/../../../tagnode/@text} weight {/@text}", + + "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/vpnv6-unicast/@enter": "address-family ipv6 vpn", + "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/vpnv6-unicast/@exit": "exit-address-family", + "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/vpnv6-unicast": ["[neighbor {/../../tagnode/@text} peer-group {/peer-group/@text},]", "neighbor {/../../tagnode/@text} activate"], + "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/vpnv6-unicast/allowas-in": "neighbor {/../../../tagnode/@text} allowas-in", + "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/vpnv6-unicast/allowas-in/number": "neighbor {/../../../../tagnode/@text} allowas-in {/@text}", + "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/vpnv6-unicast/attribute-unchanged": "neighbor {/../../../tagnode/@text} attribute-unchanged $if|as-path,|as-path in {/@dict}$ $if|med,|med in {/@dict}$ $if|next-hop,|next-hop in {/@dict}$", + "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/vpnv6-unicast/capability/orf/prefix-list/send": "neighbor {/../../../../../../tagnode/@text} capability orf prefix-list send", + "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/vpnv6-unicast/capability/orf/prefix-list/receive": "neighbor {/../../../../../../tagnode/@text} capability orf prefix-list receive", + "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/vpnv6-unicast/default-originate": "neighbor {/../../../tagnode/@text} default-originate [route-map {/route-map/@text},]", + "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/vpnv6-unicast/disable-send-community/standard": "no neighbor {/../../../../tagnode/@text} send-community standard", + "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/vpnv6-unicast/disable-send-community/extended": "no neighbor {/../../../../tagnode/@text} send-community extended", + "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/vpnv6-unicast/distribute-list/export": "neighbor {/../../../../tagnode/@text} distribute-list {/@text} out", + "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/vpnv6-unicast/distribute-list/import": "neighbor {/../../../../tagnode/@text} distribute-list {/@text} in", + "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/vpnv6-unicast/filter-list/export": "neighbor {/../../../../tagnode/@text} filter-list {/@text} out", + "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/vpnv6-unicast/filter-list/import": "neighbor {/../../../../tagnode/@text} filter-list {/@text} in", + "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/vpnv6-unicast/maximum-prefix/@element": "neighbor {/../../../../tagnode/@text} maximum-prefix {/tagnode/@text} $if|{/threshold/@element/tagnode/@text},|threshold in {/@dict}$", + "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/vpnv6-unicast/maximum-prefix/@element/threshold/@element": "neighbor {/../../../../../../tagnode/@text} maximum-prefix {/../../tagnode/@text} {/tagnode/@text} $if|warning-only,|warning-only in {/@dict}$", + "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/vpnv6-unicast/nexthop-self": "neighbor {/../../../tagnode/@text} next-hop-self", + "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/vpnv6-unicast/prefix-list/export": "neighbor {/../../../../tagnode/@text} prefix-list {/@text} out", + "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/vpnv6-unicast/prefix-list/import": "neighbor {/../../../../tagnode/@text} prefix-list {/@text} in", + "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/vpnv6-unicast/remove-private-as": "neighbor {/../../../tagnode/@text} remove-private-AS", + "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/vpnv6-unicast/route-reflector-client": "neighbor {/../../../tagnode/@text} route-reflector-client", + "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/vpnv6-unicast/route-server-client": "neighbor {/../../../tagnode/@text} route-server-client", + "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/vpnv6-unicast/soft-reconfiguration/inbound": "neighbor {/../../../../tagnode/@text} soft-reconfiguration inbound", + "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/vpnv6-unicast/route-map/import": "neighbor {/../../../../tagnode/@text} route-map {/@text} in", + "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/vpnv6-unicast/route-map/export": "neighbor {/../../../../tagnode/@text} route-map {/@text} out", + "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/vpnv6-unicast/unsuppress-map": "neighbor {/../../../tagnode/@text} unsuppress-map {/@text}", + "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/vpnv6-unicast/weight": "neighbor {/../../../tagnode/@text} weight {/@text}", + "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/ipv6-labeled-unicast/@enter": "address-family ipv6 labeled-unicast", + "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/ipv6-labeled-unicast/@exit": "exit-address-family", + "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/ipv6-labeled-unicast": ["[neighbor {/../../tagnode/@text} peer-group {/peer-group/@text},]", "neighbor {/../../tagnode/@text} activate"], + "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/ipv6-labeled-unicast/allowas-in": "neighbor {/../../../tagnode/@text} allowas-in", + "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/ipv6-labeled-unicast/allowas-in/number": "neighbor {/../../../../tagnode/@text} allowas-in {/@text}", + "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/ipv6-labeled-unicast/attribute-unchanged": "neighbor {/../../../tagnode/@text} attribute-unchanged $if|as-path,|as-path in {/@dict}$ $if|med,|med in {/@dict}$ $if|next-hop,|next-hop in {/@dict}$", + "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/ipv6-labeled-unicast/capability/orf/prefix-list/send": "neighbor {/../../../../../../tagnode/@text} capability orf prefix-list send", + "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/ipv6-labeled-unicast/capability/orf/prefix-list/receive": "neighbor {/../../../../../../tagnode/@text} capability orf prefix-list receive", + "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/ipv6-labeled-unicast/default-originate": "neighbor {/../../../tagnode/@text} default-originate [route-map {/route-map/@text},]", + "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/ipv6-labeled-unicast/disable-send-community/standard": "no neighbor {/../../../../tagnode/@text} send-community standard", + "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/ipv6-labeled-unicast/disable-send-community/extended": "no neighbor {/../../../../tagnode/@text} send-community extended", + "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/ipv6-labeled-unicast/distribute-list/export": "neighbor {/../../../../tagnode/@text} distribute-list {/@text} out", + "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/ipv6-labeled-unicast/distribute-list/import": "neighbor {/../../../../tagnode/@text} distribute-list {/@text} in", + "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/ipv6-labeled-unicast/filter-list/export": "neighbor {/../../../../tagnode/@text} filter-list {/@text} out", + "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/ipv6-labeled-unicast/filter-list/import": "neighbor {/../../../../tagnode/@text} filter-list {/@text} in", + "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/ipv6-labeled-unicast/maximum-prefix/@element": "neighbor {/../../../../tagnode/@text} maximum-prefix {/tagnode/@text} $if|{/threshold/@element/tagnode/@text},|threshold in {/@dict}$", + "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/ipv6-labeled-unicast/maximum-prefix/@element/threshold/@element": "neighbor {/../../../../../../tagnode/@text} maximum-prefix {/../../tagnode/@text} {/tagnode/@text} $if|warning-only,|warning-only in {/@dict}$", + "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/ipv6-labeled-unicast/nexthop-self": "neighbor {/../../../tagnode/@text} next-hop-self", + "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/ipv6-labeled-unicast/prefix-list/export": "neighbor {/../../../../tagnode/@text} prefix-list {/@text} out", + "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/ipv6-labeled-unicast/prefix-list/import": "neighbor {/../../../../tagnode/@text} prefix-list {/@text} in", + "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/ipv6-labeled-unicast/remove-private-as": "neighbor {/../../../tagnode/@text} remove-private-AS", + "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/ipv6-labeled-unicast/route-reflector-client": "neighbor {/../../../tagnode/@text} route-reflector-client", + "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/ipv6-labeled-unicast/route-server-client": "neighbor {/../../../tagnode/@text} route-server-client", + "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/ipv6-labeled-unicast/soft-reconfiguration/inbound": "neighbor {/../../../../tagnode/@text} soft-reconfiguration inbound", + "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/ipv6-labeled-unicast/route-map/import": "neighbor {/../../../../tagnode/@text} route-map {/@text} in", + "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/ipv6-labeled-unicast/route-map/export": "neighbor {/../../../../tagnode/@text} route-map {/@text} out", + "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/ipv6-labeled-unicast/unsuppress-map": "neighbor {/../../../tagnode/@text} unsuppress-map {/@text}", + "/routing/routing-instance/@element/protocols/bgp/@element/neighbor/@element/address-family/ipv6-labeled-unicast/weight": "neighbor {/../../../tagnode/@text} weight {/@text}", + "/routing/routing-instance/@element/protocols/bgp/@element/peer-group/@element": "neighbor {/tagnode/@text} peer-group", "/routing/routing-instance/@element/protocols/bgp/@element/peer-group/@element/advertisement-interval": "neighbor {/../tagnode/@text} advertisement-interval {/@text}", "/routing/routing-instance/@element/protocols/bgp/@element/peer-group/@element/capability/dynamic": "neighbor {/../../tagnode/@text} capability dynamic", diff --git a/yang/vyatta-protocols-frr-bgp-v1.yang b/yang/vyatta-protocols-frr-bgp-v1.yang index f9e42d5..ccab11d 100644 --- a/yang/vyatta-protocols-frr-bgp-v1.yang +++ b/yang/vyatta-protocols-frr-bgp-v1.yang @@ -64,6 +64,10 @@ module vyatta-protocols-frr-bgp-v1 { SPDX-License-Identifier: BSD-3-Clause The YANG module package for vyatta-protocols-frr-bgp-v1"; + revision 2020-05-18 { + description "Commands added to support 6PE and 6VPE features."; + } + revision 2020-04-16 { description "Added commands to support IPv4 mpls l3 vpn."; } @@ -246,7 +250,7 @@ module vyatta-protocols-frr-bgp-v1 { } } - grouping network-ipv4-vpn { + grouping network-vpnv4-unicast { list network { description "BGP network"; configd:help "BGP network"; @@ -386,6 +390,40 @@ module vyatta-protocols-frr-bgp-v1 { } } } + grouping network-vpnv6-unicast { + list network { + description "BGP network"; + configd:help "BGP network"; + key "addr"; + leaf addr { + description "BGP network"; + type types:ipv6-prefix { + configd:normalize "normalize ipv4-prefix"; + } + configd:help "BGP network"; + } + leaf rd { + description "Specify Route Distinguisher"; + configd:help "Specify Route Distinguisher"; + configd:pattern-help "ASN:NN or IPAddress:NN"; + type rt-rd; + default "100:1"; + } + leaf label { + description "VPN NLRI label"; + configd:help "VPN NLRI label"; + type uint32 { + range 0..1048575; + } + default "10"; + } + uses route-map-group { + refine route-map { + configd:help "Route-map to modify network"; + } + } + } + } grouping redistribute-ipv6 { container redistribute { @@ -1588,7 +1626,7 @@ module vyatta-protocols-frr-bgp-v1 { } } - container ipv4-vpn { + container vpnv4-unicast { description "BGP neighbor parameters"; presence "Enables BGP neighbor IPv4 parameters"; configd:help "BGP neighbor parameters"; @@ -1779,6 +1817,210 @@ module vyatta-protocols-frr-bgp-v1 { configd:help "IPv6 peer group for this peer"; } } + container vpnv6-unicast { + description "BGP neighbor parameters"; + presence "Enables BGP neighbor IPv6 parameters"; + configd:help "BGP neighbor parameters"; + uses peer-grp-neighbor-afi-common-settings { + refine filter-list/export { + must "not(../../peer-group)" { + error-message "You may not configure filter-list + export for a neighbor in peer-group\n"; + } + } + refine route-map/export { + must "not(../../peer-group)" { + error-message "You may not configure route-map + export for a neighbor in peer-group\n"; + } + } + refine attribute-unchanged { + must "not(../peer-group)" { + error-message "You may not configure attribute-unchanged + for a neighbor in peer-group\n"; + } + } + refine remove-private-as { + must "not(../peer-group)" { + error-message "You may not configure remove-private-as + for a neighbor in peer-group\n"; + } + } + refine route-reflector-client { + must "not(../peer-group)" { + error-message "You may not configure route-reflector-client + for a neighbor in peer-group\n"; + } + } + refine disable-send-community { + must "not(../peer-group)" { + error-message "You may not configure disable-send-community + for a neighbor in peer-group\n"; + } + } + refine capability/orf { + must "not(../../peer-group)" { + error-message "You may not configure capability orf + for a neighbor in peer-group"; + } + } + refine default-originate { + must "not(../peer-group)" { + error-message "You may not configure default-originate + for a neighbor in peer-group\n"; + } + } + refine unsuppress-map { + must "not(../peer-group)" { + error-message "You may not configure unsuppress-map + for a neighbor in peer-group\n"; + } + } + refine nexthop-self { + must "not(../peer-group)" { + error-message "You may not configure nexthop-self + for a neighbor in peer-group\n"; + } + } + refine route-server-client { + must "not(../peer-group)" { + error-message "You may not configure route-server-client + for a neighbor in peer-group\n"; + } + } + } + uses neigh_peer_grp_ipv6_lists { + refine distribute-list { + must "not(../../../../peer-group[tagnode = current()/../peer-group]/ + address-family/ipv6-unicast/prefix-list)" { + error-message "You may not configure distribute-list when + prefix-list is set in peer-group"; + } + } + refine prefix-list { + must "not(../../../../peer-group[tagnode = current()/../peer-group]/ + address-family/ipv6-unicast/distribute-list)" { + error-message "You may not configure distribute-list + when distribute-list is set in peer-group"; + } + } + } + leaf peer-group { + description "IPv6 peer group for this peer"; + type leafref { + path "../../../../peer-group/tagnode"; + } + must "../../../../peer-group[tagnode=current()]/ + address-family/ipv6-unicast" { + error-message "Please set address-family + ipv6-unicast in peer-group"; + } + configd:help "IPv6 peer group for this peer"; + } + } + + container ipv6-labeled-unicast { + description "BGP neighbor parameters"; + presence "Enables BGP neighbor IPv6 parameters"; + configd:help "BGP neighbor parameters"; + uses peer-grp-neighbor-afi-common-settings { + refine filter-list/export { + must "not(../../peer-group)" { + error-message "You may not configure filter-list export + for a neighbor in peer-group\n"; + } + } + refine route-map/export { + must "not(../../peer-group)" { + error-message "You may not configure route-map + export for a neighbor in peer-group\n"; + } + } + refine attribute-unchanged { + must "not(../peer-group)" { + error-message "You may not configure attribute-unchanged + for a neighbor in peer-group\n"; + } + } + refine remove-private-as { + must "not(../peer-group)" { + error-message "You may not configure remove-private-as + for a neighbor in peer-group\n"; + } + } + refine route-reflector-client { + must "not(../peer-group)" { + error-message "You may not configure route-reflector-client + for a neighbor in peer-group\n"; + } + } + refine disable-send-community { + must "not(../peer-group)" { + error-message "You may not configure disable-send-community + for a neighbor in peer-group\n"; + } + } + refine capability/orf { + must "not(../../peer-group)" { + error-message "You may not configure capability orf for a + neighbor in peer-group"; + } + } + refine default-originate { + must "not(../peer-group)" { + error-message "You may not configure default-originate + for a neighbor in peer-group\n"; + } + } + refine unsuppress-map { + must "not(../peer-group)" { + error-message "You may not configure unsuppress-map for + a neighbor in peer-group\n"; + } + } + refine nexthop-self { + must "not(../peer-group)" { + error-message "You may not configure nexthop-self for a + neighbor in peer-group\n"; + } + } + refine route-server-client { + must "not(../peer-group)" { + error-message "You may not configure route-server-client + for a neighbor in peer-group\n"; + } + } + } + uses neigh_peer_grp_ipv6_lists { + refine distribute-list { + must "not(../../../../peer-group[tagnode = current()/../peer-group]/ + address-family/ipv6-unicast/prefix-list)" { + error-message "You may not configure distribute-list + when prefix-list is set in peer-group"; + } + } + refine prefix-list { + must "not(../../../../peer-group[tagnode = current()/../peer-group]/ + address-family/ipv6-unicast/distribute-list)" { + error-message "You may not configure distribute-list when + distribute-list is set in peer-group"; + } + } + } + leaf peer-group { + description "IPv6 peer group for this peer"; + type leafref { + path "../../../../peer-group/tagnode"; + } + must "../../../../peer-group[tagnode=current()]/ + address-family/ipv6-unicast" { + error-message "Please set address-family + ipv6-unicast in peer-group"; + } + configd:help "IPv6 peer group for this peer"; + } + } + } } @@ -1810,8 +2052,14 @@ module vyatta-protocols-frr-bgp-v1 { leaf export { description "For routes leaked from current address-family to vpn"; configd:help "For routes leaked from current address-family to vpn"; - type uint32 { - range 0..1048575; + type union { + type uint32 { + range 0..1048575; + } + type enumeration { + enum "auto"; + configd:help "Automatically assign a label"; + } } } } @@ -1822,11 +2070,11 @@ module vyatta-protocols-frr-bgp-v1 { uses redistribute-ipv4; } - container ipv4-vpn { + container vpnv4-unicast { description "BGP IPv4 VPN settings"; presence "Enables BGP IPv4 VPN settings"; configd:help "BGP IPv4 VPN settings"; - uses network-ipv4-vpn; + uses network-vpnv4-unicast; } container ipv6-unicast { @@ -1840,10 +2088,39 @@ module vyatta-protocols-frr-bgp-v1 { uses parameters-distance; uses parameters-dampening; } + container label { + description "label value for VRF"; + configd:help "label value for VRF"; + container vpn { + description "Between current address-family and vpn"; + configd:help "Between current address-family and vpn"; + leaf export { + description "For routes leaked from current address-family to vpn"; + configd:help "For routes leaked from current address-family to vpn"; + type union { + type uint32 { + range 0..1048575; + } + type enumeration { + enum "auto"; + configd:help "Automatically assign a label"; + } + } + } + } + } + uses ipv6-aggregate-address; uses network-ipv6; uses redistribute-ipv6; } + container vpnv6-unicast { + description "BGP IPv6 VPN settings"; + presence "Enables BGP IPv6 VPN settings"; + configd:help "BGP IPv6 VPN settings"; + uses network-vpnv6-unicast; + } + } }