diff --git a/ansible_collections/arista/avd/molecule/eos_cli_config_gen/documentation/devices/router-bgp-evpn-mpls.md b/ansible_collections/arista/avd/molecule/eos_cli_config_gen/documentation/devices/router-bgp-evpn-mpls.md index 2b5ecb195a9..4a787cdffd5 100644 --- a/ansible_collections/arista/avd/molecule/eos_cli_config_gen/documentation/devices/router-bgp-evpn-mpls.md +++ b/ansible_collections/arista/avd/molecule/eos_cli_config_gen/documentation/devices/router-bgp-evpn-mpls.md @@ -130,6 +130,7 @@ router bgp 65101 neighbor 192.168.255.2 peer group EVPN-OVERLAY-PEERS ! address-family evpn + bgp additional-paths send limit 10 neighbor default encapsulation mpls next-hop-self source-interface Loopback0 next-hop mpls resolution ribs tunnel-rib-colored system-colored-tunnel-rib tunnel-rib test-rib system-connected neighbor EVPN-OVERLAY-PEERS activate diff --git a/ansible_collections/arista/avd/molecule/eos_cli_config_gen/documentation/devices/router-bgp-evpn-vpn-import-pruning.md b/ansible_collections/arista/avd/molecule/eos_cli_config_gen/documentation/devices/router-bgp-evpn-vpn-import-pruning.md index c3669749c6a..c8d89179ac3 100644 --- a/ansible_collections/arista/avd/molecule/eos_cli_config_gen/documentation/devices/router-bgp-evpn-vpn-import-pruning.md +++ b/ansible_collections/arista/avd/molecule/eos_cli_config_gen/documentation/devices/router-bgp-evpn-vpn-import-pruning.md @@ -169,6 +169,7 @@ router bgp 65101 vlan 112 ! address-family evpn + bgp additional-paths send ecmp limit 20 host-flap detection window 10 threshold 1 domain identifier 65101:0 neighbor EVPN-OVERLAY-PEERS activate 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 fadfaa9dc18..77b1974ed9c 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 @@ -245,6 +245,8 @@ router bgp 65101 vlan 112 ! address-family evpn + bgp additional-paths receive + bgp additional-paths send any bgp next-hop-unchanged host-flap detection window 10 threshold 1 expiry timeout 3 seconds domain identifier 65101:0 @@ -269,6 +271,7 @@ router bgp 65101 neighbor default next-hop-self received-evpn-routes route-type ip-prefix inter-domain route import ethernet-segment ip mass-withdraw route export ethernet-segment ip mass-withdraw + route import overlay-index gateway ! address-family ipv4 no neighbor EVPN-OVERLAY-PEERS activate diff --git a/ansible_collections/arista/avd/molecule/eos_cli_config_gen/documentation/devices/router-bgp-v4-evpn.md b/ansible_collections/arista/avd/molecule/eos_cli_config_gen/documentation/devices/router-bgp-v4-evpn.md index 6d284259351..7af1e5330ce 100644 --- a/ansible_collections/arista/avd/molecule/eos_cli_config_gen/documentation/devices/router-bgp-v4-evpn.md +++ b/ansible_collections/arista/avd/molecule/eos_cli_config_gen/documentation/devices/router-bgp-v4-evpn.md @@ -244,6 +244,7 @@ router bgp 65101 vlan 112 ! address-family evpn + bgp additional-paths send backup neighbor EVPN-OVERLAY-PEERS activate no neighbor IPv4-UNDERLAY-PEERS activate no neighbor MLAG-IPv4-UNDERLAY-PEER activate diff --git a/ansible_collections/arista/avd/molecule/eos_cli_config_gen/intended/configs/router-bgp-evpn-mpls.cfg b/ansible_collections/arista/avd/molecule/eos_cli_config_gen/intended/configs/router-bgp-evpn-mpls.cfg index 84b80e4840e..65554088870 100644 --- a/ansible_collections/arista/avd/molecule/eos_cli_config_gen/intended/configs/router-bgp-evpn-mpls.cfg +++ b/ansible_collections/arista/avd/molecule/eos_cli_config_gen/intended/configs/router-bgp-evpn-mpls.cfg @@ -35,6 +35,7 @@ router bgp 65101 neighbor 192.168.255.2 peer group EVPN-OVERLAY-PEERS ! address-family evpn + bgp additional-paths send limit 10 neighbor default encapsulation mpls next-hop-self source-interface Loopback0 next-hop mpls resolution ribs tunnel-rib-colored system-colored-tunnel-rib tunnel-rib test-rib system-connected neighbor EVPN-OVERLAY-PEERS activate diff --git a/ansible_collections/arista/avd/molecule/eos_cli_config_gen/intended/configs/router-bgp-evpn-vpn-import-pruning.cfg b/ansible_collections/arista/avd/molecule/eos_cli_config_gen/intended/configs/router-bgp-evpn-vpn-import-pruning.cfg index e0c8559ffe8..58cb173c41c 100644 --- a/ansible_collections/arista/avd/molecule/eos_cli_config_gen/intended/configs/router-bgp-evpn-vpn-import-pruning.cfg +++ b/ansible_collections/arista/avd/molecule/eos_cli_config_gen/intended/configs/router-bgp-evpn-vpn-import-pruning.cfg @@ -57,6 +57,7 @@ router bgp 65101 vlan 112 ! address-family evpn + bgp additional-paths send ecmp limit 20 host-flap detection window 10 threshold 1 domain identifier 65101:0 neighbor EVPN-OVERLAY-PEERS activate 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 94d7aebf033..885ad4b6c36 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 @@ -95,6 +95,8 @@ router bgp 65101 vlan 112 ! address-family evpn + bgp additional-paths receive + bgp additional-paths send any bgp next-hop-unchanged host-flap detection window 10 threshold 1 expiry timeout 3 seconds domain identifier 65101:0 @@ -119,6 +121,7 @@ router bgp 65101 neighbor default next-hop-self received-evpn-routes route-type ip-prefix inter-domain route import ethernet-segment ip mass-withdraw route export ethernet-segment ip mass-withdraw + route import overlay-index gateway ! address-family ipv4 no neighbor EVPN-OVERLAY-PEERS activate diff --git a/ansible_collections/arista/avd/molecule/eos_cli_config_gen/intended/configs/router-bgp-v4-evpn.cfg b/ansible_collections/arista/avd/molecule/eos_cli_config_gen/intended/configs/router-bgp-v4-evpn.cfg index ab1ac634538..7f720fea5e3 100644 --- a/ansible_collections/arista/avd/molecule/eos_cli_config_gen/intended/configs/router-bgp-v4-evpn.cfg +++ b/ansible_collections/arista/avd/molecule/eos_cli_config_gen/intended/configs/router-bgp-v4-evpn.cfg @@ -80,6 +80,7 @@ router bgp 65101 vlan 112 ! address-family evpn + bgp additional-paths send backup neighbor EVPN-OVERLAY-PEERS activate no neighbor IPv4-UNDERLAY-PEERS activate no neighbor MLAG-IPv4-UNDERLAY-PEER activate 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 22bef5a9a24..af2d0d061e0 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,6 +37,9 @@ router_bgp: - ip_address: 192.168.255.2 peer_group: EVPN-OVERLAY-PEERS address_family_evpn: + bgp_additional_paths: + 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 fda88081ff4..be67b932dc5 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,6 +33,9 @@ router_bgp: peer_group: EVPN-OVERLAY-PEERS redistribute_routes: address_family_evpn: + bgp_additional_paths: + send: + ecmp_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 8bcfbd0aff8..f38bb9297b9 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 @@ -109,6 +109,11 @@ router_bgp: route: 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 address_family_ipv4: peer_groups: - name: EVPN-OVERLAY-PEERS 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 03a14b9dbb9..53135a90abb 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,6 +74,9 @@ router_bgp: - source_protocol: connected route_map: RM-CONN-2-BGP address_family_evpn: + bgp_additional_paths: + send: + backup: true peer_groups: - name: EVPN-OVERLAY-PEERS activate: true 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 39ef53ac9af..19999b0dab7 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 @@ -282,8 +282,17 @@ | [    route](## "router_bgp.address_family_evpn.route") | Dictionary | | | | | | [      import_match_failure_action](## "router_bgp.address_family_evpn.route.import_match_failure_action") | String | | | Valid Values:
- discard | | | [      import_ethernet_segment_ip_mass_withdraw](## "router_bgp.address_family_evpn.route.import_ethernet_segment_ip_mass_withdraw") | Boolean | | | | | + | [      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. | + | [      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. | + | [        backup](## "router_bgp.address_family_evpn.bgp_additional_paths.send.backup") | Boolean | | | | Best path and installed backup path. | + | [        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. | | [  address_family_rtc](## "router_bgp.address_family_rtc") | Dictionary | | | | | | [    peer_groups](## "router_bgp.address_family_rtc.peer_groups") | List, items: Dictionary | | | | | | [      - name](## "router_bgp.address_family_rtc.peer_groups.[].name") | String | Required, Unique | | | Peer-group name. | @@ -1247,8 +1256,33 @@ route: import_match_failure_action: import_ethernet_segment_ip_mass_withdraw: + import_overlay_index_gateway: export_ethernet_segment_ip_mass_withdraw: next_hop_unchanged: + + # BGP additional-paths commands. + bgp_additional_paths: + + # Receive multiple paths. + receive: + + # Send multiple paths. + send: + + # Any eligible path. + any: + + # Best path and installed backup path. + backup: + + # All paths in best path ECMP group. + ecmp: + + # Amount of ECMP paths to send. + ecmp_limit: + + # Amount of paths to send. + limit: address_family_rtc: peer_groups: diff --git a/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/eos_cli_config_gen.jsonschema.json b/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/eos_cli_config_gen.jsonschema.json index 92f6628df11..147d32192c5 100644 --- a/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/eos_cli_config_gen.jsonschema.json +++ b/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/eos_cli_config_gen.jsonschema.json @@ -18297,6 +18297,10 @@ "type": "boolean", "title": "Import Ethernet Segment IP Mass Withdraw" }, + "import_overlay_index_gateway": { + "type": "boolean", + "title": "Import Overlay Index Gateway" + }, "export_ethernet_segment_ip_mass_withdraw": { "type": "boolean", "title": "Export Ethernet Segment IP Mass Withdraw" @@ -18311,6 +18315,62 @@ "next_hop_unchanged": { "type": "boolean", "title": "Next Hop Unchanged" + }, + "bgp_additional_paths": { + "type": "object", + "description": "BGP additional-paths commands.", + "properties": { + "receive": { + "type": "boolean", + "description": "Receive multiple paths.", + "title": "Receive" + }, + "send": { + "type": "object", + "description": "Send multiple paths.", + "properties": { + "any": { + "type": "boolean", + "description": "Any eligible path.", + "title": "Any" + }, + "backup": { + "type": "boolean", + "description": "Best path and installed backup path.", + "title": "Backup" + }, + "ecmp": { + "type": "boolean", + "description": "All paths in best path ECMP group.", + "title": "ECMP" + }, + "ecmp_limit": { + "type": "integer", + "description": "Amount of ECMP paths to send.", + "minimum": 2, + "maximum": 64, + "title": "ECMP Limit" + }, + "limit": { + "type": "integer", + "description": "Amount of paths to send.", + "minimum": 2, + "maximum": 64, + "title": "Limit" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Send" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "BGP Additional Paths" } }, "additionalProperties": false, diff --git a/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/eos_cli_config_gen.schema.yml b/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/eos_cli_config_gen.schema.yml index 1d829ba2ed8..02473e3313b 100644 --- a/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/eos_cli_config_gen.schema.yml +++ b/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/eos_cli_config_gen.schema.yml @@ -10889,10 +10889,46 @@ keys: - discard import_ethernet_segment_ip_mass_withdraw: type: bool + import_overlay_index_gateway: + type: bool export_ethernet_segment_ip_mass_withdraw: type: bool next_hop_unchanged: type: bool + bgp_additional_paths: + type: dict + description: BGP additional-paths commands. + keys: + receive: + type: bool + description: Receive multiple paths. + send: + type: dict + description: Send multiple paths. + keys: + any: + type: bool + description: Any eligible path. + backup: + type: bool + description: Best path and installed backup path. + ecmp: + type: bool + description: All paths in best path ECMP group. + 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 address_family_rtc: type: dict keys: diff --git a/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/router_bgp.schema.yml b/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/router_bgp.schema.yml index e66c1cd9d74..461bf5c9a0b 100644 --- a/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/router_bgp.schema.yml +++ b/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/router_bgp.schema.yml @@ -1034,10 +1034,46 @@ keys: - "discard" import_ethernet_segment_ip_mass_withdraw: type: bool + import_overlay_index_gateway: + type: bool export_ethernet_segment_ip_mass_withdraw: type: bool next_hop_unchanged: type: bool + bgp_additional_paths: + type: dict + description: BGP additional-paths commands. + keys: + receive: + type: bool + description: Receive multiple paths. + send: + type: dict + description: Send multiple paths. + keys: + any: + type: bool + description: Any eligible path. + backup: + type: bool + description: Best path and installed backup path. + ecmp: + type: bool + description: All paths in best path ECMP group. + 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 address_family_rtc: type: dict keys: diff --git a/ansible_collections/arista/avd/roles/eos_cli_config_gen/templates/eos/router-bgp.j2 b/ansible_collections/arista/avd/roles/eos_cli_config_gen/templates/eos/router-bgp.j2 index 6d1065aba8f..93c41854c87 100644 --- a/ansible_collections/arista/avd/roles/eos_cli_config_gen/templates/eos/router-bgp.j2 +++ b/ansible_collections/arista/avd/roles/eos_cli_config_gen/templates/eos/router-bgp.j2 @@ -545,6 +545,20 @@ 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) %} + bgp additional-paths receive +{% endif %} +{% if 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 limit {{ router_bgp.address_family_evpn.bgp_additional_paths.send.limit }} +{% endif %} {% if router_bgp.address_family_evpn.next_hop_unchanged is arista.avd.defined(true) %} bgp next-hop-unchanged {% endif %} @@ -651,6 +665,9 @@ router bgp {{ router_bgp.as }} {% if router_bgp.address_family_evpn.route.export_ethernet_segment_ip_mass_withdraw is arista.avd.defined(true) %} route export ethernet-segment ip mass-withdraw {% endif %} +{% if router_bgp.address_family_evpn.route.import_overlay_index_gateway is arista.avd.defined(true) %} + route import overlay-index gateway +{% endif %} {% endif %} {# address family flow-spec ipv4 activation #} {% if router_bgp.address_family_flow_spec_ipv4 is arista.avd.defined %} diff --git a/ansible_collections/arista/avd/roles/eos_designs/schemas/eos_designs.jsonschema.json b/ansible_collections/arista/avd/roles/eos_designs/schemas/eos_designs.jsonschema.json index 2217dfa1d89..b127bc82752 100644 --- a/ansible_collections/arista/avd/roles/eos_designs/schemas/eos_designs.jsonschema.json +++ b/ansible_collections/arista/avd/roles/eos_designs/schemas/eos_designs.jsonschema.json @@ -34839,6 +34839,10 @@ "type": "boolean", "title": "Import Ethernet Segment IP Mass Withdraw" }, + "import_overlay_index_gateway": { + "type": "boolean", + "title": "Import Overlay Index Gateway" + }, "export_ethernet_segment_ip_mass_withdraw": { "type": "boolean", "title": "Export Ethernet Segment IP Mass Withdraw" @@ -34853,6 +34857,62 @@ "next_hop_unchanged": { "type": "boolean", "title": "Next Hop Unchanged" + }, + "bgp_additional_paths": { + "type": "object", + "description": "BGP additional-paths commands.", + "properties": { + "receive": { + "type": "boolean", + "description": "Receive multiple paths.", + "title": "Receive" + }, + "send": { + "type": "object", + "description": "Send multiple paths.", + "properties": { + "any": { + "type": "boolean", + "description": "Any eligible path.", + "title": "Any" + }, + "backup": { + "type": "boolean", + "description": "Best path and installed backup path.", + "title": "Backup" + }, + "ecmp": { + "type": "boolean", + "description": "All paths in best path ECMP group.", + "title": "ECMP" + }, + "ecmp_limit": { + "type": "integer", + "description": "Amount of ECMP paths to send.", + "minimum": 2, + "maximum": 64, + "title": "ECMP Limit" + }, + "limit": { + "type": "integer", + "description": "Amount of paths to send.", + "minimum": 2, + "maximum": 64, + "title": "Limit" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Send" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "BGP Additional Paths" } }, "additionalProperties": false,