diff --git a/ansible_collections/arista/avd/docs/porting-guides/5.x.x.md b/ansible_collections/arista/avd/docs/porting-guides/5.x.x.md index 1f4dd85eee1..e38fe7af8a3 100644 --- a/ansible_collections/arista/avd/docs/porting-guides/5.x.x.md +++ b/ansible_collections/arista/avd/docs/porting-guides/5.x.x.md @@ -1344,6 +1344,60 @@ port_channel_interfaces: + encapsulation: unmatched ``` +### Data models for BGP additional-paths under `router_bgp` has been changed + +In AVD 5.0.0, the following data models have been changed and will require updates to the inventory: + +- `router_bgp.vrfs[].address_family_ipv4.bgp.additional_paths` +- `router_bgp.vrf[].address_family_ipv6.bgp.additional_paths` +- `router_bgp.address_family_evpn.bgp.peer_groups[].additional_paths` +- `router_bgp.address_family_evpn.bgp_additional_paths` +- `router_bgp.address_family_path_selection.bgp.additional_paths` +- `router_bgp.address_family_path_selection.neighbors[].additional_paths` + +The key `additional_paths.send` is a now a string instead of dictionary, and extra keys have been added for the various related arguments. + +The difference shown below keeps the previous configurations. + +```diff +router_bgp: + address_family_path_selection: + bgp: + additional_paths: +- send: +- any: true ++ send: any + <...> + vrfs: + address_family_ipv4: + bgp: + additional_paths: +- send: +- ecmp_limit: 100 ++ send: ecmp ++ send_limit: 100 + <...> + address_family_ipv6: + bgp: + additional_paths: +- send: +- limit: 100 ++ send: limit ++ send_limit: 100 + <...> + address_family_evpn: + bgp_additional_paths: + receive: true +- send: +- ecmp ++ send: ecmp + peer_groups: + additional_paths: +- send: +- any: false ++ send: disabled +``` + ### Fix issues with flags, source/destination ports, and field set for TCP/UDP protocol under traffic-policies The change has been incorporated into `traffic-policies.j2` eos template. diff --git a/ansible_collections/arista/avd/molecule/eos_cli_config_gen/documentation/devices/router-bgp-base.md b/ansible_collections/arista/avd/molecule/eos_cli_config_gen/documentation/devices/router-bgp-base.md index 2d652cd7526..eda3a26d336 100644 --- a/ansible_collections/arista/avd/molecule/eos_cli_config_gen/documentation/devices/router-bgp-base.md +++ b/ansible_collections/arista/avd/molecule/eos_cli_config_gen/documentation/devices/router-bgp-base.md @@ -237,13 +237,20 @@ router bgp 65101 redistribute static rcf Router_BGP_Static() ! address-family ipv4 + bgp additional-paths install + bgp additional-paths receive + bgp additional-paths send ecmp limit 20 + neighbor foo additional-paths receive neighbor foo prefix-list PL-BAR-v4-IN in neighbor foo prefix-list PL-BAR-v4-OUT out neighbor foo default-originate route-map RM-FOO-MATCH always + neighbor foo additional-paths send ecmp limit 20 prefix-list PL1 neighbor 10.2.3.8 rcf in Address_Family_IPV4_In() neighbor 10.2.3.9 rcf out Address_Family_IPV4_Out() + neighbor 192.0.2.1 additional-paths receive neighbor 192.0.2.1 prefix-list PL-FOO-v4-IN in neighbor 192.0.2.1 prefix-list PL-FOO-v4-OUT out + neighbor 192.0.2.1 additional-paths send limit 20 prefix-list PL1 network 10.0.0.0/8 network 172.16.0.0/12 network 192.168.0.0/16 route-map RM-FOO-MATCH @@ -257,10 +264,17 @@ router bgp 65101 redistribute static rcf Address_Family_IPV4_Static() ! address-family ipv6 + bgp additional-paths install ecmp-primary + bgp additional-paths receive + bgp additional-paths send any + neighbor baz additional-paths receive neighbor baz prefix-list PL-BAR-v6-IN in neighbor baz prefix-list PL-BAR-v6-OUT out + neighbor baz additional-paths send ecmp limit 20 + neighbor 2001:db8::1 additional-paths receive neighbor 2001:db8::1 prefix-list PL-FOO-v6-IN in neighbor 2001:db8::1 prefix-list PL-FOO-v6-OUT out + neighbor 2001:db8::1 additional-paths send ecmp limit 20 neighbor 2001:db8::2 rcf in Address_Family_IPV6_In() neighbor 2001:db8::2 rcf out Address_Family_IPV6_Out() network 2001:db8:100::/40 diff --git a/ansible_collections/arista/avd/molecule/eos_cli_config_gen/documentation/devices/router-bgp-evpn.md b/ansible_collections/arista/avd/molecule/eos_cli_config_gen/documentation/devices/router-bgp-evpn.md index d4255c5963c..e9b5ca50e24 100644 --- a/ansible_collections/arista/avd/molecule/eos_cli_config_gen/documentation/devices/router-bgp-evpn.md +++ b/ansible_collections/arista/avd/molecule/eos_cli_config_gen/documentation/devices/router-bgp-evpn.md @@ -288,7 +288,7 @@ router bgp 65101 neighbor ADDITIONAL-PATH-PG-5 activate neighbor ADDITIONAL-PATH-PG-5 additional-paths send limit 42 neighbor ADDITIONAL-PATH-PG-6 activate - no neighbor ADDITIONAL-PATH-PG-6 additional-paths send any + no neighbor ADDITIONAL-PATH-PG-6 additional-paths send neighbor EVPN-OVERLAY-PEERS default-route neighbor EVPN-OVERLAY-PEERS activate neighbor EVPN-OVERLAY-PEERS domain remote @@ -299,7 +299,9 @@ router bgp 65101 neighbor TEST-ENCAPSULATION-2 activate neighbor TEST-ENCAPSULATION-2 encapsulation path-selection neighbor 10.100.100.1 activate + neighbor 10.100.100.1 additional-paths receive neighbor 10.100.100.1 default-route + neighbor 10.100.100.1 additional-paths send any neighbor 10.100.100.2 activate neighbor 10.100.100.2 default-route route-map RM_DEFAULT_ROUTE neighbor 10.100.100.3 activate diff --git a/ansible_collections/arista/avd/molecule/eos_cli_config_gen/documentation/devices/router-bgp-vrf-address-families.md b/ansible_collections/arista/avd/molecule/eos_cli_config_gen/documentation/devices/router-bgp-vrf-address-families.md index c8d6370d2bf..8b71bbe071e 100644 --- a/ansible_collections/arista/avd/molecule/eos_cli_config_gen/documentation/devices/router-bgp-vrf-address-families.md +++ b/ansible_collections/arista/avd/molecule/eos_cli_config_gen/documentation/devices/router-bgp-vrf-address-families.md @@ -47,6 +47,12 @@ ASN Notation: asplain | ------ | --------- | | 65001 | 1.0.1.1 | +#### BGP Neighbors + +| Neighbor | Remote AS | VRF | Shutdown | Send-community | Maximum-routes | Allowas-in | BFD | RIB Pre-Policy Retain | Route-Reflector Client | Passive | TTL Max Hops | +| -------- | --------- | --- | -------- | -------------- | -------------- | ---------- | --- | --------------------- | ---------------------- | ------- | ------------ | +| 1.1.1.1 | - | VRF02 | - | - | - | - | - | - | - | - | - | + #### Router BGP VRFs | VRF | Route-Distinguisher | Redistribute | @@ -73,19 +79,29 @@ router bgp 65001 neighbor FOOBAR activate ! address-family ipv4 multicast + bgp additional-paths receive neighbor FOOBAR activate + neighbor FOOBAR additional-paths receive + neighbor 10.1.1.1 activate + neighbor 10.1.1.1 additional-paths receive ! address-family ipv6 no neighbor FOOBAR activate ! address-family ipv6 multicast + bgp additional-paths receive no neighbor FOOBAR activate + neighbor FOOBAR additional-paths receive + neighbor aa::1 additional-paths receive redistribute isis rcf Router_BGP_Isis() redistribute ospf match internal redistribute ospfv3 match external redistribute ospfv3 match nssa-external 2 ! vrf VRF01 + bgp additional-paths install + bgp additional-paths receive + bgp additional-paths send any no bgp redistribute-internal redistribute attached-host route-map RM_VRF_ATTACHED-HOST redistribute bgp leaked route-map RM_VRF_BGP @@ -114,8 +130,10 @@ router bgp 65001 bgp additional-paths receive bgp additional-paths send ecmp limit 4 neighbor 1.2.3.4 activate + neighbor 1.2.3.4 additional-paths receive neighbor 1.2.3.4 route-map FOO in neighbor 1.2.3.4 route-map BAR out + neighbor 1.2.3.4 additional-paths send any network 2.3.4.0/24 route-map BARFOO no bgp redistribute-internal redistribute connected rcf VRF_AFIPV4_RCF_CONNECTED_1() @@ -130,6 +148,7 @@ router bgp 65001 bgp additional-paths receive neighbor 1.2.3.4 route-map FOO in neighbor 1.2.3.4 route-map BAR out + neighbor 1.2.3.4 additional-paths receive network 239.0.0.0/24 route-map BARFOO redistribute connected redistribute ospf match internal @@ -144,8 +163,10 @@ router bgp 65001 bgp additional-paths receive bgp additional-paths send any neighbor aa::1 activate + neighbor aa::1 additional-paths receive neighbor aa::1 route-map FOO in neighbor aa::1 route-map BAR out + neighbor aa::1 additional-paths send any neighbor aa::2 activate neighbor aa::2 rcf in VRF_AFIPV6_RCF_IN() neighbor aa::2 rcf out VRF_AFIPV6_RCF_OUT() @@ -161,6 +182,8 @@ router bgp 65001 address-family ipv6 multicast bgp missing-policy direction in action deny bgp missing-policy direction out action deny + bgp additional-paths receive + neighbor aa::1 additional-paths receive network ff08:1::/64 redistribute connected redistribute ospf match external @@ -169,6 +192,8 @@ router bgp 65001 redistribute static route-map VRF_AFIPV6MULTI_RM_STATIC ! vrf VRF02 + neighbor 1.1.1.1 additional-paths receive + neighbor 1.1.1.1 additional-paths send ecmp limit 24 redistribute attached-host redistribute bgp leaked redistribute connected diff --git a/ansible_collections/arista/avd/molecule/eos_cli_config_gen/intended/configs/router-bgp-base.cfg b/ansible_collections/arista/avd/molecule/eos_cli_config_gen/intended/configs/router-bgp-base.cfg index 9af021e18cf..33d889f9403 100644 --- a/ansible_collections/arista/avd/molecule/eos_cli_config_gen/intended/configs/router-bgp-base.cfg +++ b/ansible_collections/arista/avd/molecule/eos_cli_config_gen/intended/configs/router-bgp-base.cfg @@ -97,13 +97,20 @@ router bgp 65101 redistribute static rcf Router_BGP_Static() ! address-family ipv4 + bgp additional-paths install + bgp additional-paths receive + bgp additional-paths send ecmp limit 20 + neighbor foo additional-paths receive neighbor foo prefix-list PL-BAR-v4-IN in neighbor foo prefix-list PL-BAR-v4-OUT out neighbor foo default-originate route-map RM-FOO-MATCH always + neighbor foo additional-paths send ecmp limit 20 prefix-list PL1 neighbor 10.2.3.8 rcf in Address_Family_IPV4_In() neighbor 10.2.3.9 rcf out Address_Family_IPV4_Out() + neighbor 192.0.2.1 additional-paths receive neighbor 192.0.2.1 prefix-list PL-FOO-v4-IN in neighbor 192.0.2.1 prefix-list PL-FOO-v4-OUT out + neighbor 192.0.2.1 additional-paths send limit 20 prefix-list PL1 network 10.0.0.0/8 network 172.16.0.0/12 network 192.168.0.0/16 route-map RM-FOO-MATCH @@ -117,10 +124,17 @@ router bgp 65101 redistribute static rcf Address_Family_IPV4_Static() ! address-family ipv6 + bgp additional-paths install ecmp-primary + bgp additional-paths receive + bgp additional-paths send any + neighbor baz additional-paths receive neighbor baz prefix-list PL-BAR-v6-IN in neighbor baz prefix-list PL-BAR-v6-OUT out + neighbor baz additional-paths send ecmp limit 20 + neighbor 2001:db8::1 additional-paths receive neighbor 2001:db8::1 prefix-list PL-FOO-v6-IN in neighbor 2001:db8::1 prefix-list PL-FOO-v6-OUT out + neighbor 2001:db8::1 additional-paths send ecmp limit 20 neighbor 2001:db8::2 rcf in Address_Family_IPV6_In() neighbor 2001:db8::2 rcf out Address_Family_IPV6_Out() network 2001:db8:100::/40 diff --git a/ansible_collections/arista/avd/molecule/eos_cli_config_gen/intended/configs/router-bgp-evpn.cfg b/ansible_collections/arista/avd/molecule/eos_cli_config_gen/intended/configs/router-bgp-evpn.cfg index 290a81c8eff..8eb90b10bc1 100644 --- a/ansible_collections/arista/avd/molecule/eos_cli_config_gen/intended/configs/router-bgp-evpn.cfg +++ b/ansible_collections/arista/avd/molecule/eos_cli_config_gen/intended/configs/router-bgp-evpn.cfg @@ -111,7 +111,7 @@ router bgp 65101 neighbor ADDITIONAL-PATH-PG-5 activate neighbor ADDITIONAL-PATH-PG-5 additional-paths send limit 42 neighbor ADDITIONAL-PATH-PG-6 activate - no neighbor ADDITIONAL-PATH-PG-6 additional-paths send any + no neighbor ADDITIONAL-PATH-PG-6 additional-paths send neighbor EVPN-OVERLAY-PEERS default-route neighbor EVPN-OVERLAY-PEERS activate neighbor EVPN-OVERLAY-PEERS domain remote @@ -122,7 +122,9 @@ router bgp 65101 neighbor TEST-ENCAPSULATION-2 activate neighbor TEST-ENCAPSULATION-2 encapsulation path-selection neighbor 10.100.100.1 activate + neighbor 10.100.100.1 additional-paths receive neighbor 10.100.100.1 default-route + neighbor 10.100.100.1 additional-paths send any neighbor 10.100.100.2 activate neighbor 10.100.100.2 default-route route-map RM_DEFAULT_ROUTE neighbor 10.100.100.3 activate diff --git a/ansible_collections/arista/avd/molecule/eos_cli_config_gen/intended/configs/router-bgp-vrf-address-families.cfg b/ansible_collections/arista/avd/molecule/eos_cli_config_gen/intended/configs/router-bgp-vrf-address-families.cfg index 8c1671ae625..0a929a41058 100644 --- a/ansible_collections/arista/avd/molecule/eos_cli_config_gen/intended/configs/router-bgp-vrf-address-families.cfg +++ b/ansible_collections/arista/avd/molecule/eos_cli_config_gen/intended/configs/router-bgp-vrf-address-families.cfg @@ -18,19 +18,29 @@ router bgp 65001 neighbor FOOBAR activate ! address-family ipv4 multicast + bgp additional-paths receive neighbor FOOBAR activate + neighbor FOOBAR additional-paths receive + neighbor 10.1.1.1 activate + neighbor 10.1.1.1 additional-paths receive ! address-family ipv6 no neighbor FOOBAR activate ! address-family ipv6 multicast + bgp additional-paths receive no neighbor FOOBAR activate + neighbor FOOBAR additional-paths receive + neighbor aa::1 additional-paths receive redistribute isis rcf Router_BGP_Isis() redistribute ospf match internal redistribute ospfv3 match external redistribute ospfv3 match nssa-external 2 ! vrf VRF01 + bgp additional-paths install + bgp additional-paths receive + bgp additional-paths send any no bgp redistribute-internal redistribute attached-host route-map RM_VRF_ATTACHED-HOST redistribute bgp leaked route-map RM_VRF_BGP @@ -59,8 +69,10 @@ router bgp 65001 bgp additional-paths receive bgp additional-paths send ecmp limit 4 neighbor 1.2.3.4 activate + neighbor 1.2.3.4 additional-paths receive neighbor 1.2.3.4 route-map FOO in neighbor 1.2.3.4 route-map BAR out + neighbor 1.2.3.4 additional-paths send any network 2.3.4.0/24 route-map BARFOO no bgp redistribute-internal redistribute connected rcf VRF_AFIPV4_RCF_CONNECTED_1() @@ -75,6 +87,7 @@ router bgp 65001 bgp additional-paths receive neighbor 1.2.3.4 route-map FOO in neighbor 1.2.3.4 route-map BAR out + neighbor 1.2.3.4 additional-paths receive network 239.0.0.0/24 route-map BARFOO redistribute connected redistribute ospf match internal @@ -89,8 +102,10 @@ router bgp 65001 bgp additional-paths receive bgp additional-paths send any neighbor aa::1 activate + neighbor aa::1 additional-paths receive neighbor aa::1 route-map FOO in neighbor aa::1 route-map BAR out + neighbor aa::1 additional-paths send any neighbor aa::2 activate neighbor aa::2 rcf in VRF_AFIPV6_RCF_IN() neighbor aa::2 rcf out VRF_AFIPV6_RCF_OUT() @@ -106,6 +121,8 @@ router bgp 65001 address-family ipv6 multicast bgp missing-policy direction in action deny bgp missing-policy direction out action deny + bgp additional-paths receive + neighbor aa::1 additional-paths receive network ff08:1::/64 redistribute connected redistribute ospf match external @@ -114,6 +131,8 @@ router bgp 65001 redistribute static route-map VRF_AFIPV6MULTI_RM_STATIC ! vrf VRF02 + neighbor 1.1.1.1 additional-paths receive + neighbor 1.1.1.1 additional-paths send ecmp limit 24 redistribute attached-host redistribute bgp leaked redistribute connected diff --git a/ansible_collections/arista/avd/molecule/eos_cli_config_gen/inventory/host_vars/router-bgp-additional-paths.yaml b/ansible_collections/arista/avd/molecule/eos_cli_config_gen/inventory/host_vars/router-bgp-additional-paths.yaml index 2d1679689ce..0668958d093 100644 --- a/ansible_collections/arista/avd/molecule/eos_cli_config_gen/inventory/host_vars/router-bgp-additional-paths.yaml +++ b/ansible_collections/arista/avd/molecule/eos_cli_config_gen/inventory/host_vars/router-bgp-additional-paths.yaml @@ -7,4 +7,4 @@ router_bgp: additional_paths: receive: false send: ecmp - send_ecmp_limit: 30 + send_limit: 30 diff --git a/ansible_collections/arista/avd/molecule/eos_cli_config_gen/inventory/host_vars/router-bgp-base.yml b/ansible_collections/arista/avd/molecule/eos_cli_config_gen/inventory/host_vars/router-bgp-base.yml index ca6598a9a8a..f3ad8a3b4f0 100644 --- a/ansible_collections/arista/avd/molecule/eos_cli_config_gen/inventory/host_vars/router-bgp-base.yml +++ b/ansible_collections/arista/avd/molecule/eos_cli_config_gen/inventory/host_vars/router-bgp-base.yml @@ -107,6 +107,11 @@ router_bgp: route_map: RM-FOO-MATCH bgp: redistribute_internal: false + additional_paths: + receive: true + install: true + send: ecmp + send_limit: 20 peer_groups: - name: foo prefix_list_in: PL-BAR-v4-IN @@ -114,10 +119,20 @@ router_bgp: default_originate: always: true route_map: RM-FOO-MATCH + additional_paths: + receive: true + send: ecmp + send_limit: 20 + prefix_list: PL1 neighbors: - ip_address: 192.0.2.1 prefix_list_in: PL-FOO-v4-IN prefix_list_out: PL-FOO-v4-OUT + additional_paths: + receive: true + send: limit + send_limit: 20 + prefix_list: PL1 - ip_address: 10.2.3.8 rcf_in: Address_Family_IPV4_In() - ip_address: 10.2.3.9 @@ -147,14 +162,28 @@ router_bgp: route_map: RM-BAR-MATCH bgp: redistribute_internal: true + additional_paths: + receive: true + install_ecmp_primary: true + send: any peer_groups: - name: baz prefix_list_in: PL-BAR-v6-IN prefix_list_out: PL-BAR-v6-OUT + additional_paths: + receive: true + send: ecmp + send_limit: 20 + prefix_list: PL2 neighbors: - ip_address: 2001:db8::1 prefix_list_in: PL-FOO-v6-IN prefix_list_out: PL-FOO-v6-OUT + additional_paths: + receive: true + send: ecmp + send_limit: 20 + prefix_list: PL2 - ip_address: 2001:db8::2 rcf_in: Address_Family_IPV6_In() rcf_out: Address_Family_IPV6_Out() diff --git a/ansible_collections/arista/avd/molecule/eos_cli_config_gen/inventory/host_vars/router-bgp-evpn-mpls.yml b/ansible_collections/arista/avd/molecule/eos_cli_config_gen/inventory/host_vars/router-bgp-evpn-mpls.yml index e0d3b932a71..739bf7afadb 100644 --- a/ansible_collections/arista/avd/molecule/eos_cli_config_gen/inventory/host_vars/router-bgp-evpn-mpls.yml +++ b/ansible_collections/arista/avd/molecule/eos_cli_config_gen/inventory/host_vars/router-bgp-evpn-mpls.yml @@ -37,9 +37,10 @@ router_bgp: - ip_address: 192.168.255.2 peer_group: EVPN-OVERLAY-PEERS address_family_evpn: - bgp_additional_paths: - send: - limit: 10 + bgp: + additional_paths: + send: limit + send_limit: 10 next_hop_mpls_resolution_ribs: - rib_type: "tunnel-rib-colored" - rib_type: "tunnel-rib" diff --git a/ansible_collections/arista/avd/molecule/eos_cli_config_gen/inventory/host_vars/router-bgp-evpn-vpn-import-pruning.yml b/ansible_collections/arista/avd/molecule/eos_cli_config_gen/inventory/host_vars/router-bgp-evpn-vpn-import-pruning.yml index 9feca1e939d..fc11aefc857 100644 --- a/ansible_collections/arista/avd/molecule/eos_cli_config_gen/inventory/host_vars/router-bgp-evpn-vpn-import-pruning.yml +++ b/ansible_collections/arista/avd/molecule/eos_cli_config_gen/inventory/host_vars/router-bgp-evpn-vpn-import-pruning.yml @@ -33,9 +33,10 @@ router_bgp: peer_group: EVPN-OVERLAY-PEERS redistribute_routes: address_family_evpn: - bgp_additional_paths: - send: - ecmp_limit: 20 + bgp: + additional_paths: + send: ecmp + send_limit: 20 domain_identifier: "65101:0" peer_groups: - name: EVPN-OVERLAY-PEERS diff --git a/ansible_collections/arista/avd/molecule/eos_cli_config_gen/inventory/host_vars/router-bgp-evpn.yml b/ansible_collections/arista/avd/molecule/eos_cli_config_gen/inventory/host_vars/router-bgp-evpn.yml index 9ddac2741e5..e6814086c98 100644 --- a/ansible_collections/arista/avd/molecule/eos_cli_config_gen/inventory/host_vars/router-bgp-evpn.yml +++ b/ansible_collections/arista/avd/molecule/eos_cli_config_gen/inventory/host_vars/router-bgp-evpn.yml @@ -83,6 +83,9 @@ router_bgp: activate: true default_route: enabled: true + additional_paths: + receive: true + send: any - ip_address: 10.100.100.2 activate: true default_route: @@ -112,34 +115,30 @@ router_bgp: activate: true additional_paths: receive: true - send: - any: true + send: any - name: ADDITIONAL-PATH-PG-2 activate: true additional_paths: - send: - backup: true + send: backup - name: ADDITIONAL-PATH-PG-3 activate: true additional_paths: - send: - ecmp: true + send: ecmp - name: ADDITIONAL-PATH-PG-4 activate: true additional_paths: - send: - ecmp_limit: 42 + send: ecmp + send_limit: 42 - name: ADDITIONAL-PATH-PG-5 activate: true additional_paths: - send: - limit: 42 + send: limit + send_limit: 42 # Checking the `no neighbor additional-paths send any is rendered - name: ADDITIONAL-PATH-PG-6 activate: true additional_paths: - send: - any: false + send: 'disabled' - name: TEST-ENCAPSULATION activate: true encapsulation: mpls @@ -158,10 +157,10 @@ router_bgp: import_ethernet_segment_ip_mass_withdraw: true export_ethernet_segment_ip_mass_withdraw: true import_overlay_index_gateway: true - bgp_additional_paths: - receive: true - send: - any: true + bgp: + additional_paths: + receive: true + send: any layer_2_fec_in_place_update: enabled: true address_family_ipv4: diff --git a/ansible_collections/arista/avd/molecule/eos_cli_config_gen/inventory/host_vars/router-bgp-ipv4-labeled-unicast.yml b/ansible_collections/arista/avd/molecule/eos_cli_config_gen/inventory/host_vars/router-bgp-ipv4-labeled-unicast.yml index 912999844e5..004fa07f5ea 100644 --- a/ansible_collections/arista/avd/molecule/eos_cli_config_gen/inventory/host_vars/router-bgp-ipv4-labeled-unicast.yml +++ b/ansible_collections/arista/avd/molecule/eos_cli_config_gen/inventory/host_vars/router-bgp-ipv4-labeled-unicast.yml @@ -9,7 +9,7 @@ router_bgp: additional_paths: receive: true send: ecmp - send_ecmp_limit: 20 + send_limit: 20 missing_policy: direction_in: action: deny diff --git a/ansible_collections/arista/avd/molecule/eos_cli_config_gen/inventory/host_vars/router-bgp-path-selection.yaml b/ansible_collections/arista/avd/molecule/eos_cli_config_gen/inventory/host_vars/router-bgp-path-selection.yaml index de668840718..ac3ed77917d 100644 --- a/ansible_collections/arista/avd/molecule/eos_cli_config_gen/inventory/host_vars/router-bgp-path-selection.yaml +++ b/ansible_collections/arista/avd/molecule/eos_cli_config_gen/inventory/host_vars/router-bgp-path-selection.yaml @@ -29,64 +29,53 @@ router_bgp: bgp: additional_paths: receive: true - send: - # Need to choose what to test here or create multiple hosts... - # any: true - # backup: true - # ecmp: true - ecmp_limit: 42 - # limit: 42 + send: ecmp + send_limit: 42 peer_groups: - name: PATH-SELECTION-PG-1 activate: true additional_paths: receive: true - send: - any: true + send: any - name: PATH-SELECTION-PG-2 activate: true additional_paths: - send: - backup: true + send: backup - name: PATH-SELECTION-PG-3 activate: true additional_paths: - send: - ecmp: true + send: ecmp - name: PATH-SELECTION-PG-4 activate: true additional_paths: - send: - ecmp_limit: 42 + send: ecmp + send_limit: 42 - name: PATH-SELECTION-PG-5 activate: true additional_paths: - send: - limit: 42 + send: limit + send_limit: 42 neighbors: - ip_address: 172.31.255.0 activate: true additional_paths: receive: true - send: - any: true + send: any - ip_address: 172.31.255.1 activate: true additional_paths: - send: - backup: true + send: backup - ip_address: 172.31.255.2 activate: true additional_paths: - send: - ecmp: true + send: ecmp - ip_address: 172.31.255.3 activate: true additional_paths: - send: - ecmp_limit: 42 + send: ecmp + send_limit: 42 - ip_address: 172.31.255.4 activate: true additional_paths: - send: - limit: 42 + send: limit + send_limit: 42 diff --git a/ansible_collections/arista/avd/molecule/eos_cli_config_gen/inventory/host_vars/router-bgp-v4-evpn.yml b/ansible_collections/arista/avd/molecule/eos_cli_config_gen/inventory/host_vars/router-bgp-v4-evpn.yml index 87a6a72b254..f09e3c1db25 100644 --- a/ansible_collections/arista/avd/molecule/eos_cli_config_gen/inventory/host_vars/router-bgp-v4-evpn.yml +++ b/ansible_collections/arista/avd/molecule/eos_cli_config_gen/inventory/host_vars/router-bgp-v4-evpn.yml @@ -74,9 +74,9 @@ router_bgp: - source_protocol: connected route_map: RM-CONN-2-BGP address_family_evpn: - bgp_additional_paths: - send: - backup: true + bgp: + additional_paths: + send: backup peer_groups: - name: EVPN-OVERLAY-PEERS activate: true @@ -224,8 +224,7 @@ router_bgp: additional_paths: install: true receive: true - send: - ecmp: true + send: ecmp neighbors: - ip_address: 10.2.3.4 activate: true diff --git a/ansible_collections/arista/avd/molecule/eos_cli_config_gen/inventory/host_vars/router-bgp-vrf-address-families.yml b/ansible_collections/arista/avd/molecule/eos_cli_config_gen/inventory/host_vars/router-bgp-vrf-address-families.yml index 611c0132b9f..f2264e6d3c1 100644 --- a/ansible_collections/arista/avd/molecule/eos_cli_config_gen/inventory/host_vars/router-bgp-vrf-address-families.yml +++ b/ansible_collections/arista/avd/molecule/eos_cli_config_gen/inventory/host_vars/router-bgp-vrf-address-families.yml @@ -14,13 +14,28 @@ router_bgp: - name: FOOBAR activate: false address_family_ipv4_multicast: + bgp: + additional_paths: + receive: true peer_groups: - name: FOOBAR activate: true + additional_paths: + receive: true + neighbors: + - ip_address: 10.1.1.1 + activate: true + additional_paths: + receive: true address_family_ipv6_multicast: + bgp: + additional_paths: + receive: true peer_groups: - name: FOOBAR activate: false + additional_paths: + receive: true redistribute_routes: - source_protocol: ospfv3 ospf_route_type: external @@ -30,6 +45,10 @@ router_bgp: ospf_route_type: nssa-external 2 - source_protocol: isis rcf: Router_BGP_Isis() + neighbors: + - ip_address: aa::1 + additional_paths: + receive: true address_family_flow_spec_ipv4: peer_groups: - name: FOOBAR @@ -75,6 +94,10 @@ router_bgp: route_map: RM_VRF_ATTACHED-HOST bgp: redistribute_internal: false + additional_paths: + receive: true + send: any + install: true address_family_ipv4: bgp: missing_policy: @@ -83,14 +106,17 @@ router_bgp: additional_paths: install_ecmp_primary: true receive: true - send: - ecmp_limit: 4 + send: ecmp + send_limit: 4 redistribute_internal: false neighbors: - ip_address: 1.2.3.4 activate: true route_map_in: FOO route_map_out: BAR + additional_paths: + receive: true + send: any networks: - prefix: 2.3.4.0/24 route_map: BARFOO @@ -113,14 +139,16 @@ router_bgp: additional_paths: install: true receive: true - send: - any: true + send: any redistribute_internal: false neighbors: - ip_address: aa::1 activate: true route_map_in: FOO route_map_out: BAR + additional_paths: + send: any + receive: true - ip_address: aa::2 activate: true rcf_in: VRF_AFIPV6_RCF_IN() @@ -143,16 +171,18 @@ router_bgp: include_leaked: true address_family_ipv4_multicast: bgp: + additional_paths: + receive: true missing_policy: direction_in_action: permit direction_out_action: permit - additional_paths: - receive: true neighbors: - ip_address: 1.2.3.4 activate: false route_map_in: FOO route_map_out: BAR + additional_paths: + receive: true networks: - prefix: 239.0.0.0/24 route_map: BARFOO @@ -169,12 +199,16 @@ router_bgp: route_map: VRF_AFIPV4MULTI_RM_STATIC address_family_ipv6_multicast: bgp: + additional_paths: + receive: true missing_policy: direction_in_action: deny direction_out_action: deny neighbors: - ip_address: aa::1 activate: false + additional_paths: + receive: true networks: - prefix: ff08:1::/64 redistribute_routes: @@ -206,16 +240,21 @@ router_bgp: activate: true - name: VRF02 + neighbors: + - ip_address: 1.1.1.1 + additional_paths: + receive: true + send: ecmp + send_limit: 24 address_family_ipv4: bgp: additional_paths: - send: - backup: true + send: backup address_family_ipv6: bgp: additional_paths: - send: - limit: 3 + send: limit + send_limit: 3 redistribute: dynamic: enabled: true @@ -246,8 +285,7 @@ router_bgp: address_family_ipv4: bgp: additional_paths: - send: - ecmp: true + send: ecmp redistribute: dynamic: enabled: true diff --git a/ansible_collections/arista/avd/molecule/eos_cli_config_gen_deprecated_vars/documentation/devices/host2.md b/ansible_collections/arista/avd/molecule/eos_cli_config_gen_deprecated_vars/documentation/devices/host2.md index 0eea64af2ee..57daf5bb49e 100644 --- a/ansible_collections/arista/avd/molecule/eos_cli_config_gen_deprecated_vars/documentation/devices/host2.md +++ b/ansible_collections/arista/avd/molecule/eos_cli_config_gen_deprecated_vars/documentation/devices/host2.md @@ -4,6 +4,8 @@ - [Interfaces](#interfaces) - [VXLAN Interface](#vxlan-interface) +- [Routing](#routing) + - [Router BGP](#router-bgp) ## Interfaces @@ -27,3 +29,29 @@ interface Vxlan1 no vxlan qos dscp propagation encapsulation no vxlan qos map dscp to traffic-class decapsulation ``` + +## Routing + +### Router BGP + +ASN Notation: asplain + +#### Router BGP Summary + +| BGP AS | Router ID | +| ------ | --------- | +| 65101 | 192.168.255.3 | + +#### Router BGP EVPN Address Family + +#### Router BGP Device Configuration + +```eos +! +router bgp 65101 + router-id 192.168.255.3 + ! + address-family evpn + bgp additional-paths receive + bgp additional-paths send any +``` diff --git a/ansible_collections/arista/avd/molecule/eos_cli_config_gen_deprecated_vars/intended/configs/host2.cfg b/ansible_collections/arista/avd/molecule/eos_cli_config_gen_deprecated_vars/intended/configs/host2.cfg index 299cdca6a82..6d7b9f602a4 100644 --- a/ansible_collections/arista/avd/molecule/eos_cli_config_gen_deprecated_vars/intended/configs/host2.cfg +++ b/ansible_collections/arista/avd/molecule/eos_cli_config_gen_deprecated_vars/intended/configs/host2.cfg @@ -3,3 +3,10 @@ interface Vxlan1 no vxlan qos ecn propagation no vxlan qos dscp propagation encapsulation no vxlan qos map dscp to traffic-class decapsulation +! +router bgp 65101 + router-id 192.168.255.3 + ! + address-family evpn + bgp additional-paths receive + bgp additional-paths send any diff --git a/ansible_collections/arista/avd/molecule/eos_cli_config_gen_deprecated_vars/inventory/host_vars/host2/bgp_additional_paths.yml b/ansible_collections/arista/avd/molecule/eos_cli_config_gen_deprecated_vars/inventory/host_vars/host2/bgp_additional_paths.yml new file mode 100644 index 00000000000..f86d8d4d95e --- /dev/null +++ b/ansible_collections/arista/avd/molecule/eos_cli_config_gen_deprecated_vars/inventory/host_vars/host2/bgp_additional_paths.yml @@ -0,0 +1,8 @@ +router_bgp: + as: 65101 + router_id: 192.168.255.3 + address_family_evpn: + bgp_additional_paths: + receive: true + send: + any: true diff --git a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/cv-pathfinder-custom-control-plane-policy-edge-1.yml b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/cv-pathfinder-custom-control-plane-policy-edge-1.yml index 7bf293b2886..094f6b880b9 100644 --- a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/cv-pathfinder-custom-control-plane-policy-edge-1.yml +++ b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/cv-pathfinder-custom-control-plane-policy-edge-1.yml @@ -63,8 +63,7 @@ router_bgp: bgp: additional_paths: receive: true - send: - any: true + send: any neighbors: - ip_address: 192.168.144.1 peer_group: WAN-OVERLAY-PEERS diff --git a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/cv-pathfinder-custom-control-plane-policy-edge-2.yml b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/cv-pathfinder-custom-control-plane-policy-edge-2.yml index f0a6288c502..8777ff24d86 100644 --- a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/cv-pathfinder-custom-control-plane-policy-edge-2.yml +++ b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/cv-pathfinder-custom-control-plane-policy-edge-2.yml @@ -63,8 +63,7 @@ router_bgp: bgp: additional_paths: receive: true - send: - any: true + send: any neighbors: - ip_address: 192.168.144.1 peer_group: WAN-OVERLAY-PEERS diff --git a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/cv-pathfinder-custom-control-plane-policy-edge-3.yml b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/cv-pathfinder-custom-control-plane-policy-edge-3.yml index 8c4f0bc90bf..f1f85c33fae 100644 --- a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/cv-pathfinder-custom-control-plane-policy-edge-3.yml +++ b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/cv-pathfinder-custom-control-plane-policy-edge-3.yml @@ -63,8 +63,7 @@ router_bgp: bgp: additional_paths: receive: true - send: - any: true + send: any neighbors: - ip_address: 192.168.144.1 peer_group: WAN-OVERLAY-PEERS diff --git a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/cv-pathfinder-custom-control-plane-policy-pathfinder-1.yml b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/cv-pathfinder-custom-control-plane-policy-pathfinder-1.yml index e4d91367d88..e51066cb227 100644 --- a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/cv-pathfinder-custom-control-plane-policy-pathfinder-1.yml +++ b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/cv-pathfinder-custom-control-plane-policy-pathfinder-1.yml @@ -99,8 +99,7 @@ router_bgp: bgp: additional_paths: receive: true - send: - any: true + send: any neighbors: - ip_address: 192.168.144.1 peer_group: WAN-RR-OVERLAY-PEERS diff --git a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/cv-pathfinder-edge-custom-default-policy.yml b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/cv-pathfinder-edge-custom-default-policy.yml index 8bda9503849..5975226b349 100644 --- a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/cv-pathfinder-edge-custom-default-policy.yml +++ b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/cv-pathfinder-edge-custom-default-policy.yml @@ -56,8 +56,7 @@ router_bgp: bgp: additional_paths: receive: true - send: - any: true + send: any neighbors: - ip_address: 192.168.144.1 peer_group: WAN-OVERLAY-PEERS diff --git a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/cv-pathfinder-edge-no-default-policy.yml b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/cv-pathfinder-edge-no-default-policy.yml index 570ed8038e1..4fd1d62ef7c 100644 --- a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/cv-pathfinder-edge-no-default-policy.yml +++ b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/cv-pathfinder-edge-no-default-policy.yml @@ -56,8 +56,7 @@ router_bgp: bgp: additional_paths: receive: true - send: - any: true + send: any neighbors: - ip_address: 192.168.144.1 peer_group: WAN-OVERLAY-PEERS diff --git a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/cv-pathfinder-edge.yml b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/cv-pathfinder-edge.yml index 0b436fd28f8..589a8862b6c 100644 --- a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/cv-pathfinder-edge.yml +++ b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/cv-pathfinder-edge.yml @@ -156,8 +156,7 @@ router_bgp: bgp: additional_paths: receive: true - send: - any: true + send: any service_routing_protocols_model: multi-agent ip_routing: true aaa_root: diff --git a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/cv-pathfinder-edge1.yml b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/cv-pathfinder-edge1.yml index 1b9a91f009e..79a748936b0 100644 --- a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/cv-pathfinder-edge1.yml +++ b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/cv-pathfinder-edge1.yml @@ -154,8 +154,7 @@ router_bgp: bgp: additional_paths: receive: true - send: - any: true + send: any service_routing_protocols_model: multi-agent ip_routing: true aaa_root: diff --git a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/cv-pathfinder-edge2A.yml b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/cv-pathfinder-edge2A.yml index 5a8245b71bb..ca95f2e326f 100644 --- a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/cv-pathfinder-edge2A.yml +++ b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/cv-pathfinder-edge2A.yml @@ -180,8 +180,7 @@ router_bgp: bgp: additional_paths: receive: true - send: - any: true + send: any service_routing_protocols_model: multi-agent ip_routing: true aaa_root: diff --git a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/cv-pathfinder-edge2B.yml b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/cv-pathfinder-edge2B.yml index 5ad9d84e947..a2f14a41823 100644 --- a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/cv-pathfinder-edge2B.yml +++ b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/cv-pathfinder-edge2B.yml @@ -180,8 +180,7 @@ router_bgp: bgp: additional_paths: receive: true - send: - any: true + send: any service_routing_protocols_model: multi-agent ip_routing: true aaa_root: diff --git a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/cv-pathfinder-edge3A.yml b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/cv-pathfinder-edge3A.yml index a3e1f4889d0..e606653873d 100644 --- a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/cv-pathfinder-edge3A.yml +++ b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/cv-pathfinder-edge3A.yml @@ -71,8 +71,7 @@ router_bgp: bgp: additional_paths: receive: true - send: - any: true + send: any neighbors: - ip_address: 192.168.144.1 peer_group: WAN-OVERLAY-PEERS diff --git a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/cv-pathfinder-edge3B.yml b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/cv-pathfinder-edge3B.yml index 9fe0511421d..1e04f2e6688 100644 --- a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/cv-pathfinder-edge3B.yml +++ b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/cv-pathfinder-edge3B.yml @@ -71,8 +71,7 @@ router_bgp: bgp: additional_paths: receive: true - send: - any: true + send: any neighbors: - ip_address: 192.168.144.1 peer_group: WAN-OVERLAY-PEERS diff --git a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/cv-pathfinder-edge4A.yml b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/cv-pathfinder-edge4A.yml index 75d63d4996f..0450005a087 100644 --- a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/cv-pathfinder-edge4A.yml +++ b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/cv-pathfinder-edge4A.yml @@ -71,8 +71,7 @@ router_bgp: bgp: additional_paths: receive: true - send: - any: true + send: any neighbors: - ip_address: 192.168.144.1 peer_group: WAN-OVERLAY-PEERS diff --git a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/cv-pathfinder-edge4B.yml b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/cv-pathfinder-edge4B.yml index 4cd19e54f94..459e5132230 100644 --- a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/cv-pathfinder-edge4B.yml +++ b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/cv-pathfinder-edge4B.yml @@ -71,8 +71,7 @@ router_bgp: bgp: additional_paths: receive: true - send: - any: true + send: any neighbors: - ip_address: 192.168.144.1 peer_group: WAN-OVERLAY-PEERS diff --git a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/cv-pathfinder-pathfinder.yml b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/cv-pathfinder-pathfinder.yml index b901cf77a1a..959a251d193 100644 --- a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/cv-pathfinder-pathfinder.yml +++ b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/cv-pathfinder-pathfinder.yml @@ -75,8 +75,7 @@ router_bgp: bgp: additional_paths: receive: true - send: - any: true + send: any vrfs: - name: default rd: 192.168.44.1:1 diff --git a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/cv-pathfinder-pathfinder1.yml b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/cv-pathfinder-pathfinder1.yml index e1a7ea9fbd9..89c1989927d 100644 --- a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/cv-pathfinder-pathfinder1.yml +++ b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/cv-pathfinder-pathfinder1.yml @@ -99,8 +99,7 @@ router_bgp: bgp: additional_paths: receive: true - send: - any: true + send: any neighbors: - ip_address: 192.168.144.3 peer_group: WAN-RR-OVERLAY-PEERS diff --git a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/cv-pathfinder-pathfinder2.yml b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/cv-pathfinder-pathfinder2.yml index ccec3bd5e3a..ba92bd83c64 100644 --- a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/cv-pathfinder-pathfinder2.yml +++ b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/cv-pathfinder-pathfinder2.yml @@ -99,8 +99,7 @@ router_bgp: bgp: additional_paths: receive: true - send: - any: true + send: any neighbors: - ip_address: 192.168.144.2 peer_group: WAN-RR-OVERLAY-PEERS diff --git a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/cv-pathfinder-transit1A.yml b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/cv-pathfinder-transit1A.yml index dea32cf46f5..ce9910321f0 100644 --- a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/cv-pathfinder-transit1A.yml +++ b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/cv-pathfinder-transit1A.yml @@ -181,8 +181,7 @@ router_bgp: bgp: additional_paths: receive: true - send: - any: true + send: any service_routing_protocols_model: multi-agent ip_routing: true aaa_root: diff --git a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/cv-pathfinder-transit1B.yml b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/cv-pathfinder-transit1B.yml index 78413253c4a..db1de5a631a 100644 --- a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/cv-pathfinder-transit1B.yml +++ b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/cv-pathfinder-transit1B.yml @@ -181,8 +181,7 @@ router_bgp: bgp: additional_paths: receive: true - send: - any: true + send: any service_routing_protocols_model: multi-agent ip_routing: true aaa_root: diff --git a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/legacy-autovpn-edge-no-default-policy.yml b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/legacy-autovpn-edge-no-default-policy.yml index e3f7b8dcf38..7a0735535e9 100644 --- a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/legacy-autovpn-edge-no-default-policy.yml +++ b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/legacy-autovpn-edge-no-default-policy.yml @@ -45,8 +45,7 @@ router_bgp: bgp: additional_paths: receive: true - send: - any: true + send: any neighbors: - ip_address: 2.2.2.2 peer_group: WAN-OVERLAY-PEERS diff --git a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/legacy-autovpn-edge.yml b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/legacy-autovpn-edge.yml index de36a1c6a9b..6f6ae1eb0b7 100644 --- a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/legacy-autovpn-edge.yml +++ b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/legacy-autovpn-edge.yml @@ -45,8 +45,7 @@ router_bgp: bgp: additional_paths: receive: true - send: - any: true + send: any neighbors: - ip_address: 192.168.131.1 peer_group: WAN-OVERLAY-PEERS diff --git a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/legacy-autovpn-rr1.yml b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/legacy-autovpn-rr1.yml index 12bcfadc05a..7a8b995497e 100644 --- a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/legacy-autovpn-rr1.yml +++ b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/legacy-autovpn-rr1.yml @@ -71,8 +71,7 @@ router_bgp: bgp: additional_paths: receive: true - send: - any: true + send: any neighbors: - ip_address: 192.168.131.2 peer_group: WAN-RR-OVERLAY-PEERS diff --git a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/legacy-autovpn-rr2.yml b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/legacy-autovpn-rr2.yml index de2248280f2..ac7d227ab41 100644 --- a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/legacy-autovpn-rr2.yml +++ b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/legacy-autovpn-rr2.yml @@ -71,8 +71,7 @@ router_bgp: bgp: additional_paths: receive: true - send: - any: true + send: any neighbors: - ip_address: 192.168.131.1 peer_group: WAN-RR-OVERLAY-PEERS diff --git a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/uplink_lan_wan_router1.yml b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/uplink_lan_wan_router1.yml index bcbfd1b901b..d26565b92b9 100644 --- a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/uplink_lan_wan_router1.yml +++ b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/uplink_lan_wan_router1.yml @@ -55,8 +55,7 @@ router_bgp: bgp: additional_paths: receive: true - send: - any: true + send: any vrfs: - name: VRF1 rd: 192.168.1.1:123 diff --git a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/uplink_lan_wan_router2.yml b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/uplink_lan_wan_router2.yml index 2c95af63375..120cba5389b 100644 --- a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/uplink_lan_wan_router2.yml +++ b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/uplink_lan_wan_router2.yml @@ -55,8 +55,7 @@ router_bgp: bgp: additional_paths: receive: true - send: - any: true + send: any vrfs: - name: VRF1 rd: 192.168.1.2:123 diff --git a/ansible_collections/arista/avd/molecule/eos_validate_state/intended/structured_configs/dc1-wan1.yml b/ansible_collections/arista/avd/molecule/eos_validate_state/intended/structured_configs/dc1-wan1.yml index a5b98b7de6e..e83e253e4dc 100644 --- a/ansible_collections/arista/avd/molecule/eos_validate_state/intended/structured_configs/dc1-wan1.yml +++ b/ansible_collections/arista/avd/molecule/eos_validate_state/intended/structured_configs/dc1-wan1.yml @@ -103,8 +103,7 @@ router_bgp: bgp: additional_paths: receive: true - send: - any: true + send: any vrfs: - name: default rd: 10.255.2.1:1 diff --git a/ansible_collections/arista/avd/molecule/eos_validate_state/intended/structured_configs/dc1-wan2.yml b/ansible_collections/arista/avd/molecule/eos_validate_state/intended/structured_configs/dc1-wan2.yml index 832467a8d2c..9c721d8baaf 100644 --- a/ansible_collections/arista/avd/molecule/eos_validate_state/intended/structured_configs/dc1-wan2.yml +++ b/ansible_collections/arista/avd/molecule/eos_validate_state/intended/structured_configs/dc1-wan2.yml @@ -103,8 +103,7 @@ router_bgp: bgp: additional_paths: receive: true - send: - any: true + send: any vrfs: - name: default rd: 10.255.2.2:1 diff --git a/ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/router-bgp.md b/ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/router-bgp.md index a6d8d490b8c..a8f3c6818fb 100644 --- a/ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/router-bgp.md +++ b/ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/router-bgp.md @@ -43,9 +43,8 @@ | [      d_path](## "router_bgp.bgp.bestpath.d_path") | Boolean | | | | | | [    additional_paths](## "router_bgp.bgp.additional_paths") | Dictionary | | | | | | [      receive](## "router_bgp.bgp.additional_paths.receive") | Boolean | | | | Enable or disable reception of additional-paths. | - | [      send](## "router_bgp.bgp.additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- disabled | Select an option to send multiple paths for same prefix through bgp updates.
any: Send any eligible path.
backup: Best path and installed backup path.
ecmp: All paths in best path ECMP group.
limit: Limit to n eligible paths.
disabled: Disable sending any path. | - | [      send_ecmp_limit](## "router_bgp.bgp.additional_paths.send_ecmp_limit") | Integer | | | Min: 2
Max: 64 | Amount of ECMP paths to send. `send` must be set to `ecmp` for this setting. If this key-value pair is not set, it will send all paths in best ECMP group. | - | [      send_limit](## "router_bgp.bgp.additional_paths.send_limit") | Integer | | | Min: 2
Max: 64 | Number of paths to send through bgp updates. `send` must be set to `limit` for this setting. | + | [      send](## "router_bgp.bgp.additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- disabled | Select an option to send multiple paths for same prefix through bgp updates.
any: Send any eligible path.
backup: Best path and installed backup path.
ecmp: All paths in best path ECMP group.
limit: Limit to n eligible paths.
disabled: Disable sending any paths. | + | [      send_limit](## "router_bgp.bgp.additional_paths.send_limit") | Integer | | | Min: 2
Max: 64 | Number of paths to send through bgp updates. For this setting, `send` must be set to `limit` or `ecmp`. | | [    redistribute_internal](## "router_bgp.bgp.redistribute_internal") | Boolean | | | | Allow redistribution of iBGP routes into an Interior Gateway Protocol (IGP). EOS default is true. | | [  listen_ranges](## "router_bgp.listen_ranges") | List, items: Dictionary | | | | Improved "listen_ranges" data model to support multiple listen ranges and additional filter capabilities.
| | [    - prefix](## "router_bgp.listen_ranges.[].prefix") | String | | | | IPv4 prefix "A.B.C.D/E" or IPv6 prefix "A:B:C:D:E:F:G:H/I". | @@ -297,6 +296,10 @@ | [          enabled](## "router_bgp.address_family_evpn.neighbors.[].default_route.enabled") | Boolean | | | | | | [          rcf](## "router_bgp.address_family_evpn.neighbors.[].default_route.rcf") | String | | | | RCF function name with parenthesis.
Example: MyFunction(myarg). | | [          route_map](## "router_bgp.address_family_evpn.neighbors.[].default_route.route_map") | String | | | | | + | [        additional_paths](## "router_bgp.address_family_evpn.neighbors.[].additional_paths") | Dictionary | | | | | + | [          receive](## "router_bgp.address_family_evpn.neighbors.[].additional_paths.receive") | Boolean | | | | Enable or disable reception of additional-paths. | + | [          send](## "router_bgp.address_family_evpn.neighbors.[].additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- disabled | Select an option to send multiple paths for same prefix through bgp updates.
any: Send any eligible path.
backup: Best path and installed backup path.
ecmp: All paths in best path ECMP group.
limit: Limit to n eligible paths.
disabled: Disable sending any paths. | + | [          send_limit](## "router_bgp.address_family_evpn.neighbors.[].additional_paths.send_limit") | Integer | | | Min: 2
Max: 64 | Number of paths to send through bgp updates. For this setting, `send` must be set to `limit` or `ecmp`. | | [        encapsulation](## "router_bgp.address_family_evpn.neighbors.[].encapsulation") | String | | | Valid Values:
- vxlan
- mpls
- path-selection | Transport encapsulation for the neighbor. | | [    peer_groups](## "router_bgp.address_family_evpn.peer_groups") | List, items: Dictionary | | | | | | [      - name](## "router_bgp.address_family_evpn.peer_groups.[].name") | String | Required, Unique | | | Peer-group name. | @@ -312,13 +315,9 @@ | [        domain_remote](## "router_bgp.address_family_evpn.peer_groups.[].domain_remote") | Boolean | | | | | | [        encapsulation](## "router_bgp.address_family_evpn.peer_groups.[].encapsulation") | String | | | Valid Values:
- vxlan
- mpls
- path-selection | Transport encapsulation for the peer-group. | | [        additional_paths](## "router_bgp.address_family_evpn.peer_groups.[].additional_paths") | Dictionary | | | | | - | [          receive](## "router_bgp.address_family_evpn.peer_groups.[].additional_paths.receive") | Boolean | | | | | - | [          send](## "router_bgp.address_family_evpn.peer_groups.[].additional_paths.send") | Dictionary | | | | | - | [            any](## "router_bgp.address_family_evpn.peer_groups.[].additional_paths.send.any") | Boolean | | | | | - | [            backup](## "router_bgp.address_family_evpn.peer_groups.[].additional_paths.send.backup") | Boolean | | | | | - | [            ecmp](## "router_bgp.address_family_evpn.peer_groups.[].additional_paths.send.ecmp") | Boolean | | | | | - | [            ecmp_limit](## "router_bgp.address_family_evpn.peer_groups.[].additional_paths.send.ecmp_limit") | Integer | | | Min: 2
Max: 64 | Amount of ECMP paths to send. | - | [            limit](## "router_bgp.address_family_evpn.peer_groups.[].additional_paths.send.limit") | Integer | | | Min: 2
Max: 64 | Amount of paths to send. | + | [          receive](## "router_bgp.address_family_evpn.peer_groups.[].additional_paths.receive") | Boolean | | | | Enable or disable reception of additional-paths. | + | [          send](## "router_bgp.address_family_evpn.peer_groups.[].additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- disabled | Select an option to send multiple paths for same prefix through bgp updates.
any: Send any eligible path.
backup: Best path and installed backup path.
ecmp: All paths in best path ECMP group.
limit: Limit to n eligible paths.
disabled: Disable sending any paths. | + | [          send_limit](## "router_bgp.address_family_evpn.peer_groups.[].additional_paths.send_limit") | Integer | | | Min: 2
Max: 64 | Number of paths to send through bgp updates. For this setting, `send` must be set to `limit` or `ecmp`. | | [    evpn_hostflap_detection](## "router_bgp.address_family_evpn.evpn_hostflap_detection") | Dictionary | | | | | | [      enabled](## "router_bgp.address_family_evpn.evpn_hostflap_detection.enabled") | Boolean | | | | | | [      window](## "router_bgp.address_family_evpn.evpn_hostflap_detection.window") | Integer | | | Min: 0
Max: 4294967295 | Time (in seconds) to detect a MAC duplication issue. | @@ -332,7 +331,7 @@ | [      import_overlay_index_gateway](## "router_bgp.address_family_evpn.route.import_overlay_index_gateway") | Boolean | | | | | | [      export_ethernet_segment_ip_mass_withdraw](## "router_bgp.address_family_evpn.route.export_ethernet_segment_ip_mass_withdraw") | Boolean | | | | | | [    next_hop_unchanged](## "router_bgp.address_family_evpn.next_hop_unchanged") | Boolean | | | | | - | [    bgp_additional_paths](## "router_bgp.address_family_evpn.bgp_additional_paths") | Dictionary | | | | BGP additional-paths commands. | + | [    bgp_additional_paths](## "router_bgp.address_family_evpn.bgp_additional_paths") deprecated | Dictionary | | | | BGP additional-paths commands.This key is deprecated. Support will be removed in AVD version 6.0.0. Use bgp.additional_paths instead. | | [      receive](## "router_bgp.address_family_evpn.bgp_additional_paths.receive") | Boolean | | | | Receive multiple paths. | | [      send](## "router_bgp.address_family_evpn.bgp_additional_paths.send") | Dictionary | | | | Send multiple paths. | | [        any](## "router_bgp.address_family_evpn.bgp_additional_paths.send.any") | Boolean | | | | Any eligible path. | @@ -340,6 +339,11 @@ | [        ecmp](## "router_bgp.address_family_evpn.bgp_additional_paths.send.ecmp") | Boolean | | | | All paths in best path ECMP group. | | [        ecmp_limit](## "router_bgp.address_family_evpn.bgp_additional_paths.send.ecmp_limit") | Integer | | | Min: 2
Max: 64 | Amount of ECMP paths to send. | | [        limit](## "router_bgp.address_family_evpn.bgp_additional_paths.send.limit") | Integer | | | Min: 2
Max: 64 | Amount of paths to send. | + | [    bgp](## "router_bgp.address_family_evpn.bgp") | Dictionary | | | | | + | [      additional_paths](## "router_bgp.address_family_evpn.bgp.additional_paths") | Dictionary | | | | | + | [        receive](## "router_bgp.address_family_evpn.bgp.additional_paths.receive") | Boolean | | | | Enable or disable reception of additional-paths. | + | [        send](## "router_bgp.address_family_evpn.bgp.additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- disabled | Select an option to send multiple paths for same prefix through bgp updates.
any: Send any eligible path.
backup: Best path and installed backup path.
ecmp: All paths in best path ECMP group.
limit: Limit to n eligible paths.
disabled: Disable sending any paths. | + | [        send_limit](## "router_bgp.address_family_evpn.bgp.additional_paths.send_limit") | Integer | | | Min: 2
Max: 64 | Number of paths to send through bgp updates. For this setting, `send` must be set to `limit` or `ecmp`. | | [    layer_2_fec_in_place_update](## "router_bgp.address_family_evpn.layer_2_fec_in_place_update") | Dictionary | | | | BGP layer-2 in-place FEC operation. | | [      enabled](## "router_bgp.address_family_evpn.layer_2_fec_in_place_update.enabled") | Boolean | Required | | | | | [      timeout](## "router_bgp.address_family_evpn.layer_2_fec_in_place_update.timeout") | Integer | | | Min: 0
Max: 300 | In-place FEC update tracking timeout in seconds. | @@ -355,6 +359,12 @@ | [      - prefix](## "router_bgp.address_family_ipv4.networks.[].prefix") | String | Required, Unique | | | IPv4 prefix "A.B.C.D/E" or IPv6 prefix "A:B:C:D:E:F:G:H/I". | | [        route_map](## "router_bgp.address_family_ipv4.networks.[].route_map") | String | | | | Route-map name. | | [    bgp](## "router_bgp.address_family_ipv4.bgp") | Dictionary | | | | | + | [      additional_paths](## "router_bgp.address_family_ipv4.bgp.additional_paths") | Dictionary | | | | | + | [        install](## "router_bgp.address_family_ipv4.bgp.additional_paths.install") | Boolean | | | | Install BGP backup path. | + | [        install_ecmp_primary](## "router_bgp.address_family_ipv4.bgp.additional_paths.install_ecmp_primary") | Boolean | | | | Allow additional path with ECMP primary path. | + | [        receive](## "router_bgp.address_family_ipv4.bgp.additional_paths.receive") | Boolean | | | | Enable or disable reception of additional-paths. | + | [        send](## "router_bgp.address_family_ipv4.bgp.additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- disabled | Select an option to send multiple paths for same prefix through bgp updates.
any: Send any eligible path.
backup: Best path and installed backup path.
ecmp: All paths in best path ECMP group.
limit: Limit to n eligible paths.
disabled: Disable sending any paths. | + | [        send_limit](## "router_bgp.address_family_ipv4.bgp.additional_paths.send_limit") | Integer | | | Min: 2
Max: 64 | Number of paths to send through bgp updates. For this setting, `send` must be set to `limit` or `ecmp`. | | [      redistribute_internal](## "router_bgp.address_family_ipv4.bgp.redistribute_internal") | Boolean | | | | Allow redistribution of iBGP routes into an Interior Gateway Protocol (IGP). EOS default is true. | | [    peer_groups](## "router_bgp.address_family_ipv4.peer_groups") | List, items: Dictionary | | | | | | [      - name](## "router_bgp.address_family_ipv4.peer_groups.[].name") | String | Required, Unique | | | Peer-group name. | @@ -368,6 +378,11 @@ | [          route_map](## "router_bgp.address_family_ipv4.peer_groups.[].default_originate.route_map") | String | | | | Route-map name. | | [        prefix_list_in](## "router_bgp.address_family_ipv4.peer_groups.[].prefix_list_in") | String | | | | Inbound prefix-list name. | | [        prefix_list_out](## "router_bgp.address_family_ipv4.peer_groups.[].prefix_list_out") | String | | | | Outbound prefix-list name. | + | [        additional_paths](## "router_bgp.address_family_ipv4.peer_groups.[].additional_paths") | Dictionary | | | | | + | [          prefix_list](## "router_bgp.address_family_ipv4.peer_groups.[].additional_paths.prefix_list") | String | | | | Apply the configurations only to the routes matching the prefix list. | + | [          receive](## "router_bgp.address_family_ipv4.peer_groups.[].additional_paths.receive") | Boolean | | | | Enable or disable reception of additional-paths. | + | [          send](## "router_bgp.address_family_ipv4.peer_groups.[].additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- disabled | Select an option to send multiple paths for same prefix through bgp updates.
any: Send any eligible path.
backup: Best path and installed backup path.
ecmp: All paths in best path ECMP group.
limit: Limit to n eligible paths.
disabled: Disable sending any paths. | + | [          send_limit](## "router_bgp.address_family_ipv4.peer_groups.[].additional_paths.send_limit") | Integer | | | Min: 2
Max: 64 | Number of paths to send through bgp updates. For this setting, `send` must be set to `limit` or `ecmp`. | | [        next_hop](## "router_bgp.address_family_ipv4.peer_groups.[].next_hop") | Dictionary | | | | | | [          address_family_ipv6](## "router_bgp.address_family_ipv4.peer_groups.[].next_hop.address_family_ipv6") | Dictionary | | | | | | [            enabled](## "router_bgp.address_family_ipv4.peer_groups.[].next_hop.address_family_ipv6.enabled") | Boolean | Required | | | | @@ -385,6 +400,11 @@ | [        default_originate](## "router_bgp.address_family_ipv4.neighbors.[].default_originate") | Dictionary | | | | | | [          always](## "router_bgp.address_family_ipv4.neighbors.[].default_originate.always") | Boolean | | | | | | [          route_map](## "router_bgp.address_family_ipv4.neighbors.[].default_originate.route_map") | String | | | | | + | [        additional_paths](## "router_bgp.address_family_ipv4.neighbors.[].additional_paths") | Dictionary | | | | | + | [          prefix_list](## "router_bgp.address_family_ipv4.neighbors.[].additional_paths.prefix_list") | String | | | | Apply the configurations only to the routes matching the prefix list. | + | [          receive](## "router_bgp.address_family_ipv4.neighbors.[].additional_paths.receive") | Boolean | | | | Enable or disable reception of additional-paths. | + | [          send](## "router_bgp.address_family_ipv4.neighbors.[].additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- disabled | Select an option to send multiple paths for same prefix through bgp updates.
any: Send any eligible path.
backup: Best path and installed backup path.
ecmp: All paths in best path ECMP group.
limit: Limit to n eligible paths.
disabled: Disable sending any paths. | + | [          send_limit](## "router_bgp.address_family_ipv4.neighbors.[].additional_paths.send_limit") | Integer | | | Min: 2
Max: 64 | Number of paths to send through bgp updates. For this setting, `send` must be set to `limit` or `ecmp`. | | [    redistribute_routes](## "router_bgp.address_family_ipv4.redistribute_routes") | List, items: Dictionary | | | | | | [      - source_protocol](## "router_bgp.address_family_ipv4.redistribute_routes.[].source_protocol") | String | Required | | Valid Values:
- attached-host
- bgp
- connected
- dynamic
- isis
- ospf
- ospfv3
- rip
- static
- user | | | [        route_map](## "router_bgp.address_family_ipv4.redistribute_routes.[].route_map") | String | | | | | @@ -399,9 +419,8 @@ | [    bgp](## "router_bgp.address_family_ipv4_labeled_unicast.bgp") | Dictionary | | | | | | [      additional_paths](## "router_bgp.address_family_ipv4_labeled_unicast.bgp.additional_paths") | Dictionary | | | | | | [        receive](## "router_bgp.address_family_ipv4_labeled_unicast.bgp.additional_paths.receive") | Boolean | | | | Enable or disable reception of additional-paths. | - | [        send](## "router_bgp.address_family_ipv4_labeled_unicast.bgp.additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- disabled | Select an option to send multiple paths for same prefix through bgp updates.
any: Send any eligible path.
backup: Best path and installed backup path.
ecmp: All paths in best path ECMP group.
limit: Limit to n eligible paths.
disabled: Disable sending any path. | - | [        send_ecmp_limit](## "router_bgp.address_family_ipv4_labeled_unicast.bgp.additional_paths.send_ecmp_limit") | Integer | | | Min: 2
Max: 64 | Amount of ECMP paths to send. `send` must be set to `ecmp` for this setting. If this key-value pair is not set, it will send all paths in best ECMP group. | - | [        send_limit](## "router_bgp.address_family_ipv4_labeled_unicast.bgp.additional_paths.send_limit") | Integer | | | Min: 2
Max: 64 | Number of paths to send through bgp updates. `send` must be set to `limit` for this setting. | + | [        send](## "router_bgp.address_family_ipv4_labeled_unicast.bgp.additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- disabled | Select an option to send multiple paths for same prefix through bgp updates.
any: Send any eligible path.
backup: Best path and installed backup path.
ecmp: All paths in best path ECMP group.
limit: Limit to n eligible paths.
disabled: Disable sending any paths. | + | [        send_limit](## "router_bgp.address_family_ipv4_labeled_unicast.bgp.additional_paths.send_limit") | Integer | | | Min: 2
Max: 64 | Number of paths to send through bgp updates. For this setting, `send` must be set to `limit` or `ecmp`. | | [      missing_policy](## "router_bgp.address_family_ipv4_labeled_unicast.bgp.missing_policy") | Dictionary | | | | Missing policy configuration for all address-families. | | [        direction_in](## "router_bgp.address_family_ipv4_labeled_unicast.bgp.missing_policy.direction_in") | Dictionary | | | | Missing policy inbound direction. | | [          action](## "router_bgp.address_family_ipv4_labeled_unicast.bgp.missing_policy.direction_in.action") | String | Required | | Valid Values:
- deny
- permit
- deny-in-out | Missing policy action. | @@ -424,9 +443,8 @@ | [        activate](## "router_bgp.address_family_ipv4_labeled_unicast.peer_groups.[].activate") | Boolean | | | | | | [        additional_paths](## "router_bgp.address_family_ipv4_labeled_unicast.peer_groups.[].additional_paths") | Dictionary | | | | | | [          receive](## "router_bgp.address_family_ipv4_labeled_unicast.peer_groups.[].additional_paths.receive") | Boolean | | | | Enable or disable reception of additional-paths. | - | [          send](## "router_bgp.address_family_ipv4_labeled_unicast.peer_groups.[].additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- disabled | Select an option to send multiple paths for same prefix through bgp updates.
any: Send any eligible path.
backup: Best path and installed backup path.
ecmp: All paths in best path ECMP group.
limit: Limit to n eligible paths.
disabled: Disable sending any path. | - | [          send_ecmp_limit](## "router_bgp.address_family_ipv4_labeled_unicast.peer_groups.[].additional_paths.send_ecmp_limit") | Integer | | | Min: 2
Max: 64 | Amount of ECMP paths to send. `send` must be set to `ecmp` for this setting. If this key-value pair is not set, it will send all paths in best ECMP group. | - | [          send_limit](## "router_bgp.address_family_ipv4_labeled_unicast.peer_groups.[].additional_paths.send_limit") | Integer | | | Min: 2
Max: 64 | Number of paths to send through bgp updates. `send` must be set to `limit` for this setting. | + | [          send](## "router_bgp.address_family_ipv4_labeled_unicast.peer_groups.[].additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- disabled | Select an option to send multiple paths for same prefix through bgp updates.
any: Send any eligible path.
backup: Best path and installed backup path.
ecmp: All paths in best path ECMP group.
limit: Limit to n eligible paths.
disabled: Disable sending any paths. | + | [          send_limit](## "router_bgp.address_family_ipv4_labeled_unicast.peer_groups.[].additional_paths.send_limit") | Integer | | | Min: 2
Max: 64 | Number of paths to send through bgp updates. For this setting, `send` must be set to `limit` or `ecmp`. | | [        aigp_session](## "router_bgp.address_family_ipv4_labeled_unicast.peer_groups.[].aigp_session") | Boolean | | | | | | [        graceful_restart](## "router_bgp.address_family_ipv4_labeled_unicast.peer_groups.[].graceful_restart") | Boolean | | | | | | [        graceful_restart_helper](## "router_bgp.address_family_ipv4_labeled_unicast.peer_groups.[].graceful_restart_helper") | Dictionary | | | | | @@ -460,9 +478,8 @@ | [        activate](## "router_bgp.address_family_ipv4_labeled_unicast.neighbors.[].activate") | Boolean | | | | | | [        additional_paths](## "router_bgp.address_family_ipv4_labeled_unicast.neighbors.[].additional_paths") | Dictionary | | | | | | [          receive](## "router_bgp.address_family_ipv4_labeled_unicast.neighbors.[].additional_paths.receive") | Boolean | | | | Enable or disable reception of additional-paths. | - | [          send](## "router_bgp.address_family_ipv4_labeled_unicast.neighbors.[].additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- disabled | Select an option to send multiple paths for same prefix through bgp updates.
any: Send any eligible path.
backup: Best path and installed backup path.
ecmp: All paths in best path ECMP group.
limit: Limit to n eligible paths.
disabled: Disable sending any path. | - | [          send_ecmp_limit](## "router_bgp.address_family_ipv4_labeled_unicast.neighbors.[].additional_paths.send_ecmp_limit") | Integer | | | Min: 2
Max: 64 | Amount of ECMP paths to send. `send` must be set to `ecmp` for this setting. If this key-value pair is not set, it will send all paths in best ECMP group. | - | [          send_limit](## "router_bgp.address_family_ipv4_labeled_unicast.neighbors.[].additional_paths.send_limit") | Integer | | | Min: 2
Max: 64 | Number of paths to send through bgp updates. `send` must be set to `limit` for this setting. | + | [          send](## "router_bgp.address_family_ipv4_labeled_unicast.neighbors.[].additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- disabled | Select an option to send multiple paths for same prefix through bgp updates.
any: Send any eligible path.
backup: Best path and installed backup path.
ecmp: All paths in best path ECMP group.
limit: Limit to n eligible paths.
disabled: Disable sending any paths. | + | [          send_limit](## "router_bgp.address_family_ipv4_labeled_unicast.neighbors.[].additional_paths.send_limit") | Integer | | | Min: 2
Max: 64 | Number of paths to send through bgp updates. For this setting, `send` must be set to `limit` or `ecmp`. | | [        aigp_session](## "router_bgp.address_family_ipv4_labeled_unicast.neighbors.[].aigp_session") | Boolean | | | | | | [        graceful_restart](## "router_bgp.address_family_ipv4_labeled_unicast.neighbors.[].graceful_restart") | Boolean | | | | | | [        graceful_restart_helper](## "router_bgp.address_family_ipv4_labeled_unicast.neighbors.[].graceful_restart_helper") | Dictionary | | | | | @@ -505,16 +522,23 @@ | [        rcf](## "router_bgp.address_family_ipv4_labeled_unicast.tunnel_source_protocols.[].rcf") | String | | | | Optional RCF function name with parenthesis.
Example: MyFunction(myarg). | | [    update_wait_for_convergence](## "router_bgp.address_family_ipv4_labeled_unicast.update_wait_for_convergence") | Boolean | | | | Wait for BGP to converge before sending out any route updates. | | [  address_family_ipv4_multicast](## "router_bgp.address_family_ipv4_multicast") | Dictionary | | | | | + | [    bgp](## "router_bgp.address_family_ipv4_multicast.bgp") | Dictionary | | | | | + | [      additional_paths](## "router_bgp.address_family_ipv4_multicast.bgp.additional_paths") | Dictionary | | | | | + | [        receive](## "router_bgp.address_family_ipv4_multicast.bgp.additional_paths.receive") | Boolean | | | | | | [    peer_groups](## "router_bgp.address_family_ipv4_multicast.peer_groups") | List, items: Dictionary | | | | | | [      - name](## "router_bgp.address_family_ipv4_multicast.peer_groups.[].name") | String | Required, Unique | | | Peer-group name. | | [        activate](## "router_bgp.address_family_ipv4_multicast.peer_groups.[].activate") | Boolean | | | | | | [        route_map_in](## "router_bgp.address_family_ipv4_multicast.peer_groups.[].route_map_in") | String | | | | Inbound route-map name. | | [        route_map_out](## "router_bgp.address_family_ipv4_multicast.peer_groups.[].route_map_out") | String | | | | Outbound route-map name. | + | [        additional_paths](## "router_bgp.address_family_ipv4_multicast.peer_groups.[].additional_paths") | Dictionary | | | | | + | [          receive](## "router_bgp.address_family_ipv4_multicast.peer_groups.[].additional_paths.receive") | Boolean | | | | | | [    neighbors](## "router_bgp.address_family_ipv4_multicast.neighbors") | List, items: Dictionary | | | | | | [      - ip_address](## "router_bgp.address_family_ipv4_multicast.neighbors.[].ip_address") | String | Required, Unique | | | | | [        activate](## "router_bgp.address_family_ipv4_multicast.neighbors.[].activate") | Boolean | | | | | | [        route_map_in](## "router_bgp.address_family_ipv4_multicast.neighbors.[].route_map_in") | String | | | | Inbound route-map name. | | [        route_map_out](## "router_bgp.address_family_ipv4_multicast.neighbors.[].route_map_out") | String | | | | Outbound route-map name. | + | [        additional_paths](## "router_bgp.address_family_ipv4_multicast.neighbors.[].additional_paths") | Dictionary | | | | | + | [          receive](## "router_bgp.address_family_ipv4_multicast.neighbors.[].additional_paths.receive") | Boolean | | | | | | [    redistribute](## "router_bgp.address_family_ipv4_multicast.redistribute") | Dictionary | | | | Redistribute routes in to BGP. | | [      attached_host](## "router_bgp.address_family_ipv4_multicast.redistribute.attached_host") | Dictionary | | | | | | [        enabled](## "router_bgp.address_family_ipv4_multicast.redistribute.attached_host.enabled") | Boolean | Required | | | | @@ -580,6 +604,12 @@ | [        route_map](## "router_bgp.address_family_ipv6.networks.[].route_map") | String | | | | Route-map name. | | [    bgp](## "router_bgp.address_family_ipv6.bgp") | Dictionary | | | | | | [      redistribute_internal](## "router_bgp.address_family_ipv6.bgp.redistribute_internal") | Boolean | | | | Allow redistribution of iBGP routes into an Interior Gateway Protocol (IGP). EOS default is true. | + | [      additional_paths](## "router_bgp.address_family_ipv6.bgp.additional_paths") | Dictionary | | | | | + | [        install](## "router_bgp.address_family_ipv6.bgp.additional_paths.install") | Boolean | | | | Install BGP backup path. | + | [        install_ecmp_primary](## "router_bgp.address_family_ipv6.bgp.additional_paths.install_ecmp_primary") | Boolean | | | | Allow additional path with ECMP primary path. | + | [        receive](## "router_bgp.address_family_ipv6.bgp.additional_paths.receive") | Boolean | | | | Enable or disable reception of additional-paths. | + | [        send](## "router_bgp.address_family_ipv6.bgp.additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- disabled | Select an option to send multiple paths for same prefix through bgp updates.
any: Send any eligible path.
backup: Best path and installed backup path.
ecmp: All paths in best path ECMP group.
limit: Limit to n eligible paths.
disabled: Disable sending any paths. | + | [        send_limit](## "router_bgp.address_family_ipv6.bgp.additional_paths.send_limit") | Integer | | | Min: 2
Max: 64 | Number of paths to send through bgp updates. For this setting, `send` must be set to `limit` or `ecmp`. | | [    peer_groups](## "router_bgp.address_family_ipv6.peer_groups") | List, items: Dictionary | | | | | | [      - name](## "router_bgp.address_family_ipv6.peer_groups.[].name") | String | Required, Unique | | | Peer-group name. | | [        activate](## "router_bgp.address_family_ipv6.peer_groups.[].activate") | Boolean | | | | | @@ -589,6 +619,11 @@ | [        rcf_out](## "router_bgp.address_family_ipv6.peer_groups.[].rcf_out") | String | | | | Outbound RCF function name with parenthesis.
Example: MyFunction(myarg). | | [        prefix_list_in](## "router_bgp.address_family_ipv6.peer_groups.[].prefix_list_in") | String | | | | Inbound prefix-list name. | | [        prefix_list_out](## "router_bgp.address_family_ipv6.peer_groups.[].prefix_list_out") | String | | | | Outbound prefix-list name. | + | [        additional_paths](## "router_bgp.address_family_ipv6.peer_groups.[].additional_paths") | Dictionary | | | | | + | [          prefix_list](## "router_bgp.address_family_ipv6.peer_groups.[].additional_paths.prefix_list") | String | | | | Apply the configurations only to the routes matching the prefix list. | + | [          receive](## "router_bgp.address_family_ipv6.peer_groups.[].additional_paths.receive") | Boolean | | | | Enable or disable reception of additional-paths. | + | [          send](## "router_bgp.address_family_ipv6.peer_groups.[].additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- disabled | Select an option to send multiple paths for same prefix through bgp updates.
any: Send any eligible path.
backup: Best path and installed backup path.
ecmp: All paths in best path ECMP group.
limit: Limit to n eligible paths.
disabled: Disable sending any paths. | + | [          send_limit](## "router_bgp.address_family_ipv6.peer_groups.[].additional_paths.send_limit") | Integer | | | Min: 2
Max: 64 | Number of paths to send through bgp updates. For this setting, `send` must be set to `limit` or `ecmp`. | | [    neighbors](## "router_bgp.address_family_ipv6.neighbors") | List, items: Dictionary | | | | | | [      - ip_address](## "router_bgp.address_family_ipv6.neighbors.[].ip_address") | String | Required, Unique | | | | | [        activate](## "router_bgp.address_family_ipv6.neighbors.[].activate") | Boolean | | | | | @@ -598,6 +633,11 @@ | [        rcf_out](## "router_bgp.address_family_ipv6.neighbors.[].rcf_out") | String | | | | Outbound RCF function name with parenthesis.
Example: MyFunction(myarg). | | [        prefix_list_in](## "router_bgp.address_family_ipv6.neighbors.[].prefix_list_in") | String | | | | Inbound prefix-list name. | | [        prefix_list_out](## "router_bgp.address_family_ipv6.neighbors.[].prefix_list_out") | String | | | | Outbound prefix-list name. | + | [        additional_paths](## "router_bgp.address_family_ipv6.neighbors.[].additional_paths") | Dictionary | | | | | + | [          prefix_list](## "router_bgp.address_family_ipv6.neighbors.[].additional_paths.prefix_list") | String | | | | Apply the configurations only to the routes matching the prefix list. | + | [          receive](## "router_bgp.address_family_ipv6.neighbors.[].additional_paths.receive") | Boolean | | | | Enable or disable reception of additional-paths. | + | [          send](## "router_bgp.address_family_ipv6.neighbors.[].additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- disabled | Select an option to send multiple paths for same prefix through bgp updates.
any: Send any eligible path.
backup: Best path and installed backup path.
ecmp: All paths in best path ECMP group.
limit: Limit to n eligible paths.
disabled: Disable sending any paths. | + | [          send_limit](## "router_bgp.address_family_ipv6.neighbors.[].additional_paths.send_limit") | Integer | | | Min: 2
Max: 64 | Number of paths to send through bgp updates. For this setting, `send` must be set to `limit` or `ecmp`. | | [    redistribute](## "router_bgp.address_family_ipv6.redistribute") | Dictionary | | | | Redistribute routes in to BGP. | | [      attached_host](## "router_bgp.address_family_ipv6.redistribute.attached_host") | Dictionary | | | | | | [        enabled](## "router_bgp.address_family_ipv6.redistribute.attached_host.enabled") | Boolean | Required | | | | @@ -666,9 +706,13 @@ | [        activate](## "router_bgp.address_family_ipv6_multicast.neighbors.[].activate") | Boolean | | | | | | [        route_map_in](## "router_bgp.address_family_ipv6_multicast.neighbors.[].route_map_in") | String | | | | Inbound route-map name. | | [        route_map_out](## "router_bgp.address_family_ipv6_multicast.neighbors.[].route_map_out") | String | | | | Outbound route-map name. | + | [        additional_paths](## "router_bgp.address_family_ipv6_multicast.neighbors.[].additional_paths") | Dictionary | | | | | + | [          receive](## "router_bgp.address_family_ipv6_multicast.neighbors.[].additional_paths.receive") | Boolean | | | | | | [    peer_groups](## "router_bgp.address_family_ipv6_multicast.peer_groups") | List, items: Dictionary | | | | | | [      - name](## "router_bgp.address_family_ipv6_multicast.peer_groups.[].name") | String | Required, Unique | | | Peer-group name. | | [        activate](## "router_bgp.address_family_ipv6_multicast.peer_groups.[].activate") | Boolean | | | | | + | [        additional_paths](## "router_bgp.address_family_ipv6_multicast.peer_groups.[].additional_paths") | Dictionary | | | | | + | [          receive](## "router_bgp.address_family_ipv6_multicast.peer_groups.[].additional_paths.receive") | Boolean | | | | | | [    networks](## "router_bgp.address_family_ipv6_multicast.networks") | List, items: Dictionary | | | | | | [      - prefix](## "router_bgp.address_family_ipv6_multicast.networks.[].prefix") | String | Required, Unique | | | IPv6 prefix "A:B:C:D:E:F:G:H/I". | | [        route_map](## "router_bgp.address_family_ipv6_multicast.networks.[].route_map") | String | | | | | @@ -736,39 +780,23 @@ | [  address_family_path_selection](## "router_bgp.address_family_path_selection") | Dictionary | | | | | | [    bgp](## "router_bgp.address_family_path_selection.bgp") | Dictionary | | | | | | [      additional_paths](## "router_bgp.address_family_path_selection.bgp.additional_paths") | Dictionary | | | | | - | [        receive](## "router_bgp.address_family_path_selection.bgp.additional_paths.receive") | Boolean | | | | | - | [        send](## "router_bgp.address_family_path_selection.bgp.additional_paths.send") | Dictionary | | | | | - | [          any](## "router_bgp.address_family_path_selection.bgp.additional_paths.send.any") | Boolean | | | | | - | [          backup](## "router_bgp.address_family_path_selection.bgp.additional_paths.send.backup") | Boolean | | | | | - | [          ecmp](## "router_bgp.address_family_path_selection.bgp.additional_paths.send.ecmp") | Boolean | | | | | - | [          ecmp_limit](## "router_bgp.address_family_path_selection.bgp.additional_paths.send.ecmp_limit") | Integer | | | Min: 2
Max: 64 | Amount of ECMP paths to send. | - | [          limit](## "router_bgp.address_family_path_selection.bgp.additional_paths.send.limit") | Integer | | | Min: 2
Max: 64 | Amount of paths to send. | + | [        receive](## "router_bgp.address_family_path_selection.bgp.additional_paths.receive") | Boolean | | | | Enable or disable reception of additional-paths. | + | [        send](## "router_bgp.address_family_path_selection.bgp.additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- disabled | Select an option to send multiple paths for same prefix through bgp updates.
any: Send any eligible path.
backup: Best path and installed backup path.
ecmp: All paths in best path ECMP group.
limit: Limit to n eligible paths.
disabled: Disable sending any paths. | + | [        send_limit](## "router_bgp.address_family_path_selection.bgp.additional_paths.send_limit") | Integer | | | Min: 2
Max: 64 | Number of paths to send through bgp updates. For this setting, `send` must be set to `limit` or `ecmp`. | | [    neighbors](## "router_bgp.address_family_path_selection.neighbors") | List, items: Dictionary | | | | | | [      - ip_address](## "router_bgp.address_family_path_selection.neighbors.[].ip_address") | String | Required, Unique | | | | | [        activate](## "router_bgp.address_family_path_selection.neighbors.[].activate") | Boolean | | | | | | [        additional_paths](## "router_bgp.address_family_path_selection.neighbors.[].additional_paths") | Dictionary | | | | | - | [          install](## "router_bgp.address_family_path_selection.neighbors.[].additional_paths.install") | Boolean | | | | | - | [          install_ecmp_primary](## "router_bgp.address_family_path_selection.neighbors.[].additional_paths.install_ecmp_primary") | Boolean | | | | | - | [          receive](## "router_bgp.address_family_path_selection.neighbors.[].additional_paths.receive") | Boolean | | | | | - | [          send](## "router_bgp.address_family_path_selection.neighbors.[].additional_paths.send") | Dictionary | | | | | - | [            any](## "router_bgp.address_family_path_selection.neighbors.[].additional_paths.send.any") | Boolean | | | | | - | [            backup](## "router_bgp.address_family_path_selection.neighbors.[].additional_paths.send.backup") | Boolean | | | | | - | [            ecmp](## "router_bgp.address_family_path_selection.neighbors.[].additional_paths.send.ecmp") | Boolean | | | | | - | [            ecmp_limit](## "router_bgp.address_family_path_selection.neighbors.[].additional_paths.send.ecmp_limit") | Integer | | | Min: 2
Max: 64 | Amount of ECMP paths to send. | - | [            limit](## "router_bgp.address_family_path_selection.neighbors.[].additional_paths.send.limit") | Integer | | | Min: 2
Max: 64 | Amount of paths to send. | + | [          receive](## "router_bgp.address_family_path_selection.neighbors.[].additional_paths.receive") | Boolean | | | | Enable or disable reception of additional-paths. | + | [          send](## "router_bgp.address_family_path_selection.neighbors.[].additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- disabled | Select an option to send multiple paths for same prefix through bgp updates.
any: Send any eligible path.
backup: Best path and installed backup path.
ecmp: All paths in best path ECMP group.
limit: Limit to n eligible paths.
disabled: Disable sending any paths. | + | [          send_limit](## "router_bgp.address_family_path_selection.neighbors.[].additional_paths.send_limit") | Integer | | | Min: 2
Max: 64 | Number of paths to send through bgp updates. For this setting, `send` must be set to `limit` or `ecmp`. | | [    peer_groups](## "router_bgp.address_family_path_selection.peer_groups") | List, items: Dictionary | | | | | | [      - name](## "router_bgp.address_family_path_selection.peer_groups.[].name") | String | Required, Unique | | | Peer-group name. | | [        activate](## "router_bgp.address_family_path_selection.peer_groups.[].activate") | Boolean | | | | | | [        additional_paths](## "router_bgp.address_family_path_selection.peer_groups.[].additional_paths") | Dictionary | | | | | - | [          install](## "router_bgp.address_family_path_selection.peer_groups.[].additional_paths.install") | Boolean | | | | | - | [          install_ecmp_primary](## "router_bgp.address_family_path_selection.peer_groups.[].additional_paths.install_ecmp_primary") | Boolean | | | | | - | [          receive](## "router_bgp.address_family_path_selection.peer_groups.[].additional_paths.receive") | Boolean | | | | | - | [          send](## "router_bgp.address_family_path_selection.peer_groups.[].additional_paths.send") | Dictionary | | | | | - | [            any](## "router_bgp.address_family_path_selection.peer_groups.[].additional_paths.send.any") | Boolean | | | | | - | [            backup](## "router_bgp.address_family_path_selection.peer_groups.[].additional_paths.send.backup") | Boolean | | | | | - | [            ecmp](## "router_bgp.address_family_path_selection.peer_groups.[].additional_paths.send.ecmp") | Boolean | | | | | - | [            ecmp_limit](## "router_bgp.address_family_path_selection.peer_groups.[].additional_paths.send.ecmp_limit") | Integer | | | Min: 2
Max: 64 | Amount of ECMP paths to send. | - | [            limit](## "router_bgp.address_family_path_selection.peer_groups.[].additional_paths.send.limit") | Integer | | | Min: 2
Max: 64 | Amount of paths to send. | + | [          receive](## "router_bgp.address_family_path_selection.peer_groups.[].additional_paths.receive") | Boolean | | | | Enable or disable reception of additional-paths. | + | [          send](## "router_bgp.address_family_path_selection.peer_groups.[].additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- disabled | Select an option to send multiple paths for same prefix through bgp updates.
any: Send any eligible path.
backup: Best path and installed backup path.
ecmp: All paths in best path ECMP group.
limit: Limit to n eligible paths.
disabled: Disable sending any paths. | + | [          send_limit](## "router_bgp.address_family_path_selection.peer_groups.[].additional_paths.send_limit") | Integer | | | Min: 2
Max: 64 | Number of paths to send through bgp updates. For this setting, `send` must be set to `limit` or `ecmp`. | | [  address_family_vpn_ipv4](## "router_bgp.address_family_vpn_ipv4") | Dictionary | | | | | | [    domain_identifier](## "router_bgp.address_family_vpn_ipv4.domain_identifier") | String | | | | | | [    peer_groups](## "router_bgp.address_family_vpn_ipv4.peer_groups") | List, items: Dictionary | | | | | @@ -829,6 +857,12 @@ | [    - name](## "router_bgp.vrfs.[].name") | String | Required, Unique | | | VRF name. | | [      bgp](## "router_bgp.vrfs.[].bgp") | Dictionary | | | | | | [        redistribute_internal](## "router_bgp.vrfs.[].bgp.redistribute_internal") | Boolean | | | | Allow redistribution of iBGP routes into an Interior Gateway Protocol (IGP). EOS default is true. | + | [        additional_paths](## "router_bgp.vrfs.[].bgp.additional_paths") | Dictionary | | | | | + | [          install](## "router_bgp.vrfs.[].bgp.additional_paths.install") | Boolean | | | | Install BGP backup path. | + | [          install_ecmp_primary](## "router_bgp.vrfs.[].bgp.additional_paths.install_ecmp_primary") | Boolean | | | | Allow additional path with ECMP primary path. | + | [          receive](## "router_bgp.vrfs.[].bgp.additional_paths.receive") | Boolean | | | | Enable or disable reception of additional-paths. | + | [          send](## "router_bgp.vrfs.[].bgp.additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- disabled | Select an option to send multiple paths for same prefix through bgp updates.
any: Send any eligible path.
backup: Best path and installed backup path.
ecmp: All paths in best path ECMP group.
limit: Limit to n eligible paths.
disabled: Disable sending any paths. | + | [          send_limit](## "router_bgp.vrfs.[].bgp.additional_paths.send_limit") | Integer | | | Min: 2
Max: 64 | Number of paths to send through bgp updates. For this setting, `send` must be set to `limit` or `ecmp`. | | [      rd](## "router_bgp.vrfs.[].rd") | String | | | | Route distinguisher. | | [      evpn_multicast](## "router_bgp.vrfs.[].evpn_multicast") | Boolean | | | | | | [      evpn_multicast_address_family](## "router_bgp.vrfs.[].evpn_multicast_address_family") | Dictionary | | | | Enable per-AF EVPN multicast settings. | @@ -917,6 +951,10 @@ | [          update_source](## "router_bgp.vrfs.[].neighbors.[].update_source") | String | | | | | | [          route_map_in](## "router_bgp.vrfs.[].neighbors.[].route_map_in") | String | | | | Inbound route-map name. | | [          route_map_out](## "router_bgp.vrfs.[].neighbors.[].route_map_out") | String | | | | Outbound route-map name. | + | [          additional_paths](## "router_bgp.vrfs.[].neighbors.[].additional_paths") | Dictionary | | | | | + | [            receive](## "router_bgp.vrfs.[].neighbors.[].additional_paths.receive") | Boolean | | | | Enable or disable reception of additional-paths. | + | [            send](## "router_bgp.vrfs.[].neighbors.[].additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- disabled | Select an option to send multiple paths for same prefix through bgp updates.
any: Send any eligible path.
backup: Best path and installed backup path.
ecmp: All paths in best path ECMP group.
limit: Limit to n eligible paths.
disabled: Disable sending any paths. | + | [            send_limit](## "router_bgp.vrfs.[].neighbors.[].additional_paths.send_limit") | Integer | | | Min: 2
Max: 64 | Number of paths to send through bgp updates. For this setting, `send` must be set to `limit` or `ecmp`. | | [          prefix_list_in](## "router_bgp.vrfs.[].neighbors.[].prefix_list_in") removed | String | | | | Inbound prefix-list name.This key was removed. Support was removed in AVD version 5.0.0. Use router_bgp.vrfs[].address_family_ipv4.neighbors[].prefix_list_in or router_bgp.vrfs[].address_family_ipv6.neighbors[].prefix_list_in instead. | | [          prefix_list_out](## "router_bgp.vrfs.[].neighbors.[].prefix_list_out") removed | String | | | | Outbound prefix-list name.This key was removed. Support was removed in AVD version 5.0.0. Use router_bgp.vrfs[].address_family_ipv4.neighbors[].prefix_list_out or router_bgp.vrfs[].address_family_ipv6.neighbors[].prefix_list_out instead. | | [      neighbor_interfaces](## "router_bgp.vrfs.[].neighbor_interfaces") | List, items: Dictionary | | | | | @@ -1011,15 +1049,11 @@ | [            direction_in_action](## "router_bgp.vrfs.[].address_family_ipv4.bgp.missing_policy.direction_in_action") | String | | | Valid Values:
- deny
- deny-in-out
- permit | | | [            direction_out_action](## "router_bgp.vrfs.[].address_family_ipv4.bgp.missing_policy.direction_out_action") | String | | | Valid Values:
- deny
- deny-in-out
- permit | | | [          additional_paths](## "router_bgp.vrfs.[].address_family_ipv4.bgp.additional_paths") | Dictionary | | | | | - | [            install](## "router_bgp.vrfs.[].address_family_ipv4.bgp.additional_paths.install") | Boolean | | | | | - | [            install_ecmp_primary](## "router_bgp.vrfs.[].address_family_ipv4.bgp.additional_paths.install_ecmp_primary") | Boolean | | | | | - | [            receive](## "router_bgp.vrfs.[].address_family_ipv4.bgp.additional_paths.receive") | Boolean | | | | | - | [            send](## "router_bgp.vrfs.[].address_family_ipv4.bgp.additional_paths.send") | Dictionary | | | | | - | [              any](## "router_bgp.vrfs.[].address_family_ipv4.bgp.additional_paths.send.any") | Boolean | | | | | - | [              backup](## "router_bgp.vrfs.[].address_family_ipv4.bgp.additional_paths.send.backup") | Boolean | | | | | - | [              ecmp](## "router_bgp.vrfs.[].address_family_ipv4.bgp.additional_paths.send.ecmp") | Boolean | | | | | - | [              ecmp_limit](## "router_bgp.vrfs.[].address_family_ipv4.bgp.additional_paths.send.ecmp_limit") | Integer | | | Min: 2
Max: 64 | Amount of ECMP paths to send. | - | [              limit](## "router_bgp.vrfs.[].address_family_ipv4.bgp.additional_paths.send.limit") | Integer | | | Min: 2
Max: 64 | Amount of paths to send. | + | [            install](## "router_bgp.vrfs.[].address_family_ipv4.bgp.additional_paths.install") | Boolean | | | | Install BGP backup path. | + | [            install_ecmp_primary](## "router_bgp.vrfs.[].address_family_ipv4.bgp.additional_paths.install_ecmp_primary") | Boolean | | | | Allow additional path with ECMP primary path. | + | [            receive](## "router_bgp.vrfs.[].address_family_ipv4.bgp.additional_paths.receive") | Boolean | | | | Enable or disable reception of additional-paths. | + | [            send](## "router_bgp.vrfs.[].address_family_ipv4.bgp.additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- disabled | Select an option to send multiple paths for same prefix through bgp updates.
any: Send any eligible path.
backup: Best path and installed backup path.
ecmp: All paths in best path ECMP group.
limit: Limit to n eligible paths.
disabled: Disable sending any paths. | + | [            send_limit](## "router_bgp.vrfs.[].address_family_ipv4.bgp.additional_paths.send_limit") | Integer | | | Min: 2
Max: 64 | Number of paths to send through bgp updates. For this setting, `send` must be set to `limit` or `ecmp`. | | [          redistribute_internal](## "router_bgp.vrfs.[].address_family_ipv4.bgp.redistribute_internal") | Boolean | | | | Allow redistribution of iBGP routes into an Interior Gateway Protocol (IGP). EOS default is true. | | [        neighbors](## "router_bgp.vrfs.[].address_family_ipv4.neighbors") | List, items: Dictionary | | | | | | [          - ip_address](## "router_bgp.vrfs.[].address_family_ipv4.neighbors.[].ip_address") | String | Required, Unique | | | | @@ -1034,6 +1068,10 @@ | [              address_family_ipv6](## "router_bgp.vrfs.[].address_family_ipv4.neighbors.[].next_hop.address_family_ipv6") | Dictionary | | | | | | [                enabled](## "router_bgp.vrfs.[].address_family_ipv4.neighbors.[].next_hop.address_family_ipv6.enabled") | Boolean | Required | | | | | [                originate](## "router_bgp.vrfs.[].address_family_ipv4.neighbors.[].next_hop.address_family_ipv6.originate") | Boolean | | | | | + | [            additional_paths](## "router_bgp.vrfs.[].address_family_ipv4.neighbors.[].additional_paths") | Dictionary | | | | | + | [              receive](## "router_bgp.vrfs.[].address_family_ipv4.neighbors.[].additional_paths.receive") | Boolean | | | | Enable or disable reception of additional-paths. | + | [              send](## "router_bgp.vrfs.[].address_family_ipv4.neighbors.[].additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- disabled | Select an option to send multiple paths for same prefix through bgp updates.
any: Send any eligible path.
backup: Best path and installed backup path.
ecmp: All paths in best path ECMP group.
limit: Limit to n eligible paths.
disabled: Disable sending any paths. | + | [              send_limit](## "router_bgp.vrfs.[].address_family_ipv4.neighbors.[].additional_paths.send_limit") | Integer | | | Min: 2
Max: 64 | Number of paths to send through bgp updates. For this setting, `send` must be set to `limit` or `ecmp`. | | [        networks](## "router_bgp.vrfs.[].address_family_ipv4.networks") | List, items: Dictionary | | | | | | [          - prefix](## "router_bgp.vrfs.[].address_family_ipv4.networks.[].prefix") | String | Required, Unique | | | IPv4 prefix "A.B.C.D/E". | | [            route_map](## "router_bgp.vrfs.[].address_family_ipv4.networks.[].route_map") | String | | | | | @@ -1049,15 +1087,11 @@ | [            direction_in_action](## "router_bgp.vrfs.[].address_family_ipv6.bgp.missing_policy.direction_in_action") | String | | | Valid Values:
- deny
- deny-in-out
- permit | | | [            direction_out_action](## "router_bgp.vrfs.[].address_family_ipv6.bgp.missing_policy.direction_out_action") | String | | | Valid Values:
- deny
- deny-in-out
- permit | | | [          additional_paths](## "router_bgp.vrfs.[].address_family_ipv6.bgp.additional_paths") | Dictionary | | | | | - | [            install](## "router_bgp.vrfs.[].address_family_ipv6.bgp.additional_paths.install") | Boolean | | | | | - | [            install_ecmp_primary](## "router_bgp.vrfs.[].address_family_ipv6.bgp.additional_paths.install_ecmp_primary") | Boolean | | | | | - | [            receive](## "router_bgp.vrfs.[].address_family_ipv6.bgp.additional_paths.receive") | Boolean | | | | | - | [            send](## "router_bgp.vrfs.[].address_family_ipv6.bgp.additional_paths.send") | Dictionary | | | | | - | [              any](## "router_bgp.vrfs.[].address_family_ipv6.bgp.additional_paths.send.any") | Boolean | | | | | - | [              backup](## "router_bgp.vrfs.[].address_family_ipv6.bgp.additional_paths.send.backup") | Boolean | | | | | - | [              ecmp](## "router_bgp.vrfs.[].address_family_ipv6.bgp.additional_paths.send.ecmp") | Boolean | | | | | - | [              ecmp_limit](## "router_bgp.vrfs.[].address_family_ipv6.bgp.additional_paths.send.ecmp_limit") | Integer | | | Min: 2
Max: 64 | Amount of ECMP paths to send. | - | [              limit](## "router_bgp.vrfs.[].address_family_ipv6.bgp.additional_paths.send.limit") | Integer | | | Min: 2
Max: 64 | Amount of paths to send. | + | [            install](## "router_bgp.vrfs.[].address_family_ipv6.bgp.additional_paths.install") | Boolean | | | | Install BGP backup path. | + | [            install_ecmp_primary](## "router_bgp.vrfs.[].address_family_ipv6.bgp.additional_paths.install_ecmp_primary") | Boolean | | | | Allow additional path with ECMP primary path. | + | [            receive](## "router_bgp.vrfs.[].address_family_ipv6.bgp.additional_paths.receive") | Boolean | | | | Enable or disable reception of additional-paths. | + | [            send](## "router_bgp.vrfs.[].address_family_ipv6.bgp.additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- disabled | Select an option to send multiple paths for same prefix through bgp updates.
any: Send any eligible path.
backup: Best path and installed backup path.
ecmp: All paths in best path ECMP group.
limit: Limit to n eligible paths.
disabled: Disable sending any paths. | + | [            send_limit](## "router_bgp.vrfs.[].address_family_ipv6.bgp.additional_paths.send_limit") | Integer | | | Min: 2
Max: 64 | Number of paths to send through bgp updates. For this setting, `send` must be set to `limit` or `ecmp`. | | [          redistribute_internal](## "router_bgp.vrfs.[].address_family_ipv6.bgp.redistribute_internal") | Boolean | | | | Allow redistribution of iBGP routes into an Interior Gateway Protocol (IGP). EOS default is true. | | [        neighbors](## "router_bgp.vrfs.[].address_family_ipv6.neighbors") | List, items: Dictionary | | | | | | [          - ip_address](## "router_bgp.vrfs.[].address_family_ipv6.neighbors.[].ip_address") | String | Required, Unique | | | | @@ -1068,6 +1102,10 @@ | [            rcf_out](## "router_bgp.vrfs.[].address_family_ipv6.neighbors.[].rcf_out") | String | | | | Outbound RCF function name with parenthesis.
Example: MyFunction(myarg). | | [            prefix_list_in](## "router_bgp.vrfs.[].address_family_ipv6.neighbors.[].prefix_list_in") | String | | | | Inbound prefix-list name. | | [            prefix_list_out](## "router_bgp.vrfs.[].address_family_ipv6.neighbors.[].prefix_list_out") | String | | | | Outbound prefix-list name. | + | [            additional_paths](## "router_bgp.vrfs.[].address_family_ipv6.neighbors.[].additional_paths") | Dictionary | | | | | + | [              receive](## "router_bgp.vrfs.[].address_family_ipv6.neighbors.[].additional_paths.receive") | Boolean | | | | Enable or disable reception of additional-paths. | + | [              send](## "router_bgp.vrfs.[].address_family_ipv6.neighbors.[].additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- disabled | Select an option to send multiple paths for same prefix through bgp updates.
any: Send any eligible path.
backup: Best path and installed backup path.
ecmp: All paths in best path ECMP group.
limit: Limit to n eligible paths.
disabled: Disable sending any paths. | + | [              send_limit](## "router_bgp.vrfs.[].address_family_ipv6.neighbors.[].additional_paths.send_limit") | Integer | | | Min: 2
Max: 64 | Number of paths to send through bgp updates. For this setting, `send` must be set to `limit` or `ecmp`. | | [        networks](## "router_bgp.vrfs.[].address_family_ipv6.networks") | List, items: Dictionary | | | | | | [          - prefix](## "router_bgp.vrfs.[].address_family_ipv6.networks.[].prefix") | String | Required, Unique | | | IPv6 prefix "A:B:C:D:E:F:G:H/I". | | [            route_map](## "router_bgp.vrfs.[].address_family_ipv6.networks.[].route_map") | String | | | | | @@ -1089,6 +1127,8 @@ | [            activate](## "router_bgp.vrfs.[].address_family_ipv4_multicast.neighbors.[].activate") | Boolean | | | | | | [            route_map_in](## "router_bgp.vrfs.[].address_family_ipv4_multicast.neighbors.[].route_map_in") | String | | | | Inbound route-map name. | | [            route_map_out](## "router_bgp.vrfs.[].address_family_ipv4_multicast.neighbors.[].route_map_out") | String | | | | Outbound route-map name. | + | [            additional_paths](## "router_bgp.vrfs.[].address_family_ipv4_multicast.neighbors.[].additional_paths") | Dictionary | | | | | + | [              receive](## "router_bgp.vrfs.[].address_family_ipv4_multicast.neighbors.[].additional_paths.receive") | Boolean | | | | | | [        networks](## "router_bgp.vrfs.[].address_family_ipv4_multicast.networks") | List, items: Dictionary | | | | | | [          - prefix](## "router_bgp.vrfs.[].address_family_ipv4_multicast.networks.[].prefix") | String | Required, Unique | | | IPv6 prefix "A.B.C.D/E". | | [            route_map](## "router_bgp.vrfs.[].address_family_ipv4_multicast.networks.[].route_map") | String | | | | | @@ -1110,6 +1150,8 @@ | [            activate](## "router_bgp.vrfs.[].address_family_ipv6_multicast.neighbors.[].activate") | Boolean | | | | | | [            route_map_in](## "router_bgp.vrfs.[].address_family_ipv6_multicast.neighbors.[].route_map_in") | String | | | | Inbound route-map name. | | [            route_map_out](## "router_bgp.vrfs.[].address_family_ipv6_multicast.neighbors.[].route_map_out") | String | | | | Outbound route-map name. | + | [            additional_paths](## "router_bgp.vrfs.[].address_family_ipv6_multicast.neighbors.[].additional_paths") | Dictionary | | | | | + | [              receive](## "router_bgp.vrfs.[].address_family_ipv6_multicast.neighbors.[].additional_paths.receive") | Boolean | | | | | | [        networks](## "router_bgp.vrfs.[].address_family_ipv6_multicast.networks") | List, items: Dictionary | | | | | | [          - prefix](## "router_bgp.vrfs.[].address_family_ipv6_multicast.networks.[].prefix") | String | Required, Unique | | | IPv6 prefix "A:B:C:D:E:F:G:H/I". | | [            route_map](## "router_bgp.vrfs.[].address_family_ipv6_multicast.networks.[].route_map") | String | | | | | @@ -1220,13 +1262,10 @@ # backup: Best path and installed backup path. # ecmp: All paths in best path ECMP group. # limit: Limit to n eligible paths. - # disabled: Disable sending any path. + # disabled: Disable sending any paths. send: - # Amount of ECMP paths to send. `send` must be set to `ecmp` for this setting. If this key-value pair is not set, it will send all paths in best ECMP group. - send_ecmp_limit: - - # Number of paths to send through bgp updates. `send` must be set to `limit` for this setting. + # Number of paths to send through bgp updates. For this setting, `send` must be set to `limit` or `ecmp`. send_limit: # Allow redistribution of iBGP routes into an Interior Gateway Protocol (IGP). EOS default is true. @@ -1720,6 +1759,21 @@ # Example: MyFunction(myarg). rcf: route_map: + additional_paths: + + # Enable or disable reception of additional-paths. + receive: + + # Select an option to send multiple paths for same prefix through bgp updates. + # any: Send any eligible path. + # backup: Best path and installed backup path. + # ecmp: All paths in best path ECMP group. + # limit: Limit to n eligible paths. + # disabled: Disable sending any paths. + send: + + # Number of paths to send through bgp updates. For this setting, `send` must be set to `limit` or `ecmp`. + send_limit: # Transport encapsulation for the neighbor. encapsulation: @@ -1754,17 +1808,20 @@ # Transport encapsulation for the peer-group. encapsulation: additional_paths: + + # Enable or disable reception of additional-paths. receive: - send: - any: - backup: - ecmp: - # Amount of ECMP paths to send. - ecmp_limit: + # Select an option to send multiple paths for same prefix through bgp updates. + # any: Send any eligible path. + # backup: Best path and installed backup path. + # ecmp: All paths in best path ECMP group. + # limit: Limit to n eligible paths. + # disabled: Disable sending any paths. + send: - # Amount of paths to send. - limit: + # Number of paths to send through bgp updates. For this setting, `send` must be set to `limit` or `ecmp`. + send_limit: evpn_hostflap_detection: enabled: @@ -1786,6 +1843,9 @@ next_hop_unchanged: # BGP additional-paths commands. + # This key is deprecated. + # Support will be removed in AVD version 6.0.0. + # Use bgp.additional_paths instead. bgp_additional_paths: # Receive multiple paths. @@ -1808,6 +1868,22 @@ # Amount of paths to send. limit: + bgp: + additional_paths: + + # Enable or disable reception of additional-paths. + receive: + + # Select an option to send multiple paths for same prefix through bgp updates. + # any: Send any eligible path. + # backup: Best path and installed backup path. + # ecmp: All paths in best path ECMP group. + # limit: Limit to n eligible paths. + # disabled: Disable sending any paths. + send: + + # Number of paths to send through bgp updates. For this setting, `send` must be set to `limit` or `ecmp`. + send_limit: # BGP layer-2 in-place FEC operation. layer_2_fec_in_place_update: @@ -1833,6 +1909,27 @@ # Route-map name. route_map: bgp: + additional_paths: + + # Install BGP backup path. + install: + + # Allow additional path with ECMP primary path. + install_ecmp_primary: + + # Enable or disable reception of additional-paths. + receive: + + # Select an option to send multiple paths for same prefix through bgp updates. + # any: Send any eligible path. + # backup: Best path and installed backup path. + # ecmp: All paths in best path ECMP group. + # limit: Limit to n eligible paths. + # disabled: Disable sending any paths. + send: + + # Number of paths to send through bgp updates. For this setting, `send` must be set to `limit` or `ecmp`. + send_limit: # Allow redistribution of iBGP routes into an Interior Gateway Protocol (IGP). EOS default is true. redistribute_internal: @@ -1866,6 +1963,24 @@ # Outbound prefix-list name. prefix_list_out: + additional_paths: + + # Apply the configurations only to the routes matching the prefix list. + prefix_list: + + # Enable or disable reception of additional-paths. + receive: + + # Select an option to send multiple paths for same prefix through bgp updates. + # any: Send any eligible path. + # backup: Best path and installed backup path. + # ecmp: All paths in best path ECMP group. + # limit: Limit to n eligible paths. + # disabled: Disable sending any paths. + send: + + # Number of paths to send through bgp updates. For this setting, `send` must be set to `limit` or `ecmp`. + send_limit: next_hop: address_family_ipv6: enabled: @@ -1896,6 +2011,24 @@ default_originate: always: route_map: + additional_paths: + + # Apply the configurations only to the routes matching the prefix list. + prefix_list: + + # Enable or disable reception of additional-paths. + receive: + + # Select an option to send multiple paths for same prefix through bgp updates. + # any: Send any eligible path. + # backup: Best path and installed backup path. + # ecmp: All paths in best path ECMP group. + # limit: Limit to n eligible paths. + # disabled: Disable sending any paths. + send: + + # Number of paths to send through bgp updates. For this setting, `send` must be set to `limit` or `ecmp`. + send_limit: redistribute_routes: - source_protocol: route_map: @@ -1928,13 +2061,10 @@ # backup: Best path and installed backup path. # ecmp: All paths in best path ECMP group. # limit: Limit to n eligible paths. - # disabled: Disable sending any path. + # disabled: Disable sending any paths. send: - # Amount of ECMP paths to send. `send` must be set to `ecmp` for this setting. If this key-value pair is not set, it will send all paths in best ECMP group. - send_ecmp_limit: - - # Number of paths to send through bgp updates. `send` must be set to `limit` for this setting. + # Number of paths to send through bgp updates. For this setting, `send` must be set to `limit` or `ecmp`. send_limit: # Missing policy configuration for all address-families. @@ -1992,13 +2122,10 @@ # backup: Best path and installed backup path. # ecmp: All paths in best path ECMP group. # limit: Limit to n eligible paths. - # disabled: Disable sending any path. + # disabled: Disable sending any paths. send: - # Amount of ECMP paths to send. `send` must be set to `ecmp` for this setting. If this key-value pair is not set, it will send all paths in best ECMP group. - send_ecmp_limit: - - # Number of paths to send through bgp updates. `send` must be set to `limit` for this setting. + # Number of paths to send through bgp updates. For this setting, `send` must be set to `limit` or `ecmp`. send_limit: aigp_session: graceful_restart: @@ -2082,13 +2209,10 @@ # backup: Best path and installed backup path. # ecmp: All paths in best path ECMP group. # limit: Limit to n eligible paths. - # disabled: Disable sending any path. + # disabled: Disable sending any paths. send: - # Amount of ECMP paths to send. `send` must be set to `ecmp` for this setting. If this key-value pair is not set, it will send all paths in best ECMP group. - send_ecmp_limit: - - # Number of paths to send through bgp updates. `send` must be set to `limit` for this setting. + # Number of paths to send through bgp updates. For this setting, `send` must be set to `limit` or `ecmp`. send_limit: aigp_session: graceful_restart: @@ -2188,6 +2312,9 @@ # Wait for BGP to converge before sending out any route updates. update_wait_for_convergence: address_family_ipv4_multicast: + bgp: + additional_paths: + receive: peer_groups: # Peer-group name. @@ -2199,6 +2326,8 @@ # Outbound route-map name. route_map_out: + additional_paths: + receive: neighbors: - ip_address: activate: @@ -2208,6 +2337,8 @@ # Outbound route-map name. route_map_out: + additional_paths: + receive: # Redistribute routes in to BGP. redistribute: @@ -2332,6 +2463,27 @@ # Allow redistribution of iBGP routes into an Interior Gateway Protocol (IGP). EOS default is true. redistribute_internal: + additional_paths: + + # Install BGP backup path. + install: + + # Allow additional path with ECMP primary path. + install_ecmp_primary: + + # Enable or disable reception of additional-paths. + receive: + + # Select an option to send multiple paths for same prefix through bgp updates. + # any: Send any eligible path. + # backup: Best path and installed backup path. + # ecmp: All paths in best path ECMP group. + # limit: Limit to n eligible paths. + # disabled: Disable sending any paths. + send: + + # Number of paths to send through bgp updates. For this setting, `send` must be set to `limit` or `ecmp`. + send_limit: peer_groups: # Peer-group name. @@ -2357,6 +2509,24 @@ # Outbound prefix-list name. prefix_list_out: + additional_paths: + + # Apply the configurations only to the routes matching the prefix list. + prefix_list: + + # Enable or disable reception of additional-paths. + receive: + + # Select an option to send multiple paths for same prefix through bgp updates. + # any: Send any eligible path. + # backup: Best path and installed backup path. + # ecmp: All paths in best path ECMP group. + # limit: Limit to n eligible paths. + # disabled: Disable sending any paths. + send: + + # Number of paths to send through bgp updates. For this setting, `send` must be set to `limit` or `ecmp`. + send_limit: neighbors: - ip_address: activate: @@ -2380,6 +2550,24 @@ # Outbound prefix-list name. prefix_list_out: + additional_paths: + + # Apply the configurations only to the routes matching the prefix list. + prefix_list: + + # Enable or disable reception of additional-paths. + receive: + + # Select an option to send multiple paths for same prefix through bgp updates. + # any: Send any eligible path. + # backup: Best path and installed backup path. + # ecmp: All paths in best path ECMP group. + # limit: Limit to n eligible paths. + # disabled: Disable sending any paths. + send: + + # Number of paths to send through bgp updates. For this setting, `send` must be set to `limit` or `ecmp`. + send_limit: # Redistribute routes in to BGP. redistribute: @@ -2511,11 +2699,15 @@ # Outbound route-map name. route_map_out: + additional_paths: + receive: peer_groups: # Peer-group name. - name: activate: + additional_paths: + receive: networks: # IPv6 prefix "A:B:C:D:E:F:G:H/I". @@ -2611,53 +2803,58 @@ address_family_path_selection: bgp: additional_paths: + + # Enable or disable reception of additional-paths. receive: - send: - any: - backup: - ecmp: - # Amount of ECMP paths to send. - ecmp_limit: + # Select an option to send multiple paths for same prefix through bgp updates. + # any: Send any eligible path. + # backup: Best path and installed backup path. + # ecmp: All paths in best path ECMP group. + # limit: Limit to n eligible paths. + # disabled: Disable sending any paths. + send: - # Amount of paths to send. - limit: + # Number of paths to send through bgp updates. For this setting, `send` must be set to `limit` or `ecmp`. + send_limit: neighbors: - ip_address: activate: additional_paths: - install: - install_ecmp_primary: + + # Enable or disable reception of additional-paths. receive: - send: - any: - backup: - ecmp: - # Amount of ECMP paths to send. - ecmp_limit: + # Select an option to send multiple paths for same prefix through bgp updates. + # any: Send any eligible path. + # backup: Best path and installed backup path. + # ecmp: All paths in best path ECMP group. + # limit: Limit to n eligible paths. + # disabled: Disable sending any paths. + send: - # Amount of paths to send. - limit: + # Number of paths to send through bgp updates. For this setting, `send` must be set to `limit` or `ecmp`. + send_limit: peer_groups: # Peer-group name. - name: activate: additional_paths: - install: - install_ecmp_primary: + + # Enable or disable reception of additional-paths. receive: - send: - any: - backup: - ecmp: - # Amount of ECMP paths to send. - ecmp_limit: + # Select an option to send multiple paths for same prefix through bgp updates. + # any: Send any eligible path. + # backup: Best path and installed backup path. + # ecmp: All paths in best path ECMP group. + # limit: Limit to n eligible paths. + # disabled: Disable sending any paths. + send: - # Amount of paths to send. - limit: + # Number of paths to send through bgp updates. For this setting, `send` must be set to `limit` or `ecmp`. + send_limit: address_family_vpn_ipv4: domain_identifier: peer_groups: @@ -2778,6 +2975,27 @@ # Allow redistribution of iBGP routes into an Interior Gateway Protocol (IGP). EOS default is true. redistribute_internal: + additional_paths: + + # Install BGP backup path. + install: + + # Allow additional path with ECMP primary path. + install_ecmp_primary: + + # Enable or disable reception of additional-paths. + receive: + + # Select an option to send multiple paths for same prefix through bgp updates. + # any: Send any eligible path. + # backup: Best path and installed backup path. + # ecmp: All paths in best path ECMP group. + # limit: Limit to n eligible paths. + # disabled: Disable sending any paths. + send: + + # Number of paths to send through bgp updates. For this setting, `send` must be set to `limit` or `ecmp`. + send_limit: # Route distinguisher. rd: @@ -2969,6 +3187,21 @@ # Outbound route-map name. route_map_out: + additional_paths: + + # Enable or disable reception of additional-paths. + receive: + + # Select an option to send multiple paths for same prefix through bgp updates. + # any: Send any eligible path. + # backup: Best path and installed backup path. + # ecmp: All paths in best path ECMP group. + # limit: Limit to n eligible paths. + # disabled: Disable sending any paths. + send: + + # Number of paths to send through bgp updates. For this setting, `send` must be set to `limit` or `ecmp`. + send_limit: neighbor_interfaces: # Interface name. @@ -3149,19 +3382,26 @@ direction_in_action: direction_out_action: additional_paths: + + # Install BGP backup path. install: + + # Allow additional path with ECMP primary path. install_ecmp_primary: + + # Enable or disable reception of additional-paths. receive: - send: - any: - backup: - ecmp: - # Amount of ECMP paths to send. - ecmp_limit: + # Select an option to send multiple paths for same prefix through bgp updates. + # any: Send any eligible path. + # backup: Best path and installed backup path. + # ecmp: All paths in best path ECMP group. + # limit: Limit to n eligible paths. + # disabled: Disable sending any paths. + send: - # Amount of paths to send. - limit: + # Number of paths to send through bgp updates. For this setting, `send` must be set to `limit` or `ecmp`. + send_limit: # Allow redistribution of iBGP routes into an Interior Gateway Protocol (IGP). EOS default is true. redistribute_internal: @@ -3192,6 +3432,21 @@ address_family_ipv6: enabled: originate: + additional_paths: + + # Enable or disable reception of additional-paths. + receive: + + # Select an option to send multiple paths for same prefix through bgp updates. + # any: Send any eligible path. + # backup: Best path and installed backup path. + # ecmp: All paths in best path ECMP group. + # limit: Limit to n eligible paths. + # disabled: Disable sending any paths. + send: + + # Number of paths to send through bgp updates. For this setting, `send` must be set to `limit` or `ecmp`. + send_limit: networks: # IPv4 prefix "A.B.C.D/E". @@ -3217,19 +3472,26 @@ direction_in_action: direction_out_action: additional_paths: + + # Install BGP backup path. install: + + # Allow additional path with ECMP primary path. install_ecmp_primary: + + # Enable or disable reception of additional-paths. receive: - send: - any: - backup: - ecmp: - # Amount of ECMP paths to send. - ecmp_limit: + # Select an option to send multiple paths for same prefix through bgp updates. + # any: Send any eligible path. + # backup: Best path and installed backup path. + # ecmp: All paths in best path ECMP group. + # limit: Limit to n eligible paths. + # disabled: Disable sending any paths. + send: - # Amount of paths to send. - limit: + # Number of paths to send through bgp updates. For this setting, `send` must be set to `limit` or `ecmp`. + send_limit: # Allow redistribution of iBGP routes into an Interior Gateway Protocol (IGP). EOS default is true. redistribute_internal: @@ -3256,6 +3518,21 @@ # Outbound prefix-list name. prefix_list_out: + additional_paths: + + # Enable or disable reception of additional-paths. + receive: + + # Select an option to send multiple paths for same prefix through bgp updates. + # any: Send any eligible path. + # backup: Best path and installed backup path. + # ecmp: All paths in best path ECMP group. + # limit: Limit to n eligible paths. + # disabled: Disable sending any paths. + send: + + # Number of paths to send through bgp updates. For this setting, `send` must be set to `limit` or `ecmp`. + send_limit: networks: # IPv6 prefix "A:B:C:D:E:F:G:H/I". @@ -3291,6 +3568,8 @@ # Outbound route-map name. route_map_out: + additional_paths: + receive: networks: # IPv6 prefix "A.B.C.D/E". @@ -3328,6 +3607,8 @@ # Outbound route-map name. route_map_out: + additional_paths: + receive: networks: # IPv6 prefix "A:B:C:D:E:F:G:H/I". diff --git a/python-avd/pyavd/_eos_cli_config_gen/j2templates/documentation/router-bgp.j2 b/python-avd/pyavd/_eos_cli_config_gen/j2templates/documentation/router-bgp.j2 index cb6059c4b5e..2e2351b613b 100644 --- a/python-avd/pyavd/_eos_cli_config_gen/j2templates/documentation/router-bgp.j2 +++ b/python-avd/pyavd/_eos_cli_config_gen/j2templates/documentation/router-bgp.j2 @@ -56,18 +56,18 @@ ASN Notation: {{ router_bgp.as_notation | arista.avd.default('asplain') }} | no bgp additional-paths receive | {% endif %} {% if router_bgp.bgp.additional_paths.send is arista.avd.defined %} -{% if router_bgp.bgp.additional_paths.send is arista.avd.defined('disabled') %} +{% if router_bgp.bgp.additional_paths.send == 'disabled' %} | no bgp additional-paths send | -{% elif router_bgp.bgp.additional_paths.send is arista.avd.defined('any') %} +{% elif router_bgp.bgp.additional_paths.send == 'any' %} | bgp additional-paths send any | -{% elif router_bgp.bgp.additional_paths.send is arista.avd.defined('backup') %} +{% elif router_bgp.bgp.additional_paths.send == 'backup' %} | bgp additional-paths send backup | -{% elif router_bgp.bgp.additional_paths.send_ecmp_limit is arista.avd.defined and router_bgp.bgp.additional_paths.send is arista.avd.defined('ecmp') %} -| bgp additional-paths send ecmp limit {{ router_bgp.bgp.additional_paths.send_ecmp_limit }} | -{% elif router_bgp.bgp.additional_paths.send is arista.avd.defined('ecmp') %} +{% elif router_bgp.bgp.additional_paths.send_limit is arista.avd.defined and router_bgp.bgp.additional_paths.send == 'ecmp' %} +| bgp additional-paths send ecmp limit {{ router_bgp.bgp.additional_paths.send_limit }} | +{% elif router_bgp.bgp.additional_paths.send == 'ecmp' %} | bgp additional-paths send ecmp | -{% elif router_bgp.bgp.additional_paths.send_limit is arista.avd.defined and router_bgp.bgp.additional_paths.send is arista.avd.defined('limit') %} -| bgp additional-paths send {{ router_bgp.bgp.additional_paths.send_limit }} | +{% elif router_bgp.bgp.additional_paths.send_limit is arista.avd.defined and router_bgp.bgp.additional_paths.send == 'limit' %} +| bgp additional-paths send limit {{ router_bgp.bgp.additional_paths.send_limit }} | {% endif %} {% endif %} {% if router_bgp.updates.wait_for_convergence is arista.avd.defined(true) %} diff --git a/python-avd/pyavd/_eos_cli_config_gen/j2templates/eos/router-bgp.j2 b/python-avd/pyavd/_eos_cli_config_gen/j2templates/eos/router-bgp.j2 index 12330f5c77b..207d502d5ea 100644 --- a/python-avd/pyavd/_eos_cli_config_gen/j2templates/eos/router-bgp.j2 +++ b/python-avd/pyavd/_eos_cli_config_gen/j2templates/eos/router-bgp.j2 @@ -84,18 +84,16 @@ router bgp {{ router_bgp.as }} no bgp additional-paths receive {% endif %} {% if router_bgp.bgp.additional_paths.send is arista.avd.defined %} -{% if router_bgp.bgp.additional_paths.send is arista.avd.defined('disabled') %} +{% if router_bgp.bgp.additional_paths.send == "disabled" %} no bgp additional-paths send -{% elif router_bgp.bgp.additional_paths.send is arista.avd.defined('any') %} - bgp additional-paths send any -{% elif router_bgp.bgp.additional_paths.send is arista.avd.defined('backup') %} - bgp additional-paths send backup -{% elif router_bgp.bgp.additional_paths.send_ecmp_limit is arista.avd.defined and router_bgp.bgp.additional_paths.send is arista.avd.defined('ecmp') %} - bgp additional-paths send ecmp limit {{ router_bgp.bgp.additional_paths.send_ecmp_limit }} -{% elif router_bgp.bgp.additional_paths.send is arista.avd.defined('ecmp') %} - bgp additional-paths send ecmp -{% elif router_bgp.bgp.additional_paths.send_limit is arista.avd.defined and router_bgp.bgp.additional_paths.send is arista.avd.defined('limit') %} - bgp additional-paths send {{ router_bgp.bgp.additional_paths.send_limit }} +{% elif router_bgp.bgp.additional_paths.send_limit is arista.avd.defined and router_bgp.bgp.additional_paths.send == 'ecmp' %} + bgp additional-paths send ecmp limit {{ router_bgp.bgp.additional_paths.send_limit }} +{% elif router_bgp.bgp.additional_paths.send == "limit" %} +{% if router_bgp.bgp.additional_paths.send_limit is arista.avd.defined %} + bgp additional-paths send limit {{ router_bgp.bgp.additional_paths.send_limit }} +{% endif %} +{% else %} + bgp additional-paths send {{ router_bgp.bgp.additional_paths.send }} {% endif %} {% endif %} {% if router_bgp.listen_ranges is arista.avd.defined %} @@ -621,17 +619,31 @@ router bgp {{ router_bgp.as }} {% if router_bgp.address_family_evpn is arista.avd.defined %} ! address-family evpn -{% if router_bgp.address_family_evpn.bgp_additional_paths.receive is arista.avd.defined(true) %} +{% if router_bgp.address_family_evpn.bgp.additional_paths.receive is arista.avd.defined(true) %} + bgp additional-paths receive +{% elif router_bgp.address_family_evpn.bgp_additional_paths.receive is arista.avd.defined(true) %} bgp additional-paths receive {% endif %} -{% if router_bgp.address_family_evpn.bgp_additional_paths.send.any is arista.avd.defined(true) %} +{% if router_bgp.address_family_evpn.bgp.additional_paths.send is arista.avd.defined %} +{% if router_bgp.address_family_evpn.bgp.additional_paths.send == 'disabled' %} + no bgp additional-paths send +{% elif router_bgp.address_family_evpn.bgp.additional_paths.send_limit is arista.avd.defined and router_bgp.address_family_evpn.bgp.additional_paths.send == 'ecmp' %} + bgp additional-paths send ecmp limit {{ router_bgp.address_family_evpn.bgp.additional_paths.send_limit }} +{% elif router_bgp.address_family_evpn.bgp.additional_paths.send == 'limit' %} +{% if router_bgp.address_family_evpn.bgp.additional_paths.send_limit is arista.avd.defined %} + bgp additional-paths send limit {{ router_bgp.address_family_evpn.bgp.additional_paths.send_limit }} +{% endif %} +{% else %} + bgp additional-paths send {{ router_bgp.address_family_evpn.bgp.additional_paths.send }} +{% endif %} +{% elif router_bgp.address_family_evpn.bgp_additional_paths.send.any is arista.avd.defined(true) %} bgp additional-paths send any {% elif router_bgp.address_family_evpn.bgp_additional_paths.send.backup is arista.avd.defined(true) %} bgp additional-paths send backup {% elif router_bgp.address_family_evpn.bgp_additional_paths.send.ecmp is arista.avd.defined(true) %} bgp additional-paths send ecmp -{% elif router_bgp.address_family_evpn.bgp_additional_paths.send.ecmp_limit is arista.avd.defined %} - bgp additional-paths send ecmp limit {{ router_bgp.address_family_evpn.bgp_additional_paths.send.ecmp_limit }} +{% elif router_bgp.address_family_evpn.bgp_additional_paths.send.limit is arista.avd.defined %} + bgp additional-paths send ecmp limit {{ router_bgp.address_family_evpn.bgp_additional_paths.send.limit }} {% elif router_bgp.address_family_evpn.bgp_additional_paths.send.limit is arista.avd.defined %} bgp additional-paths send limit {{ router_bgp.address_family_evpn.bgp_additional_paths.send.limit }} {% endif %} @@ -712,18 +724,18 @@ router bgp {{ router_bgp.as }} {% if peer_group.additional_paths.receive is arista.avd.defined(true) %} neighbor {{ peer_group.name }} additional-paths receive {% endif %} -{% if peer_group.additional_paths.send.any is arista.avd.defined(true) %} - neighbor {{ peer_group.name }} additional-paths send any -{% elif peer_group.additional_paths.send.any is arista.avd.defined(false) %} - no neighbor {{ peer_group.name }} additional-paths send any -{% elif peer_group.additional_paths.send.backup is arista.avd.defined(true) %} - neighbor {{ peer_group.name }} additional-paths send backup -{% elif peer_group.additional_paths.send.ecmp is arista.avd.defined(true) %} - neighbor {{ peer_group.name }} additional-paths send ecmp -{% elif peer_group.additional_paths.send.ecmp_limit is arista.avd.defined %} - neighbor {{ peer_group.name }} additional-paths send ecmp limit {{ peer_group.additional_paths.send.ecmp_limit }} -{% elif peer_group.additional_paths.send.limit is arista.avd.defined %} - neighbor {{ peer_group.name }} additional-paths send limit {{ peer_group.additional_paths.send.limit }} +{% if peer_group.additional_paths.send is arista.avd.defined %} +{% if peer_group.additional_paths.send == 'disabled' %} + no neighbor {{ peer_group.name }} additional-paths send +{% elif peer_group.additional_paths.send_limit is arista.avd.defined and peer_group.additional_paths.send == 'ecmp' %} + neighbor {{ peer_group.name }} additional-paths send ecmp limit {{ peer_group.additional_paths.send_limit }} +{% elif peer_group.additional_paths.send == 'limit' %} +{% if peer_group.additional_paths.send_limit is arista.avd.defined %} + neighbor {{ peer_group.name }} additional-paths send limit {{ peer_group.additional_paths.send_limit }} +{% endif %} +{% else %} + neighbor {{ peer_group.name }} additional-paths send {{ peer_group.additional_paths.send }} +{% endif %} {% endif %} {% if peer_group.domain_remote is arista.avd.defined(true) %} neighbor {{ peer_group.name }} domain remote @@ -738,6 +750,9 @@ router bgp {{ router_bgp.as }} {% elif neighbor.activate is arista.avd.defined(false) %} no neighbor {{ neighbor.ip_address }} activate {% endif %} +{% if neighbor.additional_paths.receive is arista.avd.defined(true) %} + neighbor {{ neighbor.ip_address }} additional-paths receive +{% endif %} {% if neighbor.rcf_in is arista.avd.defined %} neighbor {{ neighbor.ip_address }} rcf in {{ neighbor.rcf_in }} {% endif %} @@ -753,6 +768,19 @@ router bgp {{ router_bgp.as }} {% endif %} {{ neighbor_default_route_cli }} {% endif %} +{% if neighbor.additional_paths.send is arista.avd.defined %} +{% if neighbor.additional_paths.send == 'disabled' %} + no neighbor {{ neighbor.ip_address }} additional-paths send +{% elif neighbor.additional_paths.send_limit is arista.avd.defined and neighbor.additional_paths.send == 'ecmp' %} + neighbor {{ neighbor.ip_address }} additional-paths send ecmp limit {{ neighbor.additional_paths.send_limit }} +{% elif neighbor.additional_paths.send == 'limit' %} +{% if neighbor.additional_paths.send_limit is arista.avd.defined %} + neighbor {{ neighbor.ip_address }} additional-paths send limit {{ neighbor.additional_paths.send_limit }} +{% endif %} +{% else %} + neighbor {{ neighbor.ip_address }} additional-paths send {{ neighbor.additional_paths.send }} +{% endif %} +{% endif %} {% if neighbor.encapsulation is arista.avd.defined %} neighbor {{ neighbor.ip_address }} encapsulation {{ neighbor.encapsulation }} {% endif %} @@ -859,7 +887,31 @@ router bgp {{ router_bgp.as }} {% if router_bgp.address_family_ipv4 is arista.avd.defined %} ! address-family ipv4 +{% if router_bgp.address_family_ipv4.bgp.additional_paths.install is arista.avd.defined(true) %} + bgp additional-paths install +{% elif router_bgp.address_family_ipv4.bgp.additional_paths.install_ecmp_primary is arista.avd.defined(true) %} + bgp additional-paths install ecmp-primary +{% endif %} +{% if router_bgp.address_family_ipv4.bgp.additional_paths.receive is arista.avd.defined(true) %} + bgp additional-paths receive +{% endif %} +{% if router_bgp.address_family_ipv4.bgp.additional_paths.send is arista.avd.defined %} +{% if router_bgp.address_family_ipv4.bgp.additional_paths.send == 'disabled' %} + no bgp additional-paths send +{% elif router_bgp.address_family_ipv4.bgp.additional_paths.send_limit is arista.avd.defined and router_bgp.address_family_ipv4.bgp.additional_paths.send == 'ecmp' %} + bgp additional-paths send ecmp limit {{ router_bgp.address_family_ipv4.bgp.additional_paths.send_limit }} +{% elif router_bgp.address_family_ipv4.bgp.additional_paths.send == 'limit' %} +{% if router_bgp.address_family_ipv4.bgp.additional_paths.send_limit is arista.avd.defined %} + bgp additional-paths send limit {{ router_bgp.address_family_ipv4.bgp.additional_paths.send_limit }} +{% endif %} +{% else %} + bgp additional-paths send {{ router_bgp.address_family_ipv4.bgp.additional_paths.send }} +{% endif %} +{% endif %} {% for peer_group in router_bgp.address_family_ipv4.peer_groups | arista.avd.natural_sort('name') %} +{% if peer_group.additional_paths.receive is arista.avd.defined(true) %} + neighbor {{ peer_group.name }} additional-paths receive +{% endif %} {% if peer_group.route_map_in is arista.avd.defined %} neighbor {{ peer_group.name }} route-map {{ peer_group.route_map_in }} in {% endif %} @@ -900,8 +952,32 @@ router bgp {{ router_bgp.as }} {% elif peer_group.activate is arista.avd.defined(false) %} no neighbor {{ peer_group.name }} activate {% endif %} +{% if peer_group.additional_paths.send is arista.avd.defined %} +{% if peer_group.additional_paths.send == 'disabled' %} + no neighbor {{ peer_group.name }} additional-paths send +{% else %} +{% if peer_group.additional_paths.send_limit is arista.avd.defined and peer_group.additional_paths.send == 'ecmp' %} +{% set add_path_cli = 'neighbor ' ~ peer_group.name ~ ' additional-paths send ecmp limit ' ~ peer_group.additional_paths.send_limit %} +{% elif peer_group.additional_paths.send == 'limit' %} +{% if peer_group.additional_paths.send_limit is arista.avd.defined %} +{% set add_path_cli = 'neighbor ' ~ peer_group.name ~ ' additional-paths send limit ' ~ peer_group.additional_paths.send_limit %} +{% endif %} +{% else %} +{% set add_path_cli = 'neighbor ' ~ peer_group.name ~ ' additional-paths send ' ~ peer_group.additional_paths.send %} +{% endif %} +{% if peer_group.additional_paths.prefix_list is arista.avd.defined and add_path_cli is arista.avd.defined %} +{% set add_path_cli = add_path_cli ~ ' prefix-list ' ~ peer_group.additional_paths.prefix_list %} +{% endif %} +{% if add_path_cli is arista.avd.defined %} + {{ add_path_cli }} +{% endif %} +{% endif %} +{% endif %} {% endfor %} {% for neighbor in router_bgp.address_family_ipv4.neighbors | arista.avd.natural_sort('ip_address') %} +{% if neighbor.additional_paths.receive is arista.avd.defined(true) %} + neighbor {{ neighbor.ip_address }} additional-paths receive +{% endif %} {% if neighbor.route_map_in is arista.avd.defined %} neighbor {{ neighbor.ip_address }} route-map {{ neighbor.route_map_in }} in {% endif %} @@ -930,6 +1006,27 @@ router bgp {{ router_bgp.as }} {% endif %} {{ neighbor_default_originate_cli }} {% endif %} +{% if neighbor.additional_paths.send is arista.avd.defined %} +{% if neighbor.additional_paths.send == 'disabled' %} + no neighbor {{ neighbor.ip_address }} additional-paths send +{% else %} +{% if neighbor.additional_paths.send_limit is arista.avd.defined and neighbor.additional_paths.send == 'ecmp' %} +{% set add_path_cli = 'neighbor ' ~ neighbor.ip_address ~ ' additional-paths send ecmp limit ' ~ neighbor.additional_paths.send_limit %} +{% elif neighbor.additional_paths.send == 'limit' %} +{% if neighbor.additional_paths.send_limit is arista.avd.defined %} +{% set add_path_cli = 'neighbor ' ~ neighbor.ip_address ~ ' additional-paths send limit ' ~ neighbor.additional_paths.send_limit %} +{% endif %} +{% else %} +{% set add_path_cli = 'neighbor ' ~ neighbor.ip_address ~ ' additional-paths send ' ~ neighbor.additional_paths.send %} +{% endif %} +{% if neighbor.additional_paths.prefix_list is arista.avd.defined %} +{% set add_path_cli = add_path_cli ~ ' prefix-list ' ~ neighbor.additional_paths.prefix_list %} +{% endif %} +{% if add_path_cli is arista.avd.defined %} + {{ add_path_cli }} +{% endif %} +{% endif %} +{% endif %} {% if neighbor.activate is arista.avd.defined(true) %} neighbor {{ neighbor.ip_address }} activate {% elif neighbor.activate is arista.avd.defined(false) %} @@ -1006,13 +1103,17 @@ router bgp {{ router_bgp.as }} bgp additional-paths receive {% endif %} {% if router_bgp.address_family_ipv4_labeled_unicast.bgp.additional_paths.send is arista.avd.defined %} -{% set ipv4lu_add_path = "bgp additional-paths send " ~ router_bgp.address_family_ipv4_labeled_unicast.bgp.additional_paths.send %} -{% if router_bgp.address_family_ipv4_labeled_unicast.bgp.additional_paths.send_ecmp_limit is arista.avd.defined and router_bgp.address_family_ipv4_labeled_unicast.bgp.additional_paths.send == "ecmp" %} -{% set ipv4lu_add_path = ipv4lu_add_path ~ " limit " ~ router_bgp.address_family_ipv4_labeled_unicast.bgp.additional_paths.send_ecmp_limit %} -{% elif router_bgp.address_family_ipv4_labeled_unicast.bgp.additional_paths.send_limit is arista.avd.defined and router_bgp.address_family_ipv4_labeled_unicast.bgp.additional_paths.send == "limit" %} -{% set ipv4lu_add_path = ipv4lu_add_path ~ " " ~ router_bgp.address_family_ipv4_labeled_unicast.bgp.additional_paths.send_limit %} +{% if router_bgp.address_family_ipv4_labeled_unicast.bgp.additional_paths.send == 'disabled' %} + no bgp additional-paths send +{% elif router_bgp.address_family_ipv4_labeled_unicast.bgp.additional_paths.send_limit is arista.avd.defined and router_bgp.address_family_ipv4_labeled_unicast.bgp.additional_paths.send == "ecmp" %} + bgp additional-paths send ecmp limit {{ router_bgp.address_family_ipv4_labeled_unicast.bgp.additional_paths.send_limit }} +{% elif router_bgp.address_family_ipv4_labeled_unicast.bgp.additional_paths.send == "limit" %} +{% if router_bgp.address_family_ipv4_labeled_unicast.bgp.additional_paths.send_limit is arista.avd.defined %} + bgp additional-paths send limit {{ router_bgp.address_family_ipv4_labeled_unicast.bgp.additional_paths.send_limit }} +{% endif %} +{% else %} + bgp additional-paths send {{ router_bgp.address_family_ipv4_labeled_unicast.bgp.additional_paths.send }} {% endif %} - {{ ipv4lu_add_path }} {% endif %} {% if router_bgp.address_family_ipv4_labeled_unicast.bgp.next_hop_unchanged is arista.avd.defined(true) %} bgp next-hop-unchanged @@ -1062,13 +1163,17 @@ router bgp {{ router_bgp.as }} neighbor {{ peer.name }} rcf out {{ peer.rcf_out }} {% endif %} {% if peer.additional_paths.send is arista.avd.defined %} -{% set lu_peer_add_path = "neighbor " ~ peer.name ~ " additional-paths send " ~ peer.additional_paths.send %} -{% if peer.additional_paths.send_ecmp_limit is arista.avd.defined and peer.additional_paths.send == "ecmp" %} -{% set lu_peer_add_path = lu_peer_add_path ~ " limit " ~ peer.additional_paths.send_ecmp_limit %} -{% elif peer.additional_paths.send_limit is arista.avd.defined and peer.additional_paths.send == "limit" %} -{% set lu_peer_add_path = lu_peer_add_path~ " " ~ peer.additional_paths.send_limit %} +{% if peer.additional_paths.send == 'disabled' %} + no neighbor {{ peer.name }} additional-paths send +{% elif peer.additional_paths.send_limit is arista.avd.defined and peer.additional_paths.send == "ecmp" %} + neighbor {{ peer.name }} additional-paths send ecmp limit {{ peer.additional_paths.send_limit }} +{% elif peer.additional_paths.send == "limit" %} +{% if peer.additional_paths.send_limit is arista.avd.defined %} + neighbor {{ peer.name }} additional-paths send limit {{ peer.additional_paths.send_limit }} +{% endif %} +{% else %} + neighbor {{ peer.name }} additional-paths send {{ peer.additional_paths.send }} {% endif %} - {{ lu_peer_add_path }} {% endif %} {% if peer.next_hop_unchanged is arista.avd.defined(true) %} neighbor {{ peer.name }} next-hop-unchanged @@ -1151,13 +1256,17 @@ router bgp {{ router_bgp.as }} neighbor {{ neighbor.ip_address }} rcf out {{ neighbor.rcf_out }} {% endif %} {% if neighbor.additional_paths.send is arista.avd.defined %} -{% set lu_neighbor_add_path = "neighbor " ~ neighbor.ip_address ~ " additional-paths send " ~ neighbor.additional_paths.send %} -{% if neighbor.additional_paths.send_ecmp_limit is arista.avd.defined and neighbor.additional_paths.send == "ecmp" %} -{% set lu_neighbor_add_path = lu_neighbor_add_path ~ " limit " ~ neighbor.additional_paths.send_ecmp_limit %} -{% elif neighbor.additional_paths.send_limit is arista.avd.defined and neighbor.additional_paths.send == "limit" %} -{% set lu_neighbor_add_path = lu_neighbor_add_path~ " " ~ neighbor.additional_paths.send_limit %} +{% if neighbor.additional_paths.send == 'disabled' %} + no neighbor {{ neighbor.ip_address }} additional-paths send +{% elif neighbor.additional_paths.send_limit is arista.avd.defined and neighbor.additional_paths.send == "ecmp" %} + neighbor {{ neighbor.ip_address }} additional-paths send ecmp limit {{ neighbor.additional_paths.send_limit }} +{% elif neighbor.additional_paths.send == "limit" %} +{% if neighbor.additional_paths.send_limit is arista.avd.defined %} + neighbor {{ neighbor.ip_address }} additional-paths send limit {{ neighbor.additional_paths.send_limit }} +{% endif %} +{% else %} + neighbor {{ neighbor.ip_address }} additional-paths send {{ neighbor.additional_paths.send }} {% endif %} - {{ lu_neighbor_add_path }} {% endif %} {% if neighbor.next_hop_unchanged is arista.avd.defined(true) %} neighbor {{ neighbor.ip_address }} next-hop-unchanged @@ -1263,6 +1372,9 @@ router bgp {{ router_bgp.as }} {% if router_bgp.address_family_ipv4_multicast is arista.avd.defined %} ! address-family ipv4 multicast +{% if router_bgp.address_family_ipv4_multicast.bgp.additional_paths.receive is arista.avd.defined(true) %} + bgp additional-paths receive +{% endif %} {% for peer_group in router_bgp.address_family_ipv4_multicast.peer_groups | arista.avd.natural_sort('name') %} {% if peer_group.route_map_in is arista.avd.defined %} neighbor {{ peer_group.name }} route-map {{ peer_group.route_map_in }} in @@ -1275,6 +1387,9 @@ router bgp {{ router_bgp.as }} {% elif peer_group.activate is arista.avd.defined(false) %} no neighbor {{ peer_group.name }} activate {% endif %} +{% if peer_group.additional_paths.receive is arista.avd.defined(true) %} + neighbor {{ peer_group.name }} additional-paths receive +{% endif %} {% endfor %} {% for neighbor in router_bgp.address_family_ipv4_multicast.neighbors | arista.avd.natural_sort('ip_address') %} {% if neighbor.route_map_in is arista.avd.defined %} @@ -1288,6 +1403,9 @@ router bgp {{ router_bgp.as }} {% elif neighbor.activate is arista.avd.defined(false) %} no neighbor {{ neighbor.ip_address }} activate {% endif %} +{% if neighbor.additional_paths.receive is arista.avd.defined(true) %} + neighbor {{ neighbor.ip_address }} additional-paths receive +{% endif %} {% endfor %} {% if router_bgp.address_family_ipv4_multicast.redistribute is arista.avd.defined %} {% set redistribute_var = router_bgp.address_family_ipv4_multicast.redistribute %} @@ -1442,7 +1560,31 @@ router bgp {{ router_bgp.as }} {% if router_bgp.address_family_ipv6 is arista.avd.defined %} ! address-family ipv6 +{% if router_bgp.address_family_ipv6.bgp.additional_paths.install is arista.avd.defined(true) %} + bgp additional-paths install +{% elif router_bgp.address_family_ipv6.bgp.additional_paths.install_ecmp_primary is arista.avd.defined(true) %} + bgp additional-paths install ecmp-primary +{% endif %} +{% if router_bgp.address_family_ipv6.bgp.additional_paths.receive is arista.avd.defined(true) %} + bgp additional-paths receive +{% endif %} +{% if router_bgp.address_family_ipv6.bgp.additional_paths.send is arista.avd.defined %} +{% if router_bgp.address_family_ipv6.bgp.additional_paths.send == 'disabled' %} + no bgp additional-paths send +{% elif router_bgp.address_family_ipv6.bgp.additional_paths.send_limit is arista.avd.defined and router_bgp.address_family_ipv6.bgp.additional_paths.send == 'ecmp' %} + bgp additional-paths send ecmp limit {{ router_bgp.address_family_ipv6.bgp.additional_paths.send_limit }} +{% elif router_bgp.address_family_ipv6.bgp.additional_paths.send == 'limit' %} +{% if router_bgp.address_family_ipv6.bgp.additional_paths.send_limit is arista.avd.defined %} + bgp additional-paths send limit {{ router_bgp.address_family_ipv6.bgp.additional_paths.send_limit }} +{% endif %} +{% else %} + bgp additional-paths send {{ router_bgp.address_family_ipv6.bgp.additional_paths.send }} +{% endif %} +{% endif %} {% for peer_group in router_bgp.address_family_ipv6.peer_groups | arista.avd.natural_sort('name') %} +{% if peer_group.additional_paths.receive is arista.avd.defined(true) %} + neighbor {{ peer_group.name }} additional-paths receive +{% endif %} {% if peer_group.route_map_in is arista.avd.defined %} neighbor {{ peer_group.name }} route-map {{ peer_group.route_map_in }} in {% endif %} @@ -1466,8 +1608,32 @@ router bgp {{ router_bgp.as }} {% elif peer_group.activate is arista.avd.defined(false) %} no neighbor {{ peer_group.name }} activate {% endif %} +{% if peer_group.additional_paths.send is arista.avd.defined %} +{% if peer_group.additional_paths.send == 'disabled' %} + no neighbor {{ peer_group.name }} additional-paths send +{% else %} +{% if peer_group.additional_paths.send_limit is arista.avd.defined and peer_group.additional_paths.send == 'ecmp' %} +{% set add_path_cli = 'neighbor ' ~ peer_group.name ~ ' additional-paths send ecmp limit ' ~ peer_group.additional_paths.send_limit %} +{% elif peer_group.additional_paths.send == 'limit' %} +{% if peer_group.additional_paths.send_limit is arista.avd.defined %} +{% set add_path_cli = 'neighbor ' ~ peer_group.name ~ ' additional-paths send limit ' ~ peer_group.additional_paths.send_limit %} +{% endif %} +{% else %} +{% set add_path_cli = 'neighbor ' ~ peer_group.name ~ ' additional-paths send ' ~ peer_group.additional_paths.send %} +{% endif %} +{% if router_bgp.address_family_ipv6.bgp.additional_paths.prefix_list is arista.avd.defined %} +{% set add_path_cli = add_path_cli ~ ' prefix-list ' ~ router_bgp.address_family_ipv6.bgp.additional_paths.prefix_list %} +{% endif %} +{% if add_path_cli is arista.avd.defined %} + {{ add_path_cli }} +{% endif %} +{% endif %} +{% endif %} {% endfor %} {% for neighbor in router_bgp.address_family_ipv6.neighbors | arista.avd.natural_sort('ip_address') %} +{% if neighbor.additional_paths.receive is arista.avd.defined(true) %} + neighbor {{ neighbor.ip_address }} additional-paths receive +{% endif %} {% if neighbor.route_map_in is arista.avd.defined %} neighbor {{ neighbor.ip_address }} route-map {{ neighbor.route_map_in }} in {% endif %} @@ -1491,6 +1657,27 @@ router bgp {{ router_bgp.as }} {% elif neighbor.activate is arista.avd.defined(false) %} no neighbor {{ neighbor.ip_address }} activate {% endif %} +{% if neighbor.additional_paths.send is arista.avd.defined %} +{% if neighbor.additional_paths.send == 'disabled' %} + no neighbor {{ neighbor.ip_address }} additional-paths send +{% else %} +{% if neighbor.additional_paths.send_limit is arista.avd.defined and neighbor.additional_paths.send == 'ecmp' %} +{% set add_path_cli = 'neighbor ' ~ neighbor.ip_address ~ ' additional-paths send ecmp limit ' ~ neighbor.additional_paths.send_limit %} +{% elif neighbor.additional_paths.send == 'limit' %} +{% if neighbor.additional_paths.send_limit is arista.avd.defined %} +{% set add_path_cli = 'neighbor ' ~ neighbor.ip_address ~ ' additional-paths send limit ' ~ neighbor.additional_paths.send_limit %} +{% endif %} +{% else %} +{% set add_path_cli = 'neighbor ' ~ neighbor.ip_address ~ ' additional-paths send ' ~ neighbor.additional_paths.send %} +{% endif %} +{% if router_bgp.address_family_ipv6.bgp.additional_paths.prefix_list is arista.avd.defined %} +{% set add_path_cli = add_path_cli ~ ' prefix-list ' ~ router_bgp.address_family_ipv6.bgp.additional_paths.prefix_list %} +{% endif %} +{% if add_path_cli is arista.avd.defined %} + {{ add_path_cli }} +{% endif %} +{% endif %} +{% endif %} {% endfor %} {% for network in router_bgp.address_family_ipv6.networks | arista.avd.natural_sort('prefix') %} {% if network.route_map is arista.avd.defined %} @@ -1674,6 +1861,9 @@ router bgp {{ router_bgp.as }} {% elif peer_group.activate is arista.avd.defined(false) %} no neighbor {{ peer_group.name }} activate {% endif %} +{% if peer_group.additional_paths.receive is arista.avd.defined(true) %} + neighbor {{ peer_group.name }} additional-paths receive +{% endif %} {% endfor %} {% for neighbor in router_bgp.address_family_ipv6_multicast.neighbors | arista.avd.natural_sort('ip_address') %} {% if neighbor.activate is arista.avd.defined(true) %} @@ -1685,6 +1875,9 @@ router bgp {{ router_bgp.as }} {% if neighbor.route_map_out is arista.avd.defined %} neighbor {{ neighbor.ip_address }} route-map {{ neighbor.route_map_out }} out {% endif %} +{% if neighbor.additional_paths.receive is arista.avd.defined(true) %} + neighbor {{ neighbor.ip_address }} additional-paths receive +{% endif %} {% endfor %} {% for network in router_bgp.address_family_ipv6_multicast.networks | arista.avd.natural_sort('prefix') %} {% set network_cli = "network " ~ network.prefix %} @@ -1801,16 +1994,18 @@ router bgp {{ router_bgp.as }} {% if router_bgp.address_family_path_selection.bgp.additional_paths.receive is arista.avd.defined(true) %} bgp additional-paths receive {% endif %} -{% if router_bgp.address_family_path_selection.bgp.additional_paths.send.any is arista.avd.defined(true) %} - bgp additional-paths send any -{% elif router_bgp.address_family_path_selection.bgp.additional_paths.send.backup is arista.avd.defined(true) %} - bgp additional-paths send backup -{% elif router_bgp.address_family_path_selection.bgp.additional_paths.send.ecmp is arista.avd.defined(true) %} - bgp additional-paths send ecmp -{% elif router_bgp.address_family_path_selection.bgp.additional_paths.send.ecmp_limit is arista.avd.defined %} - bgp additional-paths send ecmp limit {{ router_bgp.address_family_path_selection.bgp.additional_paths.send.ecmp_limit }} -{% elif router_bgp.address_family_path_selection.bgp.additional_paths.send.limit is arista.avd.defined %} - bgp additional-paths send limit {{ router_bgp.address_family_path_selection.bgp.additional_paths.send.limit }} +{% if router_bgp.address_family_path_selection.bgp.additional_paths.send is arista.avd.defined %} +{% if router_bgp.address_family_path_selection.bgp.additional_paths.send == 'disabled' %} + no bgp additional-paths send +{% elif router_bgp.address_family_path_selection.bgp.additional_paths.send_limit is arista.avd.defined and router_bgp.address_family_path_selection.bgp.additional_paths.send == 'ecmp' %} + bgp additional-paths send ecmp limit {{ router_bgp.address_family_path_selection.bgp.additional_paths.send_limit }} +{% elif router_bgp.address_family_path_selection.bgp.additional_paths.send == 'limit' %} +{% if router_bgp.address_family_path_selection.bgp.additional_paths.send_limit is arista.avd.defined %} + bgp additional-paths send limit {{ router_bgp.address_family_path_selection.bgp.additional_paths.send_limit }} +{% endif %} +{% else %} + bgp additional-paths send {{ router_bgp.address_family_path_selection.bgp.additional_paths.send }} +{% endif %} {% endif %} {% for peer_group in router_bgp.address_family_path_selection.peer_groups | arista.avd.natural_sort('name') %} {% if peer_group.activate is arista.avd.defined(true) %} @@ -1821,16 +2016,18 @@ router bgp {{ router_bgp.as }} {% if peer_group.additional_paths.receive is arista.avd.defined(true) %} neighbor {{ peer_group.name }} additional-paths receive {% endif %} -{% if peer_group.additional_paths.send.any is arista.avd.defined(true) %} - neighbor {{ peer_group.name }} additional-paths send any -{% elif peer_group.additional_paths.send.backup is arista.avd.defined(true) %} - neighbor {{ peer_group.name }} additional-paths send backup -{% elif peer_group.additional_paths.send.ecmp is arista.avd.defined(true) %} - neighbor {{ peer_group.name }} additional-paths send ecmp -{% elif peer_group.additional_paths.send.ecmp_limit is arista.avd.defined %} - neighbor {{ peer_group.name }} additional-paths send ecmp limit {{ peer_group.additional_paths.send.ecmp_limit }} -{% elif peer_group.additional_paths.send.limit is arista.avd.defined %} - neighbor {{ peer_group.name }} additional-paths send limit {{ peer_group.additional_paths.send.limit }} +{% if peer_group.additional_paths.send is arista.avd.defined %} +{% if peer_group.additional_paths.send == 'disabled' %} + no neighbor {{ peer_group.name }} send +{% elif peer_group.additional_paths.send_limit is arista.avd.defined and peer_group.additional_paths.send == 'ecmp' %} + neighbor {{ peer_group.name }} additional-paths send ecmp limit {{ peer_group.additional_paths.send_limit }} +{% elif peer_group.additional_paths.send == 'limit' %} +{% if peer_group.additional_paths.send_limit is arista.avd.defined %} + neighbor {{ peer_group.name }} additional-paths send limit {{ peer_group.additional_paths.send_limit }} +{% endif %} +{% else %} + neighbor {{ peer_group.name }} additional-paths send {{ peer_group.additional_paths.send }} +{% endif %} {% endif %} {% endfor %} {% for neighbor in router_bgp.address_family_path_selection.neighbors | arista.avd.natural_sort('ip_address') %} @@ -1842,16 +2039,18 @@ router bgp {{ router_bgp.as }} {% if neighbor.additional_paths.receive is arista.avd.defined(true) %} neighbor {{ neighbor.ip_address }} additional-paths receive {% endif %} -{% if neighbor.additional_paths.send.any is arista.avd.defined(true) %} - neighbor {{ neighbor.ip_address }} additional-paths send any -{% elif neighbor.additional_paths.send.backup is arista.avd.defined(true) %} - neighbor {{ neighbor.ip_address }} additional-paths send backup -{% elif neighbor.additional_paths.send.ecmp is arista.avd.defined(true) %} - neighbor {{ neighbor.ip_address }} additional-paths send ecmp -{% elif neighbor.additional_paths.send.ecmp_limit is arista.avd.defined %} - neighbor {{ neighbor.ip_address }} additional-paths send ecmp limit {{ neighbor.additional_paths.send.ecmp_limit }} -{% elif neighbor.additional_paths.send.limit is arista.avd.defined %} - neighbor {{ neighbor.ip_address }} additional-paths send limit {{ neighbor.additional_paths.send.limit }} +{% if neighbor.additional_paths.send is arista.avd.defined %} +{% if neighbor.additional_paths.send == 'disabled' %} + no neighbor {{ neighbor.ip_address }} additional-paths send +{% elif neighbor.additional_paths.send_limit is arista.avd.defined and neighbor.additional_paths.send == 'ecmp' %} + neighbor {{ neighbor.ip_address }} additional-paths send ecmp limit {{ neighbor.additional_paths.send_limit }} +{% elif neighbor.additional_paths.send == 'limit' %} +{% if neighbor.additional_paths.send_limit is arista.avd.defined %} + neighbor {{ neighbor.ip_address }} additional-paths send limit {{ neighbor.additional_paths.send_limit }} +{% endif %} +{% else %} + neighbor {{ neighbor.ip_address }} additional-paths send {{ neighbor.additional_paths.send }} +{% endif %} {% endif %} {% endfor %} {% endif %} @@ -2239,6 +2438,22 @@ router bgp {{ router_bgp.as }} {% if neighbor.route_map_in is arista.avd.defined %} neighbor {{ neighbor.ip_address }} route-map {{ neighbor.route_map_in }} in {% endif %} +{% if neighbor.additional_paths.receive is arista.avd.defined(true) %} + neighbor {{ neighbor.ip_address }} additional-paths receive +{% endif %} +{% if neighbor.additional_paths.send is arista.avd.defined %} +{% if neighbor.additional_paths.send == 'disabled' %} + no neighbor {{ neighbor.ip_address }} additional-paths send +{% elif neighbor.additional_paths.send_limit is arista.avd.defined and neighbor.additional_paths.send == 'ecmp' %} + neighbor {{ neighbor.ip_address }} additional-paths send ecmp limit {{ neighbor.additional_paths.send_limit }} +{% elif neighbor.additional_paths.send == 'limit' %} +{% if neighbor.additional_paths.send_limit is arista.avd.defined %} + neighbor {{ neighbor.ip_address }} additional-paths send limit {{ neighbor.additional_paths.send_limit }} +{% endif %} +{% else %} + neighbor {{ neighbor.ip_address }} additional-paths send {{ neighbor.additional_paths.send }} +{% endif %} +{% endif %} {% endfor %} {% for network in vrf.networks | arista.avd.natural_sort('prefix') %} {% if network.route_map is arista.avd.defined %} @@ -2247,6 +2462,27 @@ router bgp {{ router_bgp.as }} network {{ network.prefix }} {% endif %} {% endfor %} +{% if vrf.bgp.additional_paths.install is arista.avd.defined(true) %} + bgp additional-paths install +{% elif vrf.bgp.additional_paths.install_ecmp_primary is arista.avd.defined(true) %} + bgp additional-paths install ecmp-primary +{% endif %} +{% if vrf.bgp.additional_paths.receive is arista.avd.defined(true) %} + bgp additional-paths receive +{% endif %} +{% if vrf.bgp.additional_paths.send is arista.avd.defined %} +{% if vrf.bgp.additional_paths.send == 'disabled' %} + no bgp additional-paths send +{% elif vrf.bgp.additional_paths.send_limit is arista.avd.defined and vrf.bgp.additional_paths.send == 'ecmp' %} + bgp additional-paths send ecmp limit {{ vrf.bgp.additional_paths.send_limit }} +{% elif vrf.bgp.additional_paths.send == 'limit' %} +{% if vrf.bgp.additional_paths.send_limit is arista.avd.defined %} + bgp additional-paths send limit {{ vrf.bgp.additional_paths.send_limit }} +{% endif %} +{% else %} + bgp additional-paths send {{ vrf.bgp.additional_paths.send }} +{% endif %} +{% endif %} {% if vrf.bgp.redistribute_internal is arista.avd.defined(true) %} bgp redistribute-internal {% elif vrf.bgp.redistribute_internal is arista.avd.defined(false) %} @@ -2503,21 +2739,26 @@ router bgp {{ router_bgp.as }} {% if vrf.address_family_ipv4.bgp.additional_paths.receive is arista.avd.defined(true) %} bgp additional-paths receive {% endif %} -{% if vrf.address_family_ipv4.bgp.additional_paths.send.any is arista.avd.defined(true) %} - bgp additional-paths send any -{% elif vrf.address_family_ipv4.bgp.additional_paths.send.backup is arista.avd.defined(true) %} - bgp additional-paths send backup -{% elif vrf.address_family_ipv4.bgp.additional_paths.send.ecmp is arista.avd.defined(true) %} - bgp additional-paths send ecmp -{% elif vrf.address_family_ipv4.bgp.additional_paths.send.ecmp_limit is arista.avd.defined %} - bgp additional-paths send ecmp limit {{ vrf.address_family_ipv4.bgp.additional_paths.send.ecmp_limit }} -{% elif vrf.address_family_ipv4.bgp.additional_paths.send.limit is arista.avd.defined %} - bgp additional-paths send limit {{ vrf.address_family_ipv4.bgp.additional_paths.send.limit }} +{% if vrf.address_family_ipv4.bgp.additional_paths.send is arista.avd.defined %} +{% if vrf.address_family_ipv4.bgp.additional_paths.send == 'disabled' %} + no bgp additional-paths send +{% elif vrf.address_family_ipv4.bgp.additional_paths.send_limit is arista.avd.defined and vrf.address_family_ipv4.bgp.additional_paths.send == 'ecmp' %} + bgp additional-paths send ecmp limit {{ vrf.address_family_ipv4.bgp.additional_paths.send_limit }} +{% elif vrf.address_family_ipv4.bgp.additional_paths.send == 'limit' %} +{% if vrf.address_family_ipv4.bgp.additional_paths.send_limit is arista.avd.defined %} + bgp additional-paths send limit {{ vrf.address_family_ipv4.bgp.additional_paths.send_limit }} +{% endif %} +{% else %} + bgp additional-paths send {{ vrf.address_family_ipv4.bgp.additional_paths.send }} +{% endif %} {% endif %} {% for neighbor in vrf.address_family_ipv4.neighbors | arista.avd.natural_sort('ip_address') %} {% if neighbor.activate is arista.avd.defined(true) %} neighbor {{ neighbor.ip_address }} activate {% endif %} +{% if neighbor.additional_paths.receive is arista.avd.defined(true) %} + neighbor {{ neighbor.ip_address }} additional-paths receive +{% endif %} {% if neighbor.route_map_in is arista.avd.defined %} neighbor {{ neighbor.ip_address }} route-map {{ neighbor.route_map_in }} in {% endif %} @@ -2536,6 +2777,19 @@ router bgp {{ router_bgp.as }} {% if neighbor.prefix_list_out is arista.avd.defined %} neighbor {{ neighbor.ip_address }} prefix-list {{ neighbor.prefix_list_out }} out {% endif %} +{% if neighbor.additional_paths.send is arista.avd.defined %} +{% if neighbor.additional_paths.send == 'disabled' %} + no neighbor {{ neighbor.ip_address }} additional-paths send +{% elif neighbor.additional_paths.send_limit is arista.avd.defined and neighbor.additional_paths.send == 'ecmp' %} + neighbor {{ neighbor.ip_address }} additional-paths send ecmp limit {{ neighbor.additional_paths.send_limit }} +{% elif neighbor.additional_paths.send == 'limit' %} +{% if neighbor.additional_paths.send_limit is arista.avd.defined %} + neighbor {{ neighbor.ip_address }} additional-paths send limit {{ neighbor.additional_paths.send_limit }} +{% endif %} +{% else %} + neighbor {{ neighbor.ip_address }} additional-paths send {{ neighbor.additional_paths.send }} +{% endif %} +{% endif %} {% if neighbor.next_hop.address_family_ipv6.enabled is arista.avd.defined %} {% if neighbor.next_hop.address_family_ipv6.enabled is arista.avd.defined(true) %} {% set ipv6_originate_cli = "neighbor " ~ neighbor.ip_address ~ " next-hop address-family ipv6" %} @@ -2606,6 +2860,9 @@ router bgp {{ router_bgp.as }} {% if neighbor.route_map_out is arista.avd.defined %} neighbor {{ neighbor.ip_address }} route-map {{ neighbor.route_map_out }} out {% endif %} +{% if neighbor.additional_paths.receive is arista.avd.defined(true) %} + neighbor {{ neighbor.ip_address }} additional-paths receive +{% endif %} {% endfor %} {% for network in vrf.address_family_ipv4_multicast.networks | arista.avd.natural_sort('prefix') %} {% set network_cli = "network " ~ network.prefix %} @@ -2653,21 +2910,26 @@ router bgp {{ router_bgp.as }} {% if vrf.address_family_ipv6.bgp.additional_paths.receive is arista.avd.defined(true) %} bgp additional-paths receive {% endif %} -{% if vrf.address_family_ipv6.bgp.additional_paths.send.any is arista.avd.defined(true) %} - bgp additional-paths send any -{% elif vrf.address_family_ipv6.bgp.additional_paths.send.backup is arista.avd.defined(true) %} - bgp additional-paths send backup -{% elif vrf.address_family_ipv6.bgp.additional_paths.send.ecmp is arista.avd.defined(true) %} - bgp additional-paths send ecmp -{% elif vrf.address_family_ipv6.bgp.additional_paths.send.ecmp_limit is arista.avd.defined %} - bgp additional-paths send ecmp limit {{ vrf.address_family_ipv6.bgp.additional_paths.send.ecmp_limit }} -{% elif vrf.address_family_ipv6.bgp.additional_paths.send.limit is arista.avd.defined %} - bgp additional-paths send limit {{ vrf.address_family_ipv6.bgp.additional_paths.send.limit }} +{% if vrf.address_family_ipv6.bgp.additional_paths.send is arista.avd.defined %} +{% if vrf.address_family_ipv6.bgp.additional_paths.send == 'disabled' %} + no bgp additional-paths send +{% elif vrf.address_family_ipv6.bgp.additional_paths.send_limit is arista.avd.defined and vrf.address_family_ipv6.bgp.additional_paths.send == 'ecmp' %} + bgp additional-paths send ecmp limit {{ vrf.address_family_ipv6.bgp.additional_paths.send_limit }} +{% elif vrf.address_family_ipv6.bgp.additional_paths.send == 'limit' %} +{% if vrf.address_family_ipv6.bgp.additional_paths.send_limit is arista.avd.defined %} + bgp additional-paths send limit {{ vrf.address_family_ipv6.bgp.additional_paths.send_limit }} +{% endif %} +{% else %} + bgp additional-paths send {{ vrf.address_family_ipv6.bgp.additional_paths.send }} +{% endif %} {% endif %} {% for neighbor in vrf.address_family_ipv6.neighbors | arista.avd.natural_sort('ip_address') %} {% if neighbor.activate is arista.avd.defined(true) %} neighbor {{ neighbor.ip_address }} activate {% endif %} +{% if neighbor.additional_paths.receive is arista.avd.defined(true) %} + neighbor {{ neighbor.ip_address }} additional-paths receive +{% endif %} {% if neighbor.route_map_in is arista.avd.defined %} neighbor {{ neighbor.ip_address }} route-map {{ neighbor.route_map_in }} in {% endif %} @@ -2686,6 +2948,19 @@ router bgp {{ router_bgp.as }} {% if neighbor.prefix_list_out is arista.avd.defined %} neighbor {{ neighbor.ip_address }} prefix-list {{ neighbor.prefix_list_out }} out {% endif %} +{% if neighbor.additional_paths.send is arista.avd.defined %} +{% if neighbor.additional_paths.send == 'disabled' %} + no neighbor {{ neighbor.ip_address }} additional-paths send +{% elif neighbor.additional_paths.send_limit is arista.avd.defined and neighbor.additional_paths.send == 'ecmp' %} + neighbor {{ neighbor.ip_address }} additional-paths send ecmp limit {{ neighbor.additional_paths.send_limit }} +{% elif neighbor.additional_paths.send == 'limit' %} +{% if neighbor.additional_paths.send_limit is arista.avd.defined %} + neighbor {{ neighbor.ip_address }} additional-paths send limit {{ neighbor.additional_paths.send_limit }} +{% endif %} +{% else %} + neighbor {{ neighbor.ip_address }} additional-paths send {{ neighbor.additional_paths.send }} +{% endif %} +{% endif %} {% endfor %} {% for network in vrf.address_family_ipv6.networks | arista.avd.natural_sort('prefix') %} {% set network_cli = "network " ~ network.prefix %} @@ -2745,6 +3020,9 @@ router bgp {{ router_bgp.as }} {% if neighbor.route_map_out is arista.avd.defined %} neighbor {{ neighbor.ip_address }} route-map {{ neighbor.route_map_out }} out {% endif %} +{% if neighbor.additional_paths.receive is arista.avd.defined(true) %} + neighbor {{ neighbor.ip_address }} additional-paths receive +{% endif %} {% endfor %} {% for network in vrf.address_family_ipv6_multicast.networks | arista.avd.natural_sort('prefix') %} {% set network_cli = "network " ~ network.prefix %} diff --git a/python-avd/pyavd/_eos_cli_config_gen/schema/eos_cli_config_gen.schema.yml b/python-avd/pyavd/_eos_cli_config_gen/schema/eos_cli_config_gen.schema.yml index d5e01a4fa78..d5c3e7eaad6 100644 --- a/python-avd/pyavd/_eos_cli_config_gen/schema/eos_cli_config_gen.schema.yml +++ b/python-avd/pyavd/_eos_cli_config_gen/schema/eos_cli_config_gen.schema.yml @@ -12903,6 +12903,9 @@ keys: Example: MyFunction(myarg).' route_map: type: str + additional_paths: + type: dict + $ref: eos_cli_config_gen#/$defs/bgp_additional_paths encapsulation: type: str valid_values: @@ -12960,32 +12963,7 @@ keys: description: Transport encapsulation for the peer-group. additional_paths: type: dict - keys: - receive: - type: bool - send: - type: dict - keys: - any: - type: bool - backup: - type: bool - ecmp: - type: bool - ecmp_limit: - type: int - description: Amount of ECMP paths to send. - convert_types: - - str - min: 2 - max: 64 - limit: - type: int - description: Amount of paths to send. - convert_types: - - str - min: 2 - max: 64 + $ref: eos_cli_config_gen#/$defs/bgp_additional_paths evpn_hostflap_detection: type: dict keys: @@ -13035,6 +13013,10 @@ keys: type: bool bgp_additional_paths: type: dict + deprecation: + warning: true + remove_in_version: 6.0.0 + new_key: bgp.additional_paths description: BGP additional-paths commands. keys: receive: @@ -13067,6 +13049,12 @@ keys: - str min: 2 max: 64 + bgp: + type: dict + keys: + additional_paths: + type: dict + $ref: eos_cli_config_gen#/$defs/bgp_additional_paths layer_2_fec_in_place_update: type: dict description: BGP layer-2 in-place FEC operation. @@ -13120,6 +13108,16 @@ keys: bgp: type: dict keys: + additional_paths: + type: dict + $ref: eos_cli_config_gen#/$defs/bgp_additional_paths + keys: + install: + type: bool + description: Install BGP backup path. + install_ecmp_primary: + type: bool + description: Allow additional path with ECMP primary path. redistribute_internal: type: bool description: Allow redistribution of iBGP routes into an Interior @@ -13165,6 +13163,14 @@ keys: prefix_list_out: type: str description: Outbound prefix-list name. + additional_paths: + type: dict + $ref: eos_cli_config_gen#/$defs/bgp_additional_paths + keys: + prefix_list: + type: str + description: Apply the configurations only to the routes matching + the prefix list. next_hop: type: dict keys: @@ -13222,6 +13228,14 @@ keys: type: bool route_map: type: str + additional_paths: + type: dict + $ref: eos_cli_config_gen#/$defs/bgp_additional_paths + keys: + prefix_list: + type: str + description: Apply the configurations only to the routes matching + the prefix list. redistribute_routes: type: list primary_key: source_protocol @@ -13685,6 +13699,14 @@ keys: address_family_ipv4_multicast: type: dict keys: + bgp: + type: dict + keys: + additional_paths: + type: dict + keys: + receive: + type: bool peer_groups: type: list primary_key: name @@ -13702,6 +13724,11 @@ keys: route_map_out: type: str description: Outbound route-map name. + additional_paths: + type: dict + keys: + receive: + type: bool neighbors: type: list primary_key: ip_address @@ -13718,6 +13745,11 @@ keys: route_map_out: type: str description: Outbound route-map name. + additional_paths: + type: dict + keys: + receive: + type: bool redistribute: type: dict description: Redistribute routes in to BGP. @@ -13962,6 +13994,16 @@ keys: type: bool description: Allow redistribution of iBGP routes into an Interior Gateway Protocol (IGP). EOS default is true. + additional_paths: + type: dict + $ref: eos_cli_config_gen#/$defs/bgp_additional_paths + keys: + install: + type: bool + description: Install BGP backup path. + install_ecmp_primary: + type: bool + description: Allow additional path with ECMP primary path. peer_groups: type: list primary_key: name @@ -13995,6 +14037,14 @@ keys: prefix_list_out: type: str description: Outbound prefix-list name. + additional_paths: + type: dict + $ref: eos_cli_config_gen#/$defs/bgp_additional_paths + keys: + prefix_list: + type: str + description: Apply the configurations only to the routes matching + the prefix list. neighbors: type: list primary_key: ip_address @@ -14027,6 +14077,14 @@ keys: prefix_list_out: type: str description: Outbound prefix-list name. + additional_paths: + type: dict + $ref: eos_cli_config_gen#/$defs/bgp_additional_paths + keys: + prefix_list: + type: str + description: Apply the configurations only to the routes matching + the prefix list. redistribute: type: dict description: Redistribute routes in to BGP. @@ -14290,6 +14348,11 @@ keys: route_map_out: type: str description: Outbound route-map name. + additional_paths: + type: dict + keys: + receive: + type: bool peer_groups: type: list primary_key: name @@ -14301,6 +14364,11 @@ keys: description: Peer-group name. activate: type: bool + additional_paths: + type: dict + keys: + receive: + type: bool networks: type: list primary_key: prefix @@ -14568,32 +14636,7 @@ keys: keys: additional_paths: type: dict - keys: - receive: - type: bool - send: - type: dict - keys: - any: - type: bool - backup: - type: bool - ecmp: - type: bool - ecmp_limit: - type: int - description: Amount of ECMP paths to send. - convert_types: - - str - min: 2 - max: 64 - limit: - type: int - description: Amount of paths to send. - convert_types: - - str - min: 2 - max: 64 + $ref: eos_cli_config_gen#/$defs/bgp_additional_paths neighbors: type: list primary_key: ip_address @@ -14606,36 +14649,7 @@ keys: type: bool additional_paths: type: dict - keys: - install: - type: bool - install_ecmp_primary: - type: bool - receive: - type: bool - send: - type: dict - keys: - any: - type: bool - backup: - type: bool - ecmp: - type: bool - ecmp_limit: - type: int - description: Amount of ECMP paths to send. - convert_types: - - str - min: 2 - max: 64 - limit: - type: int - description: Amount of paths to send. - convert_types: - - str - min: 2 - max: 64 + $ref: eos_cli_config_gen#/$defs/bgp_additional_paths peer_groups: type: list primary_key: name @@ -14649,36 +14663,7 @@ keys: type: bool additional_paths: type: dict - keys: - install: - type: bool - install_ecmp_primary: - type: bool - receive: - type: bool - send: - type: dict - keys: - any: - type: bool - backup: - type: bool - ecmp: - type: bool - ecmp_limit: - type: int - description: Amount of ECMP paths to send. - convert_types: - - str - min: 2 - max: 64 - limit: - type: int - description: Amount of paths to send. - convert_types: - - str - min: 2 - max: 64 + $ref: eos_cli_config_gen#/$defs/bgp_additional_paths address_family_vpn_ipv4: type: dict keys: @@ -14885,6 +14870,16 @@ keys: type: bool description: Allow redistribution of iBGP routes into an Interior Gateway Protocol (IGP). EOS default is true. + additional_paths: + type: dict + $ref: eos_cli_config_gen#/$defs/bgp_additional_paths + keys: + install: + type: bool + description: Install BGP backup path. + install_ecmp_primary: + type: bool + description: Allow additional path with ECMP primary path. rd: type: str description: Route distinguisher. @@ -15258,6 +15253,9 @@ keys: route_map_out: type: str description: Outbound route-map name. + additional_paths: + type: dict + $ref: eos_cli_config_gen#/$defs/bgp_additional_paths prefix_list_in: type: str description: Inbound prefix-list name. @@ -15624,36 +15622,14 @@ keys: - permit additional_paths: type: dict + $ref: eos_cli_config_gen#/$defs/bgp_additional_paths keys: install: type: bool + description: Install BGP backup path. install_ecmp_primary: type: bool - receive: - type: bool - send: - type: dict - keys: - any: - type: bool - backup: - type: bool - ecmp: - type: bool - ecmp_limit: - type: int - description: Amount of ECMP paths to send. - convert_types: - - str - min: 2 - max: 64 - limit: - type: int - description: Amount of paths to send. - convert_types: - - str - min: 2 - max: 64 + description: Allow additional path with ECMP primary path. redistribute_internal: type: bool description: Allow redistribution of iBGP routes into an Interior @@ -15701,6 +15677,9 @@ keys: required: true originate: type: bool + additional_paths: + type: dict + $ref: eos_cli_config_gen#/$defs/bgp_additional_paths networks: type: list primary_key: prefix @@ -15784,36 +15763,14 @@ keys: - permit additional_paths: type: dict + $ref: eos_cli_config_gen#/$defs/bgp_additional_paths keys: install: type: bool + description: Install BGP backup path. install_ecmp_primary: type: bool - receive: - type: bool - send: - type: dict - keys: - any: - type: bool - backup: - type: bool - ecmp: - type: bool - ecmp_limit: - type: int - description: Amount of ECMP paths to send. - convert_types: - - str - min: 2 - max: 64 - limit: - type: int - description: Amount of paths to send. - convert_types: - - str - min: 2 - max: 64 + description: Allow additional path with ECMP primary path. redistribute_internal: type: bool description: Allow redistribution of iBGP routes into an Interior @@ -15850,6 +15807,9 @@ keys: prefix_list_out: type: str description: Outbound prefix-list name. + additional_paths: + type: dict + $ref: eos_cli_config_gen#/$defs/bgp_additional_paths networks: type: list primary_key: prefix @@ -15950,6 +15910,11 @@ keys: route_map_out: type: str description: Outbound route-map name. + additional_paths: + type: dict + keys: + receive: + type: bool networks: type: list primary_key: prefix @@ -16048,6 +16013,11 @@ keys: route_map_out: type: str description: Outbound route-map name. + additional_paths: + type: dict + keys: + receive: + type: bool networks: type: list primary_key: prefix @@ -20399,26 +20369,17 @@ $defs: limit: Limit to n eligible paths. - disabled: Disable sending any path.' + disabled: Disable sending any paths.' valid_values: - any - backup - ecmp - limit - disabled - send_ecmp_limit: - type: int - description: Amount of ECMP paths to send. `send` must be set to `ecmp` for - this setting. If this key-value pair is not set, it will send all paths - in best ECMP group. - convert_types: - - str - min: 2 - max: 64 send_limit: type: int - description: Number of paths to send through bgp updates. `send` must be set - to `limit` for this setting. + description: Number of paths to send through bgp updates. For this setting, + `send` must be set to `limit` or `ecmp`. convert_types: - str min: 2 diff --git a/python-avd/pyavd/_eos_cli_config_gen/schema/schema_fragments/defs_bgp_additional_paths.schema.yml b/python-avd/pyavd/_eos_cli_config_gen/schema/schema_fragments/defs_bgp_additional_paths.schema.yml index 20253e42744..3bf558710fa 100644 --- a/python-avd/pyavd/_eos_cli_config_gen/schema/schema_fragments/defs_bgp_additional_paths.schema.yml +++ b/python-avd/pyavd/_eos_cli_config_gen/schema/schema_fragments/defs_bgp_additional_paths.schema.yml @@ -17,18 +17,11 @@ $defs: backup: Best path and installed backup path. ecmp: All paths in best path ECMP group. limit: Limit to n eligible paths. - disabled: Disable sending any path. + disabled: Disable sending any paths. valid_values: [ 'any', 'backup', 'ecmp', 'limit', 'disabled' ] - send_ecmp_limit: - type: int - description: Amount of ECMP paths to send. `send` must be set to `ecmp` for this setting. If this key-value pair is not set, it will send all paths in best ECMP group. - convert_types: - - str - min: 2 - max: 64 send_limit: type: int - description: Number of paths to send through bgp updates. `send` must be set to `limit` for this setting. + description: Number of paths to send through bgp updates. For this setting, `send` must be set to `limit` or `ecmp`. convert_types: - str min: 2 diff --git a/python-avd/pyavd/_eos_cli_config_gen/schema/schema_fragments/router_bgp.schema.yml b/python-avd/pyavd/_eos_cli_config_gen/schema/schema_fragments/router_bgp.schema.yml index e6419d0af0f..ab551ecaf12 100644 --- a/python-avd/pyavd/_eos_cli_config_gen/schema/schema_fragments/router_bgp.schema.yml +++ b/python-avd/pyavd/_eos_cli_config_gen/schema/schema_fragments/router_bgp.schema.yml @@ -1093,6 +1093,9 @@ keys: Example: MyFunction(myarg). route_map: type: str + additional_paths: + type: dict + $ref: "eos_cli_config_gen#/$defs/bgp_additional_paths" encapsulation: type: str valid_values: @@ -1150,32 +1153,7 @@ keys: description: Transport encapsulation for the peer-group. additional_paths: type: dict - keys: - receive: - type: bool - send: - type: dict - keys: - any: - type: bool - backup: - type: bool - ecmp: - type: bool - ecmp_limit: - type: int - description: Amount of ECMP paths to send. - convert_types: - - str - min: 2 - max: 64 - limit: - type: int - description: Amount of paths to send. - convert_types: - - str - min: 2 - max: 64 + $ref: "eos_cli_config_gen#/$defs/bgp_additional_paths" evpn_hostflap_detection: type: dict keys: @@ -1224,6 +1202,10 @@ keys: type: bool bgp_additional_paths: type: dict + deprecation: + warning: true + remove_in_version: 6.0.0 + new_key: bgp.additional_paths description: BGP additional-paths commands. keys: receive: @@ -1256,6 +1238,12 @@ keys: - str min: 2 max: 64 + bgp: + type: dict + keys: + additional_paths: + type: dict + $ref: "eos_cli_config_gen#/$defs/bgp_additional_paths" layer_2_fec_in_place_update: type: dict description: BGP layer-2 in-place FEC operation. @@ -1309,6 +1297,16 @@ keys: bgp: type: dict keys: + additional_paths: + type: dict + $ref: "eos_cli_config_gen#/$defs/bgp_additional_paths" + keys: + install: + type: bool + description: Install BGP backup path. + install_ecmp_primary: + type: bool + description: Allow additional path with ECMP primary path. redistribute_internal: type: bool description: Allow redistribution of iBGP routes into an Interior Gateway Protocol (IGP). EOS default is true. @@ -1353,6 +1351,13 @@ keys: prefix_list_out: type: str description: Outbound prefix-list name. + additional_paths: + type: dict + $ref: "eos_cli_config_gen#/$defs/bgp_additional_paths" + keys: + prefix_list: + type: str + description: Apply the configurations only to the routes matching the prefix list. next_hop: type: dict keys: @@ -1410,6 +1415,13 @@ keys: type: bool route_map: type: str + additional_paths: + type: dict + $ref: "eos_cli_config_gen#/$defs/bgp_additional_paths" + keys: + prefix_list: + type: str + description: Apply the configurations only to the routes matching the prefix list. redistribute_routes: type: list primary_key: source_protocol @@ -1832,6 +1844,14 @@ keys: address_family_ipv4_multicast: type: dict keys: + bgp: + type: dict + keys: + additional_paths: + type: dict + keys: + receive: + type: bool peer_groups: type: list primary_key: name @@ -1849,6 +1869,11 @@ keys: route_map_out: type: str description: Outbound route-map name. + additional_paths: + type: dict + keys: + receive: + type: bool neighbors: type: list primary_key: ip_address @@ -1865,6 +1890,11 @@ keys: route_map_out: type: str description: Outbound route-map name. + additional_paths: + type: dict + keys: + receive: + type: bool redistribute: type: dict description: Redistribute routes in to BGP. @@ -2096,6 +2126,16 @@ keys: redistribute_internal: type: bool description: Allow redistribution of iBGP routes into an Interior Gateway Protocol (IGP). EOS default is true. + additional_paths: + type: dict + $ref: "eos_cli_config_gen#/$defs/bgp_additional_paths" + keys: + install: + type: bool + description: Install BGP backup path. + install_ecmp_primary: + type: bool + description: Allow additional path with ECMP primary path. peer_groups: type: list primary_key: name @@ -2129,6 +2169,13 @@ keys: prefix_list_out: type: str description: Outbound prefix-list name. + additional_paths: + type: dict + $ref: "eos_cli_config_gen#/$defs/bgp_additional_paths" + keys: + prefix_list: + type: str + description: Apply the configurations only to the routes matching the prefix list. neighbors: type: list primary_key: ip_address @@ -2161,6 +2208,13 @@ keys: prefix_list_out: type: str description: Outbound prefix-list name. + additional_paths: + type: dict + $ref: "eos_cli_config_gen#/$defs/bgp_additional_paths" + keys: + prefix_list: + type: str + description: Apply the configurations only to the routes matching the prefix list. redistribute: type: dict description: Redistribute routes in to BGP. @@ -2405,6 +2459,11 @@ keys: route_map_out: type: str description: Outbound route-map name. + additional_paths: + type: dict + keys: + receive: + type: bool peer_groups: type: list primary_key: name @@ -2416,6 +2475,11 @@ keys: description: Peer-group name. activate: type: bool + additional_paths: + type: dict + keys: + receive: + type: bool networks: type: list primary_key: prefix @@ -2677,32 +2741,7 @@ keys: keys: additional_paths: type: dict - keys: - receive: - type: bool - send: - type: dict - keys: - any: - type: bool - backup: - type: bool - ecmp: - type: bool - ecmp_limit: - type: int - description: Amount of ECMP paths to send. - convert_types: - - str - min: 2 - max: 64 - limit: - type: int - description: Amount of paths to send. - convert_types: - - str - min: 2 - max: 64 + $ref: "eos_cli_config_gen#/$defs/bgp_additional_paths" neighbors: type: list primary_key: ip_address @@ -2715,36 +2754,7 @@ keys: type: bool additional_paths: type: dict - keys: - install: - type: bool - install_ecmp_primary: - type: bool - receive: - type: bool - send: - type: dict - keys: - any: - type: bool - backup: - type: bool - ecmp: - type: bool - ecmp_limit: - type: int - description: Amount of ECMP paths to send. - convert_types: - - str - min: 2 - max: 64 - limit: - type: int - description: Amount of paths to send. - convert_types: - - str - min: 2 - max: 64 + $ref: "eos_cli_config_gen#/$defs/bgp_additional_paths" peer_groups: type: list primary_key: name @@ -2758,36 +2768,7 @@ keys: type: bool additional_paths: type: dict - keys: - install: - type: bool - install_ecmp_primary: - type: bool - receive: - type: bool - send: - type: dict - keys: - any: - type: bool - backup: - type: bool - ecmp: - type: bool - ecmp_limit: - type: int - description: Amount of ECMP paths to send. - convert_types: - - str - min: 2 - max: 64 - limit: - type: int - description: Amount of paths to send. - convert_types: - - str - min: 2 - max: 64 + $ref: "eos_cli_config_gen#/$defs/bgp_additional_paths" address_family_vpn_ipv4: type: dict keys: @@ -2993,6 +2974,16 @@ keys: redistribute_internal: type: bool description: Allow redistribution of iBGP routes into an Interior Gateway Protocol (IGP). EOS default is true. + additional_paths: + type: dict + $ref: "eos_cli_config_gen#/$defs/bgp_additional_paths" + keys: + install: + type: bool + description: Install BGP backup path. + install_ecmp_primary: + type: bool + description: Allow additional path with ECMP primary path. rd: type: str description: Route distinguisher. @@ -3328,6 +3319,9 @@ keys: route_map_out: type: str description: Outbound route-map name. + additional_paths: + type: dict + $ref: "eos_cli_config_gen#/$defs/bgp_additional_paths" prefix_list_in: type: str description: Inbound prefix-list name. @@ -3667,36 +3661,14 @@ keys: - "permit" additional_paths: type: dict + $ref: "eos_cli_config_gen#/$defs/bgp_additional_paths" keys: install: type: bool + description: Install BGP backup path. install_ecmp_primary: type: bool - receive: - type: bool - send: - type: dict - keys: - any: - type: bool - backup: - type: bool - ecmp: - type: bool - ecmp_limit: - type: int - description: Amount of ECMP paths to send. - convert_types: - - str - min: 2 - max: 64 - limit: - type: int - description: Amount of paths to send. - convert_types: - - str - min: 2 - max: 64 + description: Allow additional path with ECMP primary path. redistribute_internal: type: bool description: Allow redistribution of iBGP routes into an Interior Gateway Protocol (IGP). EOS default is true. @@ -3743,6 +3715,9 @@ keys: required: true originate: type: bool + additional_paths: + type: dict + $ref: "eos_cli_config_gen#/$defs/bgp_additional_paths" networks: type: list primary_key: prefix @@ -3819,36 +3794,14 @@ keys: - "permit" additional_paths: type: dict + $ref: "eos_cli_config_gen#/$defs/bgp_additional_paths" keys: install: type: bool + description: Install BGP backup path. install_ecmp_primary: type: bool - receive: - type: bool - send: - type: dict - keys: - any: - type: bool - backup: - type: bool - ecmp: - type: bool - ecmp_limit: - type: int - description: Amount of ECMP paths to send. - convert_types: - - str - min: 2 - max: 64 - limit: - type: int - description: Amount of paths to send. - convert_types: - - str - min: 2 - max: 64 + description: Allow additional path with ECMP primary path. redistribute_internal: type: bool description: Allow redistribution of iBGP routes into an Interior Gateway Protocol (IGP). EOS default is true. @@ -3884,6 +3837,9 @@ keys: prefix_list_out: type: str description: Outbound prefix-list name. + additional_paths: + type: dict + $ref: "eos_cli_config_gen#/$defs/bgp_additional_paths" networks: type: list primary_key: prefix @@ -3978,6 +3934,11 @@ keys: route_map_out: type: str description: Outbound route-map name. + additional_paths: + type: dict + keys: + receive: + type: bool networks: type: list primary_key: prefix @@ -4070,6 +4031,11 @@ keys: route_map_out: type: str description: Outbound route-map name. + additional_paths: + type: dict + keys: + receive: + type: bool networks: type: list primary_key: prefix diff --git a/python-avd/pyavd/_eos_designs/structured_config/overlay/router_bgp.py b/python-avd/pyavd/_eos_designs/structured_config/overlay/router_bgp.py index e9df868c208..73dfc735135 100644 --- a/python-avd/pyavd/_eos_designs/structured_config/overlay/router_bgp.py +++ b/python-avd/pyavd/_eos_designs/structured_config/overlay/router_bgp.py @@ -378,7 +378,7 @@ def _address_family_path_selection(self: AvdStructuredConfigOverlay) -> dict | N "activate": True, }, ], - "bgp": {"additional_paths": {"receive": True, "send": {"any": True}}}, + "bgp": {"additional_paths": {"receive": True, "send": "any"}}, } if self._is_wan_server_with_peers: