From 29ff74c12aeb73692426848ff2559003cff11b23 Mon Sep 17 00:00:00 2001 From: laxmikant Date: Mon, 11 Mar 2024 16:18:36 +0530 Subject: [PATCH 01/55] Added defs to schema --- .../inventory/host_vars/router-bgp-evpn.yml | 19 +- .../host_vars/router-bgp-path-selection.yaml | 36 ++-- .../host_vars/router-bgp-v4-evpn.yml | 3 +- .../router-bgp-vrf-address-families.yml | 17 +- .../j2templates/eos/router-bgp.j2 | 104 ++++------ .../defs_additional_paths.schema.yml | 30 +++ .../schema_fragments/router_bgp.schema.yml | 184 +----------------- 7 files changed, 109 insertions(+), 284 deletions(-) create mode 100644 python-avd/pyavd/_eos_cli_config_gen/schema/schema_fragments/defs_additional_paths.schema.yml 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 b084a4fdb90..e43c0e57591 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 @@ -105,34 +105,29 @@ 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 + ecmp_limit: 42 - name: ADDITIONAL-PATH-PG-5 activate: true additional_paths: - send: - limit: 42 + send: limit + limit: 42 # Checking the `no neighbor additional-paths send any is rendered - name: ADDITIONAL-PATH-PG-6 activate: true additional_paths: - send: - any: false evpn_hostflap_detection: enabled: true window: 10 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..c38533e447a 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 @@ -36,57 +36,53 @@ router_bgp: # ecmp: true ecmp_limit: 42 # limit: 42 + send: ecmp + ecmp_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: limit + ecmp_limit: 42 - name: PATH-SELECTION-PG-5 activate: true additional_paths: - send: - limit: 42 + send: limit + 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 + ecmp_limit: 42 - ip_address: 172.31.255.4 activate: true additional_paths: - send: - limit: 42 + send: limit + 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 bfa0b182821..7e7c8cab87f 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 @@ -173,8 +173,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 f8866197d5f..f85588ad62a 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 @@ -50,8 +50,8 @@ router_bgp: additional_paths: install_ecmp_primary: true receive: true - send: - ecmp_limit: 4 + send: ecmp + ecmp_limit: 4 redistribute_internal: false neighbors: - ip_address: 1.2.3.4 @@ -80,8 +80,7 @@ router_bgp: additional_paths: install: true receive: true - send: - any: true + send: any redistribute_internal: false neighbors: - ip_address: aa::1 @@ -176,20 +175,18 @@ router_bgp: address_family_ipv4: bgp: additional_paths: - send: - backup: true + send: backup address_family_ipv6: bgp: additional_paths: - send: - limit: 3 + send: limit + limit: 3 - name: VRF03 address_family_ipv4: bgp: additional_paths: - send: - ecmp: true + send: ecmp redistribute_routes: - source_protocol: dynamic rcf: VRF_RCF_DYNAMIC() 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 0f953bbcb81..14ae7c8505e 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 @@ -689,18 +689,14 @@ 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.ecmp_limit is arista.avd.defined %} + neighbor {{ peer_group.name }} additional-paths send ecmp limit {{ peer_group.additional_paths.ecmp_limit }} +{% elif peer_group.additional_paths.limit is arista.avd.defined %} + neighbor {{ peer_group.name }} additional-paths send limit {{ peer_group.additional_paths.limit }} +{% 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 @@ -1263,16 +1259,12 @@ 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 %} + bgp additional-paths send ecmp limit {{ router_bgp.address_family_path_selection.bgp.additional_paths.ecmp_limit }} +{% elif router_bgp.address_family_path_selection.bgp.additional_paths.limit is arista.avd.defined %} + bgp additional-paths send limit {{ router_bgp.address_family_path_selection.bgp.additional_paths.limit }} +{% elif router_bgp.address_family_path_selection.bgp.additional_paths.send is arista.avd.defined %} + bgp additional-paths send {{ router_bgp.address_family_path_selection.bgp.additional_paths.send }} {% 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) %} @@ -1283,16 +1275,12 @@ 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.ecmp_limit is arista.avd.defined %} + neighbor {{ peer_group.name }} additional-paths send ecmp limit {{ peer_group.additional_paths.ecmp_limit }} +{% elif peer_group.additional_paths.limit is arista.avd.defined %} + neighbor {{ peer_group.name }} additional-paths send limit {{ peer_group.additional_paths.limit }} +{% elif peer_group.additional_paths.send is arista.avd.defined %} + neighbor {{ peer_group.name }} additional-paths send {{ peer_group.additional_paths.send }} {% endif %} {% endfor %} {% for neighbor in router_bgp.address_family_path_selection.neighbors | arista.avd.natural_sort('ip_address') %} @@ -1304,16 +1292,12 @@ 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.ecmp_limit is arista.avd.defined %} + neighbor {{ neighbor.ip_address }} additional-paths send ecmp limit {{ neighbor.additional_paths.ecmp_limit }} +{% elif neighbor.additional_paths.limit is arista.avd.defined %} + neighbor {{ neighbor.ip_address }} additional-paths send limit {{ neighbor.additional_paths.limit }} +{% elif neighbor.additional_paths.send is arista.avd.defined %} + neighbor {{ neighbor.ip_address }} additional-paths send {{ neighbor.additional_paths.send }} {% endif %} {% endfor %} {% endif %} @@ -1803,16 +1787,14 @@ 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.ecmp_limit is arista.avd.defined %} + bgp additional-paths send ecmp limit {{ vrf.address_family_ipv4.bgp.additional_paths.ecmp_limit }} +{% elif vrf.address_family_ipv4.bgp.additional_paths.limit is arista.avd.defined %} + bgp additional-paths send limit {{ vrf.address_family_ipv4.bgp.additional_paths.limit }} +{% 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) %} @@ -1953,16 +1935,14 @@ 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.ecmp_limit is arista.avd.defined %} + bgp additional-paths send ecmp limit {{ vrf.address_family_ipv6.bgp.additional_paths.ecmp_limit }} +{% elif vrf.address_family_ipv6.bgp.additional_paths.limit is arista.avd.defined %} + bgp additional-paths send limit {{ vrf.address_family_ipv6.bgp.additional_paths.limit }} +{% 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) %} diff --git a/python-avd/pyavd/_eos_cli_config_gen/schema/schema_fragments/defs_additional_paths.schema.yml b/python-avd/pyavd/_eos_cli_config_gen/schema/schema_fragments/defs_additional_paths.schema.yml new file mode 100644 index 00000000000..90235c56ee8 --- /dev/null +++ b/python-avd/pyavd/_eos_cli_config_gen/schema/schema_fragments/defs_additional_paths.schema.yml @@ -0,0 +1,30 @@ +type: dict +$defs: + additional_paths: + type: dict + keys: + receive: + type: bool + send: + type: str + description: |- + 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 + valid_values: [ 'any', 'backup', 'ecmp', 'limit' ] + ecmp_limit: + type: int + description: Amount of ECMP paths to send. If this key-value pair is not set, it will send all paths in best ECMP group. + convert_types: + - str + min: 2 + max: 64 + limit: + type: int + description: Number of paths to send through bgp updates(The value of 'send' key must be 'limit'). + convert_types: + - str + min: 2 + max: 64 \ No newline at end of file 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 1c40d5aef55..ee204dfa44a 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 @@ -1136,32 +1136,7 @@ keys: - "mpls" 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/additional_paths" evpn_hostflap_detection: type: dict keys: @@ -1993,32 +1968,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/additional_paths" neighbors: type: list primary_key: ip_address @@ -2031,36 +1981,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/additional_paths" peer_groups: type: list primary_key: name @@ -2074,36 +1995,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/additional_paths" address_family_vpn_ipv4: type: dict keys: @@ -2769,39 +2661,7 @@ keys: - "permit" 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 - redistribute_internal: - type: bool - description: Allow redistribution of iBGP routes into an Interior Gateway Protocol (IGP). EOS default is true. + $ref: "eos_cli_config_gen#/$defs/additional_paths" neighbors: type: list primary_key: ip_address @@ -2921,39 +2781,7 @@ keys: - "permit" 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 - redistribute_internal: - type: bool - description: Allow redistribution of iBGP routes into an Interior Gateway Protocol (IGP). EOS default is true. + $ref: "eos_cli_config_gen#/$defs/additional_paths" neighbors: type: list primary_key: ip_address From f9932e24ff4999f39743498ac28375a1637e0aa1 Mon Sep 17 00:00:00 2001 From: Laxmikant Chintakindi Date: Mon, 26 Aug 2024 23:43:16 +0530 Subject: [PATCH 02/55] Adding changes. --- .../documentation/devices/router-bgp-evpn.md | 1 - .../intended/configs/router-bgp-evpn.cfg | 1 - .../inventory/host_vars/router-bgp-evpn.yml | 6 +- .../host_vars/router-bgp-path-selection.yaml | 14 +- .../router-bgp-vrf-address-families.yml | 6 +- .../docs/tables/router-bgp.md | 176 +++++++------- .../j2templates/eos/router-bgp.j2 | 60 +++-- .../schema/eos_cli_config_gen.schema.yml | 220 ++++-------------- .../defs_additional_paths.schema.yml | 61 ++--- .../schema_fragments/router_bgp.schema.yml | 6 + 10 files changed, 216 insertions(+), 335 deletions(-) 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 38325299009..4733fb80b27 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 @@ -269,7 +269,6 @@ 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 neighbor EVPN-OVERLAY-PEERS default-route neighbor EVPN-OVERLAY-PEERS activate neighbor EVPN-OVERLAY-PEERS domain remote 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 12712f7c156..2377904e00c 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 @@ -110,7 +110,6 @@ 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 neighbor EVPN-OVERLAY-PEERS default-route neighbor EVPN-OVERLAY-PEERS activate neighbor EVPN-OVERLAY-PEERS domain remote 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 e43c0e57591..026d202b4e3 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 @@ -117,13 +117,11 @@ router_bgp: - name: ADDITIONAL-PATH-PG-4 activate: true additional_paths: - send: ecmp - ecmp_limit: 42 + send_ecmp_limit: 42 - name: ADDITIONAL-PATH-PG-5 activate: true additional_paths: - send: limit - limit: 42 + send_limit: 42 # Checking the `no neighbor additional-paths send any is rendered - name: ADDITIONAL-PATH-PG-6 activate: true 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 c38533e447a..3df96001357 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 @@ -37,7 +37,7 @@ router_bgp: ecmp_limit: 42 # limit: 42 send: ecmp - ecmp_limit: 42 + send_ecmp_limit: 42 peer_groups: - name: PATH-SELECTION-PG-1 activate: true @@ -55,13 +55,11 @@ router_bgp: - name: PATH-SELECTION-PG-4 activate: true additional_paths: - send: limit - ecmp_limit: 42 + send_ecmp_limit: 42 - name: PATH-SELECTION-PG-5 activate: true additional_paths: - send: limit - limit: 42 + send_limit: 42 neighbors: - ip_address: 172.31.255.0 activate: true @@ -79,10 +77,8 @@ router_bgp: - ip_address: 172.31.255.3 activate: true additional_paths: - send: ecmp - ecmp_limit: 42 + send_ecmp_limit: 42 - ip_address: 172.31.255.4 activate: true additional_paths: - send: limit - limit: 42 + send_limit: 42 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 f85588ad62a..1b149fc3bf0 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 @@ -50,8 +50,7 @@ router_bgp: additional_paths: install_ecmp_primary: true receive: true - send: ecmp - ecmp_limit: 4 + send_ecmp_limit: 4 redistribute_internal: false neighbors: - ip_address: 1.2.3.4 @@ -179,8 +178,7 @@ router_bgp: address_family_ipv6: bgp: additional_paths: - send: limit - limit: 3 + send_limit: 3 - name: VRF03 address_family_ipv4: 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 d0bc0b68596..d2b4bf37a86 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 @@ -306,13 +306,12 @@ | [        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 | | | [        additional_paths](## "router_bgp.address_family_evpn.peer_groups.[].additional_paths") | Dictionary | | | | | + | [          install](## "router_bgp.address_family_evpn.peer_groups.[].additional_paths.install") | Boolean | | | | | + | [          install_ecmp_primary](## "router_bgp.address_family_evpn.peer_groups.[].additional_paths.install_ecmp_primary") | Boolean | | | | | | [          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. | + | [          send](## "router_bgp.address_family_evpn.peer_groups.[].additional_paths.send") | String | | | Valid Values:
- any
- backup
- 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 | + | [          send_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. If this key-value pair is not set, it will send all paths in best ECMP group. | + | [          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(The value of 'send' key must be 'limit'). | | [    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. | @@ -525,13 +524,12 @@ | [  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 | | | | | + | [        install](## "router_bgp.address_family_path_selection.bgp.additional_paths.install") | Boolean | | | | | + | [        install_ecmp_primary](## "router_bgp.address_family_path_selection.bgp.additional_paths.install_ecmp_primary") | Boolean | | | | | | [        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. | + | [        send](## "router_bgp.address_family_path_selection.bgp.additional_paths.send") | String | | | Valid Values:
- any
- backup
- 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 | + | [        send_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. If this key-value pair is not set, it will send all paths in best ECMP group. | + | [        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(The value of 'send' key must be 'limit'). | | [    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 | | | | | @@ -539,12 +537,9 @@ | [          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. | + | [          send](## "router_bgp.address_family_path_selection.neighbors.[].additional_paths.send") | String | | | Valid Values:
- any
- backup
- 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 | + | [          send_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. If this key-value pair is not set, it will send all paths in best ECMP group. | + | [          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(The value of 'send' key must be 'limit'). | | [    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 | | | | | @@ -552,12 +547,9 @@ | [          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. | + | [          send](## "router_bgp.address_family_path_selection.peer_groups.[].additional_paths.send") | String | | | Valid Values:
- any
- backup
- 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 | + | [          send_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. If this key-value pair is not set, it will send all paths in best ECMP group. | + | [          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(The value of 'send' key must be 'limit'). | | [  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 | | | | | @@ -736,12 +728,9 @@ | [            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. | + | [            send](## "router_bgp.vrfs.[].address_family_ipv4.bgp.additional_paths.send") | String | | | Valid Values:
- any
- backup
- 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 | + | [            send_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. If this key-value pair is not set, it will send all paths in best ECMP group. | + | [            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(The value of 'send' key must be 'limit'). | | [          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 | | | | @@ -774,12 +763,9 @@ | [            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. | + | [            send](## "router_bgp.vrfs.[].address_family_ipv6.bgp.additional_paths.send") | String | | | Valid Values:
- any
- backup
- 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 | + | [            send_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. If this key-value pair is not set, it will send all paths in best ECMP group. | + | [            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(The value of 'send' key must be 'limit'). | | [          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 | | | | @@ -1451,17 +1437,22 @@ domain_remote: encapsulation: additional_paths: + install: + install_ecmp_primary: 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 + send: - # Amount of paths to send. - limit: + # Amount of ECMP paths to send. 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(The value of 'send' key must be 'limit'). + send_limit: evpn_hostflap_detection: enabled: @@ -1857,17 +1848,22 @@ address_family_path_selection: bgp: additional_paths: + install: + install_ecmp_primary: 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 + send: + + # Amount of ECMP paths to send. If this key-value pair is not set, it will send all paths in best ECMP group. + send_ecmp_limit: - # Amount of paths to send. - limit: + # Number of paths to send through bgp updates(The value of 'send' key must be 'limit'). + send_limit: neighbors: - ip_address: activate: @@ -1875,16 +1871,19 @@ install: install_ecmp_primary: 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 + send: - # Amount of paths to send. - limit: + # Amount of ECMP paths to send. 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(The value of 'send' key must be 'limit'). + send_limit: peer_groups: # Peer-group name. @@ -1894,16 +1893,19 @@ install: install_ecmp_primary: 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 + send: + + # Amount of ECMP paths to send. If this key-value pair is not set, it will send all paths in best ECMP group. + send_ecmp_limit: - # Amount of paths to send. - limit: + # Number of paths to send through bgp updates(The value of 'send' key must be 'limit'). + send_limit: address_family_vpn_ipv4: domain_identifier: peer_groups: @@ -2262,16 +2264,19 @@ install: install_ecmp_primary: 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 + send: - # Amount of paths to send. - limit: + # Amount of ECMP paths to send. 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(The value of 'send' key must be 'limit'). + send_limit: # Allow redistribution of iBGP routes into an Interior Gateway Protocol (IGP). EOS default is true. redistribute_internal: @@ -2330,16 +2335,19 @@ install: install_ecmp_primary: 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 + send: + + # Amount of ECMP paths to send. If this key-value pair is not set, it will send all paths in best ECMP group. + send_ecmp_limit: - # Amount of paths to send. - limit: + # Number of paths to send through bgp updates(The value of 'send' key must be 'limit'). + send_limit: # Allow redistribution of iBGP routes into an Interior Gateway Protocol (IGP). EOS default is true. redistribute_internal: 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 14ae7c8505e..320f9bae8a7 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 @@ -689,14 +689,12 @@ 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 is arista.avd.defined %} -{% if peer_group.additional_paths.ecmp_limit is arista.avd.defined %} - neighbor {{ peer_group.name }} additional-paths send ecmp limit {{ peer_group.additional_paths.ecmp_limit }} -{% elif peer_group.additional_paths.limit is arista.avd.defined %} - neighbor {{ peer_group.name }} additional-paths send limit {{ peer_group.additional_paths.limit }} -{% else %} +{% if 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 }} +{% elif peer_group.additional_paths.send is arista.avd.defined %} 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 @@ -1259,10 +1257,10 @@ 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 is arista.avd.defined %} - bgp additional-paths send ecmp limit {{ router_bgp.address_family_path_selection.bgp.additional_paths.ecmp_limit }} -{% elif router_bgp.address_family_path_selection.bgp.additional_paths.limit is arista.avd.defined %} - bgp additional-paths send limit {{ router_bgp.address_family_path_selection.bgp.additional_paths.limit }} +{% if 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 }} {% elif router_bgp.address_family_path_selection.bgp.additional_paths.send is arista.avd.defined %} bgp additional-paths send {{ router_bgp.address_family_path_selection.bgp.additional_paths.send }} {% endif %} @@ -1275,10 +1273,10 @@ 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.ecmp_limit is arista.avd.defined %} - neighbor {{ peer_group.name }} additional-paths send ecmp limit {{ peer_group.additional_paths.ecmp_limit }} -{% elif peer_group.additional_paths.limit is arista.avd.defined %} - neighbor {{ peer_group.name }} additional-paths send limit {{ peer_group.additional_paths.limit }} +{% if 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 }} {% elif peer_group.additional_paths.send is arista.avd.defined %} neighbor {{ peer_group.name }} additional-paths send {{ peer_group.additional_paths.send }} {% endif %} @@ -1292,10 +1290,10 @@ 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.ecmp_limit is arista.avd.defined %} - neighbor {{ neighbor.ip_address }} additional-paths send ecmp limit {{ neighbor.additional_paths.ecmp_limit }} -{% elif neighbor.additional_paths.limit is arista.avd.defined %} - neighbor {{ neighbor.ip_address }} additional-paths send limit {{ neighbor.additional_paths.limit }} +{% if 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 }} {% elif neighbor.additional_paths.send is arista.avd.defined %} neighbor {{ neighbor.ip_address }} additional-paths send {{ neighbor.additional_paths.send }} {% endif %} @@ -1787,14 +1785,12 @@ 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 is arista.avd.defined %} -{% if vrf.address_family_ipv4.bgp.additional_paths.ecmp_limit is arista.avd.defined %} - bgp additional-paths send ecmp limit {{ vrf.address_family_ipv4.bgp.additional_paths.ecmp_limit }} -{% elif vrf.address_family_ipv4.bgp.additional_paths.limit is arista.avd.defined %} - bgp additional-paths send limit {{ vrf.address_family_ipv4.bgp.additional_paths.limit }} -{% else %} +{% if 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 }} +{% elif vrf.address_family_ipv4.bgp.additional_paths.send is arista.avd.defined %} 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) %} @@ -1935,14 +1931,12 @@ 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 is arista.avd.defined %} -{% if vrf.address_family_ipv6.bgp.additional_paths.ecmp_limit is arista.avd.defined %} - bgp additional-paths send ecmp limit {{ vrf.address_family_ipv6.bgp.additional_paths.ecmp_limit }} -{% elif vrf.address_family_ipv6.bgp.additional_paths.limit is arista.avd.defined %} - bgp additional-paths send limit {{ vrf.address_family_ipv6.bgp.additional_paths.limit }} -{% else %} +{% if 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 }} +{% elif vrf.address_family_ipv6.bgp.additional_paths.send is arista.avd.defined %} 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) %} 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 e7571fdc2b6..7c636087c7c 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 @@ -12891,32 +12891,7 @@ keys: - mpls 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/additional_paths evpn_hostflap_detection: type: dict keys: @@ -13758,32 +13733,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/additional_paths neighbors: type: list primary_key: ip_address @@ -13796,36 +13746,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/additional_paths peer_groups: type: list primary_key: name @@ -13839,36 +13760,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/additional_paths address_family_vpn_ipv4: type: dict keys: @@ -14572,36 +14464,7 @@ keys: - permit 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/additional_paths redistribute_internal: type: bool description: Allow redistribution of iBGP routes into an Interior @@ -14732,36 +14595,7 @@ keys: - permit 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/additional_paths redistribute_internal: type: bool description: Allow redistribution of iBGP routes into an Interior @@ -19250,6 +19084,48 @@ keys: type: dict $ref: eos_cli_config_gen#/keys/vxlan_interface/keys/vxlan1 $defs: + additional_paths: + type: dict + keys: + install: + type: bool + install_ecmp_primary: + type: bool + receive: + type: bool + send: + type: str + description: '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' + valid_values: + - any + - backup + - ecmp + - limit + send_ecmp_limit: + type: int + description: Amount of ECMP paths to send. 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(The value of 'send' + key must be 'limit'). + convert_types: + - str + min: 2 + max: 64 application_traffic_recognition_application: type: dict keys: diff --git a/python-avd/pyavd/_eos_cli_config_gen/schema/schema_fragments/defs_additional_paths.schema.yml b/python-avd/pyavd/_eos_cli_config_gen/schema/schema_fragments/defs_additional_paths.schema.yml index 90235c56ee8..df92442cd3c 100644 --- a/python-avd/pyavd/_eos_cli_config_gen/schema/schema_fragments/defs_additional_paths.schema.yml +++ b/python-avd/pyavd/_eos_cli_config_gen/schema/schema_fragments/defs_additional_paths.schema.yml @@ -1,30 +1,37 @@ +# Copyright (c) 2024 Arista Networks, Inc. +# Use of this source code is governed by the Apache License 2.0 +# that can be found in the LICENSE file. type: dict $defs: additional_paths: - type: dict - keys: - receive: - type: bool - send: - type: str - description: |- - 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 - valid_values: [ 'any', 'backup', 'ecmp', 'limit' ] - ecmp_limit: - type: int - description: Amount of ECMP paths to send. If this key-value pair is not set, it will send all paths in best ECMP group. - convert_types: - - str - min: 2 - max: 64 - limit: - type: int - description: Number of paths to send through bgp updates(The value of 'send' key must be 'limit'). - convert_types: - - str - min: 2 - max: 64 \ No newline at end of file + type: dict + keys: + install: + type: bool + install_ecmp_primary: + type: bool + receive: + type: bool + send: + type: str + description: |- + 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 + valid_values: [ 'any', 'backup', 'ecmp', 'limit' ] + send_ecmp_limit: + type: int + description: Amount of ECMP paths to send. 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(The value of 'send' key must be 'limit'). + convert_types: + - str + min: 2 + max: 64 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 ee204dfa44a..fc11701d1f1 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 @@ -2662,6 +2662,9 @@ keys: additional_paths: type: dict $ref: "eos_cli_config_gen#/$defs/additional_paths" + redistribute_internal: + type: bool + description: Allow redistribution of iBGP routes into an Interior Gateway Protocol (IGP). EOS default is true. neighbors: type: list primary_key: ip_address @@ -2782,6 +2785,9 @@ keys: additional_paths: type: dict $ref: "eos_cli_config_gen#/$defs/additional_paths" + redistribute_internal: + type: bool + description: Allow redistribution of iBGP routes into an Interior Gateway Protocol (IGP). EOS default is true. neighbors: type: list primary_key: ip_address From 804731dd652b078ea3144e6ff7fad9797b83dae4 Mon Sep 17 00:00:00 2001 From: Laxmikant Chintakindi Date: Tue, 27 Aug 2024 10:15:41 +0530 Subject: [PATCH 03/55] Add changes from eos_designs. --- .../cv-pathfinder-custom-control-plane-policy-edge-1.yml | 3 +-- .../cv-pathfinder-custom-control-plane-policy-edge-2.yml | 3 +-- .../cv-pathfinder-custom-control-plane-policy-edge-3.yml | 3 +-- .../cv-pathfinder-custom-control-plane-policy-pathfinder-1.yml | 3 +-- .../cv-pathfinder-edge-custom-default-policy.yml | 3 +-- .../cv-pathfinder-edge-no-default-policy.yml | 3 +-- .../intended/structured_configs/cv-pathfinder-edge.yml | 3 +-- .../intended/structured_configs/cv-pathfinder-edge1.yml | 3 +-- .../intended/structured_configs/cv-pathfinder-edge2A.yml | 3 +-- .../intended/structured_configs/cv-pathfinder-edge2B.yml | 3 +-- .../intended/structured_configs/cv-pathfinder-edge3A.yml | 3 +-- .../intended/structured_configs/cv-pathfinder-edge3B.yml | 3 +-- .../intended/structured_configs/cv-pathfinder-pathfinder.yml | 3 +-- .../intended/structured_configs/cv-pathfinder-pathfinder1.yml | 3 +-- .../intended/structured_configs/cv-pathfinder-pathfinder2.yml | 3 +-- .../intended/structured_configs/cv-pathfinder-transit1A.yml | 3 +-- .../intended/structured_configs/cv-pathfinder-transit1B.yml | 3 +-- .../legacy-autovpn-edge-no-default-policy.yml | 3 +-- .../intended/structured_configs/legacy-autovpn-edge.yml | 3 +-- .../intended/structured_configs/legacy-autovpn-rr1.yml | 3 +-- .../intended/structured_configs/legacy-autovpn-rr2.yml | 3 +-- .../intended/structured_configs/uplink_lan_wan_router1.yml | 3 +-- .../intended/structured_configs/uplink_lan_wan_router2.yml | 3 +-- .../pyavd/_eos_designs/structured_config/overlay/router_bgp.py | 2 +- 24 files changed, 24 insertions(+), 47 deletions(-) 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 860426dc7cd..06862eddca9 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 @@ -62,8 +62,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 91c1addc7b4..fc91a2b2f3b 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 @@ -62,8 +62,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 7a25e88e982..143587560ad 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 @@ -62,8 +62,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 d97ea6c8cc5..edebf4006a6 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 @@ -97,8 +97,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 44e60d97798..949fb155623 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 @@ -55,8 +55,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 5276400461c..f4ff6658cff 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 @@ -55,8 +55,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 b9dfd71a3df..ec7ab64c5f2 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 @@ -155,8 +155,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 34e93534662..9a32201705e 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 @@ -153,8 +153,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 568ab33ebbf..5276d480982 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 @@ -178,8 +178,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 7c33a128473..0033ae60d9f 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 @@ -178,8 +178,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 9ea401b5caf..6d18ec3a5da 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 @@ -69,8 +69,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 c5c100c2124..9675c0fca13 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 @@ -69,8 +69,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 a8091585961..cfda8cfb0ce 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 @@ -74,8 +74,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 b92a3512938..c0c1e33a715 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 @@ -97,8 +97,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 ee12d6eaf92..6c0f5629976 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 @@ -97,8 +97,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 cb8f9afdb03..dbc77b482da 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 @@ -179,8 +179,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 1e32b5b0c93..41cd7d87c44 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 @@ -179,8 +179,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 33db2865401..4dabbac3b83 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 @@ -44,8 +44,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 9c334bd2449..ca749eb1e14 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 @@ -44,8 +44,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 506ced5238f..1f1e7e932ca 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 @@ -69,8 +69,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 fd5ca92631b..a0c068aec50 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 @@ -69,8 +69,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 1c3fd35c200..51e265d8e95 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 @@ -54,8 +54,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 8a5a543bd2d..1653cf0de31 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 @@ -54,8 +54,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/python-avd/pyavd/_eos_designs/structured_config/overlay/router_bgp.py b/python-avd/pyavd/_eos_designs/structured_config/overlay/router_bgp.py index e503dbab65b..6fa63081808 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 @@ -361,7 +361,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: From a92846ba178141c0edbd3d1b69c5ec43584b0449 Mon Sep 17 00:00:00 2001 From: Laxmikant Chintakindi Date: Tue, 27 Aug 2024 10:22:29 +0530 Subject: [PATCH 04/55] Fix CI. --- .../inventory/host_vars/router-bgp-path-selection.yaml | 7 ------- .../intended/structured_configs/dc1-wan1.yml | 3 +-- .../intended/structured_configs/dc1-wan2.yml | 3 +-- 3 files changed, 2 insertions(+), 11 deletions(-) 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 3df96001357..26c55b90765 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,13 +29,6 @@ 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_ecmp_limit: 42 peer_groups: 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 63a94ef203a..5825c7b3970 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 @@ -101,8 +101,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 c76cb98eb1a..562646fdce2 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 @@ -101,8 +101,7 @@ router_bgp: bgp: additional_paths: receive: true - send: - any: true + send: any vrfs: - name: default rd: 10.255.2.2:1 From 8a2b40b446294449862f7184adcaeed754b82b5d Mon Sep 17 00:00:00 2001 From: Laxmikant Chintakindi Date: Mon, 2 Sep 2024 18:12:04 +0530 Subject: [PATCH 05/55] Address comments. --- .../documentation/devices/router-bgp-evpn.md | 2 +- .../devices/router-bgp-path-selection.md | 6 +- .../router-bgp-vrf-address-families.md | 4 +- .../intended/configs/router-bgp-evpn.cfg | 2 +- .../configs/router-bgp-path-selection.cfg | 6 +- .../router-bgp-vrf-address-families.cfg | 4 +- .../host_vars/router-bgp-evpn-mpls.yml | 4 +- .../router-bgp-evpn-vpn-import-pruning.yml | 4 +- .../inventory/host_vars/router-bgp-evpn.yml | 6 +- .../host_vars/router-bgp-path-selection.yaml | 7 + .../host_vars/router-bgp-v4-evpn.yml | 3 +- .../router-bgp-vrf-address-families.yml | 4 + .../docs/tables/router-bgp.md | 190 +++++++++++------- .../j2templates/eos/router-bgp.j2 | 118 +++++++---- .../schema/eos_cli_config_gen.schema.yml | 52 ++--- .../defs_additional_paths.schema.yml | 11 +- .../schema_fragments/router_bgp.schema.yml | 32 +-- 17 files changed, 255 insertions(+), 200 deletions(-) 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 4733fb80b27..64eb7fb9410 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 @@ -259,7 +259,7 @@ router bgp 65101 domain identifier 65101:0 neighbor ADDITIONAL-PATH-PG-1 activate neighbor ADDITIONAL-PATH-PG-1 additional-paths receive - neighbor ADDITIONAL-PATH-PG-1 additional-paths send any + neighbor ADDITIONAL-PATH-PG-1 additional-paths send any PL1 neighbor ADDITIONAL-PATH-PG-2 activate neighbor ADDITIONAL-PATH-PG-2 additional-paths send backup neighbor ADDITIONAL-PATH-PG-3 activate diff --git a/ansible_collections/arista/avd/molecule/eos_cli_config_gen/documentation/devices/router-bgp-path-selection.md b/ansible_collections/arista/avd/molecule/eos_cli_config_gen/documentation/devices/router-bgp-path-selection.md index e8243c0df02..44406b68e20 100644 --- a/ansible_collections/arista/avd/molecule/eos_cli_config_gen/documentation/devices/router-bgp-path-selection.md +++ b/ansible_collections/arista/avd/molecule/eos_cli_config_gen/documentation/devices/router-bgp-path-selection.md @@ -135,10 +135,10 @@ router bgp 65101 ! address-family path-selection bgp additional-paths receive - bgp additional-paths send ecmp limit 42 + bgp additional-paths send ecmp limit 42 PL1 neighbor PATH-SELECTION-PG-1 activate neighbor PATH-SELECTION-PG-1 additional-paths receive - neighbor PATH-SELECTION-PG-1 additional-paths send any + neighbor PATH-SELECTION-PG-1 additional-paths send any PL1 neighbor PATH-SELECTION-PG-2 activate neighbor PATH-SELECTION-PG-2 additional-paths send backup neighbor PATH-SELECTION-PG-3 activate @@ -149,7 +149,7 @@ router bgp 65101 neighbor PATH-SELECTION-PG-5 additional-paths send limit 42 neighbor 172.31.255.0 activate neighbor 172.31.255.0 additional-paths receive - neighbor 172.31.255.0 additional-paths send any + neighbor 172.31.255.0 additional-paths send any PL1 neighbor 172.31.255.1 activate neighbor 172.31.255.1 additional-paths send backup neighbor 172.31.255.2 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 c6c200828d4..50e63d44838 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 @@ -103,7 +103,7 @@ router bgp 65001 bgp missing-policy direction out action permit bgp additional-paths install ecmp-primary bgp additional-paths receive - bgp additional-paths send ecmp limit 4 + bgp additional-paths send ecmp limit 4 PL1 neighbor 1.2.3.4 activate neighbor 1.2.3.4 route-map FOO in neighbor 1.2.3.4 route-map BAR out @@ -171,5 +171,5 @@ router bgp 65001 redistribute dynamic rcf VRF_RCF_DYNAMIC() ! address-family ipv4 - bgp additional-paths send ecmp + bgp additional-paths send ecmp PL1 ``` 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 2377904e00c..84b4b87b075 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 @@ -100,7 +100,7 @@ router bgp 65101 domain identifier 65101:0 neighbor ADDITIONAL-PATH-PG-1 activate neighbor ADDITIONAL-PATH-PG-1 additional-paths receive - neighbor ADDITIONAL-PATH-PG-1 additional-paths send any + neighbor ADDITIONAL-PATH-PG-1 additional-paths send any PL1 neighbor ADDITIONAL-PATH-PG-2 activate neighbor ADDITIONAL-PATH-PG-2 additional-paths send backup neighbor ADDITIONAL-PATH-PG-3 activate diff --git a/ansible_collections/arista/avd/molecule/eos_cli_config_gen/intended/configs/router-bgp-path-selection.cfg b/ansible_collections/arista/avd/molecule/eos_cli_config_gen/intended/configs/router-bgp-path-selection.cfg index 0256a883141..af1c49058bd 100644 --- a/ansible_collections/arista/avd/molecule/eos_cli_config_gen/intended/configs/router-bgp-path-selection.cfg +++ b/ansible_collections/arista/avd/molecule/eos_cli_config_gen/intended/configs/router-bgp-path-selection.cfg @@ -19,10 +19,10 @@ router bgp 65101 ! address-family path-selection bgp additional-paths receive - bgp additional-paths send ecmp limit 42 + bgp additional-paths send ecmp limit 42 PL1 neighbor PATH-SELECTION-PG-1 activate neighbor PATH-SELECTION-PG-1 additional-paths receive - neighbor PATH-SELECTION-PG-1 additional-paths send any + neighbor PATH-SELECTION-PG-1 additional-paths send any PL1 neighbor PATH-SELECTION-PG-2 activate neighbor PATH-SELECTION-PG-2 additional-paths send backup neighbor PATH-SELECTION-PG-3 activate @@ -33,7 +33,7 @@ router bgp 65101 neighbor PATH-SELECTION-PG-5 additional-paths send limit 42 neighbor 172.31.255.0 activate neighbor 172.31.255.0 additional-paths receive - neighbor 172.31.255.0 additional-paths send any + neighbor 172.31.255.0 additional-paths send any PL1 neighbor 172.31.255.1 activate neighbor 172.31.255.1 additional-paths send backup neighbor 172.31.255.2 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 1084d94f7e8..6153459cb55 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 @@ -48,7 +48,7 @@ router bgp 65001 bgp missing-policy direction out action permit bgp additional-paths install ecmp-primary bgp additional-paths receive - bgp additional-paths send ecmp limit 4 + bgp additional-paths send ecmp limit 4 PL1 neighbor 1.2.3.4 activate neighbor 1.2.3.4 route-map FOO in neighbor 1.2.3.4 route-map BAR out @@ -116,4 +116,4 @@ router bgp 65001 redistribute dynamic rcf VRF_RCF_DYNAMIC() ! address-family ipv4 - bgp additional-paths send ecmp + bgp additional-paths send ecmp PL1 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..5767e9b75b3 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 @@ -38,8 +38,8 @@ router_bgp: peer_group: EVPN-OVERLAY-PEERS address_family_evpn: bgp_additional_paths: - send: - limit: 10 + 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 8323d8e5eba..6028fc20cac 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 @@ -34,8 +34,8 @@ router_bgp: redistribute_routes: address_family_evpn: bgp_additional_paths: - send: - ecmp_limit: 20 + send: ecmp + 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 026d202b4e3..1be8cb2c128 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 @@ -106,6 +106,7 @@ router_bgp: additional_paths: receive: true send: any + prefix_list: PL1 - name: ADDITIONAL-PATH-PG-2 activate: true additional_paths: @@ -117,10 +118,12 @@ router_bgp: - name: ADDITIONAL-PATH-PG-4 activate: true additional_paths: + send: ecmp send_ecmp_limit: 42 - name: ADDITIONAL-PATH-PG-5 activate: true additional_paths: + send: limit send_limit: 42 # Checking the `no neighbor additional-paths send any is rendered - name: ADDITIONAL-PATH-PG-6 @@ -140,8 +143,7 @@ router_bgp: import_overlay_index_gateway: true bgp_additional_paths: receive: true - send: - any: 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-path-selection.yaml b/ansible_collections/arista/avd/molecule/eos_cli_config_gen/inventory/host_vars/router-bgp-path-selection.yaml index 26c55b90765..5b591cdd99e 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 @@ -31,12 +31,14 @@ router_bgp: receive: true send: ecmp send_ecmp_limit: 42 + prefix_list: PL1 peer_groups: - name: PATH-SELECTION-PG-1 activate: true additional_paths: receive: true send: any + prefix_list: PL1 - name: PATH-SELECTION-PG-2 activate: true additional_paths: @@ -48,10 +50,12 @@ router_bgp: - name: PATH-SELECTION-PG-4 activate: true additional_paths: + send: ecmp send_ecmp_limit: 42 - name: PATH-SELECTION-PG-5 activate: true additional_paths: + send: limit send_limit: 42 neighbors: - ip_address: 172.31.255.0 @@ -59,6 +63,7 @@ router_bgp: additional_paths: receive: true send: any + prefix_list: PL1 - ip_address: 172.31.255.1 activate: true additional_paths: @@ -70,8 +75,10 @@ router_bgp: - ip_address: 172.31.255.3 activate: true additional_paths: + send: ecmp send_ecmp_limit: 42 - ip_address: 172.31.255.4 activate: true additional_paths: + 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 7e7c8cab87f..06e596e65c0 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 @@ -75,8 +75,7 @@ router_bgp: route_map: RM-CONN-2-BGP address_family_evpn: bgp_additional_paths: - send: - backup: true + send: backup peer_groups: - name: EVPN-OVERLAY-PEERS 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 1b149fc3bf0..f2d12c2a700 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 @@ -50,7 +50,9 @@ router_bgp: additional_paths: install_ecmp_primary: true receive: true + send: ecmp send_ecmp_limit: 4 + prefix_list: PL1 redistribute_internal: false neighbors: - ip_address: 1.2.3.4 @@ -178,6 +180,7 @@ router_bgp: address_family_ipv6: bgp: additional_paths: + send: limit send_limit: 3 - name: VRF03 @@ -185,6 +188,7 @@ router_bgp: bgp: additional_paths: send: ecmp + prefix_list: PL1 redistribute_routes: - source_protocol: dynamic rcf: VRF_RCF_DYNAMIC() 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 d2b4bf37a86..b7f4cdf821d 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 @@ -306,12 +306,13 @@ | [        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 | | | [        additional_paths](## "router_bgp.address_family_evpn.peer_groups.[].additional_paths") | Dictionary | | | | | - | [          install](## "router_bgp.address_family_evpn.peer_groups.[].additional_paths.install") | Boolean | | | | | - | [          install_ecmp_primary](## "router_bgp.address_family_evpn.peer_groups.[].additional_paths.install_ecmp_primary") | Boolean | | | | | + | [          install](## "router_bgp.address_family_evpn.peer_groups.[].additional_paths.install") | Boolean | | | | Install BGP backup path. This setting is used only for `router_bgp.address_family_ipv4.bgp.additional_paths` and `router_bgp.address_family_ipv6.bgp.additional_paths. | + | [          install_ecmp_primary](## "router_bgp.address_family_evpn.peer_groups.[].additional_paths.install_ecmp_primary") | Boolean | | | | Allow additional path with ECMP primary path. This setting is used only for `router_bgp.address_family_ipv4.bgp.additional_paths` and `router_bgp.address_family_ipv6.bgp.additional_paths. | | [          receive](## "router_bgp.address_family_evpn.peer_groups.[].additional_paths.receive") | Boolean | | | | | - | [          send](## "router_bgp.address_family_evpn.peer_groups.[].additional_paths.send") | String | | | Valid Values:
- any
- backup
- 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 | - | [          send_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. If this key-value pair is not set, it will send all paths in best ECMP group. | - | [          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(The value of 'send' key must be 'limit'). | + | [          send](## "router_bgp.address_family_evpn.peer_groups.[].additional_paths.send") | String | | | Valid Values:
- any
- backup
- 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. | + | [          send_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. `send` must be set to `ecmp` for this settings. If this key-value pair is not set, it will send all paths in best ECMP group. | + | [          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. `send` must be set to `limit` for this setting. | + | [          prefix_list](## "router_bgp.address_family_evpn.peer_groups.[].additional_paths.prefix_list") | String | | | | Apply the configurations only to the routes matching the prefix list. | | [    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. | @@ -326,13 +327,13 @@ | [      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. | + | [      install](## "router_bgp.address_family_evpn.bgp_additional_paths.install") | Boolean | | | | Install BGP backup path. This setting is used only for `router_bgp.address_family_ipv4.bgp.additional_paths` and `router_bgp.address_family_ipv6.bgp.additional_paths. | + | [      install_ecmp_primary](## "router_bgp.address_family_evpn.bgp_additional_paths.install_ecmp_primary") | Boolean | | | | Allow additional path with ECMP primary path. This setting is used only for `router_bgp.address_family_ipv4.bgp.additional_paths` and `router_bgp.address_family_ipv6.bgp.additional_paths. | + | [      receive](## "router_bgp.address_family_evpn.bgp_additional_paths.receive") | Boolean | | | | | + | [      send](## "router_bgp.address_family_evpn.bgp_additional_paths.send") | String | | | Valid Values:
- any
- backup
- 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. | + | [      send_ecmp_limit](## "router_bgp.address_family_evpn.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 settings. If this key-value pair is not set, it will send all paths in best ECMP group. | + | [      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. `send` must be set to `limit` for this setting. | + | [      prefix_list](## "router_bgp.address_family_evpn.bgp_additional_paths.prefix_list") | String | | | | Apply the configurations only to the routes matching the prefix list. | | [    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. | @@ -524,32 +525,35 @@ | [  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 | | | | | - | [        install](## "router_bgp.address_family_path_selection.bgp.additional_paths.install") | Boolean | | | | | - | [        install_ecmp_primary](## "router_bgp.address_family_path_selection.bgp.additional_paths.install_ecmp_primary") | Boolean | | | | | + | [        install](## "router_bgp.address_family_path_selection.bgp.additional_paths.install") | Boolean | | | | Install BGP backup path. This setting is used only for `router_bgp.address_family_ipv4.bgp.additional_paths` and `router_bgp.address_family_ipv6.bgp.additional_paths. | + | [        install_ecmp_primary](## "router_bgp.address_family_path_selection.bgp.additional_paths.install_ecmp_primary") | Boolean | | | | Allow additional path with ECMP primary path. This setting is used only for `router_bgp.address_family_ipv4.bgp.additional_paths` and `router_bgp.address_family_ipv6.bgp.additional_paths. | | [        receive](## "router_bgp.address_family_path_selection.bgp.additional_paths.receive") | Boolean | | | | | - | [        send](## "router_bgp.address_family_path_selection.bgp.additional_paths.send") | String | | | Valid Values:
- any
- backup
- 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 | - | [        send_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. If this key-value pair is not set, it will send all paths in best ECMP group. | - | [        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(The value of 'send' key must be 'limit'). | + | [        send](## "router_bgp.address_family_path_selection.bgp.additional_paths.send") | String | | | Valid Values:
- any
- backup
- 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. | + | [        send_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. `send` must be set to `ecmp` for this settings. If this key-value pair is not set, it will send all paths in best ECMP group. | + | [        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. `send` must be set to `limit` for this setting. | + | [        prefix_list](## "router_bgp.address_family_path_selection.bgp.additional_paths.prefix_list") | String | | | | Apply the configurations only to the routes matching the prefix list. | | [    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 | | | | | + | [          install](## "router_bgp.address_family_path_selection.neighbors.[].additional_paths.install") | Boolean | | | | Install BGP backup path. This setting is used only for `router_bgp.address_family_ipv4.bgp.additional_paths` and `router_bgp.address_family_ipv6.bgp.additional_paths. | + | [          install_ecmp_primary](## "router_bgp.address_family_path_selection.neighbors.[].additional_paths.install_ecmp_primary") | Boolean | | | | Allow additional path with ECMP primary path. This setting is used only for `router_bgp.address_family_ipv4.bgp.additional_paths` and `router_bgp.address_family_ipv6.bgp.additional_paths. | | [          receive](## "router_bgp.address_family_path_selection.neighbors.[].additional_paths.receive") | Boolean | | | | | - | [          send](## "router_bgp.address_family_path_selection.neighbors.[].additional_paths.send") | String | | | Valid Values:
- any
- backup
- 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 | - | [          send_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. If this key-value pair is not set, it will send all paths in best ECMP group. | - | [          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(The value of 'send' key must be 'limit'). | + | [          send](## "router_bgp.address_family_path_selection.neighbors.[].additional_paths.send") | String | | | Valid Values:
- any
- backup
- 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. | + | [          send_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. `send` must be set to `ecmp` for this settings. If this key-value pair is not set, it will send all paths in best ECMP group. | + | [          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. `send` must be set to `limit` for this setting. | + | [          prefix_list](## "router_bgp.address_family_path_selection.neighbors.[].additional_paths.prefix_list") | String | | | | Apply the configurations only to the routes matching the prefix list. | | [    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 | | | | | + | [          install](## "router_bgp.address_family_path_selection.peer_groups.[].additional_paths.install") | Boolean | | | | Install BGP backup path. This setting is used only for `router_bgp.address_family_ipv4.bgp.additional_paths` and `router_bgp.address_family_ipv6.bgp.additional_paths. | + | [          install_ecmp_primary](## "router_bgp.address_family_path_selection.peer_groups.[].additional_paths.install_ecmp_primary") | Boolean | | | | Allow additional path with ECMP primary path. This setting is used only for `router_bgp.address_family_ipv4.bgp.additional_paths` and `router_bgp.address_family_ipv6.bgp.additional_paths. | | [          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") | String | | | Valid Values:
- any
- backup
- 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 | - | [          send_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. If this key-value pair is not set, it will send all paths in best ECMP group. | - | [          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(The value of 'send' key must be 'limit'). | + | [          send](## "router_bgp.address_family_path_selection.peer_groups.[].additional_paths.send") | String | | | Valid Values:
- any
- backup
- 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. | + | [          send_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. `send` must be set to `ecmp` for this settings. If this key-value pair is not set, it will send all paths in best ECMP group. | + | [          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. `send` must be set to `limit` for this setting. | + | [          prefix_list](## "router_bgp.address_family_path_selection.peer_groups.[].additional_paths.prefix_list") | String | | | | Apply the configurations only to the routes matching the prefix list. | | [  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 | | | | | @@ -725,12 +729,13 @@ | [            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 | | | | | + | [            install](## "router_bgp.vrfs.[].address_family_ipv4.bgp.additional_paths.install") | Boolean | | | | Install BGP backup path. This setting is used only for `router_bgp.address_family_ipv4.bgp.additional_paths` and `router_bgp.address_family_ipv6.bgp.additional_paths. | + | [            install_ecmp_primary](## "router_bgp.vrfs.[].address_family_ipv4.bgp.additional_paths.install_ecmp_primary") | Boolean | | | | Allow additional path with ECMP primary path. This setting is used only for `router_bgp.address_family_ipv4.bgp.additional_paths` and `router_bgp.address_family_ipv6.bgp.additional_paths. | | [            receive](## "router_bgp.vrfs.[].address_family_ipv4.bgp.additional_paths.receive") | Boolean | | | | | - | [            send](## "router_bgp.vrfs.[].address_family_ipv4.bgp.additional_paths.send") | String | | | Valid Values:
- any
- backup
- 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 | - | [            send_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. If this key-value pair is not set, it will send all paths in best ECMP group. | - | [            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(The value of 'send' key must be 'limit'). | + | [            send](## "router_bgp.vrfs.[].address_family_ipv4.bgp.additional_paths.send") | String | | | Valid Values:
- any
- backup
- 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. | + | [            send_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. `send` must be set to `ecmp` for this settings. If this key-value pair is not set, it will send all paths in best ECMP group. | + | [            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. `send` must be set to `limit` for this setting. | + | [            prefix_list](## "router_bgp.vrfs.[].address_family_ipv4.bgp.additional_paths.prefix_list") | String | | | | Apply the configurations only to the routes matching the prefix list. | | [          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 | | | | @@ -760,12 +765,13 @@ | [            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 | | | | | + | [            install](## "router_bgp.vrfs.[].address_family_ipv6.bgp.additional_paths.install") | Boolean | | | | Install BGP backup path. This setting is used only for `router_bgp.address_family_ipv4.bgp.additional_paths` and `router_bgp.address_family_ipv6.bgp.additional_paths. | + | [            install_ecmp_primary](## "router_bgp.vrfs.[].address_family_ipv6.bgp.additional_paths.install_ecmp_primary") | Boolean | | | | Allow additional path with ECMP primary path. This setting is used only for `router_bgp.address_family_ipv4.bgp.additional_paths` and `router_bgp.address_family_ipv6.bgp.additional_paths. | | [            receive](## "router_bgp.vrfs.[].address_family_ipv6.bgp.additional_paths.receive") | Boolean | | | | | - | [            send](## "router_bgp.vrfs.[].address_family_ipv6.bgp.additional_paths.send") | String | | | Valid Values:
- any
- backup
- 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 | - | [            send_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. If this key-value pair is not set, it will send all paths in best ECMP group. | - | [            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(The value of 'send' key must be 'limit'). | + | [            send](## "router_bgp.vrfs.[].address_family_ipv6.bgp.additional_paths.send") | String | | | Valid Values:
- any
- backup
- 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. | + | [            send_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. `send` must be set to `ecmp` for this settings. If this key-value pair is not set, it will send all paths in best ECMP group. | + | [            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. `send` must be set to `limit` for this setting. | + | [            prefix_list](## "router_bgp.vrfs.[].address_family_ipv6.bgp.additional_paths.prefix_list") | String | | | | Apply the configurations only to the routes matching the prefix list. | | [          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 | | | | @@ -1437,7 +1443,11 @@ domain_remote: encapsulation: additional_paths: + + # Install BGP backup path. This setting is used only for `router_bgp.address_family_ipv4.bgp.additional_paths` and `router_bgp.address_family_ipv6.bgp.additional_paths. install: + + # Allow additional path with ECMP primary path. This setting is used only for `router_bgp.address_family_ipv4.bgp.additional_paths` and `router_bgp.address_family_ipv6.bgp.additional_paths. install_ecmp_primary: receive: @@ -1445,14 +1455,17 @@ # 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 + # limit: Limit to n eligible paths. send: - # Amount of ECMP paths to send. If this key-value pair is not set, it will send all paths in best ECMP group. + # Amount of ECMP paths to send. `send` must be set to `ecmp` for this settings. 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(The value of 'send' key must be 'limit'). + # Number of paths to send through bgp updates. `send` must be set to `limit` for this setting. send_limit: + + # Apply the configurations only to the routes matching the prefix list. + prefix_list: evpn_hostflap_detection: enabled: @@ -1476,26 +1489,28 @@ # BGP additional-paths commands. bgp_additional_paths: - # Receive multiple paths. - receive: - - # Send multiple paths. - send: + # Install BGP backup path. This setting is used only for `router_bgp.address_family_ipv4.bgp.additional_paths` and `router_bgp.address_family_ipv6.bgp.additional_paths. + install: - # Any eligible path. - any: + # Allow additional path with ECMP primary path. This setting is used only for `router_bgp.address_family_ipv4.bgp.additional_paths` and `router_bgp.address_family_ipv6.bgp.additional_paths. + install_ecmp_primary: + receive: - # Best path and installed backup path. - backup: + # 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. + send: - # All paths in best path ECMP group. - ecmp: + # Amount of ECMP paths to send. `send` must be set to `ecmp` for this settings. If this key-value pair is not set, it will send all paths in best ECMP group. + send_ecmp_limit: - # Amount of ECMP paths to send. - ecmp_limit: + # Number of paths to send through bgp updates. `send` must be set to `limit` for this setting. + send_limit: - # Amount of paths to send. - limit: + # Apply the configurations only to the routes matching the prefix list. + prefix_list: # BGP layer-2 in-place FEC operation. layer_2_fec_in_place_update: @@ -1848,7 +1863,11 @@ address_family_path_selection: bgp: additional_paths: + + # Install BGP backup path. This setting is used only for `router_bgp.address_family_ipv4.bgp.additional_paths` and `router_bgp.address_family_ipv6.bgp.additional_paths. install: + + # Allow additional path with ECMP primary path. This setting is used only for `router_bgp.address_family_ipv4.bgp.additional_paths` and `router_bgp.address_family_ipv6.bgp.additional_paths. install_ecmp_primary: receive: @@ -1856,19 +1875,26 @@ # 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 + # limit: Limit to n eligible paths. send: - # Amount of ECMP paths to send. If this key-value pair is not set, it will send all paths in best ECMP group. + # Amount of ECMP paths to send. `send` must be set to `ecmp` for this settings. 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(The value of 'send' key must be 'limit'). + # Number of paths to send through bgp updates. `send` must be set to `limit` for this setting. send_limit: + + # Apply the configurations only to the routes matching the prefix list. + prefix_list: neighbors: - ip_address: activate: additional_paths: + + # Install BGP backup path. This setting is used only for `router_bgp.address_family_ipv4.bgp.additional_paths` and `router_bgp.address_family_ipv6.bgp.additional_paths. install: + + # Allow additional path with ECMP primary path. This setting is used only for `router_bgp.address_family_ipv4.bgp.additional_paths` and `router_bgp.address_family_ipv6.bgp.additional_paths. install_ecmp_primary: receive: @@ -1876,21 +1902,28 @@ # 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 + # limit: Limit to n eligible paths. send: - # Amount of ECMP paths to send. If this key-value pair is not set, it will send all paths in best ECMP group. + # Amount of ECMP paths to send. `send` must be set to `ecmp` for this settings. 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(The value of 'send' key must be 'limit'). + # Number of paths to send through bgp updates. `send` must be set to `limit` for this setting. send_limit: + + # Apply the configurations only to the routes matching the prefix list. + prefix_list: peer_groups: # Peer-group name. - name: activate: additional_paths: + + # Install BGP backup path. This setting is used only for `router_bgp.address_family_ipv4.bgp.additional_paths` and `router_bgp.address_family_ipv6.bgp.additional_paths. install: + + # Allow additional path with ECMP primary path. This setting is used only for `router_bgp.address_family_ipv4.bgp.additional_paths` and `router_bgp.address_family_ipv6.bgp.additional_paths. install_ecmp_primary: receive: @@ -1898,14 +1931,17 @@ # 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 + # limit: Limit to n eligible paths. send: - # Amount of ECMP paths to send. If this key-value pair is not set, it will send all paths in best ECMP group. + # Amount of ECMP paths to send. `send` must be set to `ecmp` for this settings. 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(The value of 'send' key must be 'limit'). + # Number of paths to send through bgp updates. `send` must be set to `limit` for this setting. send_limit: + + # Apply the configurations only to the routes matching the prefix list. + prefix_list: address_family_vpn_ipv4: domain_identifier: peer_groups: @@ -2261,7 +2297,11 @@ direction_in_action: direction_out_action: additional_paths: + + # Install BGP backup path. This setting is used only for `router_bgp.address_family_ipv4.bgp.additional_paths` and `router_bgp.address_family_ipv6.bgp.additional_paths. install: + + # Allow additional path with ECMP primary path. This setting is used only for `router_bgp.address_family_ipv4.bgp.additional_paths` and `router_bgp.address_family_ipv6.bgp.additional_paths. install_ecmp_primary: receive: @@ -2269,15 +2309,18 @@ # 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 + # limit: Limit to n eligible paths. send: - # Amount of ECMP paths to send. If this key-value pair is not set, it will send all paths in best ECMP group. + # Amount of ECMP paths to send. `send` must be set to `ecmp` for this settings. 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(The value of 'send' key must be 'limit'). + # Number of paths to send through bgp updates. `send` must be set to `limit` for this setting. send_limit: + # Apply the configurations only to the routes matching the prefix list. + prefix_list: + # Allow redistribution of iBGP routes into an Interior Gateway Protocol (IGP). EOS default is true. redistribute_internal: neighbors: @@ -2332,7 +2375,11 @@ direction_in_action: direction_out_action: additional_paths: + + # Install BGP backup path. This setting is used only for `router_bgp.address_family_ipv4.bgp.additional_paths` and `router_bgp.address_family_ipv6.bgp.additional_paths. install: + + # Allow additional path with ECMP primary path. This setting is used only for `router_bgp.address_family_ipv4.bgp.additional_paths` and `router_bgp.address_family_ipv6.bgp.additional_paths. install_ecmp_primary: receive: @@ -2340,15 +2387,18 @@ # 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 + # limit: Limit to n eligible paths. send: - # Amount of ECMP paths to send. If this key-value pair is not set, it will send all paths in best ECMP group. + # Amount of ECMP paths to send. `send` must be set to `ecmp` for this settings. 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(The value of 'send' key must be 'limit'). + # Number of paths to send through bgp updates. `send` must be set to `limit` for this setting. send_limit: + # Apply the configurations only to the routes matching the prefix list. + prefix_list: + # Allow redistribution of iBGP routes into an Interior Gateway Protocol (IGP). EOS default is true. redistribute_internal: neighbors: 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 320f9bae8a7..3515a667e64 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 @@ -603,16 +603,18 @@ router bgp {{ router_bgp.as }} {% 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 }} +{% if router_bgp.address_family_evpn.bgp_additional_paths.send_ecmp_limit is arista.avd.defined and router_bgp.address_family_evpn.bgp_additional_paths.send | arista.avd.default == 'ecmp' %} +{% set evpn_add_path = '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 and router_bgp.address_family_evpn.bgp_additional_paths.send | arista.avd.default == 'limit' %} +{% set evpn_add_path = 'bgp additional-paths send limit ' ~ router_bgp.address_family_evpn.bgp_additional_paths.send_limit %} +{% elif router_bgp.address_family_evpn.bgp_additional_paths.send is arista.avd.defined %} +{% set evpn_add_path = 'bgp additional-paths send ' ~ router_bgp.address_family_evpn.bgp_additional_paths.send %} +{% endif %} +{% if router_bgp.address_family_evpn.bgp_additional_paths.prefix_list is arista.avd.defined and evpn_add_path is arista.avd.defined %} +{% set evpn_add_path = evpn_add_path ~ ' ' ~ router_bgp.address_family_evpn.bgp_additional_paths.prefix_list %} +{% endif %} +{% if evpn_add_path is arista.avd.defined %} + {{ evpn_add_path }} {% endif %} {% if router_bgp.address_family_evpn.next_hop_unchanged is arista.avd.defined(true) %} bgp next-hop-unchanged @@ -689,12 +691,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_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_ecmp_limit is arista.avd.defined and peer_group.additional_paths.send | arista.avd.default == 'ecmp' %} +{% set evpn_pg_add_path = '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 and peer_group.additional_paths.send | arista.avd.default == 'limit' %} +{% set evpn_pg_add_path = 'neighbor ' ~ peer_group.name ~ ' additional-paths send limit ' ~ peer_group.additional_paths.send_limit %} {% elif peer_group.additional_paths.send is arista.avd.defined %} - neighbor {{ peer_group.name }} additional-paths send {{ peer_group.additional_paths.send }} +{% set evpn_pg_add_path = '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 evpn_pg_add_path is arista.avd.defined %} +{% set evpn_pg_add_path = evpn_pg_add_path ~ ' ' ~ peer_group.additional_paths.prefix_list %} +{% endif %} +{% if evpn_pg_add_path is arista.avd.defined %} + {{ evpn_pg_add_path }} {% endif %} {% if peer_group.domain_remote is arista.avd.defined(true) %} neighbor {{ peer_group.name }} domain remote @@ -1257,12 +1265,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_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_ecmp_limit is arista.avd.defined and router_bgp.address_family_path_selection.bgp.additional_paths.send | arista.avd.default == 'ecmp' %} +{% set ps_add_path = '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 and router_bgp.address_family_path_selection.bgp.additional_paths.send | arista.avd.default == 'limit' %} +{% set ps_add_path = 'bgp additional-paths send limit ' ~ router_bgp.address_family_path_selection.bgp.additional_paths.send_limit %} {% elif router_bgp.address_family_path_selection.bgp.additional_paths.send is arista.avd.defined %} - bgp additional-paths send {{ router_bgp.address_family_path_selection.bgp.additional_paths.send }} +{% set ps_add_path = 'bgp additional-paths send ' ~ router_bgp.address_family_path_selection.bgp.additional_paths.send %} +{% endif %} +{% if router_bgp.address_family_path_selection.bgp.additional_paths.prefix_list is arista.avd.defined and ps_add_path is arista.avd.defined %} +{% set ps_add_path = ps_add_path ~ ' ' ~ router_bgp.address_family_path_selection.bgp.additional_paths.prefix_list %} +{% endif %} +{% if ps_add_path is arista.avd.defined %} + {{ ps_add_path }} {% 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) %} @@ -1273,12 +1287,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_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_ecmp_limit is arista.avd.defined and peer_group.additional_paths.send | arista.avd.default == 'ecmp' %} +{% set ps_pg_add_path = '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 and peer_group.additional_paths.send | arista.avd.default == 'limit' %} +{% set ps_pg_add_path = 'neighbor ' ~ peer_group.name ~ ' additional-paths send limit ' ~ peer_group.additional_paths.send_limit %} {% elif peer_group.additional_paths.send is arista.avd.defined %} - neighbor {{ peer_group.name }} additional-paths send {{ peer_group.additional_paths.send }} +{% set ps_pg_add_path = '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 ps_pg_add_path is arista.avd.defined %} +{% set ps_pg_add_path = ps_pg_add_path ~ ' ' ~ peer_group.additional_paths.prefix_list %} +{% endif %} +{% if ps_pg_add_path is arista.avd.defined %} + {{ ps_pg_add_path }} {% endif %} {% endfor %} {% for neighbor in router_bgp.address_family_path_selection.neighbors | arista.avd.natural_sort('ip_address') %} @@ -1290,12 +1310,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_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_ecmp_limit is arista.avd.defined and neighbor.additional_paths.send | arista.avd.default == 'ecmp' %} +{% set ps_neighbor_add_path = '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 and neighbor.additional_paths.send | arista.avd.default == 'limit' %} +{% set ps_neighbor_add_path = 'neighbor ' ~ neighbor.ip_address ~ ' additional-paths send limit ' ~ neighbor.additional_paths.send_limit %} {% elif neighbor.additional_paths.send is arista.avd.defined %} - neighbor {{ neighbor.ip_address }} additional-paths send {{ neighbor.additional_paths.send }} +{% set ps_neighbor_add_path = 'neighbor ' ~ neighbor.ip_address ~ ' additional-paths send ' ~ neighbor.additional_paths.send %} +{% endif %} +{% if neighbor.additional_paths.prefix_list is arista.avd.defined and ps_neighbor_add_path is arista.avd.defined %} +{% set ps_neighbor_add_path = ps_neighbor_add_path ~ ' ' ~ neighbor.additional_paths.prefix_list %} +{% endif %} +{% if ps_neighbor_add_path is arista.avd.defined %} + {{ ps_neighbor_add_path }} {% endif %} {% endfor %} {% endif %} @@ -1785,12 +1811,18 @@ 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_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_ecmp_limit is arista.avd.defined and vrf.address_family_ipv4.bgp.additional_paths.send | arista.avd.default == 'ecmp' %} +{% set ipv4_add_path = '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 and vrf.address_family_ipv4.bgp.additional_paths.send | arista.avd.default == 'limit' %} +{% set ipv4_add_path = 'bgp additional-paths send limit ' ~ vrf.address_family_ipv4.bgp.additional_paths.send_limit %} {% elif vrf.address_family_ipv4.bgp.additional_paths.send is arista.avd.defined %} - bgp additional-paths send {{ vrf.address_family_ipv4.bgp.additional_paths.send }} +{% set ipv4_add_path = 'bgp additional-paths send ' ~ vrf.address_family_ipv4.bgp.additional_paths.send %} +{% endif %} +{% if vrf.address_family_ipv4.bgp.additional_paths.prefix_list is arista.avd.defined and ipv4_add_path is arista.avd.defined %} +{% set ipv4_add_path = ipv4_add_path ~ ' ' ~ vrf.address_family_ipv4.bgp.additional_paths.prefix_list %} +{% endif %} +{% if ipv4_add_path is arista.avd.defined %} + {{ ipv4_add_path }} {% endif %} {% for neighbor in vrf.address_family_ipv4.neighbors | arista.avd.natural_sort('ip_address') %} {% if neighbor.activate is arista.avd.defined(true) %} @@ -1931,12 +1963,18 @@ 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_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_ecmp_limit is arista.avd.defined and vrf.address_family_ipv6.bgp.additional_paths.send | arista.avd.default == 'ecmp' %} +{% set vrf_add_path = '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 and vrf.address_family_ipv6.bgp.additional_paths.send | arista.avd.default == 'limit' %} +{% set vrf_add_path = 'bgp additional-paths send limit ' ~ vrf.address_family_ipv6.bgp.additional_paths.send_limit %} {% elif vrf.address_family_ipv6.bgp.additional_paths.send is arista.avd.defined %} - bgp additional-paths send {{ vrf.address_family_ipv6.bgp.additional_paths.send }} +{% set vrf_add_path = 'bgp additional-paths send ' ~ vrf.address_family_ipv6.bgp.additional_paths.send %} +{% endif %} +{% if vrf.address_family_ipv6.bgp.additional_paths.prefix_list is arista.avd.defined and vrf_add_path is arista.avd.defined %} +{% set vrf_add_path = vrf_add_path ~ ' ' ~ vrf.address_family_ipv6.bgp.additional_paths.prefix_list %} +{% endif %} +{% if vrf_add_path is arista.avd.defined %} + {{ vrf_add_path }} {% endif %} {% for neighbor in vrf.address_family_ipv6.neighbors | arista.avd.natural_sort('ip_address') %} {% if neighbor.activate is arista.avd.defined(true) %} 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 7c636087c7c..350bbf811e3 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 @@ -12942,37 +12942,7 @@ keys: 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 + $ref: eos_cli_config_gen#/$defs/additional_paths layer_2_fec_in_place_update: type: dict description: BGP layer-2 in-place FEC operation. @@ -19089,8 +19059,13 @@ $defs: keys: install: type: bool + description: Install BGP backup path. This setting is used only for `router_bgp.address_family_ipv4.bgp.additional_paths` + and `router_bgp.address_family_ipv6.bgp.additional_paths. install_ecmp_primary: type: bool + description: Allow additional path with ECMP primary path. This setting is + used only for `router_bgp.address_family_ipv4.bgp.additional_paths` and + `router_bgp.address_family_ipv6.bgp.additional_paths. receive: type: bool send: @@ -19104,7 +19079,7 @@ $defs: ecmp: All paths in best path ECMP group. - limit: Limit to n eligible paths' + limit: Limit to n eligible paths.' valid_values: - any - backup @@ -19112,20 +19087,25 @@ $defs: - limit send_ecmp_limit: type: int - description: Amount of ECMP paths to send. If this key-value pair is not set, - it will send all paths in best ECMP group. + description: Amount of ECMP paths to send. `send` must be set to `ecmp` for + this settings. 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(The value of 'send' - key must be 'limit'). + description: Number of paths to send through bgp updates. `send` must be set + to `limit` for this setting. convert_types: - str min: 2 max: 64 + prefix_list: + type: str + description: Apply the configurations only to the routes matching the prefix + list. application_traffic_recognition_application: type: dict keys: diff --git a/python-avd/pyavd/_eos_cli_config_gen/schema/schema_fragments/defs_additional_paths.schema.yml b/python-avd/pyavd/_eos_cli_config_gen/schema/schema_fragments/defs_additional_paths.schema.yml index df92442cd3c..299b4773b91 100644 --- a/python-avd/pyavd/_eos_cli_config_gen/schema/schema_fragments/defs_additional_paths.schema.yml +++ b/python-avd/pyavd/_eos_cli_config_gen/schema/schema_fragments/defs_additional_paths.schema.yml @@ -8,8 +8,10 @@ $defs: keys: install: type: bool + description: Install BGP backup path. This setting is used only for `router_bgp.address_family_ipv4.bgp.additional_paths` and `router_bgp.address_family_ipv6.bgp.additional_paths. install_ecmp_primary: type: bool + description: Allow additional path with ECMP primary path. This setting is used only for `router_bgp.address_family_ipv4.bgp.additional_paths` and `router_bgp.address_family_ipv6.bgp.additional_paths. receive: type: bool send: @@ -19,19 +21,22 @@ $defs: 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 + limit: Limit to n eligible paths. valid_values: [ 'any', 'backup', 'ecmp', 'limit' ] send_ecmp_limit: type: int - description: Amount of ECMP paths to send. If this key-value pair is not set, it will send all paths in best ECMP group. + description: Amount of ECMP paths to send. `send` must be set to `ecmp` for this settings. 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(The value of 'send' key must be 'limit'). + description: Number of paths to send through bgp updates. `send` must be set to `limit` for this setting. convert_types: - str min: 2 max: 64 + prefix_list: + type: str + description: Apply the configurations only to the routes matching the prefix list. 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 fc11701d1f1..77a240e472e 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 @@ -1186,37 +1186,7 @@ keys: 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 + $ref: "eos_cli_config_gen#/$defs/additional_paths" layer_2_fec_in_place_update: type: dict description: BGP layer-2 in-place FEC operation. From 60d695ce052baa33edf2c77e2e91c96debecde92 Mon Sep 17 00:00:00 2001 From: Laxmikant Chintakindi Date: Tue, 3 Sep 2024 16:12:02 +0530 Subject: [PATCH 06/55] Address comments. --- .../documentation/devices/router-bgp-evpn.md | 3 +- .../devices/router-bgp-path-selection.md | 6 +- .../intended/configs/router-bgp-evpn.cfg | 3 +- .../configs/router-bgp-path-selection.cfg | 6 +- .../inventory/host_vars/router-bgp-evpn.yml | 2 +- .../host_vars/router-bgp-path-selection.yaml | 3 - .../docs/tables/router-bgp.md | 120 ++++--------- .../j2templates/eos/router-bgp.j2 | 164 ++++++++++-------- .../schema/eos_cli_config_gen.schema.yml | 36 ++-- .../defs_additional_paths.schema.yml | 11 +- .../schema_fragments/router_bgp.schema.yml | 20 +++ 11 files changed, 172 insertions(+), 202 deletions(-) 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 64eb7fb9410..38325299009 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 @@ -259,7 +259,7 @@ router bgp 65101 domain identifier 65101:0 neighbor ADDITIONAL-PATH-PG-1 activate neighbor ADDITIONAL-PATH-PG-1 additional-paths receive - neighbor ADDITIONAL-PATH-PG-1 additional-paths send any PL1 + neighbor ADDITIONAL-PATH-PG-1 additional-paths send any neighbor ADDITIONAL-PATH-PG-2 activate neighbor ADDITIONAL-PATH-PG-2 additional-paths send backup neighbor ADDITIONAL-PATH-PG-3 activate @@ -269,6 +269,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 neighbor EVPN-OVERLAY-PEERS default-route neighbor EVPN-OVERLAY-PEERS activate neighbor EVPN-OVERLAY-PEERS domain remote diff --git a/ansible_collections/arista/avd/molecule/eos_cli_config_gen/documentation/devices/router-bgp-path-selection.md b/ansible_collections/arista/avd/molecule/eos_cli_config_gen/documentation/devices/router-bgp-path-selection.md index 44406b68e20..e8243c0df02 100644 --- a/ansible_collections/arista/avd/molecule/eos_cli_config_gen/documentation/devices/router-bgp-path-selection.md +++ b/ansible_collections/arista/avd/molecule/eos_cli_config_gen/documentation/devices/router-bgp-path-selection.md @@ -135,10 +135,10 @@ router bgp 65101 ! address-family path-selection bgp additional-paths receive - bgp additional-paths send ecmp limit 42 PL1 + bgp additional-paths send ecmp limit 42 neighbor PATH-SELECTION-PG-1 activate neighbor PATH-SELECTION-PG-1 additional-paths receive - neighbor PATH-SELECTION-PG-1 additional-paths send any PL1 + neighbor PATH-SELECTION-PG-1 additional-paths send any neighbor PATH-SELECTION-PG-2 activate neighbor PATH-SELECTION-PG-2 additional-paths send backup neighbor PATH-SELECTION-PG-3 activate @@ -149,7 +149,7 @@ router bgp 65101 neighbor PATH-SELECTION-PG-5 additional-paths send limit 42 neighbor 172.31.255.0 activate neighbor 172.31.255.0 additional-paths receive - neighbor 172.31.255.0 additional-paths send any PL1 + neighbor 172.31.255.0 additional-paths send any neighbor 172.31.255.1 activate neighbor 172.31.255.1 additional-paths send backup neighbor 172.31.255.2 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 84b4b87b075..12712f7c156 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 @@ -100,7 +100,7 @@ router bgp 65101 domain identifier 65101:0 neighbor ADDITIONAL-PATH-PG-1 activate neighbor ADDITIONAL-PATH-PG-1 additional-paths receive - neighbor ADDITIONAL-PATH-PG-1 additional-paths send any PL1 + neighbor ADDITIONAL-PATH-PG-1 additional-paths send any neighbor ADDITIONAL-PATH-PG-2 activate neighbor ADDITIONAL-PATH-PG-2 additional-paths send backup neighbor ADDITIONAL-PATH-PG-3 activate @@ -110,6 +110,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 neighbor EVPN-OVERLAY-PEERS default-route neighbor EVPN-OVERLAY-PEERS activate neighbor EVPN-OVERLAY-PEERS domain remote diff --git a/ansible_collections/arista/avd/molecule/eos_cli_config_gen/intended/configs/router-bgp-path-selection.cfg b/ansible_collections/arista/avd/molecule/eos_cli_config_gen/intended/configs/router-bgp-path-selection.cfg index af1c49058bd..0256a883141 100644 --- a/ansible_collections/arista/avd/molecule/eos_cli_config_gen/intended/configs/router-bgp-path-selection.cfg +++ b/ansible_collections/arista/avd/molecule/eos_cli_config_gen/intended/configs/router-bgp-path-selection.cfg @@ -19,10 +19,10 @@ router bgp 65101 ! address-family path-selection bgp additional-paths receive - bgp additional-paths send ecmp limit 42 PL1 + bgp additional-paths send ecmp limit 42 neighbor PATH-SELECTION-PG-1 activate neighbor PATH-SELECTION-PG-1 additional-paths receive - neighbor PATH-SELECTION-PG-1 additional-paths send any PL1 + neighbor PATH-SELECTION-PG-1 additional-paths send any neighbor PATH-SELECTION-PG-2 activate neighbor PATH-SELECTION-PG-2 additional-paths send backup neighbor PATH-SELECTION-PG-3 activate @@ -33,7 +33,7 @@ router bgp 65101 neighbor PATH-SELECTION-PG-5 additional-paths send limit 42 neighbor 172.31.255.0 activate neighbor 172.31.255.0 additional-paths receive - neighbor 172.31.255.0 additional-paths send any PL1 + neighbor 172.31.255.0 additional-paths send any neighbor 172.31.255.1 activate neighbor 172.31.255.1 additional-paths send backup neighbor 172.31.255.2 activate 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 1be8cb2c128..da3bc2afeb3 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 @@ -106,7 +106,6 @@ router_bgp: additional_paths: receive: true send: any - prefix_list: PL1 - name: ADDITIONAL-PATH-PG-2 activate: true additional_paths: @@ -129,6 +128,7 @@ router_bgp: - name: ADDITIONAL-PATH-PG-6 activate: true additional_paths: + send: 'null' evpn_hostflap_detection: enabled: true window: 10 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 5b591cdd99e..009ac21abe1 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 @@ -31,14 +31,12 @@ router_bgp: receive: true send: ecmp send_ecmp_limit: 42 - prefix_list: PL1 peer_groups: - name: PATH-SELECTION-PG-1 activate: true additional_paths: receive: true send: any - prefix_list: PL1 - name: PATH-SELECTION-PG-2 activate: true additional_paths: @@ -63,7 +61,6 @@ router_bgp: additional_paths: receive: true send: any - prefix_list: PL1 - ip_address: 172.31.255.1 activate: true additional_paths: 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 b7f4cdf821d..b821f13a912 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 @@ -306,13 +306,10 @@ | [        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 | | | [        additional_paths](## "router_bgp.address_family_evpn.peer_groups.[].additional_paths") | Dictionary | | | | | - | [          install](## "router_bgp.address_family_evpn.peer_groups.[].additional_paths.install") | Boolean | | | | Install BGP backup path. This setting is used only for `router_bgp.address_family_ipv4.bgp.additional_paths` and `router_bgp.address_family_ipv6.bgp.additional_paths. | - | [          install_ecmp_primary](## "router_bgp.address_family_evpn.peer_groups.[].additional_paths.install_ecmp_primary") | Boolean | | | | Allow additional path with ECMP primary path. This setting is used only for `router_bgp.address_family_ipv4.bgp.additional_paths` and `router_bgp.address_family_ipv6.bgp.additional_paths. | | [          receive](## "router_bgp.address_family_evpn.peer_groups.[].additional_paths.receive") | Boolean | | | | | - | [          send](## "router_bgp.address_family_evpn.peer_groups.[].additional_paths.send") | String | | | Valid Values:
- any
- backup
- 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. | + | [          send](## "router_bgp.address_family_evpn.peer_groups.[].additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- null | 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. | | [          send_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. `send` must be set to `ecmp` for this settings. If this key-value pair is not set, it will send all paths in best ECMP group. | | [          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. `send` must be set to `limit` for this setting. | - | [          prefix_list](## "router_bgp.address_family_evpn.peer_groups.[].additional_paths.prefix_list") | String | | | | Apply the configurations only to the routes matching the prefix list. | | [    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. | @@ -327,13 +324,10 @@ | [      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. | - | [      install](## "router_bgp.address_family_evpn.bgp_additional_paths.install") | Boolean | | | | Install BGP backup path. This setting is used only for `router_bgp.address_family_ipv4.bgp.additional_paths` and `router_bgp.address_family_ipv6.bgp.additional_paths. | - | [      install_ecmp_primary](## "router_bgp.address_family_evpn.bgp_additional_paths.install_ecmp_primary") | Boolean | | | | Allow additional path with ECMP primary path. This setting is used only for `router_bgp.address_family_ipv4.bgp.additional_paths` and `router_bgp.address_family_ipv6.bgp.additional_paths. | | [      receive](## "router_bgp.address_family_evpn.bgp_additional_paths.receive") | Boolean | | | | | - | [      send](## "router_bgp.address_family_evpn.bgp_additional_paths.send") | String | | | Valid Values:
- any
- backup
- 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. | + | [      send](## "router_bgp.address_family_evpn.bgp_additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- null | 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. | | [      send_ecmp_limit](## "router_bgp.address_family_evpn.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 settings. If this key-value pair is not set, it will send all paths in best ECMP group. | | [      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. `send` must be set to `limit` for this setting. | - | [      prefix_list](## "router_bgp.address_family_evpn.bgp_additional_paths.prefix_list") | String | | | | Apply the configurations only to the routes matching the prefix list. | | [    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. | @@ -525,35 +519,26 @@ | [  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 | | | | | - | [        install](## "router_bgp.address_family_path_selection.bgp.additional_paths.install") | Boolean | | | | Install BGP backup path. This setting is used only for `router_bgp.address_family_ipv4.bgp.additional_paths` and `router_bgp.address_family_ipv6.bgp.additional_paths. | - | [        install_ecmp_primary](## "router_bgp.address_family_path_selection.bgp.additional_paths.install_ecmp_primary") | Boolean | | | | Allow additional path with ECMP primary path. This setting is used only for `router_bgp.address_family_ipv4.bgp.additional_paths` and `router_bgp.address_family_ipv6.bgp.additional_paths. | | [        receive](## "router_bgp.address_family_path_selection.bgp.additional_paths.receive") | Boolean | | | | | - | [        send](## "router_bgp.address_family_path_selection.bgp.additional_paths.send") | String | | | Valid Values:
- any
- backup
- 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. | + | [        send](## "router_bgp.address_family_path_selection.bgp.additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- null | 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. | | [        send_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. `send` must be set to `ecmp` for this settings. If this key-value pair is not set, it will send all paths in best ECMP group. | | [        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. `send` must be set to `limit` for this setting. | - | [        prefix_list](## "router_bgp.address_family_path_selection.bgp.additional_paths.prefix_list") | String | | | | Apply the configurations only to the routes matching the prefix list. | | [    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 BGP backup path. This setting is used only for `router_bgp.address_family_ipv4.bgp.additional_paths` and `router_bgp.address_family_ipv6.bgp.additional_paths. | - | [          install_ecmp_primary](## "router_bgp.address_family_path_selection.neighbors.[].additional_paths.install_ecmp_primary") | Boolean | | | | Allow additional path with ECMP primary path. This setting is used only for `router_bgp.address_family_ipv4.bgp.additional_paths` and `router_bgp.address_family_ipv6.bgp.additional_paths. | | [          receive](## "router_bgp.address_family_path_selection.neighbors.[].additional_paths.receive") | Boolean | | | | | - | [          send](## "router_bgp.address_family_path_selection.neighbors.[].additional_paths.send") | String | | | Valid Values:
- any
- backup
- 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. | + | [          send](## "router_bgp.address_family_path_selection.neighbors.[].additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- null | 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. | | [          send_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. `send` must be set to `ecmp` for this settings. If this key-value pair is not set, it will send all paths in best ECMP group. | | [          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. `send` must be set to `limit` for this setting. | - | [          prefix_list](## "router_bgp.address_family_path_selection.neighbors.[].additional_paths.prefix_list") | String | | | | Apply the configurations only to the routes matching the prefix list. | | [    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 BGP backup path. This setting is used only for `router_bgp.address_family_ipv4.bgp.additional_paths` and `router_bgp.address_family_ipv6.bgp.additional_paths. | - | [          install_ecmp_primary](## "router_bgp.address_family_path_selection.peer_groups.[].additional_paths.install_ecmp_primary") | Boolean | | | | Allow additional path with ECMP primary path. This setting is used only for `router_bgp.address_family_ipv4.bgp.additional_paths` and `router_bgp.address_family_ipv6.bgp.additional_paths. | | [          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") | String | | | Valid Values:
- any
- backup
- 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. | + | [          send](## "router_bgp.address_family_path_selection.peer_groups.[].additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- null | 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. | | [          send_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. `send` must be set to `ecmp` for this settings. If this key-value pair is not set, it will send all paths in best ECMP group. | | [          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. `send` must be set to `limit` for this setting. | - | [          prefix_list](## "router_bgp.address_family_path_selection.peer_groups.[].additional_paths.prefix_list") | String | | | | Apply the configurations only to the routes matching the prefix list. | | [  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 | | | | | @@ -729,13 +714,13 @@ | [            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 BGP backup path. This setting is used only for `router_bgp.address_family_ipv4.bgp.additional_paths` and `router_bgp.address_family_ipv6.bgp.additional_paths. | - | [            install_ecmp_primary](## "router_bgp.vrfs.[].address_family_ipv4.bgp.additional_paths.install_ecmp_primary") | Boolean | | | | Allow additional path with ECMP primary path. This setting is used only for `router_bgp.address_family_ipv4.bgp.additional_paths` and `router_bgp.address_family_ipv6.bgp.additional_paths. | + | [            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. | + | [            prefix_list](## "router_bgp.vrfs.[].address_family_ipv4.bgp.additional_paths.prefix_list") | String | | | | Apply the configurations only to the routes matching the prefix list. | | [            receive](## "router_bgp.vrfs.[].address_family_ipv4.bgp.additional_paths.receive") | Boolean | | | | | - | [            send](## "router_bgp.vrfs.[].address_family_ipv4.bgp.additional_paths.send") | String | | | Valid Values:
- any
- backup
- 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. | + | [            send](## "router_bgp.vrfs.[].address_family_ipv4.bgp.additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- null | 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. | | [            send_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. `send` must be set to `ecmp` for this settings. If this key-value pair is not set, it will send all paths in best ECMP group. | | [            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. `send` must be set to `limit` for this setting. | - | [            prefix_list](## "router_bgp.vrfs.[].address_family_ipv4.bgp.additional_paths.prefix_list") | String | | | | Apply the configurations only to the routes matching the prefix list. | | [          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 | | | | @@ -765,13 +750,13 @@ | [            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 BGP backup path. This setting is used only for `router_bgp.address_family_ipv4.bgp.additional_paths` and `router_bgp.address_family_ipv6.bgp.additional_paths. | - | [            install_ecmp_primary](## "router_bgp.vrfs.[].address_family_ipv6.bgp.additional_paths.install_ecmp_primary") | Boolean | | | | Allow additional path with ECMP primary path. This setting is used only for `router_bgp.address_family_ipv4.bgp.additional_paths` and `router_bgp.address_family_ipv6.bgp.additional_paths. | + | [            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. | + | [            prefix_list](## "router_bgp.vrfs.[].address_family_ipv6.bgp.additional_paths.prefix_list") | String | | | | Apply the configurations only to the routes matching the prefix list. | | [            receive](## "router_bgp.vrfs.[].address_family_ipv6.bgp.additional_paths.receive") | Boolean | | | | | - | [            send](## "router_bgp.vrfs.[].address_family_ipv6.bgp.additional_paths.send") | String | | | Valid Values:
- any
- backup
- 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. | + | [            send](## "router_bgp.vrfs.[].address_family_ipv6.bgp.additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- null | 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. | | [            send_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. `send` must be set to `ecmp` for this settings. If this key-value pair is not set, it will send all paths in best ECMP group. | | [            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. `send` must be set to `limit` for this setting. | - | [            prefix_list](## "router_bgp.vrfs.[].address_family_ipv6.bgp.additional_paths.prefix_list") | String | | | | Apply the configurations only to the routes matching the prefix list. | | [          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 | | | | @@ -1443,12 +1428,6 @@ domain_remote: encapsulation: additional_paths: - - # Install BGP backup path. This setting is used only for `router_bgp.address_family_ipv4.bgp.additional_paths` and `router_bgp.address_family_ipv6.bgp.additional_paths. - install: - - # Allow additional path with ECMP primary path. This setting is used only for `router_bgp.address_family_ipv4.bgp.additional_paths` and `router_bgp.address_family_ipv6.bgp.additional_paths. - install_ecmp_primary: receive: # Select an option to send multiple paths for same prefix through bgp updates. @@ -1456,16 +1435,13 @@ # backup: Best path and installed backup path. # ecmp: All paths in best path ECMP group. # limit: Limit to n eligible paths. - send: + send: # Amount of ECMP paths to send. `send` must be set to `ecmp` for this settings. 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. send_limit: - - # Apply the configurations only to the routes matching the prefix list. - prefix_list: evpn_hostflap_detection: enabled: @@ -1488,12 +1464,6 @@ # BGP additional-paths commands. bgp_additional_paths: - - # Install BGP backup path. This setting is used only for `router_bgp.address_family_ipv4.bgp.additional_paths` and `router_bgp.address_family_ipv6.bgp.additional_paths. - install: - - # Allow additional path with ECMP primary path. This setting is used only for `router_bgp.address_family_ipv4.bgp.additional_paths` and `router_bgp.address_family_ipv6.bgp.additional_paths. - install_ecmp_primary: receive: # Select an option to send multiple paths for same prefix through bgp updates. @@ -1501,7 +1471,7 @@ # backup: Best path and installed backup path. # ecmp: All paths in best path ECMP group. # limit: Limit to n eligible paths. - send: + send: # Amount of ECMP paths to send. `send` must be set to `ecmp` for this settings. If this key-value pair is not set, it will send all paths in best ECMP group. send_ecmp_limit: @@ -1509,9 +1479,6 @@ # Number of paths to send through bgp updates. `send` must be set to `limit` for this setting. send_limit: - # Apply the configurations only to the routes matching the prefix list. - prefix_list: - # BGP layer-2 in-place FEC operation. layer_2_fec_in_place_update: enabled: @@ -1863,12 +1830,6 @@ address_family_path_selection: bgp: additional_paths: - - # Install BGP backup path. This setting is used only for `router_bgp.address_family_ipv4.bgp.additional_paths` and `router_bgp.address_family_ipv6.bgp.additional_paths. - install: - - # Allow additional path with ECMP primary path. This setting is used only for `router_bgp.address_family_ipv4.bgp.additional_paths` and `router_bgp.address_family_ipv6.bgp.additional_paths. - install_ecmp_primary: receive: # Select an option to send multiple paths for same prefix through bgp updates. @@ -1876,26 +1837,17 @@ # backup: Best path and installed backup path. # ecmp: All paths in best path ECMP group. # limit: Limit to n eligible paths. - send: + send: # Amount of ECMP paths to send. `send` must be set to `ecmp` for this settings. 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. send_limit: - - # Apply the configurations only to the routes matching the prefix list. - prefix_list: neighbors: - ip_address: activate: additional_paths: - - # Install BGP backup path. This setting is used only for `router_bgp.address_family_ipv4.bgp.additional_paths` and `router_bgp.address_family_ipv6.bgp.additional_paths. - install: - - # Allow additional path with ECMP primary path. This setting is used only for `router_bgp.address_family_ipv4.bgp.additional_paths` and `router_bgp.address_family_ipv6.bgp.additional_paths. - install_ecmp_primary: receive: # Select an option to send multiple paths for same prefix through bgp updates. @@ -1903,28 +1855,19 @@ # backup: Best path and installed backup path. # ecmp: All paths in best path ECMP group. # limit: Limit to n eligible paths. - send: + send: # Amount of ECMP paths to send. `send` must be set to `ecmp` for this settings. 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. send_limit: - - # Apply the configurations only to the routes matching the prefix list. - prefix_list: peer_groups: # Peer-group name. - name: activate: additional_paths: - - # Install BGP backup path. This setting is used only for `router_bgp.address_family_ipv4.bgp.additional_paths` and `router_bgp.address_family_ipv6.bgp.additional_paths. - install: - - # Allow additional path with ECMP primary path. This setting is used only for `router_bgp.address_family_ipv4.bgp.additional_paths` and `router_bgp.address_family_ipv6.bgp.additional_paths. - install_ecmp_primary: receive: # Select an option to send multiple paths for same prefix through bgp updates. @@ -1932,16 +1875,13 @@ # backup: Best path and installed backup path. # ecmp: All paths in best path ECMP group. # limit: Limit to n eligible paths. - send: + send: # Amount of ECMP paths to send. `send` must be set to `ecmp` for this settings. 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. send_limit: - - # Apply the configurations only to the routes matching the prefix list. - prefix_list: address_family_vpn_ipv4: domain_identifier: peer_groups: @@ -2298,11 +2238,14 @@ direction_out_action: additional_paths: - # Install BGP backup path. This setting is used only for `router_bgp.address_family_ipv4.bgp.additional_paths` and `router_bgp.address_family_ipv6.bgp.additional_paths. + # Install BGP backup path. install: - # Allow additional path with ECMP primary path. This setting is used only for `router_bgp.address_family_ipv4.bgp.additional_paths` and `router_bgp.address_family_ipv6.bgp.additional_paths. + # Allow additional path with ECMP primary path. install_ecmp_primary: + + # Apply the configurations only to the routes matching the prefix list. + prefix_list: receive: # Select an option to send multiple paths for same prefix through bgp updates. @@ -2310,7 +2253,7 @@ # backup: Best path and installed backup path. # ecmp: All paths in best path ECMP group. # limit: Limit to n eligible paths. - send: + send: # Amount of ECMP paths to send. `send` must be set to `ecmp` for this settings. If this key-value pair is not set, it will send all paths in best ECMP group. send_ecmp_limit: @@ -2318,9 +2261,6 @@ # Number of paths to send through bgp updates. `send` must be set to `limit` for this setting. send_limit: - # Apply the configurations only to the routes matching the prefix list. - prefix_list: - # Allow redistribution of iBGP routes into an Interior Gateway Protocol (IGP). EOS default is true. redistribute_internal: neighbors: @@ -2376,11 +2316,14 @@ direction_out_action: additional_paths: - # Install BGP backup path. This setting is used only for `router_bgp.address_family_ipv4.bgp.additional_paths` and `router_bgp.address_family_ipv6.bgp.additional_paths. + # Install BGP backup path. install: - # Allow additional path with ECMP primary path. This setting is used only for `router_bgp.address_family_ipv4.bgp.additional_paths` and `router_bgp.address_family_ipv6.bgp.additional_paths. + # Allow additional path with ECMP primary path. install_ecmp_primary: + + # Apply the configurations only to the routes matching the prefix list. + prefix_list: receive: # Select an option to send multiple paths for same prefix through bgp updates. @@ -2388,7 +2331,7 @@ # backup: Best path and installed backup path. # ecmp: All paths in best path ECMP group. # limit: Limit to n eligible paths. - send: + send: # Amount of ECMP paths to send. `send` must be set to `ecmp` for this settings. If this key-value pair is not set, it will send all paths in best ECMP group. send_ecmp_limit: @@ -2396,9 +2339,6 @@ # Number of paths to send through bgp updates. `send` must be set to `limit` for this setting. send_limit: - # Apply the configurations only to the routes matching the prefix list. - prefix_list: - # Allow redistribution of iBGP routes into an Interior Gateway Protocol (IGP). EOS default is true. redistribute_internal: neighbors: 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 3515a667e64..bd8e472a526 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 @@ -603,18 +603,18 @@ router bgp {{ router_bgp.as }} {% 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_ecmp_limit is arista.avd.defined and router_bgp.address_family_evpn.bgp_additional_paths.send | arista.avd.default == 'ecmp' %} -{% set evpn_add_path = '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 and router_bgp.address_family_evpn.bgp_additional_paths.send | arista.avd.default == 'limit' %} -{% set evpn_add_path = 'bgp additional-paths send limit ' ~ router_bgp.address_family_evpn.bgp_additional_paths.send_limit %} -{% elif router_bgp.address_family_evpn.bgp_additional_paths.send is arista.avd.defined %} -{% set evpn_add_path = 'bgp additional-paths send ' ~ router_bgp.address_family_evpn.bgp_additional_paths.send %} -{% endif %} -{% if router_bgp.address_family_evpn.bgp_additional_paths.prefix_list is arista.avd.defined and evpn_add_path is arista.avd.defined %} -{% set evpn_add_path = evpn_add_path ~ ' ' ~ router_bgp.address_family_evpn.bgp_additional_paths.prefix_list %} -{% endif %} -{% if evpn_add_path is arista.avd.defined %} +{% if router_bgp.address_family_evpn.bgp_additional_paths.send is arista.avd.defined %} +{% set evpn_add_path = 'bgp additional-paths send' %} +{% if router_bgp.address_family_evpn.bgp_additional_paths.send_ecmp_limit is arista.avd.defined and router_bgp.address_family_evpn.bgp_additional_paths.send == 'ecmp' %} +{% set evpn_add_path = evpn_add_path ~ ' 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 and router_bgp.address_family_evpn.bgp_additional_paths.send == 'limit' %} +{% set evpn_add_path = evpn_add_path ~ ' limit ' ~ router_bgp.address_family_evpn.bgp_additional_paths.send_limit %} +{% else %} +{% set evpn_add_path = evpn_add_path ~ ' ' ~ router_bgp.address_family_evpn.bgp_additional_paths.send %} +{% endif %} +{% if evpn_add_path is arista.avd.defined %} {{ evpn_add_path }} +{% endif %} {% endif %} {% if router_bgp.address_family_evpn.next_hop_unchanged is arista.avd.defined(true) %} bgp next-hop-unchanged @@ -691,18 +691,22 @@ 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_ecmp_limit is arista.avd.defined and peer_group.additional_paths.send | arista.avd.default == 'ecmp' %} -{% set evpn_pg_add_path = '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 and peer_group.additional_paths.send | arista.avd.default == 'limit' %} -{% set evpn_pg_add_path = 'neighbor ' ~ peer_group.name ~ ' additional-paths send limit ' ~ peer_group.additional_paths.send_limit %} -{% elif peer_group.additional_paths.send is arista.avd.defined %} -{% set evpn_pg_add_path = '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 evpn_pg_add_path is arista.avd.defined %} -{% set evpn_pg_add_path = evpn_pg_add_path ~ ' ' ~ peer_group.additional_paths.prefix_list %} -{% endif %} -{% if evpn_pg_add_path is arista.avd.defined %} +{% if peer_group.additional_paths.send is arista.avd.defined %} +{% set evpn_pg_add_path = 'neighbor ' ~ peer_group.name ~ ' additional-paths send' %} +{% if peer_group.additional_paths.send == 'null'%} +{% set evpn_pg_add_path = 'no ' ~ evpn_pg_add_path ~ ' any' %} +{% else %} +{% if peer_group.additional_paths.send_ecmp_limit is arista.avd.defined and peer_group.additional_paths.send == 'ecmp' %} +{% set evpn_pg_add_path = evpn_pg_add_path ~ ' ecmp limit ' ~ peer_group.additional_paths.send_ecmp_limit %} +{% elif peer_group.additional_paths.send_limit is arista.avd.defined and peer_group.additional_paths.send == 'limit' %} +{% set evpn_pg_add_path = evpn_pg_add_path ~ ' limit ' ~ peer_group.additional_paths.send_limit %} +{% else %} +{% set evpn_pg_add_path = evpn_pg_add_path ~ ' ' ~ peer_group.additional_paths.send %} +{% endif %} +{% endif %} +{% if evpn_pg_add_path is arista.avd.defined %} {{ evpn_pg_add_path }} +{% endif %} {% endif %} {% if peer_group.domain_remote is arista.avd.defined(true) %} neighbor {{ peer_group.name }} domain remote @@ -1265,18 +1269,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_ecmp_limit is arista.avd.defined and router_bgp.address_family_path_selection.bgp.additional_paths.send | arista.avd.default == 'ecmp' %} -{% set ps_add_path = '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 and router_bgp.address_family_path_selection.bgp.additional_paths.send | arista.avd.default == 'limit' %} -{% set ps_add_path = 'bgp additional-paths send limit ' ~ router_bgp.address_family_path_selection.bgp.additional_paths.send_limit %} -{% elif router_bgp.address_family_path_selection.bgp.additional_paths.send is arista.avd.defined %} -{% set ps_add_path = 'bgp additional-paths send ' ~ router_bgp.address_family_path_selection.bgp.additional_paths.send %} -{% endif %} -{% if router_bgp.address_family_path_selection.bgp.additional_paths.prefix_list is arista.avd.defined and ps_add_path is arista.avd.defined %} -{% set ps_add_path = ps_add_path ~ ' ' ~ router_bgp.address_family_path_selection.bgp.additional_paths.prefix_list %} -{% endif %} -{% if ps_add_path is arista.avd.defined %} +{% if router_bgp.address_family_path_selection.bgp.additional_paths.send is arista.avd.defined %} +{% set ps_add_path = 'bgp additional-paths send' %} +{% if router_bgp.address_family_path_selection.bgp.additional_paths.send_ecmp_limit is arista.avd.defined and router_bgp.address_family_path_selection.bgp.additional_paths.send == 'ecmp' %} +{% set ps_add_path = ps_add_path ~ ' 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 and router_bgp.address_family_path_selection.bgp.additional_paths.send | arista.avd.default == 'limit' %} +{% set ps_add_path = ps_add_path ~ ' send limit ' ~ router_bgp.address_family_path_selection.bgp.additional_paths.send_limit %} +{% else %} +{% set ps_add_path = ps_add_path ~ ' ' ~ router_bgp.address_family_path_selection.bgp.additional_paths.send %} +{% endif %} +{% if ps_add_path is arista.avd.defined %} {{ ps_add_path }} +{% 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) %} @@ -1287,18 +1291,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_ecmp_limit is arista.avd.defined and peer_group.additional_paths.send | arista.avd.default == 'ecmp' %} -{% set ps_pg_add_path = '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 and peer_group.additional_paths.send | arista.avd.default == 'limit' %} -{% set ps_pg_add_path = 'neighbor ' ~ peer_group.name ~ ' additional-paths send limit ' ~ peer_group.additional_paths.send_limit %} -{% elif peer_group.additional_paths.send is arista.avd.defined %} -{% set ps_pg_add_path = '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 ps_pg_add_path is arista.avd.defined %} -{% set ps_pg_add_path = ps_pg_add_path ~ ' ' ~ peer_group.additional_paths.prefix_list %} -{% endif %} -{% if ps_pg_add_path is arista.avd.defined %} +{% if peer_group.additional_paths.send is arista.avd.defined %} +{% set ps_pg_add_path = 'neighbor ' ~ peer_group.name ~ ' additional-paths send' %} +{% if peer_group.additional_paths.send_ecmp_limit is arista.avd.defined and peer_group.additional_paths.send | arista.avd.default == 'ecmp' %} +{% set ps_pg_add_path = ps_pg_add_path ~ ' ecmp limit ' ~ peer_group.additional_paths.send_ecmp_limit %} +{% elif peer_group.additional_paths.send_limit is arista.avd.defined and peer_group.additional_paths.send | arista.avd.default == 'limit' %} +{% set ps_pg_add_path = ps_pg_add_path ~ ' limit ' ~ peer_group.additional_paths.send_limit %} +{% else %} +{% set ps_pg_add_path = ps_pg_add_path ~ ' ' ~ peer_group.additional_paths.send %} +{% endif %} +{% if ps_pg_add_path is arista.avd.defined %} {{ ps_pg_add_path }} +{% endif %} {% endif %} {% endfor %} {% for neighbor in router_bgp.address_family_path_selection.neighbors | arista.avd.natural_sort('ip_address') %} @@ -1310,18 +1314,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_ecmp_limit is arista.avd.defined and neighbor.additional_paths.send | arista.avd.default == 'ecmp' %} -{% set ps_neighbor_add_path = '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 and neighbor.additional_paths.send | arista.avd.default == 'limit' %} -{% set ps_neighbor_add_path = 'neighbor ' ~ neighbor.ip_address ~ ' additional-paths send limit ' ~ neighbor.additional_paths.send_limit %} -{% elif neighbor.additional_paths.send is arista.avd.defined %} -{% set ps_neighbor_add_path = 'neighbor ' ~ neighbor.ip_address ~ ' additional-paths send ' ~ neighbor.additional_paths.send %} -{% endif %} -{% if neighbor.additional_paths.prefix_list is arista.avd.defined and ps_neighbor_add_path is arista.avd.defined %} -{% set ps_neighbor_add_path = ps_neighbor_add_path ~ ' ' ~ neighbor.additional_paths.prefix_list %} -{% endif %} -{% if ps_neighbor_add_path is arista.avd.defined %} +{% if neighbor.additional_paths.send is arista.avd.defined %} +{% set ps_neighbor_add_path = 'neighbor ' ~ neighbor.ip_address ~ ' additional-paths send' %} +{% if neighbor.additional_paths.send_ecmp_limit is arista.avd.defined and neighbor.additional_paths.send | arista.avd.default == 'ecmp' %} +{% set ps_neighbor_add_path = ps_neighbor_add_path ~ ' ecmp limit ' ~ neighbor.additional_paths.send_ecmp_limit %} +{% elif neighbor.additional_paths.send_limit is arista.avd.defined and neighbor.additional_paths.send == 'limit' %} +{% set ps_neighbor_add_path = ps_neighbor_add_path ~ ' limit ' ~ neighbor.additional_paths.send_limit %} +{% else %} +{% set ps_neighbor_add_path = ps_neighbor_add_path ~ ' ' ~ neighbor.additional_paths.send %} +{% endif %} +{% if ps_neighbor_add_path is arista.avd.defined %} {{ ps_neighbor_add_path }} +{% endif %} {% endif %} {% endfor %} {% endif %} @@ -1811,18 +1815,21 @@ 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_ecmp_limit is arista.avd.defined and vrf.address_family_ipv4.bgp.additional_paths.send | arista.avd.default == 'ecmp' %} -{% set ipv4_add_path = '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 and vrf.address_family_ipv4.bgp.additional_paths.send | arista.avd.default == 'limit' %} -{% set ipv4_add_path = 'bgp additional-paths send limit ' ~ vrf.address_family_ipv4.bgp.additional_paths.send_limit %} -{% elif vrf.address_family_ipv4.bgp.additional_paths.send is arista.avd.defined %} -{% set ipv4_add_path = 'bgp additional-paths send ' ~ vrf.address_family_ipv4.bgp.additional_paths.send %} -{% endif %} -{% if vrf.address_family_ipv4.bgp.additional_paths.prefix_list is arista.avd.defined and ipv4_add_path is arista.avd.defined %} -{% set ipv4_add_path = ipv4_add_path ~ ' ' ~ vrf.address_family_ipv4.bgp.additional_paths.prefix_list %} -{% endif %} -{% if ipv4_add_path is arista.avd.defined %} +{% if vrf.address_family_ipv4.bgp.additional_paths.send is arista.avd.defined %} +{% set ipv4_add_path = 'bgp additional-paths send' %} +{% if vrf.address_family_ipv4.bgp.additional_paths.send_ecmp_limit is arista.avd.defined and vrf.address_family_ipv4.bgp.additional_paths.send == 'ecmp' %} +{% set ipv4_add_path = ipv4_add_path ~ ' 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 and vrf.address_family_ipv4.bgp.additional_paths.send == 'limit' %} +{% set ipv4_add_path = ipv4_add_path ~ ' limit ' ~ vrf.address_family_ipv4.bgp.additional_paths.send_limit %} +{% else %} +{% set ipv4_add_path = ipv4_add_path ~ ' ' ~ vrf.address_family_ipv4.bgp.additional_paths.send %} +{% endif %} +{% if vrf.address_family_ipv4.bgp.additional_paths.prefix_list is arista.avd.defined and ipv4_add_path is arista.avd.defined %} +{% set ipv4_add_path = ipv4_add_path ~ ' ' ~ vrf.address_family_ipv4.bgp.additional_paths.prefix_list %} +{% endif %} +{% if ipv4_add_path is arista.avd.defined %} {{ ipv4_add_path }} +{% endif %} {% endif %} {% for neighbor in vrf.address_family_ipv4.neighbors | arista.avd.natural_sort('ip_address') %} {% if neighbor.activate is arista.avd.defined(true) %} @@ -1963,18 +1970,21 @@ 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_ecmp_limit is arista.avd.defined and vrf.address_family_ipv6.bgp.additional_paths.send | arista.avd.default == 'ecmp' %} -{% set vrf_add_path = '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 and vrf.address_family_ipv6.bgp.additional_paths.send | arista.avd.default == 'limit' %} -{% set vrf_add_path = 'bgp additional-paths send limit ' ~ vrf.address_family_ipv6.bgp.additional_paths.send_limit %} -{% elif vrf.address_family_ipv6.bgp.additional_paths.send is arista.avd.defined %} -{% set vrf_add_path = 'bgp additional-paths send ' ~ vrf.address_family_ipv6.bgp.additional_paths.send %} -{% endif %} -{% if vrf.address_family_ipv6.bgp.additional_paths.prefix_list is arista.avd.defined and vrf_add_path is arista.avd.defined %} -{% set vrf_add_path = vrf_add_path ~ ' ' ~ vrf.address_family_ipv6.bgp.additional_paths.prefix_list %} -{% endif %} -{% if vrf_add_path is arista.avd.defined %} +{% if vrf.address_family_ipv6.bgp.additional_paths.send is arista.avd.defined %} +{% set vrf_add_path = 'bgp additional-paths send' %} +{% if vrf.address_family_ipv6.bgp.additional_paths.send_ecmp_limit is arista.avd.defined and vrf.address_family_ipv6.bgp.additional_paths.send == 'ecmp' %} +{% set vrf_add_path = vrf_add_path ~ ' 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 and vrf.address_family_ipv6.bgp.additional_paths.send == 'limit' %} +{% set vrf_add_path = vrf_add_path ~ ' limit ' ~ vrf.address_family_ipv6.bgp.additional_paths.send_limit %} +{% else %} +{% set vrf_add_path = vrf_add_path ~ ' ' ~ vrf.address_family_ipv6.bgp.additional_paths.send %} +{% endif %} +{% if vrf.address_family_ipv6.bgp.additional_paths.prefix_list is arista.avd.defined and vrf_add_path is arista.avd.defined %} +{% set vrf_add_path = vrf_add_path ~ ' ' ~ vrf.address_family_ipv6.bgp.additional_paths.prefix_list %} +{% endif %} +{% if vrf_add_path is arista.avd.defined %} {{ vrf_add_path }} +{% endif %} {% endif %} {% for neighbor in vrf.address_family_ipv6.neighbors | arista.avd.natural_sort('ip_address') %} {% if neighbor.activate is arista.avd.defined(true) %} 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 350bbf811e3..0c0f370bb5b 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 @@ -14435,6 +14435,17 @@ keys: additional_paths: type: dict $ref: eos_cli_config_gen#/$defs/additional_paths + keys: + install: + type: bool + description: Install BGP backup path. + install_ecmp_primary: + type: bool + description: Allow additional path with ECMP primary path. + prefix_list: + type: str + description: Apply the configurations only to the routes + matching the prefix list. redistribute_internal: type: bool description: Allow redistribution of iBGP routes into an Interior @@ -14566,6 +14577,17 @@ keys: additional_paths: type: dict $ref: eos_cli_config_gen#/$defs/additional_paths + keys: + install: + type: bool + description: Install BGP backup path. + install_ecmp_primary: + type: bool + description: Allow additional path with ECMP primary path. + prefix_list: + type: str + description: Apply the configurations only to the routes + matching the prefix list. redistribute_internal: type: bool description: Allow redistribution of iBGP routes into an Interior @@ -19057,15 +19079,6 @@ $defs: additional_paths: type: dict keys: - install: - type: bool - description: Install BGP backup path. This setting is used only for `router_bgp.address_family_ipv4.bgp.additional_paths` - and `router_bgp.address_family_ipv6.bgp.additional_paths. - install_ecmp_primary: - type: bool - description: Allow additional path with ECMP primary path. This setting is - used only for `router_bgp.address_family_ipv4.bgp.additional_paths` and - `router_bgp.address_family_ipv6.bgp.additional_paths. receive: type: bool send: @@ -19085,6 +19098,7 @@ $defs: - backup - ecmp - limit + - 'null' send_ecmp_limit: type: int description: Amount of ECMP paths to send. `send` must be set to `ecmp` for @@ -19102,10 +19116,6 @@ $defs: - str min: 2 max: 64 - prefix_list: - type: str - description: Apply the configurations only to the routes matching the prefix - list. application_traffic_recognition_application: type: dict keys: diff --git a/python-avd/pyavd/_eos_cli_config_gen/schema/schema_fragments/defs_additional_paths.schema.yml b/python-avd/pyavd/_eos_cli_config_gen/schema/schema_fragments/defs_additional_paths.schema.yml index 299b4773b91..052419f473e 100644 --- a/python-avd/pyavd/_eos_cli_config_gen/schema/schema_fragments/defs_additional_paths.schema.yml +++ b/python-avd/pyavd/_eos_cli_config_gen/schema/schema_fragments/defs_additional_paths.schema.yml @@ -6,12 +6,6 @@ $defs: additional_paths: type: dict keys: - install: - type: bool - description: Install BGP backup path. This setting is used only for `router_bgp.address_family_ipv4.bgp.additional_paths` and `router_bgp.address_family_ipv6.bgp.additional_paths. - install_ecmp_primary: - type: bool - description: Allow additional path with ECMP primary path. This setting is used only for `router_bgp.address_family_ipv4.bgp.additional_paths` and `router_bgp.address_family_ipv6.bgp.additional_paths. receive: type: bool send: @@ -22,7 +16,7 @@ $defs: backup: Best path and installed backup path. ecmp: All paths in best path ECMP group. limit: Limit to n eligible paths. - valid_values: [ 'any', 'backup', 'ecmp', 'limit' ] + valid_values: [ 'any', 'backup', 'ecmp', 'limit', 'null' ] send_ecmp_limit: type: int description: Amount of ECMP paths to send. `send` must be set to `ecmp` for this settings. If this key-value pair is not set, it will send all paths in best ECMP group. @@ -37,6 +31,3 @@ $defs: - str min: 2 max: 64 - prefix_list: - type: str - description: Apply the configurations only to the routes matching the prefix list. 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 77a240e472e..ede1ea57517 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 @@ -2632,6 +2632,16 @@ keys: additional_paths: type: dict $ref: "eos_cli_config_gen#/$defs/additional_paths" + keys: + install: + type: bool + description: Install BGP backup path. + install_ecmp_primary: + type: bool + description: Allow additional path with ECMP primary path. + prefix_list: + type: str + description: Apply the configurations only to the routes matching the prefix list. redistribute_internal: type: bool description: Allow redistribution of iBGP routes into an Interior Gateway Protocol (IGP). EOS default is true. @@ -2755,6 +2765,16 @@ keys: additional_paths: type: dict $ref: "eos_cli_config_gen#/$defs/additional_paths" + keys: + install: + type: bool + description: Install BGP backup path. + install_ecmp_primary: + type: bool + description: Allow additional path with ECMP primary path. + prefix_list: + type: str + description: Apply the configurations only to the routes matching the prefix list. redistribute_internal: type: bool description: Allow redistribution of iBGP routes into an Interior Gateway Protocol (IGP). EOS default is true. From 05ba9c3b0e96f3e125dd05d8ec8a4f8b7f759b95 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 3 Sep 2024 10:45:01 +0000 Subject: [PATCH 07/55] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- .../schema/schema_fragments/router_bgp.schema.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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 ede1ea57517..ba7cfe825de 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 @@ -2638,7 +2638,7 @@ keys: description: Install BGP backup path. install_ecmp_primary: type: bool - description: Allow additional path with ECMP primary path. + description: Allow additional path with ECMP primary path. prefix_list: type: str description: Apply the configurations only to the routes matching the prefix list. @@ -2771,7 +2771,7 @@ keys: description: Install BGP backup path. install_ecmp_primary: type: bool - description: Allow additional path with ECMP primary path. + description: Allow additional path with ECMP primary path. prefix_list: type: str description: Apply the configurations only to the routes matching the prefix list. From 1b7e456beda42160c8f2332e9e5d5c2ef918c5e6 Mon Sep 17 00:00:00 2001 From: Laxmikant Chintakindi Date: Tue, 3 Sep 2024 16:40:05 +0530 Subject: [PATCH 08/55] FIX CI. --- .../pyavd/_eos_cli_config_gen/j2templates/eos/router-bgp.j2 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 bd8e472a526..f9a369b6443 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 @@ -693,7 +693,7 @@ router bgp {{ router_bgp.as }} {% endif %} {% if peer_group.additional_paths.send is arista.avd.defined %} {% set evpn_pg_add_path = 'neighbor ' ~ peer_group.name ~ ' additional-paths send' %} -{% if peer_group.additional_paths.send == 'null'%} +{% if peer_group.additional_paths.send == 'null' %} {% set evpn_pg_add_path = 'no ' ~ evpn_pg_add_path ~ ' any' %} {% else %} {% if peer_group.additional_paths.send_ecmp_limit is arista.avd.defined and peer_group.additional_paths.send == 'ecmp' %} From 5b53464fe616e3f42942a974368c042fabc988f8 Mon Sep 17 00:00:00 2001 From: Laxmikant Chintakindi Date: Wed, 4 Sep 2024 12:15:10 +0530 Subject: [PATCH 09/55] Update porting guide. --- .../arista/avd/docs/porting-guides/5.x.x.md | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) 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 c82ba9a0a6b..db1ed38c53a 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 @@ -886,6 +886,46 @@ port_channel_interfaces: + protocol: unmatched ``` +### Data model for BGP additional-paths in `router_bgp.address_family_evpn/_vrfs[].ipv4/_vrfs[].ipv6/_path_selection` has been changed + +In AVD 5.0.0, the data models for `router_bgp.address_family_evpn.vrfs[].address_family_ipv4.bgp.additional_paths`, `router_bgp.address_family_evpn.vrf[].address_family_ipv6.bgp.additional_paths`, `router_bgp.address_family_evpn.address_family_evpn.bgp.peer_groups[].additional_paths`, `router_bgp.address_family_evpn.address_family_evpn.bgp_additional_paths`, `router_bgp.address_family_evpn.address_family_path_selection.bgp.additional_paths`, `router_bgp.address_family_evpn.address_family_path_selection.neighbors[].additional_paths` have been changed. + +Added support for filtering of additional_paths using prefix-lists in `router_bgp.address_family_evpn.vrfs[].address_family_ipv4.bgp.additional_paths` and `router_bgp.address_family_evpn.vrfs[].address_family_ipv6.bgp.additional_paths`. + +```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_ecmp_limit: 100 + <...> + address_family_ipv6: + bgp: + additional_paths: +- send: +- limit: 100 ++ send: limit ++ send_ecmp_limit: 100 + <...> + address_family_evpn: + peer_groups: + additional_paths: +- send: +- any: false ++ send: disabled +``` + ### Removal of deprecated data models The following data model keys have been removed from `eos_cli_config_gen` in v5.0.0. From 1f73bb11839b00595dd809c2436f20cf11a6f40a Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Wed, 4 Sep 2024 06:48:46 +0000 Subject: [PATCH 10/55] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- ansible_collections/arista/avd/docs/porting-guides/5.x.x.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 db1ed38c53a..016cc2a7e6a 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 @@ -897,7 +897,7 @@ router_bgp: address_family_path_selection: bgp: additional_paths: -- send: +- send: - any: true + send: any <...> From f2ff771d8afbaf04af5b378d079e387acc74ce03 Mon Sep 17 00:00:00 2001 From: Laxmikant Chintakindi Date: Mon, 26 Aug 2024 23:43:16 +0530 Subject: [PATCH 11/55] Adding changes. --- .../documentation/devices/router-bgp-evpn.md | 1 - .../intended/configs/router-bgp-evpn.cfg | 1 - .../docs/tables/router-bgp.md | 8 ++ .../j2templates/eos/router-bgp.j2 | 118 ++++++------------ .../defs_additional_paths.schema.yml | 12 +- .../schema_fragments/router_bgp.schema.yml | 20 --- 6 files changed, 52 insertions(+), 108 deletions(-) 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 38325299009..4733fb80b27 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 @@ -269,7 +269,6 @@ 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 neighbor EVPN-OVERLAY-PEERS default-route neighbor EVPN-OVERLAY-PEERS activate neighbor EVPN-OVERLAY-PEERS domain remote 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 12712f7c156..2377904e00c 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 @@ -110,7 +110,6 @@ 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 neighbor EVPN-OVERLAY-PEERS default-route neighbor EVPN-OVERLAY-PEERS activate neighbor EVPN-OVERLAY-PEERS domain remote 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 b821f13a912..ddf886c4304 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 @@ -306,6 +306,8 @@ | [        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 | | | [        additional_paths](## "router_bgp.address_family_evpn.peer_groups.[].additional_paths") | Dictionary | | | | | + | [          install](## "router_bgp.address_family_evpn.peer_groups.[].additional_paths.install") | Boolean | | | | | + | [          install_ecmp_primary](## "router_bgp.address_family_evpn.peer_groups.[].additional_paths.install_ecmp_primary") | Boolean | | | | | | [          receive](## "router_bgp.address_family_evpn.peer_groups.[].additional_paths.receive") | Boolean | | | | | | [          send](## "router_bgp.address_family_evpn.peer_groups.[].additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- null | 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. | | [          send_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. `send` must be set to `ecmp` for this settings. If this key-value pair is not set, it will send all paths in best ECMP group. | @@ -519,6 +521,8 @@ | [  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 | | | | | + | [        install](## "router_bgp.address_family_path_selection.bgp.additional_paths.install") | Boolean | | | | | + | [        install_ecmp_primary](## "router_bgp.address_family_path_selection.bgp.additional_paths.install_ecmp_primary") | Boolean | | | | | | [        receive](## "router_bgp.address_family_path_selection.bgp.additional_paths.receive") | Boolean | | | | | | [        send](## "router_bgp.address_family_path_selection.bgp.additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- null | 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. | | [        send_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. `send` must be set to `ecmp` for this settings. If this key-value pair is not set, it will send all paths in best ECMP group. | @@ -1428,6 +1432,8 @@ domain_remote: encapsulation: additional_paths: + install: + install_ecmp_primary: receive: # Select an option to send multiple paths for same prefix through bgp updates. @@ -1830,6 +1836,8 @@ address_family_path_selection: bgp: additional_paths: + install: + install_ecmp_primary: receive: # Select an option to send multiple paths for same prefix through bgp updates. 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 f9a369b6443..f46fd5560f1 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 @@ -691,22 +691,12 @@ 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 is arista.avd.defined %} -{% set evpn_pg_add_path = 'neighbor ' ~ peer_group.name ~ ' additional-paths send' %} -{% if peer_group.additional_paths.send == 'null' %} -{% set evpn_pg_add_path = 'no ' ~ evpn_pg_add_path ~ ' any' %} -{% else %} -{% if peer_group.additional_paths.send_ecmp_limit is arista.avd.defined and peer_group.additional_paths.send == 'ecmp' %} -{% set evpn_pg_add_path = evpn_pg_add_path ~ ' ecmp limit ' ~ peer_group.additional_paths.send_ecmp_limit %} -{% elif peer_group.additional_paths.send_limit is arista.avd.defined and peer_group.additional_paths.send == 'limit' %} -{% set evpn_pg_add_path = evpn_pg_add_path ~ ' limit ' ~ peer_group.additional_paths.send_limit %} -{% else %} -{% set evpn_pg_add_path = evpn_pg_add_path ~ ' ' ~ peer_group.additional_paths.send %} -{% endif %} -{% endif %} -{% if evpn_pg_add_path is arista.avd.defined %} - {{ evpn_pg_add_path }} -{% endif %} +{% if 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 }} +{% elif peer_group.additional_paths.send is arista.avd.defined %} + neighbor {{ peer_group.name }} additional-paths send {{ peer_group.additional_paths.send }} {% endif %} {% if peer_group.domain_remote is arista.avd.defined(true) %} neighbor {{ peer_group.name }} domain remote @@ -1269,18 +1259,12 @@ 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 is arista.avd.defined %} -{% set ps_add_path = 'bgp additional-paths send' %} -{% if router_bgp.address_family_path_selection.bgp.additional_paths.send_ecmp_limit is arista.avd.defined and router_bgp.address_family_path_selection.bgp.additional_paths.send == 'ecmp' %} -{% set ps_add_path = ps_add_path ~ ' 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 and router_bgp.address_family_path_selection.bgp.additional_paths.send | arista.avd.default == 'limit' %} -{% set ps_add_path = ps_add_path ~ ' send limit ' ~ router_bgp.address_family_path_selection.bgp.additional_paths.send_limit %} -{% else %} -{% set ps_add_path = ps_add_path ~ ' ' ~ router_bgp.address_family_path_selection.bgp.additional_paths.send %} -{% endif %} -{% if ps_add_path is arista.avd.defined %} - {{ ps_add_path }} -{% endif %} +{% if 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 }} +{% elif router_bgp.address_family_path_selection.bgp.additional_paths.send is arista.avd.defined %} + bgp additional-paths send {{ router_bgp.address_family_path_selection.bgp.additional_paths.send }} {% 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) %} @@ -1291,18 +1275,12 @@ 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 is arista.avd.defined %} -{% set ps_pg_add_path = 'neighbor ' ~ peer_group.name ~ ' additional-paths send' %} -{% if peer_group.additional_paths.send_ecmp_limit is arista.avd.defined and peer_group.additional_paths.send | arista.avd.default == 'ecmp' %} -{% set ps_pg_add_path = ps_pg_add_path ~ ' ecmp limit ' ~ peer_group.additional_paths.send_ecmp_limit %} -{% elif peer_group.additional_paths.send_limit is arista.avd.defined and peer_group.additional_paths.send | arista.avd.default == 'limit' %} -{% set ps_pg_add_path = ps_pg_add_path ~ ' limit ' ~ peer_group.additional_paths.send_limit %} -{% else %} -{% set ps_pg_add_path = ps_pg_add_path ~ ' ' ~ peer_group.additional_paths.send %} -{% endif %} -{% if ps_pg_add_path is arista.avd.defined %} - {{ ps_pg_add_path }} -{% endif %} +{% if 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 }} +{% elif peer_group.additional_paths.send is arista.avd.defined %} + neighbor {{ peer_group.name }} additional-paths send {{ peer_group.additional_paths.send }} {% endif %} {% endfor %} {% for neighbor in router_bgp.address_family_path_selection.neighbors | arista.avd.natural_sort('ip_address') %} @@ -1314,18 +1292,12 @@ 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 is arista.avd.defined %} -{% set ps_neighbor_add_path = 'neighbor ' ~ neighbor.ip_address ~ ' additional-paths send' %} -{% if neighbor.additional_paths.send_ecmp_limit is arista.avd.defined and neighbor.additional_paths.send | arista.avd.default == 'ecmp' %} -{% set ps_neighbor_add_path = ps_neighbor_add_path ~ ' ecmp limit ' ~ neighbor.additional_paths.send_ecmp_limit %} -{% elif neighbor.additional_paths.send_limit is arista.avd.defined and neighbor.additional_paths.send == 'limit' %} -{% set ps_neighbor_add_path = ps_neighbor_add_path ~ ' limit ' ~ neighbor.additional_paths.send_limit %} -{% else %} -{% set ps_neighbor_add_path = ps_neighbor_add_path ~ ' ' ~ neighbor.additional_paths.send %} -{% endif %} -{% if ps_neighbor_add_path is arista.avd.defined %} - {{ ps_neighbor_add_path }} -{% endif %} +{% if 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 }} +{% elif neighbor.additional_paths.send is arista.avd.defined %} + neighbor {{ neighbor.ip_address }} additional-paths send {{ neighbor.additional_paths.send }} {% endif %} {% endfor %} {% endif %} @@ -1815,21 +1787,12 @@ 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 is arista.avd.defined %} -{% set ipv4_add_path = 'bgp additional-paths send' %} -{% if vrf.address_family_ipv4.bgp.additional_paths.send_ecmp_limit is arista.avd.defined and vrf.address_family_ipv4.bgp.additional_paths.send == 'ecmp' %} -{% set ipv4_add_path = ipv4_add_path ~ ' 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 and vrf.address_family_ipv4.bgp.additional_paths.send == 'limit' %} -{% set ipv4_add_path = ipv4_add_path ~ ' limit ' ~ vrf.address_family_ipv4.bgp.additional_paths.send_limit %} -{% else %} -{% set ipv4_add_path = ipv4_add_path ~ ' ' ~ vrf.address_family_ipv4.bgp.additional_paths.send %} -{% endif %} -{% if vrf.address_family_ipv4.bgp.additional_paths.prefix_list is arista.avd.defined and ipv4_add_path is arista.avd.defined %} -{% set ipv4_add_path = ipv4_add_path ~ ' ' ~ vrf.address_family_ipv4.bgp.additional_paths.prefix_list %} -{% endif %} -{% if ipv4_add_path is arista.avd.defined %} - {{ ipv4_add_path }} -{% endif %} +{% if 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 }} +{% elif vrf.address_family_ipv4.bgp.additional_paths.send is arista.avd.defined %} + bgp additional-paths send {{ vrf.address_family_ipv4.bgp.additional_paths.send }} {% endif %} {% for neighbor in vrf.address_family_ipv4.neighbors | arista.avd.natural_sort('ip_address') %} {% if neighbor.activate is arista.avd.defined(true) %} @@ -1970,21 +1933,12 @@ 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 is arista.avd.defined %} -{% set vrf_add_path = 'bgp additional-paths send' %} -{% if vrf.address_family_ipv6.bgp.additional_paths.send_ecmp_limit is arista.avd.defined and vrf.address_family_ipv6.bgp.additional_paths.send == 'ecmp' %} -{% set vrf_add_path = vrf_add_path ~ ' 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 and vrf.address_family_ipv6.bgp.additional_paths.send == 'limit' %} -{% set vrf_add_path = vrf_add_path ~ ' limit ' ~ vrf.address_family_ipv6.bgp.additional_paths.send_limit %} -{% else %} -{% set vrf_add_path = vrf_add_path ~ ' ' ~ vrf.address_family_ipv6.bgp.additional_paths.send %} -{% endif %} -{% if vrf.address_family_ipv6.bgp.additional_paths.prefix_list is arista.avd.defined and vrf_add_path is arista.avd.defined %} -{% set vrf_add_path = vrf_add_path ~ ' ' ~ vrf.address_family_ipv6.bgp.additional_paths.prefix_list %} -{% endif %} -{% if vrf_add_path is arista.avd.defined %} - {{ vrf_add_path }} -{% endif %} +{% if 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 }} +{% elif vrf.address_family_ipv6.bgp.additional_paths.send is arista.avd.defined %} + bgp additional-paths send {{ vrf.address_family_ipv6.bgp.additional_paths.send }} {% endif %} {% for neighbor in vrf.address_family_ipv6.neighbors | arista.avd.natural_sort('ip_address') %} {% if neighbor.activate is arista.avd.defined(true) %} diff --git a/python-avd/pyavd/_eos_cli_config_gen/schema/schema_fragments/defs_additional_paths.schema.yml b/python-avd/pyavd/_eos_cli_config_gen/schema/schema_fragments/defs_additional_paths.schema.yml index 052419f473e..df92442cd3c 100644 --- a/python-avd/pyavd/_eos_cli_config_gen/schema/schema_fragments/defs_additional_paths.schema.yml +++ b/python-avd/pyavd/_eos_cli_config_gen/schema/schema_fragments/defs_additional_paths.schema.yml @@ -6,6 +6,10 @@ $defs: additional_paths: type: dict keys: + install: + type: bool + install_ecmp_primary: + type: bool receive: type: bool send: @@ -15,18 +19,18 @@ $defs: 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. - valid_values: [ 'any', 'backup', 'ecmp', 'limit', 'null' ] + limit: Limit to n eligible paths + valid_values: [ 'any', 'backup', 'ecmp', 'limit' ] send_ecmp_limit: type: int - description: Amount of ECMP paths to send. `send` must be set to `ecmp` for this settings. If this key-value pair is not set, it will send all paths in best ECMP group. + description: Amount of ECMP paths to send. 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(The value of 'send' key must be 'limit'). 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 ba7cfe825de..77a240e472e 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 @@ -2632,16 +2632,6 @@ keys: additional_paths: type: dict $ref: "eos_cli_config_gen#/$defs/additional_paths" - keys: - install: - type: bool - description: Install BGP backup path. - install_ecmp_primary: - type: bool - description: Allow additional path with ECMP primary path. - prefix_list: - type: str - description: Apply the configurations only to the routes matching the prefix list. redistribute_internal: type: bool description: Allow redistribution of iBGP routes into an Interior Gateway Protocol (IGP). EOS default is true. @@ -2765,16 +2755,6 @@ keys: additional_paths: type: dict $ref: "eos_cli_config_gen#/$defs/additional_paths" - keys: - install: - type: bool - description: Install BGP backup path. - install_ecmp_primary: - type: bool - description: Allow additional path with ECMP primary path. - prefix_list: - type: str - description: Apply the configurations only to the routes matching the prefix list. redistribute_internal: type: bool description: Allow redistribution of iBGP routes into an Interior Gateway Protocol (IGP). EOS default is true. From 4b04aba9e3d44449f6d065cea7dc4fc07fc9ac7f Mon Sep 17 00:00:00 2001 From: Laxmikant Chintakindi Date: Mon, 2 Sep 2024 18:12:04 +0530 Subject: [PATCH 12/55] Address comments. --- .../documentation/devices/router-bgp-evpn.md | 2 +- .../devices/router-bgp-path-selection.md | 6 +- .../intended/configs/router-bgp-evpn.cfg | 2 +- .../configs/router-bgp-path-selection.cfg | 6 +- .../inventory/host_vars/router-bgp-evpn.yml | 1 + .../host_vars/router-bgp-path-selection.yaml | 3 + .../docs/tables/router-bgp.md | 39 +++++- .../j2templates/eos/router-bgp.j2 | 118 ++++++++++++------ .../defs_additional_paths.schema.yml | 11 +- 9 files changed, 132 insertions(+), 56 deletions(-) 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 4733fb80b27..64eb7fb9410 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 @@ -259,7 +259,7 @@ router bgp 65101 domain identifier 65101:0 neighbor ADDITIONAL-PATH-PG-1 activate neighbor ADDITIONAL-PATH-PG-1 additional-paths receive - neighbor ADDITIONAL-PATH-PG-1 additional-paths send any + neighbor ADDITIONAL-PATH-PG-1 additional-paths send any PL1 neighbor ADDITIONAL-PATH-PG-2 activate neighbor ADDITIONAL-PATH-PG-2 additional-paths send backup neighbor ADDITIONAL-PATH-PG-3 activate diff --git a/ansible_collections/arista/avd/molecule/eos_cli_config_gen/documentation/devices/router-bgp-path-selection.md b/ansible_collections/arista/avd/molecule/eos_cli_config_gen/documentation/devices/router-bgp-path-selection.md index e8243c0df02..44406b68e20 100644 --- a/ansible_collections/arista/avd/molecule/eos_cli_config_gen/documentation/devices/router-bgp-path-selection.md +++ b/ansible_collections/arista/avd/molecule/eos_cli_config_gen/documentation/devices/router-bgp-path-selection.md @@ -135,10 +135,10 @@ router bgp 65101 ! address-family path-selection bgp additional-paths receive - bgp additional-paths send ecmp limit 42 + bgp additional-paths send ecmp limit 42 PL1 neighbor PATH-SELECTION-PG-1 activate neighbor PATH-SELECTION-PG-1 additional-paths receive - neighbor PATH-SELECTION-PG-1 additional-paths send any + neighbor PATH-SELECTION-PG-1 additional-paths send any PL1 neighbor PATH-SELECTION-PG-2 activate neighbor PATH-SELECTION-PG-2 additional-paths send backup neighbor PATH-SELECTION-PG-3 activate @@ -149,7 +149,7 @@ router bgp 65101 neighbor PATH-SELECTION-PG-5 additional-paths send limit 42 neighbor 172.31.255.0 activate neighbor 172.31.255.0 additional-paths receive - neighbor 172.31.255.0 additional-paths send any + neighbor 172.31.255.0 additional-paths send any PL1 neighbor 172.31.255.1 activate neighbor 172.31.255.1 additional-paths send backup neighbor 172.31.255.2 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 2377904e00c..84b4b87b075 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 @@ -100,7 +100,7 @@ router bgp 65101 domain identifier 65101:0 neighbor ADDITIONAL-PATH-PG-1 activate neighbor ADDITIONAL-PATH-PG-1 additional-paths receive - neighbor ADDITIONAL-PATH-PG-1 additional-paths send any + neighbor ADDITIONAL-PATH-PG-1 additional-paths send any PL1 neighbor ADDITIONAL-PATH-PG-2 activate neighbor ADDITIONAL-PATH-PG-2 additional-paths send backup neighbor ADDITIONAL-PATH-PG-3 activate diff --git a/ansible_collections/arista/avd/molecule/eos_cli_config_gen/intended/configs/router-bgp-path-selection.cfg b/ansible_collections/arista/avd/molecule/eos_cli_config_gen/intended/configs/router-bgp-path-selection.cfg index 0256a883141..af1c49058bd 100644 --- a/ansible_collections/arista/avd/molecule/eos_cli_config_gen/intended/configs/router-bgp-path-selection.cfg +++ b/ansible_collections/arista/avd/molecule/eos_cli_config_gen/intended/configs/router-bgp-path-selection.cfg @@ -19,10 +19,10 @@ router bgp 65101 ! address-family path-selection bgp additional-paths receive - bgp additional-paths send ecmp limit 42 + bgp additional-paths send ecmp limit 42 PL1 neighbor PATH-SELECTION-PG-1 activate neighbor PATH-SELECTION-PG-1 additional-paths receive - neighbor PATH-SELECTION-PG-1 additional-paths send any + neighbor PATH-SELECTION-PG-1 additional-paths send any PL1 neighbor PATH-SELECTION-PG-2 activate neighbor PATH-SELECTION-PG-2 additional-paths send backup neighbor PATH-SELECTION-PG-3 activate @@ -33,7 +33,7 @@ router bgp 65101 neighbor PATH-SELECTION-PG-5 additional-paths send limit 42 neighbor 172.31.255.0 activate neighbor 172.31.255.0 additional-paths receive - neighbor 172.31.255.0 additional-paths send any + neighbor 172.31.255.0 additional-paths send any PL1 neighbor 172.31.255.1 activate neighbor 172.31.255.1 additional-paths send backup neighbor 172.31.255.2 activate 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 da3bc2afeb3..27bb1e7a0e3 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 @@ -106,6 +106,7 @@ router_bgp: additional_paths: receive: true send: any + prefix_list: PL1 - name: ADDITIONAL-PATH-PG-2 activate: true additional_paths: 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 009ac21abe1..5b591cdd99e 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 @@ -31,12 +31,14 @@ router_bgp: receive: true send: ecmp send_ecmp_limit: 42 + prefix_list: PL1 peer_groups: - name: PATH-SELECTION-PG-1 activate: true additional_paths: receive: true send: any + prefix_list: PL1 - name: PATH-SELECTION-PG-2 activate: true additional_paths: @@ -61,6 +63,7 @@ router_bgp: additional_paths: receive: true send: any + prefix_list: PL1 - ip_address: 172.31.255.1 activate: true additional_paths: 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 ddf886c4304..b1bd8dcd297 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 @@ -306,8 +306,8 @@ | [        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 | | | [        additional_paths](## "router_bgp.address_family_evpn.peer_groups.[].additional_paths") | Dictionary | | | | | - | [          install](## "router_bgp.address_family_evpn.peer_groups.[].additional_paths.install") | Boolean | | | | | - | [          install_ecmp_primary](## "router_bgp.address_family_evpn.peer_groups.[].additional_paths.install_ecmp_primary") | Boolean | | | | | + | [          install](## "router_bgp.address_family_evpn.peer_groups.[].additional_paths.install") | Boolean | | | | Install BGP backup path. This setting is used only for `router_bgp.address_family_ipv4.bgp.additional_paths` and `router_bgp.address_family_ipv6.bgp.additional_paths. | + | [          install_ecmp_primary](## "router_bgp.address_family_evpn.peer_groups.[].additional_paths.install_ecmp_primary") | Boolean | | | | Allow additional path with ECMP primary path. This setting is used only for `router_bgp.address_family_ipv4.bgp.additional_paths` and `router_bgp.address_family_ipv6.bgp.additional_paths. | | [          receive](## "router_bgp.address_family_evpn.peer_groups.[].additional_paths.receive") | Boolean | | | | | | [          send](## "router_bgp.address_family_evpn.peer_groups.[].additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- null | 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. | | [          send_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. `send` must be set to `ecmp` for this settings. If this key-value pair is not set, it will send all paths in best ECMP group. | @@ -521,8 +521,8 @@ | [  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 | | | | | - | [        install](## "router_bgp.address_family_path_selection.bgp.additional_paths.install") | Boolean | | | | | - | [        install_ecmp_primary](## "router_bgp.address_family_path_selection.bgp.additional_paths.install_ecmp_primary") | Boolean | | | | | + | [        install](## "router_bgp.address_family_path_selection.bgp.additional_paths.install") | Boolean | | | | Install BGP backup path. This setting is used only for `router_bgp.address_family_ipv4.bgp.additional_paths` and `router_bgp.address_family_ipv6.bgp.additional_paths. | + | [        install_ecmp_primary](## "router_bgp.address_family_path_selection.bgp.additional_paths.install_ecmp_primary") | Boolean | | | | Allow additional path with ECMP primary path. This setting is used only for `router_bgp.address_family_ipv4.bgp.additional_paths` and `router_bgp.address_family_ipv6.bgp.additional_paths. | | [        receive](## "router_bgp.address_family_path_selection.bgp.additional_paths.receive") | Boolean | | | | | | [        send](## "router_bgp.address_family_path_selection.bgp.additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- null | 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. | | [        send_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. `send` must be set to `ecmp` for this settings. If this key-value pair is not set, it will send all paths in best ECMP group. | @@ -1432,7 +1432,11 @@ domain_remote: encapsulation: additional_paths: + + # Install BGP backup path. This setting is used only for `router_bgp.address_family_ipv4.bgp.additional_paths` and `router_bgp.address_family_ipv6.bgp.additional_paths. install: + + # Allow additional path with ECMP primary path. This setting is used only for `router_bgp.address_family_ipv4.bgp.additional_paths` and `router_bgp.address_family_ipv6.bgp.additional_paths. install_ecmp_primary: receive: @@ -1443,11 +1447,15 @@ # limit: Limit to n eligible paths. send: + # Amount of ECMP paths to send. `send` must be set to `ecmp` for this settings. If this key-value pair is not set, it will send all paths in best ECMP group. # Amount of ECMP paths to send. `send` must be set to `ecmp` for this settings. 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. send_limit: + + # Apply the configurations only to the routes matching the prefix list. + prefix_list: evpn_hostflap_detection: enabled: @@ -1836,7 +1844,11 @@ address_family_path_selection: bgp: additional_paths: + + # Install BGP backup path. This setting is used only for `router_bgp.address_family_ipv4.bgp.additional_paths` and `router_bgp.address_family_ipv6.bgp.additional_paths. install: + + # Allow additional path with ECMP primary path. This setting is used only for `router_bgp.address_family_ipv4.bgp.additional_paths` and `router_bgp.address_family_ipv6.bgp.additional_paths. install_ecmp_primary: receive: @@ -1847,11 +1859,16 @@ # limit: Limit to n eligible paths. send: + # Amount of ECMP paths to send. `send` must be set to `ecmp` for this settings. If this key-value pair is not set, it will send all paths in best ECMP group. # Amount of ECMP paths to send. `send` must be set to `ecmp` for this settings. 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. `send` must be set to `limit` for this setting. send_limit: + + # Apply the configurations only to the routes matching the prefix list. + prefix_list: neighbors: - ip_address: activate: @@ -1865,11 +1882,16 @@ # limit: Limit to n eligible paths. send: + # Amount of ECMP paths to send. `send` must be set to `ecmp` for this settings. If this key-value pair is not set, it will send all paths in best ECMP group. # Amount of ECMP paths to send. `send` must be set to `ecmp` for this settings. 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. `send` must be set to `limit` for this setting. send_limit: + + # Apply the configurations only to the routes matching the prefix list. + prefix_list: peer_groups: # Peer-group name. @@ -1890,6 +1912,9 @@ # Number of paths to send through bgp updates. `send` must be set to `limit` for this setting. send_limit: + + # Apply the configurations only to the routes matching the prefix list. + prefix_list: address_family_vpn_ipv4: domain_identifier: peer_groups: @@ -2269,6 +2294,9 @@ # Number of paths to send through bgp updates. `send` must be set to `limit` for this setting. send_limit: + # Apply the configurations only to the routes matching the prefix list. + prefix_list: + # Allow redistribution of iBGP routes into an Interior Gateway Protocol (IGP). EOS default is true. redistribute_internal: neighbors: @@ -2347,6 +2375,9 @@ # Number of paths to send through bgp updates. `send` must be set to `limit` for this setting. send_limit: + # Apply the configurations only to the routes matching the prefix list. + prefix_list: + # Allow redistribution of iBGP routes into an Interior Gateway Protocol (IGP). EOS default is true. redistribute_internal: neighbors: 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 f46fd5560f1..3515a667e64 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 @@ -603,18 +603,18 @@ router bgp {{ router_bgp.as }} {% 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 is arista.avd.defined %} -{% set evpn_add_path = 'bgp additional-paths send' %} -{% if router_bgp.address_family_evpn.bgp_additional_paths.send_ecmp_limit is arista.avd.defined and router_bgp.address_family_evpn.bgp_additional_paths.send == 'ecmp' %} -{% set evpn_add_path = evpn_add_path ~ ' 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 and router_bgp.address_family_evpn.bgp_additional_paths.send == 'limit' %} -{% set evpn_add_path = evpn_add_path ~ ' limit ' ~ router_bgp.address_family_evpn.bgp_additional_paths.send_limit %} -{% else %} -{% set evpn_add_path = evpn_add_path ~ ' ' ~ router_bgp.address_family_evpn.bgp_additional_paths.send %} -{% endif %} -{% if evpn_add_path is arista.avd.defined %} +{% if router_bgp.address_family_evpn.bgp_additional_paths.send_ecmp_limit is arista.avd.defined and router_bgp.address_family_evpn.bgp_additional_paths.send | arista.avd.default == 'ecmp' %} +{% set evpn_add_path = '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 and router_bgp.address_family_evpn.bgp_additional_paths.send | arista.avd.default == 'limit' %} +{% set evpn_add_path = 'bgp additional-paths send limit ' ~ router_bgp.address_family_evpn.bgp_additional_paths.send_limit %} +{% elif router_bgp.address_family_evpn.bgp_additional_paths.send is arista.avd.defined %} +{% set evpn_add_path = 'bgp additional-paths send ' ~ router_bgp.address_family_evpn.bgp_additional_paths.send %} +{% endif %} +{% if router_bgp.address_family_evpn.bgp_additional_paths.prefix_list is arista.avd.defined and evpn_add_path is arista.avd.defined %} +{% set evpn_add_path = evpn_add_path ~ ' ' ~ router_bgp.address_family_evpn.bgp_additional_paths.prefix_list %} +{% endif %} +{% if evpn_add_path is arista.avd.defined %} {{ evpn_add_path }} -{% endif %} {% endif %} {% if router_bgp.address_family_evpn.next_hop_unchanged is arista.avd.defined(true) %} bgp next-hop-unchanged @@ -691,12 +691,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_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_ecmp_limit is arista.avd.defined and peer_group.additional_paths.send | arista.avd.default == 'ecmp' %} +{% set evpn_pg_add_path = '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 and peer_group.additional_paths.send | arista.avd.default == 'limit' %} +{% set evpn_pg_add_path = 'neighbor ' ~ peer_group.name ~ ' additional-paths send limit ' ~ peer_group.additional_paths.send_limit %} {% elif peer_group.additional_paths.send is arista.avd.defined %} - neighbor {{ peer_group.name }} additional-paths send {{ peer_group.additional_paths.send }} +{% set evpn_pg_add_path = '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 evpn_pg_add_path is arista.avd.defined %} +{% set evpn_pg_add_path = evpn_pg_add_path ~ ' ' ~ peer_group.additional_paths.prefix_list %} +{% endif %} +{% if evpn_pg_add_path is arista.avd.defined %} + {{ evpn_pg_add_path }} {% endif %} {% if peer_group.domain_remote is arista.avd.defined(true) %} neighbor {{ peer_group.name }} domain remote @@ -1259,12 +1265,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_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_ecmp_limit is arista.avd.defined and router_bgp.address_family_path_selection.bgp.additional_paths.send | arista.avd.default == 'ecmp' %} +{% set ps_add_path = '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 and router_bgp.address_family_path_selection.bgp.additional_paths.send | arista.avd.default == 'limit' %} +{% set ps_add_path = 'bgp additional-paths send limit ' ~ router_bgp.address_family_path_selection.bgp.additional_paths.send_limit %} {% elif router_bgp.address_family_path_selection.bgp.additional_paths.send is arista.avd.defined %} - bgp additional-paths send {{ router_bgp.address_family_path_selection.bgp.additional_paths.send }} +{% set ps_add_path = 'bgp additional-paths send ' ~ router_bgp.address_family_path_selection.bgp.additional_paths.send %} +{% endif %} +{% if router_bgp.address_family_path_selection.bgp.additional_paths.prefix_list is arista.avd.defined and ps_add_path is arista.avd.defined %} +{% set ps_add_path = ps_add_path ~ ' ' ~ router_bgp.address_family_path_selection.bgp.additional_paths.prefix_list %} +{% endif %} +{% if ps_add_path is arista.avd.defined %} + {{ ps_add_path }} {% 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) %} @@ -1275,12 +1287,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_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_ecmp_limit is arista.avd.defined and peer_group.additional_paths.send | arista.avd.default == 'ecmp' %} +{% set ps_pg_add_path = '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 and peer_group.additional_paths.send | arista.avd.default == 'limit' %} +{% set ps_pg_add_path = 'neighbor ' ~ peer_group.name ~ ' additional-paths send limit ' ~ peer_group.additional_paths.send_limit %} {% elif peer_group.additional_paths.send is arista.avd.defined %} - neighbor {{ peer_group.name }} additional-paths send {{ peer_group.additional_paths.send }} +{% set ps_pg_add_path = '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 ps_pg_add_path is arista.avd.defined %} +{% set ps_pg_add_path = ps_pg_add_path ~ ' ' ~ peer_group.additional_paths.prefix_list %} +{% endif %} +{% if ps_pg_add_path is arista.avd.defined %} + {{ ps_pg_add_path }} {% endif %} {% endfor %} {% for neighbor in router_bgp.address_family_path_selection.neighbors | arista.avd.natural_sort('ip_address') %} @@ -1292,12 +1310,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_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_ecmp_limit is arista.avd.defined and neighbor.additional_paths.send | arista.avd.default == 'ecmp' %} +{% set ps_neighbor_add_path = '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 and neighbor.additional_paths.send | arista.avd.default == 'limit' %} +{% set ps_neighbor_add_path = 'neighbor ' ~ neighbor.ip_address ~ ' additional-paths send limit ' ~ neighbor.additional_paths.send_limit %} {% elif neighbor.additional_paths.send is arista.avd.defined %} - neighbor {{ neighbor.ip_address }} additional-paths send {{ neighbor.additional_paths.send }} +{% set ps_neighbor_add_path = 'neighbor ' ~ neighbor.ip_address ~ ' additional-paths send ' ~ neighbor.additional_paths.send %} +{% endif %} +{% if neighbor.additional_paths.prefix_list is arista.avd.defined and ps_neighbor_add_path is arista.avd.defined %} +{% set ps_neighbor_add_path = ps_neighbor_add_path ~ ' ' ~ neighbor.additional_paths.prefix_list %} +{% endif %} +{% if ps_neighbor_add_path is arista.avd.defined %} + {{ ps_neighbor_add_path }} {% endif %} {% endfor %} {% endif %} @@ -1787,12 +1811,18 @@ 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_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_ecmp_limit is arista.avd.defined and vrf.address_family_ipv4.bgp.additional_paths.send | arista.avd.default == 'ecmp' %} +{% set ipv4_add_path = '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 and vrf.address_family_ipv4.bgp.additional_paths.send | arista.avd.default == 'limit' %} +{% set ipv4_add_path = 'bgp additional-paths send limit ' ~ vrf.address_family_ipv4.bgp.additional_paths.send_limit %} {% elif vrf.address_family_ipv4.bgp.additional_paths.send is arista.avd.defined %} - bgp additional-paths send {{ vrf.address_family_ipv4.bgp.additional_paths.send }} +{% set ipv4_add_path = 'bgp additional-paths send ' ~ vrf.address_family_ipv4.bgp.additional_paths.send %} +{% endif %} +{% if vrf.address_family_ipv4.bgp.additional_paths.prefix_list is arista.avd.defined and ipv4_add_path is arista.avd.defined %} +{% set ipv4_add_path = ipv4_add_path ~ ' ' ~ vrf.address_family_ipv4.bgp.additional_paths.prefix_list %} +{% endif %} +{% if ipv4_add_path is arista.avd.defined %} + {{ ipv4_add_path }} {% endif %} {% for neighbor in vrf.address_family_ipv4.neighbors | arista.avd.natural_sort('ip_address') %} {% if neighbor.activate is arista.avd.defined(true) %} @@ -1933,12 +1963,18 @@ 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_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_ecmp_limit is arista.avd.defined and vrf.address_family_ipv6.bgp.additional_paths.send | arista.avd.default == 'ecmp' %} +{% set vrf_add_path = '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 and vrf.address_family_ipv6.bgp.additional_paths.send | arista.avd.default == 'limit' %} +{% set vrf_add_path = 'bgp additional-paths send limit ' ~ vrf.address_family_ipv6.bgp.additional_paths.send_limit %} {% elif vrf.address_family_ipv6.bgp.additional_paths.send is arista.avd.defined %} - bgp additional-paths send {{ vrf.address_family_ipv6.bgp.additional_paths.send }} +{% set vrf_add_path = 'bgp additional-paths send ' ~ vrf.address_family_ipv6.bgp.additional_paths.send %} +{% endif %} +{% if vrf.address_family_ipv6.bgp.additional_paths.prefix_list is arista.avd.defined and vrf_add_path is arista.avd.defined %} +{% set vrf_add_path = vrf_add_path ~ ' ' ~ vrf.address_family_ipv6.bgp.additional_paths.prefix_list %} +{% endif %} +{% if vrf_add_path is arista.avd.defined %} + {{ vrf_add_path }} {% endif %} {% for neighbor in vrf.address_family_ipv6.neighbors | arista.avd.natural_sort('ip_address') %} {% if neighbor.activate is arista.avd.defined(true) %} diff --git a/python-avd/pyavd/_eos_cli_config_gen/schema/schema_fragments/defs_additional_paths.schema.yml b/python-avd/pyavd/_eos_cli_config_gen/schema/schema_fragments/defs_additional_paths.schema.yml index df92442cd3c..299b4773b91 100644 --- a/python-avd/pyavd/_eos_cli_config_gen/schema/schema_fragments/defs_additional_paths.schema.yml +++ b/python-avd/pyavd/_eos_cli_config_gen/schema/schema_fragments/defs_additional_paths.schema.yml @@ -8,8 +8,10 @@ $defs: keys: install: type: bool + description: Install BGP backup path. This setting is used only for `router_bgp.address_family_ipv4.bgp.additional_paths` and `router_bgp.address_family_ipv6.bgp.additional_paths. install_ecmp_primary: type: bool + description: Allow additional path with ECMP primary path. This setting is used only for `router_bgp.address_family_ipv4.bgp.additional_paths` and `router_bgp.address_family_ipv6.bgp.additional_paths. receive: type: bool send: @@ -19,19 +21,22 @@ $defs: 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 + limit: Limit to n eligible paths. valid_values: [ 'any', 'backup', 'ecmp', 'limit' ] send_ecmp_limit: type: int - description: Amount of ECMP paths to send. If this key-value pair is not set, it will send all paths in best ECMP group. + description: Amount of ECMP paths to send. `send` must be set to `ecmp` for this settings. 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(The value of 'send' key must be 'limit'). + description: Number of paths to send through bgp updates. `send` must be set to `limit` for this setting. convert_types: - str min: 2 max: 64 + prefix_list: + type: str + description: Apply the configurations only to the routes matching the prefix list. From b97aaca1241d4d5f245048faa309432e98fba0ad Mon Sep 17 00:00:00 2001 From: Laxmikant Chintakindi Date: Tue, 3 Sep 2024 16:12:02 +0530 Subject: [PATCH 13/55] Address comments. --- .../documentation/devices/router-bgp-evpn.md | 3 +- .../devices/router-bgp-path-selection.md | 6 +- .../intended/configs/router-bgp-evpn.cfg | 3 +- .../configs/router-bgp-path-selection.cfg | 6 +- .../inventory/host_vars/router-bgp-evpn.yml | 1 - .../host_vars/router-bgp-path-selection.yaml | 3 - .../docs/tables/router-bgp.md | 35 +--- .../j2templates/eos/router-bgp.j2 | 164 ++++++++++-------- .../schema/eos_cli_config_gen.schema.yml | 11 ++ .../defs_additional_paths.schema.yml | 11 +- .../schema_fragments/router_bgp.schema.yml | 20 +++ 11 files changed, 130 insertions(+), 133 deletions(-) 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 64eb7fb9410..38325299009 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 @@ -259,7 +259,7 @@ router bgp 65101 domain identifier 65101:0 neighbor ADDITIONAL-PATH-PG-1 activate neighbor ADDITIONAL-PATH-PG-1 additional-paths receive - neighbor ADDITIONAL-PATH-PG-1 additional-paths send any PL1 + neighbor ADDITIONAL-PATH-PG-1 additional-paths send any neighbor ADDITIONAL-PATH-PG-2 activate neighbor ADDITIONAL-PATH-PG-2 additional-paths send backup neighbor ADDITIONAL-PATH-PG-3 activate @@ -269,6 +269,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 neighbor EVPN-OVERLAY-PEERS default-route neighbor EVPN-OVERLAY-PEERS activate neighbor EVPN-OVERLAY-PEERS domain remote diff --git a/ansible_collections/arista/avd/molecule/eos_cli_config_gen/documentation/devices/router-bgp-path-selection.md b/ansible_collections/arista/avd/molecule/eos_cli_config_gen/documentation/devices/router-bgp-path-selection.md index 44406b68e20..e8243c0df02 100644 --- a/ansible_collections/arista/avd/molecule/eos_cli_config_gen/documentation/devices/router-bgp-path-selection.md +++ b/ansible_collections/arista/avd/molecule/eos_cli_config_gen/documentation/devices/router-bgp-path-selection.md @@ -135,10 +135,10 @@ router bgp 65101 ! address-family path-selection bgp additional-paths receive - bgp additional-paths send ecmp limit 42 PL1 + bgp additional-paths send ecmp limit 42 neighbor PATH-SELECTION-PG-1 activate neighbor PATH-SELECTION-PG-1 additional-paths receive - neighbor PATH-SELECTION-PG-1 additional-paths send any PL1 + neighbor PATH-SELECTION-PG-1 additional-paths send any neighbor PATH-SELECTION-PG-2 activate neighbor PATH-SELECTION-PG-2 additional-paths send backup neighbor PATH-SELECTION-PG-3 activate @@ -149,7 +149,7 @@ router bgp 65101 neighbor PATH-SELECTION-PG-5 additional-paths send limit 42 neighbor 172.31.255.0 activate neighbor 172.31.255.0 additional-paths receive - neighbor 172.31.255.0 additional-paths send any PL1 + neighbor 172.31.255.0 additional-paths send any neighbor 172.31.255.1 activate neighbor 172.31.255.1 additional-paths send backup neighbor 172.31.255.2 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 84b4b87b075..12712f7c156 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 @@ -100,7 +100,7 @@ router bgp 65101 domain identifier 65101:0 neighbor ADDITIONAL-PATH-PG-1 activate neighbor ADDITIONAL-PATH-PG-1 additional-paths receive - neighbor ADDITIONAL-PATH-PG-1 additional-paths send any PL1 + neighbor ADDITIONAL-PATH-PG-1 additional-paths send any neighbor ADDITIONAL-PATH-PG-2 activate neighbor ADDITIONAL-PATH-PG-2 additional-paths send backup neighbor ADDITIONAL-PATH-PG-3 activate @@ -110,6 +110,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 neighbor EVPN-OVERLAY-PEERS default-route neighbor EVPN-OVERLAY-PEERS activate neighbor EVPN-OVERLAY-PEERS domain remote diff --git a/ansible_collections/arista/avd/molecule/eos_cli_config_gen/intended/configs/router-bgp-path-selection.cfg b/ansible_collections/arista/avd/molecule/eos_cli_config_gen/intended/configs/router-bgp-path-selection.cfg index af1c49058bd..0256a883141 100644 --- a/ansible_collections/arista/avd/molecule/eos_cli_config_gen/intended/configs/router-bgp-path-selection.cfg +++ b/ansible_collections/arista/avd/molecule/eos_cli_config_gen/intended/configs/router-bgp-path-selection.cfg @@ -19,10 +19,10 @@ router bgp 65101 ! address-family path-selection bgp additional-paths receive - bgp additional-paths send ecmp limit 42 PL1 + bgp additional-paths send ecmp limit 42 neighbor PATH-SELECTION-PG-1 activate neighbor PATH-SELECTION-PG-1 additional-paths receive - neighbor PATH-SELECTION-PG-1 additional-paths send any PL1 + neighbor PATH-SELECTION-PG-1 additional-paths send any neighbor PATH-SELECTION-PG-2 activate neighbor PATH-SELECTION-PG-2 additional-paths send backup neighbor PATH-SELECTION-PG-3 activate @@ -33,7 +33,7 @@ router bgp 65101 neighbor PATH-SELECTION-PG-5 additional-paths send limit 42 neighbor 172.31.255.0 activate neighbor 172.31.255.0 additional-paths receive - neighbor 172.31.255.0 additional-paths send any PL1 + neighbor 172.31.255.0 additional-paths send any neighbor 172.31.255.1 activate neighbor 172.31.255.1 additional-paths send backup neighbor 172.31.255.2 activate 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 27bb1e7a0e3..da3bc2afeb3 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 @@ -106,7 +106,6 @@ router_bgp: additional_paths: receive: true send: any - prefix_list: PL1 - name: ADDITIONAL-PATH-PG-2 activate: true additional_paths: 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 5b591cdd99e..009ac21abe1 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 @@ -31,14 +31,12 @@ router_bgp: receive: true send: ecmp send_ecmp_limit: 42 - prefix_list: PL1 peer_groups: - name: PATH-SELECTION-PG-1 activate: true additional_paths: receive: true send: any - prefix_list: PL1 - name: PATH-SELECTION-PG-2 activate: true additional_paths: @@ -63,7 +61,6 @@ router_bgp: additional_paths: receive: true send: any - prefix_list: PL1 - ip_address: 172.31.255.1 activate: true additional_paths: 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 b1bd8dcd297..7303da8a7c6 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 @@ -306,8 +306,6 @@ | [        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 | | | [        additional_paths](## "router_bgp.address_family_evpn.peer_groups.[].additional_paths") | Dictionary | | | | | - | [          install](## "router_bgp.address_family_evpn.peer_groups.[].additional_paths.install") | Boolean | | | | Install BGP backup path. This setting is used only for `router_bgp.address_family_ipv4.bgp.additional_paths` and `router_bgp.address_family_ipv6.bgp.additional_paths. | - | [          install_ecmp_primary](## "router_bgp.address_family_evpn.peer_groups.[].additional_paths.install_ecmp_primary") | Boolean | | | | Allow additional path with ECMP primary path. This setting is used only for `router_bgp.address_family_ipv4.bgp.additional_paths` and `router_bgp.address_family_ipv6.bgp.additional_paths. | | [          receive](## "router_bgp.address_family_evpn.peer_groups.[].additional_paths.receive") | Boolean | | | | | | [          send](## "router_bgp.address_family_evpn.peer_groups.[].additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- null | 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. | | [          send_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. `send` must be set to `ecmp` for this settings. If this key-value pair is not set, it will send all paths in best ECMP group. | @@ -521,8 +519,6 @@ | [  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 | | | | | - | [        install](## "router_bgp.address_family_path_selection.bgp.additional_paths.install") | Boolean | | | | Install BGP backup path. This setting is used only for `router_bgp.address_family_ipv4.bgp.additional_paths` and `router_bgp.address_family_ipv6.bgp.additional_paths. | - | [        install_ecmp_primary](## "router_bgp.address_family_path_selection.bgp.additional_paths.install_ecmp_primary") | Boolean | | | | Allow additional path with ECMP primary path. This setting is used only for `router_bgp.address_family_ipv4.bgp.additional_paths` and `router_bgp.address_family_ipv6.bgp.additional_paths. | | [        receive](## "router_bgp.address_family_path_selection.bgp.additional_paths.receive") | Boolean | | | | | | [        send](## "router_bgp.address_family_path_selection.bgp.additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- null | 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. | | [        send_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. `send` must be set to `ecmp` for this settings. If this key-value pair is not set, it will send all paths in best ECMP group. | @@ -1432,12 +1428,6 @@ domain_remote: encapsulation: additional_paths: - - # Install BGP backup path. This setting is used only for `router_bgp.address_family_ipv4.bgp.additional_paths` and `router_bgp.address_family_ipv6.bgp.additional_paths. - install: - - # Allow additional path with ECMP primary path. This setting is used only for `router_bgp.address_family_ipv4.bgp.additional_paths` and `router_bgp.address_family_ipv6.bgp.additional_paths. - install_ecmp_primary: receive: # Select an option to send multiple paths for same prefix through bgp updates. @@ -1453,9 +1443,6 @@ # Number of paths to send through bgp updates. `send` must be set to `limit` for this setting. send_limit: - - # Apply the configurations only to the routes matching the prefix list. - prefix_list: evpn_hostflap_detection: enabled: @@ -1844,12 +1831,6 @@ address_family_path_selection: bgp: additional_paths: - - # Install BGP backup path. This setting is used only for `router_bgp.address_family_ipv4.bgp.additional_paths` and `router_bgp.address_family_ipv6.bgp.additional_paths. - install: - - # Allow additional path with ECMP primary path. This setting is used only for `router_bgp.address_family_ipv4.bgp.additional_paths` and `router_bgp.address_family_ipv6.bgp.additional_paths. - install_ecmp_primary: receive: # Select an option to send multiple paths for same prefix through bgp updates. @@ -1866,9 +1847,6 @@ # 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. `send` must be set to `limit` for this setting. send_limit: - - # Apply the configurations only to the routes matching the prefix list. - prefix_list: neighbors: - ip_address: activate: @@ -1881,6 +1859,7 @@ # ecmp: All paths in best path ECMP group. # limit: Limit to n eligible paths. send: + send: # Amount of ECMP paths to send. `send` must be set to `ecmp` for this settings. If this key-value pair is not set, it will send all paths in best ECMP group. # Amount of ECMP paths to send. `send` must be set to `ecmp` for this settings. If this key-value pair is not set, it will send all paths in best ECMP group. @@ -1889,9 +1868,6 @@ # 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. `send` must be set to `limit` for this setting. send_limit: - - # Apply the configurations only to the routes matching the prefix list. - prefix_list: peer_groups: # Peer-group name. @@ -1912,9 +1888,6 @@ # Number of paths to send through bgp updates. `send` must be set to `limit` for this setting. send_limit: - - # Apply the configurations only to the routes matching the prefix list. - prefix_list: address_family_vpn_ipv4: domain_identifier: peer_groups: @@ -2294,9 +2267,6 @@ # Number of paths to send through bgp updates. `send` must be set to `limit` for this setting. send_limit: - # Apply the configurations only to the routes matching the prefix list. - prefix_list: - # Allow redistribution of iBGP routes into an Interior Gateway Protocol (IGP). EOS default is true. redistribute_internal: neighbors: @@ -2375,9 +2345,6 @@ # Number of paths to send through bgp updates. `send` must be set to `limit` for this setting. send_limit: - # Apply the configurations only to the routes matching the prefix list. - prefix_list: - # Allow redistribution of iBGP routes into an Interior Gateway Protocol (IGP). EOS default is true. redistribute_internal: neighbors: 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 3515a667e64..bd8e472a526 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 @@ -603,18 +603,18 @@ router bgp {{ router_bgp.as }} {% 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_ecmp_limit is arista.avd.defined and router_bgp.address_family_evpn.bgp_additional_paths.send | arista.avd.default == 'ecmp' %} -{% set evpn_add_path = '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 and router_bgp.address_family_evpn.bgp_additional_paths.send | arista.avd.default == 'limit' %} -{% set evpn_add_path = 'bgp additional-paths send limit ' ~ router_bgp.address_family_evpn.bgp_additional_paths.send_limit %} -{% elif router_bgp.address_family_evpn.bgp_additional_paths.send is arista.avd.defined %} -{% set evpn_add_path = 'bgp additional-paths send ' ~ router_bgp.address_family_evpn.bgp_additional_paths.send %} -{% endif %} -{% if router_bgp.address_family_evpn.bgp_additional_paths.prefix_list is arista.avd.defined and evpn_add_path is arista.avd.defined %} -{% set evpn_add_path = evpn_add_path ~ ' ' ~ router_bgp.address_family_evpn.bgp_additional_paths.prefix_list %} -{% endif %} -{% if evpn_add_path is arista.avd.defined %} +{% if router_bgp.address_family_evpn.bgp_additional_paths.send is arista.avd.defined %} +{% set evpn_add_path = 'bgp additional-paths send' %} +{% if router_bgp.address_family_evpn.bgp_additional_paths.send_ecmp_limit is arista.avd.defined and router_bgp.address_family_evpn.bgp_additional_paths.send == 'ecmp' %} +{% set evpn_add_path = evpn_add_path ~ ' 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 and router_bgp.address_family_evpn.bgp_additional_paths.send == 'limit' %} +{% set evpn_add_path = evpn_add_path ~ ' limit ' ~ router_bgp.address_family_evpn.bgp_additional_paths.send_limit %} +{% else %} +{% set evpn_add_path = evpn_add_path ~ ' ' ~ router_bgp.address_family_evpn.bgp_additional_paths.send %} +{% endif %} +{% if evpn_add_path is arista.avd.defined %} {{ evpn_add_path }} +{% endif %} {% endif %} {% if router_bgp.address_family_evpn.next_hop_unchanged is arista.avd.defined(true) %} bgp next-hop-unchanged @@ -691,18 +691,22 @@ 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_ecmp_limit is arista.avd.defined and peer_group.additional_paths.send | arista.avd.default == 'ecmp' %} -{% set evpn_pg_add_path = '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 and peer_group.additional_paths.send | arista.avd.default == 'limit' %} -{% set evpn_pg_add_path = 'neighbor ' ~ peer_group.name ~ ' additional-paths send limit ' ~ peer_group.additional_paths.send_limit %} -{% elif peer_group.additional_paths.send is arista.avd.defined %} -{% set evpn_pg_add_path = '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 evpn_pg_add_path is arista.avd.defined %} -{% set evpn_pg_add_path = evpn_pg_add_path ~ ' ' ~ peer_group.additional_paths.prefix_list %} -{% endif %} -{% if evpn_pg_add_path is arista.avd.defined %} +{% if peer_group.additional_paths.send is arista.avd.defined %} +{% set evpn_pg_add_path = 'neighbor ' ~ peer_group.name ~ ' additional-paths send' %} +{% if peer_group.additional_paths.send == 'null'%} +{% set evpn_pg_add_path = 'no ' ~ evpn_pg_add_path ~ ' any' %} +{% else %} +{% if peer_group.additional_paths.send_ecmp_limit is arista.avd.defined and peer_group.additional_paths.send == 'ecmp' %} +{% set evpn_pg_add_path = evpn_pg_add_path ~ ' ecmp limit ' ~ peer_group.additional_paths.send_ecmp_limit %} +{% elif peer_group.additional_paths.send_limit is arista.avd.defined and peer_group.additional_paths.send == 'limit' %} +{% set evpn_pg_add_path = evpn_pg_add_path ~ ' limit ' ~ peer_group.additional_paths.send_limit %} +{% else %} +{% set evpn_pg_add_path = evpn_pg_add_path ~ ' ' ~ peer_group.additional_paths.send %} +{% endif %} +{% endif %} +{% if evpn_pg_add_path is arista.avd.defined %} {{ evpn_pg_add_path }} +{% endif %} {% endif %} {% if peer_group.domain_remote is arista.avd.defined(true) %} neighbor {{ peer_group.name }} domain remote @@ -1265,18 +1269,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_ecmp_limit is arista.avd.defined and router_bgp.address_family_path_selection.bgp.additional_paths.send | arista.avd.default == 'ecmp' %} -{% set ps_add_path = '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 and router_bgp.address_family_path_selection.bgp.additional_paths.send | arista.avd.default == 'limit' %} -{% set ps_add_path = 'bgp additional-paths send limit ' ~ router_bgp.address_family_path_selection.bgp.additional_paths.send_limit %} -{% elif router_bgp.address_family_path_selection.bgp.additional_paths.send is arista.avd.defined %} -{% set ps_add_path = 'bgp additional-paths send ' ~ router_bgp.address_family_path_selection.bgp.additional_paths.send %} -{% endif %} -{% if router_bgp.address_family_path_selection.bgp.additional_paths.prefix_list is arista.avd.defined and ps_add_path is arista.avd.defined %} -{% set ps_add_path = ps_add_path ~ ' ' ~ router_bgp.address_family_path_selection.bgp.additional_paths.prefix_list %} -{% endif %} -{% if ps_add_path is arista.avd.defined %} +{% if router_bgp.address_family_path_selection.bgp.additional_paths.send is arista.avd.defined %} +{% set ps_add_path = 'bgp additional-paths send' %} +{% if router_bgp.address_family_path_selection.bgp.additional_paths.send_ecmp_limit is arista.avd.defined and router_bgp.address_family_path_selection.bgp.additional_paths.send == 'ecmp' %} +{% set ps_add_path = ps_add_path ~ ' 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 and router_bgp.address_family_path_selection.bgp.additional_paths.send | arista.avd.default == 'limit' %} +{% set ps_add_path = ps_add_path ~ ' send limit ' ~ router_bgp.address_family_path_selection.bgp.additional_paths.send_limit %} +{% else %} +{% set ps_add_path = ps_add_path ~ ' ' ~ router_bgp.address_family_path_selection.bgp.additional_paths.send %} +{% endif %} +{% if ps_add_path is arista.avd.defined %} {{ ps_add_path }} +{% 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) %} @@ -1287,18 +1291,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_ecmp_limit is arista.avd.defined and peer_group.additional_paths.send | arista.avd.default == 'ecmp' %} -{% set ps_pg_add_path = '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 and peer_group.additional_paths.send | arista.avd.default == 'limit' %} -{% set ps_pg_add_path = 'neighbor ' ~ peer_group.name ~ ' additional-paths send limit ' ~ peer_group.additional_paths.send_limit %} -{% elif peer_group.additional_paths.send is arista.avd.defined %} -{% set ps_pg_add_path = '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 ps_pg_add_path is arista.avd.defined %} -{% set ps_pg_add_path = ps_pg_add_path ~ ' ' ~ peer_group.additional_paths.prefix_list %} -{% endif %} -{% if ps_pg_add_path is arista.avd.defined %} +{% if peer_group.additional_paths.send is arista.avd.defined %} +{% set ps_pg_add_path = 'neighbor ' ~ peer_group.name ~ ' additional-paths send' %} +{% if peer_group.additional_paths.send_ecmp_limit is arista.avd.defined and peer_group.additional_paths.send | arista.avd.default == 'ecmp' %} +{% set ps_pg_add_path = ps_pg_add_path ~ ' ecmp limit ' ~ peer_group.additional_paths.send_ecmp_limit %} +{% elif peer_group.additional_paths.send_limit is arista.avd.defined and peer_group.additional_paths.send | arista.avd.default == 'limit' %} +{% set ps_pg_add_path = ps_pg_add_path ~ ' limit ' ~ peer_group.additional_paths.send_limit %} +{% else %} +{% set ps_pg_add_path = ps_pg_add_path ~ ' ' ~ peer_group.additional_paths.send %} +{% endif %} +{% if ps_pg_add_path is arista.avd.defined %} {{ ps_pg_add_path }} +{% endif %} {% endif %} {% endfor %} {% for neighbor in router_bgp.address_family_path_selection.neighbors | arista.avd.natural_sort('ip_address') %} @@ -1310,18 +1314,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_ecmp_limit is arista.avd.defined and neighbor.additional_paths.send | arista.avd.default == 'ecmp' %} -{% set ps_neighbor_add_path = '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 and neighbor.additional_paths.send | arista.avd.default == 'limit' %} -{% set ps_neighbor_add_path = 'neighbor ' ~ neighbor.ip_address ~ ' additional-paths send limit ' ~ neighbor.additional_paths.send_limit %} -{% elif neighbor.additional_paths.send is arista.avd.defined %} -{% set ps_neighbor_add_path = 'neighbor ' ~ neighbor.ip_address ~ ' additional-paths send ' ~ neighbor.additional_paths.send %} -{% endif %} -{% if neighbor.additional_paths.prefix_list is arista.avd.defined and ps_neighbor_add_path is arista.avd.defined %} -{% set ps_neighbor_add_path = ps_neighbor_add_path ~ ' ' ~ neighbor.additional_paths.prefix_list %} -{% endif %} -{% if ps_neighbor_add_path is arista.avd.defined %} +{% if neighbor.additional_paths.send is arista.avd.defined %} +{% set ps_neighbor_add_path = 'neighbor ' ~ neighbor.ip_address ~ ' additional-paths send' %} +{% if neighbor.additional_paths.send_ecmp_limit is arista.avd.defined and neighbor.additional_paths.send | arista.avd.default == 'ecmp' %} +{% set ps_neighbor_add_path = ps_neighbor_add_path ~ ' ecmp limit ' ~ neighbor.additional_paths.send_ecmp_limit %} +{% elif neighbor.additional_paths.send_limit is arista.avd.defined and neighbor.additional_paths.send == 'limit' %} +{% set ps_neighbor_add_path = ps_neighbor_add_path ~ ' limit ' ~ neighbor.additional_paths.send_limit %} +{% else %} +{% set ps_neighbor_add_path = ps_neighbor_add_path ~ ' ' ~ neighbor.additional_paths.send %} +{% endif %} +{% if ps_neighbor_add_path is arista.avd.defined %} {{ ps_neighbor_add_path }} +{% endif %} {% endif %} {% endfor %} {% endif %} @@ -1811,18 +1815,21 @@ 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_ecmp_limit is arista.avd.defined and vrf.address_family_ipv4.bgp.additional_paths.send | arista.avd.default == 'ecmp' %} -{% set ipv4_add_path = '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 and vrf.address_family_ipv4.bgp.additional_paths.send | arista.avd.default == 'limit' %} -{% set ipv4_add_path = 'bgp additional-paths send limit ' ~ vrf.address_family_ipv4.bgp.additional_paths.send_limit %} -{% elif vrf.address_family_ipv4.bgp.additional_paths.send is arista.avd.defined %} -{% set ipv4_add_path = 'bgp additional-paths send ' ~ vrf.address_family_ipv4.bgp.additional_paths.send %} -{% endif %} -{% if vrf.address_family_ipv4.bgp.additional_paths.prefix_list is arista.avd.defined and ipv4_add_path is arista.avd.defined %} -{% set ipv4_add_path = ipv4_add_path ~ ' ' ~ vrf.address_family_ipv4.bgp.additional_paths.prefix_list %} -{% endif %} -{% if ipv4_add_path is arista.avd.defined %} +{% if vrf.address_family_ipv4.bgp.additional_paths.send is arista.avd.defined %} +{% set ipv4_add_path = 'bgp additional-paths send' %} +{% if vrf.address_family_ipv4.bgp.additional_paths.send_ecmp_limit is arista.avd.defined and vrf.address_family_ipv4.bgp.additional_paths.send == 'ecmp' %} +{% set ipv4_add_path = ipv4_add_path ~ ' 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 and vrf.address_family_ipv4.bgp.additional_paths.send == 'limit' %} +{% set ipv4_add_path = ipv4_add_path ~ ' limit ' ~ vrf.address_family_ipv4.bgp.additional_paths.send_limit %} +{% else %} +{% set ipv4_add_path = ipv4_add_path ~ ' ' ~ vrf.address_family_ipv4.bgp.additional_paths.send %} +{% endif %} +{% if vrf.address_family_ipv4.bgp.additional_paths.prefix_list is arista.avd.defined and ipv4_add_path is arista.avd.defined %} +{% set ipv4_add_path = ipv4_add_path ~ ' ' ~ vrf.address_family_ipv4.bgp.additional_paths.prefix_list %} +{% endif %} +{% if ipv4_add_path is arista.avd.defined %} {{ ipv4_add_path }} +{% endif %} {% endif %} {% for neighbor in vrf.address_family_ipv4.neighbors | arista.avd.natural_sort('ip_address') %} {% if neighbor.activate is arista.avd.defined(true) %} @@ -1963,18 +1970,21 @@ 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_ecmp_limit is arista.avd.defined and vrf.address_family_ipv6.bgp.additional_paths.send | arista.avd.default == 'ecmp' %} -{% set vrf_add_path = '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 and vrf.address_family_ipv6.bgp.additional_paths.send | arista.avd.default == 'limit' %} -{% set vrf_add_path = 'bgp additional-paths send limit ' ~ vrf.address_family_ipv6.bgp.additional_paths.send_limit %} -{% elif vrf.address_family_ipv6.bgp.additional_paths.send is arista.avd.defined %} -{% set vrf_add_path = 'bgp additional-paths send ' ~ vrf.address_family_ipv6.bgp.additional_paths.send %} -{% endif %} -{% if vrf.address_family_ipv6.bgp.additional_paths.prefix_list is arista.avd.defined and vrf_add_path is arista.avd.defined %} -{% set vrf_add_path = vrf_add_path ~ ' ' ~ vrf.address_family_ipv6.bgp.additional_paths.prefix_list %} -{% endif %} -{% if vrf_add_path is arista.avd.defined %} +{% if vrf.address_family_ipv6.bgp.additional_paths.send is arista.avd.defined %} +{% set vrf_add_path = 'bgp additional-paths send' %} +{% if vrf.address_family_ipv6.bgp.additional_paths.send_ecmp_limit is arista.avd.defined and vrf.address_family_ipv6.bgp.additional_paths.send == 'ecmp' %} +{% set vrf_add_path = vrf_add_path ~ ' 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 and vrf.address_family_ipv6.bgp.additional_paths.send == 'limit' %} +{% set vrf_add_path = vrf_add_path ~ ' limit ' ~ vrf.address_family_ipv6.bgp.additional_paths.send_limit %} +{% else %} +{% set vrf_add_path = vrf_add_path ~ ' ' ~ vrf.address_family_ipv6.bgp.additional_paths.send %} +{% endif %} +{% if vrf.address_family_ipv6.bgp.additional_paths.prefix_list is arista.avd.defined and vrf_add_path is arista.avd.defined %} +{% set vrf_add_path = vrf_add_path ~ ' ' ~ vrf.address_family_ipv6.bgp.additional_paths.prefix_list %} +{% endif %} +{% if vrf_add_path is arista.avd.defined %} {{ vrf_add_path }} +{% endif %} {% endif %} {% for neighbor in vrf.address_family_ipv6.neighbors | arista.avd.natural_sort('ip_address') %} {% if neighbor.activate is arista.avd.defined(true) %} 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 0c0f370bb5b..6c13ff835d9 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 @@ -14446,6 +14446,17 @@ keys: type: str description: Apply the configurations only to the routes matching the prefix list. + keys: + install: + type: bool + description: Install BGP backup path. + install_ecmp_primary: + type: bool + description: Allow additional path with ECMP primary path. + prefix_list: + type: str + description: Apply the configurations only to the routes + matching the prefix list. redistribute_internal: type: bool description: Allow redistribution of iBGP routes into an Interior diff --git a/python-avd/pyavd/_eos_cli_config_gen/schema/schema_fragments/defs_additional_paths.schema.yml b/python-avd/pyavd/_eos_cli_config_gen/schema/schema_fragments/defs_additional_paths.schema.yml index 299b4773b91..052419f473e 100644 --- a/python-avd/pyavd/_eos_cli_config_gen/schema/schema_fragments/defs_additional_paths.schema.yml +++ b/python-avd/pyavd/_eos_cli_config_gen/schema/schema_fragments/defs_additional_paths.schema.yml @@ -6,12 +6,6 @@ $defs: additional_paths: type: dict keys: - install: - type: bool - description: Install BGP backup path. This setting is used only for `router_bgp.address_family_ipv4.bgp.additional_paths` and `router_bgp.address_family_ipv6.bgp.additional_paths. - install_ecmp_primary: - type: bool - description: Allow additional path with ECMP primary path. This setting is used only for `router_bgp.address_family_ipv4.bgp.additional_paths` and `router_bgp.address_family_ipv6.bgp.additional_paths. receive: type: bool send: @@ -22,7 +16,7 @@ $defs: backup: Best path and installed backup path. ecmp: All paths in best path ECMP group. limit: Limit to n eligible paths. - valid_values: [ 'any', 'backup', 'ecmp', 'limit' ] + valid_values: [ 'any', 'backup', 'ecmp', 'limit', 'null' ] send_ecmp_limit: type: int description: Amount of ECMP paths to send. `send` must be set to `ecmp` for this settings. If this key-value pair is not set, it will send all paths in best ECMP group. @@ -37,6 +31,3 @@ $defs: - str min: 2 max: 64 - prefix_list: - type: str - description: Apply the configurations only to the routes matching the prefix list. 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 77a240e472e..ede1ea57517 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 @@ -2632,6 +2632,16 @@ keys: additional_paths: type: dict $ref: "eos_cli_config_gen#/$defs/additional_paths" + keys: + install: + type: bool + description: Install BGP backup path. + install_ecmp_primary: + type: bool + description: Allow additional path with ECMP primary path. + prefix_list: + type: str + description: Apply the configurations only to the routes matching the prefix list. redistribute_internal: type: bool description: Allow redistribution of iBGP routes into an Interior Gateway Protocol (IGP). EOS default is true. @@ -2755,6 +2765,16 @@ keys: additional_paths: type: dict $ref: "eos_cli_config_gen#/$defs/additional_paths" + keys: + install: + type: bool + description: Install BGP backup path. + install_ecmp_primary: + type: bool + description: Allow additional path with ECMP primary path. + prefix_list: + type: str + description: Apply the configurations only to the routes matching the prefix list. redistribute_internal: type: bool description: Allow redistribution of iBGP routes into an Interior Gateway Protocol (IGP). EOS default is true. From 56567aeb30108151997943cc0736127fec58ba20 Mon Sep 17 00:00:00 2001 From: Laxmikant Chintakindi Date: Wed, 4 Sep 2024 16:45:27 +0530 Subject: [PATCH 14/55] Fix. --- .../inventory/host_vars/router-bgp-evpn.yml | 2 +- .../docs/tables/router-bgp.md | 34 ++++++++----------- .../j2templates/eos/router-bgp.j2 | 2 +- .../schema/eos_cli_config_gen.schema.yml | 13 +------ .../defs_additional_paths.schema.yml | 2 +- 5 files changed, 18 insertions(+), 35 deletions(-) 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 da3bc2afeb3..cdfeb7573ba 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 @@ -128,7 +128,7 @@ router_bgp: - name: ADDITIONAL-PATH-PG-6 activate: true additional_paths: - send: 'null' + send: 'disabled' evpn_hostflap_detection: enabled: true window: 10 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 7303da8a7c6..1ce27c1415e 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 @@ -307,7 +307,7 @@ | [        encapsulation](## "router_bgp.address_family_evpn.peer_groups.[].encapsulation") | String | | | Valid Values:
- vxlan
- mpls | | | [        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") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- null | 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. | + | [          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. | | [          send_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. `send` must be set to `ecmp` for this settings. If this key-value pair is not set, it will send all paths in best ECMP group. | | [          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. `send` must be set to `limit` for this setting. | | [    evpn_hostflap_detection](## "router_bgp.address_family_evpn.evpn_hostflap_detection") | Dictionary | | | | | @@ -325,7 +325,7 @@ | [    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 | | | | | - | [      send](## "router_bgp.address_family_evpn.bgp_additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- null | 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. | + | [      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. | | [      send_ecmp_limit](## "router_bgp.address_family_evpn.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 settings. If this key-value pair is not set, it will send all paths in best ECMP group. | | [      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. `send` must be set to `limit` for this setting. | | [    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. | @@ -520,7 +520,7 @@ | [    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") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- null | 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. | + | [        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. | | [        send_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. `send` must be set to `ecmp` for this settings. If this key-value pair is not set, it will send all paths in best ECMP group. | | [        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. `send` must be set to `limit` for this setting. | | [    neighbors](## "router_bgp.address_family_path_selection.neighbors") | List, items: Dictionary | | | | | @@ -528,7 +528,7 @@ | [        activate](## "router_bgp.address_family_path_selection.neighbors.[].activate") | Boolean | | | | | | [        additional_paths](## "router_bgp.address_family_path_selection.neighbors.[].additional_paths") | Dictionary | | | | | | [          receive](## "router_bgp.address_family_path_selection.neighbors.[].additional_paths.receive") | Boolean | | | | | - | [          send](## "router_bgp.address_family_path_selection.neighbors.[].additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- null | 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. | + | [          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. | | [          send_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. `send` must be set to `ecmp` for this settings. If this key-value pair is not set, it will send all paths in best ECMP group. | | [          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. `send` must be set to `limit` for this setting. | | [    peer_groups](## "router_bgp.address_family_path_selection.peer_groups") | List, items: Dictionary | | | | | @@ -536,7 +536,7 @@ | [        activate](## "router_bgp.address_family_path_selection.peer_groups.[].activate") | Boolean | | | | | | [        additional_paths](## "router_bgp.address_family_path_selection.peer_groups.[].additional_paths") | Dictionary | | | | | | [          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") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- null | 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. | + | [          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. | | [          send_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. `send` must be set to `ecmp` for this settings. If this key-value pair is not set, it will send all paths in best ECMP group. | | [          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. `send` must be set to `limit` for this setting. | | [  address_family_vpn_ipv4](## "router_bgp.address_family_vpn_ipv4") | Dictionary | | | | | @@ -718,7 +718,7 @@ | [            install_ecmp_primary](## "router_bgp.vrfs.[].address_family_ipv4.bgp.additional_paths.install_ecmp_primary") | Boolean | | | | Allow additional path with ECMP primary path. | | [            prefix_list](## "router_bgp.vrfs.[].address_family_ipv4.bgp.additional_paths.prefix_list") | String | | | | Apply the configurations only to the routes matching the prefix list. | | [            receive](## "router_bgp.vrfs.[].address_family_ipv4.bgp.additional_paths.receive") | Boolean | | | | | - | [            send](## "router_bgp.vrfs.[].address_family_ipv4.bgp.additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- null | 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. | + | [            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. | | [            send_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. `send` must be set to `ecmp` for this settings. If this key-value pair is not set, it will send all paths in best ECMP group. | | [            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. `send` must be set to `limit` for this setting. | | [          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. | @@ -754,7 +754,7 @@ | [            install_ecmp_primary](## "router_bgp.vrfs.[].address_family_ipv6.bgp.additional_paths.install_ecmp_primary") | Boolean | | | | Allow additional path with ECMP primary path. | | [            prefix_list](## "router_bgp.vrfs.[].address_family_ipv6.bgp.additional_paths.prefix_list") | String | | | | Apply the configurations only to the routes matching the prefix list. | | [            receive](## "router_bgp.vrfs.[].address_family_ipv6.bgp.additional_paths.receive") | Boolean | | | | | - | [            send](## "router_bgp.vrfs.[].address_family_ipv6.bgp.additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- null | 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. | + | [            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. | | [            send_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. `send` must be set to `ecmp` for this settings. If this key-value pair is not set, it will send all paths in best ECMP group. | | [            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. `send` must be set to `limit` for this setting. | | [          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. | @@ -1435,9 +1435,8 @@ # backup: Best path and installed backup path. # ecmp: All paths in best path ECMP group. # limit: Limit to n eligible paths. - send: + send: - # Amount of ECMP paths to send. `send` must be set to `ecmp` for this settings. If this key-value pair is not set, it will send all paths in best ECMP group. # Amount of ECMP paths to send. `send` must be set to `ecmp` for this settings. If this key-value pair is not set, it will send all paths in best ECMP group. send_ecmp_limit: @@ -1472,7 +1471,7 @@ # backup: Best path and installed backup path. # ecmp: All paths in best path ECMP group. # limit: Limit to n eligible paths. - send: + send: # Amount of ECMP paths to send. `send` must be set to `ecmp` for this settings. If this key-value pair is not set, it will send all paths in best ECMP group. send_ecmp_limit: @@ -1838,13 +1837,11 @@ # backup: Best path and installed backup path. # ecmp: All paths in best path ECMP group. # limit: Limit to n eligible paths. - send: + send: - # Amount of ECMP paths to send. `send` must be set to `ecmp` for this settings. If this key-value pair is not set, it will send all paths in best ECMP group. # Amount of ECMP paths to send. `send` must be set to `ecmp` for this settings. 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. `send` must be set to `limit` for this setting. send_limit: neighbors: @@ -1858,14 +1855,11 @@ # backup: Best path and installed backup path. # ecmp: All paths in best path ECMP group. # limit: Limit to n eligible paths. - send: - send: + send: - # Amount of ECMP paths to send. `send` must be set to `ecmp` for this settings. If this key-value pair is not set, it will send all paths in best ECMP group. # Amount of ECMP paths to send. `send` must be set to `ecmp` for this settings. 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. `send` must be set to `limit` for this setting. send_limit: peer_groups: @@ -1881,7 +1875,7 @@ # backup: Best path and installed backup path. # ecmp: All paths in best path ECMP group. # limit: Limit to n eligible paths. - send: + send: # Amount of ECMP paths to send. `send` must be set to `ecmp` for this settings. If this key-value pair is not set, it will send all paths in best ECMP group. send_ecmp_limit: @@ -2259,7 +2253,7 @@ # backup: Best path and installed backup path. # ecmp: All paths in best path ECMP group. # limit: Limit to n eligible paths. - send: + send: # Amount of ECMP paths to send. `send` must be set to `ecmp` for this settings. If this key-value pair is not set, it will send all paths in best ECMP group. send_ecmp_limit: @@ -2337,7 +2331,7 @@ # backup: Best path and installed backup path. # ecmp: All paths in best path ECMP group. # limit: Limit to n eligible paths. - send: + send: # Amount of ECMP paths to send. `send` must be set to `ecmp` for this settings. If this key-value pair is not set, it will send all paths in best ECMP group. send_ecmp_limit: 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 bd8e472a526..d9094935eb4 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 @@ -693,7 +693,7 @@ router bgp {{ router_bgp.as }} {% endif %} {% if peer_group.additional_paths.send is arista.avd.defined %} {% set evpn_pg_add_path = 'neighbor ' ~ peer_group.name ~ ' additional-paths send' %} -{% if peer_group.additional_paths.send == 'null'%} +{% if peer_group.additional_paths.send == 'disabled' %} {% set evpn_pg_add_path = 'no ' ~ evpn_pg_add_path ~ ' any' %} {% else %} {% if peer_group.additional_paths.send_ecmp_limit is arista.avd.defined and peer_group.additional_paths.send == 'ecmp' %} 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 6c13ff835d9..7ec6e07af93 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 @@ -14446,17 +14446,6 @@ keys: type: str description: Apply the configurations only to the routes matching the prefix list. - keys: - install: - type: bool - description: Install BGP backup path. - install_ecmp_primary: - type: bool - description: Allow additional path with ECMP primary path. - prefix_list: - type: str - description: Apply the configurations only to the routes - matching the prefix list. redistribute_internal: type: bool description: Allow redistribution of iBGP routes into an Interior @@ -19109,7 +19098,7 @@ $defs: - backup - ecmp - limit - - 'null' + - disabled send_ecmp_limit: type: int description: Amount of ECMP paths to send. `send` must be set to `ecmp` for diff --git a/python-avd/pyavd/_eos_cli_config_gen/schema/schema_fragments/defs_additional_paths.schema.yml b/python-avd/pyavd/_eos_cli_config_gen/schema/schema_fragments/defs_additional_paths.schema.yml index 052419f473e..83ecadaf1e5 100644 --- a/python-avd/pyavd/_eos_cli_config_gen/schema/schema_fragments/defs_additional_paths.schema.yml +++ b/python-avd/pyavd/_eos_cli_config_gen/schema/schema_fragments/defs_additional_paths.schema.yml @@ -16,7 +16,7 @@ $defs: backup: Best path and installed backup path. ecmp: All paths in best path ECMP group. limit: Limit to n eligible paths. - valid_values: [ 'any', 'backup', 'ecmp', 'limit', 'null' ] + 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 settings. If this key-value pair is not set, it will send all paths in best ECMP group. From e389820aa9511e97d7ef548033f8b65bf357cad1 Mon Sep 17 00:00:00 2001 From: Laxmikant Chintakindi Date: Wed, 4 Sep 2024 16:47:05 +0530 Subject: [PATCH 15/55] Fix porting guide. --- ansible_collections/arista/avd/docs/porting-guides/5.x.x.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 016cc2a7e6a..ac6ab32f8c7 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 @@ -890,7 +890,7 @@ port_channel_interfaces: In AVD 5.0.0, the data models for `router_bgp.address_family_evpn.vrfs[].address_family_ipv4.bgp.additional_paths`, `router_bgp.address_family_evpn.vrf[].address_family_ipv6.bgp.additional_paths`, `router_bgp.address_family_evpn.address_family_evpn.bgp.peer_groups[].additional_paths`, `router_bgp.address_family_evpn.address_family_evpn.bgp_additional_paths`, `router_bgp.address_family_evpn.address_family_path_selection.bgp.additional_paths`, `router_bgp.address_family_evpn.address_family_path_selection.neighbors[].additional_paths` have been changed. -Added support for filtering of additional_paths using prefix-lists in `router_bgp.address_family_evpn.vrfs[].address_family_ipv4.bgp.additional_paths` and `router_bgp.address_family_evpn.vrfs[].address_family_ipv6.bgp.additional_paths`. +Added support for filtering of BGP additional paths using prefix-lists in `router_bgp.address_family_evpn.vrfs[].address_family_ipv4.bgp.additional_paths` and `router_bgp.address_family_evpn.vrfs[].address_family_ipv6.bgp.additional_paths`. ```diff router_bgp: From 6c9b495de57507e4db4f46d5e4f3251bf2736df4 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Fri, 6 Sep 2024 06:10:24 +0000 Subject: [PATCH 16/55] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- .../schema/schema_fragments/router_bgp.schema.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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 ede1ea57517..ba7cfe825de 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 @@ -2638,7 +2638,7 @@ keys: description: Install BGP backup path. install_ecmp_primary: type: bool - description: Allow additional path with ECMP primary path. + description: Allow additional path with ECMP primary path. prefix_list: type: str description: Apply the configurations only to the routes matching the prefix list. @@ -2771,7 +2771,7 @@ keys: description: Install BGP backup path. install_ecmp_primary: type: bool - description: Allow additional path with ECMP primary path. + description: Allow additional path with ECMP primary path. prefix_list: type: str description: Apply the configurations only to the routes matching the prefix list. From c8fd0498d5cc0e96a0c7f650b82efdbb5c3fe92c Mon Sep 17 00:00:00 2001 From: Laxmikant Chintakindi Date: Fri, 6 Sep 2024 11:42:56 +0530 Subject: [PATCH 17/55] Remove extra checks. --- .../j2templates/eos/router-bgp.j2 | 18 ++---------------- 1 file changed, 2 insertions(+), 16 deletions(-) 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 d9094935eb4..61ced2c2fd8 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 @@ -612,9 +612,7 @@ router bgp {{ router_bgp.as }} {% else %} {% set evpn_add_path = evpn_add_path ~ ' ' ~ router_bgp.address_family_evpn.bgp_additional_paths.send %} {% endif %} -{% if evpn_add_path is arista.avd.defined %} {{ evpn_add_path }} -{% endif %} {% endif %} {% if router_bgp.address_family_evpn.next_hop_unchanged is arista.avd.defined(true) %} bgp next-hop-unchanged @@ -704,9 +702,7 @@ router bgp {{ router_bgp.as }} {% set evpn_pg_add_path = evpn_pg_add_path ~ ' ' ~ peer_group.additional_paths.send %} {% endif %} {% endif %} -{% if evpn_pg_add_path is arista.avd.defined %} {{ evpn_pg_add_path }} -{% endif %} {% endif %} {% if peer_group.domain_remote is arista.avd.defined(true) %} neighbor {{ peer_group.name }} domain remote @@ -1278,9 +1274,7 @@ router bgp {{ router_bgp.as }} {% else %} {% set ps_add_path = ps_add_path ~ ' ' ~ router_bgp.address_family_path_selection.bgp.additional_paths.send %} {% endif %} -{% if ps_add_path is arista.avd.defined %} {{ ps_add_path }} -{% 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) %} @@ -1300,9 +1294,7 @@ router bgp {{ router_bgp.as }} {% else %} {% set ps_pg_add_path = ps_pg_add_path ~ ' ' ~ peer_group.additional_paths.send %} {% endif %} -{% if ps_pg_add_path is arista.avd.defined %} {{ ps_pg_add_path }} -{% endif %} {% endif %} {% endfor %} {% for neighbor in router_bgp.address_family_path_selection.neighbors | arista.avd.natural_sort('ip_address') %} @@ -1323,9 +1315,7 @@ router bgp {{ router_bgp.as }} {% else %} {% set ps_neighbor_add_path = ps_neighbor_add_path ~ ' ' ~ neighbor.additional_paths.send %} {% endif %} -{% if ps_neighbor_add_path is arista.avd.defined %} {{ ps_neighbor_add_path }} -{% endif %} {% endif %} {% endfor %} {% endif %} @@ -1824,12 +1814,10 @@ router bgp {{ router_bgp.as }} {% else %} {% set ipv4_add_path = ipv4_add_path ~ ' ' ~ vrf.address_family_ipv4.bgp.additional_paths.send %} {% endif %} -{% if vrf.address_family_ipv4.bgp.additional_paths.prefix_list is arista.avd.defined and ipv4_add_path is arista.avd.defined %} +{% if vrf.address_family_ipv4.bgp.additional_paths.prefix_list is arista.avd.defined %} {% set ipv4_add_path = ipv4_add_path ~ ' ' ~ vrf.address_family_ipv4.bgp.additional_paths.prefix_list %} {% endif %} -{% if ipv4_add_path is arista.avd.defined %} {{ ipv4_add_path }} -{% endif %} {% endif %} {% for neighbor in vrf.address_family_ipv4.neighbors | arista.avd.natural_sort('ip_address') %} {% if neighbor.activate is arista.avd.defined(true) %} @@ -1979,12 +1967,10 @@ router bgp {{ router_bgp.as }} {% else %} {% set vrf_add_path = vrf_add_path ~ ' ' ~ vrf.address_family_ipv6.bgp.additional_paths.send %} {% endif %} -{% if vrf.address_family_ipv6.bgp.additional_paths.prefix_list is arista.avd.defined and vrf_add_path is arista.avd.defined %} +{% if vrf.address_family_ipv6.bgp.additional_paths.prefix_list is arista.avd.defined %} {% set vrf_add_path = vrf_add_path ~ ' ' ~ vrf.address_family_ipv6.bgp.additional_paths.prefix_list %} {% endif %} -{% if vrf_add_path is arista.avd.defined %} {{ vrf_add_path }} -{% endif %} {% endif %} {% for neighbor in vrf.address_family_ipv6.neighbors | arista.avd.natural_sort('ip_address') %} {% if neighbor.activate is arista.avd.defined(true) %} From 0dc7e621e6cf5c12ad700da17986b56d2d69520e Mon Sep 17 00:00:00 2001 From: Laxmikant Chintakindi Date: Fri, 6 Sep 2024 11:48:15 +0530 Subject: [PATCH 18/55] Removing few lines from porting guide. --- ansible_collections/arista/avd/docs/porting-guides/5.x.x.md | 2 -- 1 file changed, 2 deletions(-) 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 ac6ab32f8c7..edeae98cc07 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 @@ -890,8 +890,6 @@ port_channel_interfaces: In AVD 5.0.0, the data models for `router_bgp.address_family_evpn.vrfs[].address_family_ipv4.bgp.additional_paths`, `router_bgp.address_family_evpn.vrf[].address_family_ipv6.bgp.additional_paths`, `router_bgp.address_family_evpn.address_family_evpn.bgp.peer_groups[].additional_paths`, `router_bgp.address_family_evpn.address_family_evpn.bgp_additional_paths`, `router_bgp.address_family_evpn.address_family_path_selection.bgp.additional_paths`, `router_bgp.address_family_evpn.address_family_path_selection.neighbors[].additional_paths` have been changed. -Added support for filtering of BGP additional paths using prefix-lists in `router_bgp.address_family_evpn.vrfs[].address_family_ipv4.bgp.additional_paths` and `router_bgp.address_family_evpn.vrfs[].address_family_ipv6.bgp.additional_paths`. - ```diff router_bgp: address_family_path_selection: From df968e411999b015286d1968db25abb6b36ad090 Mon Sep 17 00:00:00 2001 From: Laxmikant Chintakindi Date: Fri, 6 Sep 2024 16:18:25 +0530 Subject: [PATCH 19/55] Adding few changes to template. --- .../router-bgp-vrf-address-families.md | 8 ++- .../router-bgp-vrf-address-families.cfg | 8 ++- .../router-bgp-vrf-address-families.yml | 18 ++++- .../docs/tables/router-bgp.md | 70 ++++++++++++++++--- .../j2templates/eos/router-bgp.j2 | 54 ++++++++++++-- .../schema/eos_cli_config_gen.schema.yml | 42 ++++++++--- .../schema_fragments/router_bgp.schema.yml | 38 ++++++++-- 7 files changed, 203 insertions(+), 35 deletions(-) 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 50e63d44838..2d679803e31 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 @@ -73,12 +73,14 @@ router bgp 65001 neighbor FOOBAR activate ! address-family ipv4 multicast + bgp additional-paths receive neighbor FOOBAR activate ! address-family ipv6 no neighbor FOOBAR activate ! address-family ipv6 multicast + bgp additional-paths receive no neighbor FOOBAR activate redistribute isis rcf Router_BGP_Isis() redistribute ospf match internal @@ -103,10 +105,11 @@ router bgp 65001 bgp missing-policy direction out action permit bgp additional-paths install ecmp-primary bgp additional-paths receive - bgp additional-paths send ecmp limit 4 PL1 + bgp additional-paths send ecmp limit 4 neighbor 1.2.3.4 activate 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() @@ -121,6 +124,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 @@ -171,5 +175,5 @@ router bgp 65001 redistribute dynamic rcf VRF_RCF_DYNAMIC() ! address-family ipv4 - bgp additional-paths send ecmp PL1 + bgp additional-paths send ecmp ``` 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 6153459cb55..05485128a17 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,12 +18,14 @@ router bgp 65001 neighbor FOOBAR activate ! address-family ipv4 multicast + bgp additional-paths receive neighbor FOOBAR activate ! address-family ipv6 no neighbor FOOBAR activate ! address-family ipv6 multicast + bgp additional-paths receive no neighbor FOOBAR activate redistribute isis rcf Router_BGP_Isis() redistribute ospf match internal @@ -48,10 +50,11 @@ router bgp 65001 bgp missing-policy direction out action permit bgp additional-paths install ecmp-primary bgp additional-paths receive - bgp additional-paths send ecmp limit 4 PL1 + bgp additional-paths send ecmp limit 4 neighbor 1.2.3.4 activate 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() @@ -66,6 +69,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 @@ -116,4 +120,4 @@ router bgp 65001 redistribute dynamic rcf VRF_RCF_DYNAMIC() ! address-family ipv4 - bgp additional-paths send ecmp PL1 + bgp additional-paths send ecmp 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 f2d12c2a700..28d261a1be0 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,10 +14,16 @@ router_bgp: - name: FOOBAR activate: false address_family_ipv4_multicast: + bgp: + additional_paths: + receive: true peer_groups: - name: FOOBAR activate: true address_family_ipv6_multicast: + bgp: + additional_paths: + receive: true peer_groups: - name: FOOBAR activate: false @@ -52,13 +58,15 @@ router_bgp: receive: true send: ecmp send_ecmp_limit: 4 - prefix_list: PL1 redistribute_internal: false neighbors: - ip_address: 1.2.3.4 activate: true route_map_in: FOO route_map_out: BAR + additional_paths: + send: any + prefix_list: PL2 networks: - prefix: 2.3.4.0/24 route_map: BARFOO @@ -88,6 +96,9 @@ router_bgp: activate: true route_map_in: FOO route_map_out: BAR + additional_paths: + send: any + prefix_list: PL1 - ip_address: aa::2 activate: true rcf_in: VRF_AFIPV6_RCF_IN() @@ -120,6 +131,8 @@ router_bgp: activate: false route_map_in: FOO route_map_out: BAR + additional_paths: + receive: true networks: - prefix: 239.0.0.0/24 route_map: BARFOO @@ -142,6 +155,8 @@ router_bgp: neighbors: - ip_address: aa::1 activate: false + additional_paths: + receive: true networks: - prefix: ff08:1::/64 redistribute_routes: @@ -188,7 +203,6 @@ router_bgp: bgp: additional_paths: send: ecmp - prefix_list: PL1 redistribute_routes: - source_protocol: dynamic rcf: VRF_RCF_DYNAMIC() 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 1ce27c1415e..426281cc3d2 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 @@ -380,6 +380,9 @@ | [        rcf](## "router_bgp.address_family_ipv4.redistribute_routes.[].rcf") | String | | | | RCF function name with parenthesis.
Example: MyFunction(myarg).
`route_map` and `rcf` are mutually exclusive. `route_map` takes precedence.
Only applicable if `source_protocol` is one of `connected`, `static`, `isis`, `user`, `dynamic`. | | [        ospf_route_type](## "router_bgp.address_family_ipv4.redistribute_routes.[].ospf_route_type") | String | | | Valid Values:
- external
- internal
- nssa-external
- nssa-external 1
- nssa-external 2 | Routes learned by the OSPF protocol.
The `ospf_route_type` is valid for source_protocols 'ospf' and 'ospfv3'.
| | [  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 | | | | | @@ -716,7 +719,6 @@ | [          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 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. | - | [            prefix_list](## "router_bgp.vrfs.[].address_family_ipv4.bgp.additional_paths.prefix_list") | String | | | | Apply the configurations only to the routes matching the prefix list. | | [            receive](## "router_bgp.vrfs.[].address_family_ipv4.bgp.additional_paths.receive") | Boolean | | | | | | [            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. | | [            send_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. `send` must be set to `ecmp` for this settings. If this key-value pair is not set, it will send all paths in best ECMP group. | @@ -735,6 +737,12 @@ | [              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 | | | | | + | [              prefix_list](## "router_bgp.vrfs.[].address_family_ipv4.neighbors.[].additional_paths.prefix_list") | String | | | | Apply the configurations only to the routes matching the prefix list. | + | [              receive](## "router_bgp.vrfs.[].address_family_ipv4.neighbors.[].additional_paths.receive") | Boolean | | | | | + | [              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. | + | [              send_ecmp_limit](## "router_bgp.vrfs.[].address_family_ipv4.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 settings. If this key-value pair is not set, it will send all paths in best ECMP group. | + | [              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. `send` must be set to `limit` for this setting. | | [        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 | | | | | @@ -752,7 +760,6 @@ | [          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 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. | - | [            prefix_list](## "router_bgp.vrfs.[].address_family_ipv6.bgp.additional_paths.prefix_list") | String | | | | Apply the configurations only to the routes matching the prefix list. | | [            receive](## "router_bgp.vrfs.[].address_family_ipv6.bgp.additional_paths.receive") | Boolean | | | | | | [            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. | | [            send_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. `send` must be set to `ecmp` for this settings. If this key-value pair is not set, it will send all paths in best ECMP group. | @@ -767,6 +774,12 @@ | [            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 | | | | | + | [              prefix_list](## "router_bgp.vrfs.[].address_family_ipv6.neighbors.[].additional_paths.prefix_list") | String | | | | Apply the configurations only to the routes matching the prefix list. | + | [              receive](## "router_bgp.vrfs.[].address_family_ipv6.neighbors.[].additional_paths.receive") | Boolean | | | | | + | [              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. | + | [              send_ecmp_limit](## "router_bgp.vrfs.[].address_family_ipv6.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 settings. If this key-value pair is not set, it will send all paths in best ECMP group. | + | [              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. `send` must be set to `limit` for this setting. | | [        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 | | | | | @@ -788,6 +801,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 | | | | | @@ -809,6 +824,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 | | | | | @@ -1583,6 +1600,9 @@ # The `ospf_route_type` is valid for source_protocols 'ospf' and 'ospfv3'. ospf_route_type: address_family_ipv4_multicast: + bgp: + additional_paths: + receive: peer_groups: # Peer-group name. @@ -2243,9 +2263,6 @@ # Allow additional path with ECMP primary path. install_ecmp_primary: - - # Apply the configurations only to the routes matching the prefix list. - prefix_list: receive: # Select an option to send multiple paths for same prefix through bgp updates. @@ -2290,6 +2307,24 @@ address_family_ipv6: enabled: originate: + additional_paths: + + # Apply the configurations only to the routes matching the prefix list. + prefix_list: + 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. + send: + + # Amount of ECMP paths to send. `send` must be set to `ecmp` for this settings. 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. + send_limit: networks: # IPv4 prefix "A.B.C.D/E". @@ -2321,9 +2356,6 @@ # Allow additional path with ECMP primary path. install_ecmp_primary: - - # Apply the configurations only to the routes matching the prefix list. - prefix_list: receive: # Select an option to send multiple paths for same prefix through bgp updates. @@ -2364,6 +2396,24 @@ # Outbound prefix-list name. prefix_list_out: + additional_paths: + + # Apply the configurations only to the routes matching the prefix list. + prefix_list: + 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. + send: + + # Amount of ECMP paths to send. `send` must be set to `ecmp` for this settings. 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. + send_limit: networks: # IPv6 prefix "A:B:C:D:E:F:G:H/I". @@ -2399,6 +2449,8 @@ # Outbound route-map name. route_map_out: + additional_paths: + receive: networks: # IPv6 prefix "A.B.C.D/E". @@ -2436,6 +2488,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/eos/router-bgp.j2 b/python-avd/pyavd/_eos_cli_config_gen/j2templates/eos/router-bgp.j2 index 61ced2c2fd8..103a258ecc1 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 @@ -952,6 +952,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 @@ -977,6 +980,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 %} + neighbor {{ neighbor.ip_address }} additional-paths receive +{% endif %} {% endfor %} {% for redistribute_route in router_bgp.address_family_ipv4_multicast.redistribute_routes | arista.avd.natural_sort('source_protocol') %} {% if redistribute_route.source_protocol is arista.avd.defined %} @@ -1269,7 +1275,7 @@ router bgp {{ router_bgp.as }} {% set ps_add_path = 'bgp additional-paths send' %} {% if router_bgp.address_family_path_selection.bgp.additional_paths.send_ecmp_limit is arista.avd.defined and router_bgp.address_family_path_selection.bgp.additional_paths.send == 'ecmp' %} {% set ps_add_path = ps_add_path ~ ' 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 and router_bgp.address_family_path_selection.bgp.additional_paths.send | arista.avd.default == 'limit' %} +{% 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 == 'limit' %} {% set ps_add_path = ps_add_path ~ ' send limit ' ~ router_bgp.address_family_path_selection.bgp.additional_paths.send_limit %} {% else %} {% set ps_add_path = ps_add_path ~ ' ' ~ router_bgp.address_family_path_selection.bgp.additional_paths.send %} @@ -1287,9 +1293,9 @@ router bgp {{ router_bgp.as }} {% endif %} {% if peer_group.additional_paths.send is arista.avd.defined %} {% set ps_pg_add_path = 'neighbor ' ~ peer_group.name ~ ' additional-paths send' %} -{% if peer_group.additional_paths.send_ecmp_limit is arista.avd.defined and peer_group.additional_paths.send | arista.avd.default == 'ecmp' %} +{% if peer_group.additional_paths.send_ecmp_limit is arista.avd.defined and peer_group.additional_paths.send == 'ecmp' %} {% set ps_pg_add_path = ps_pg_add_path ~ ' ecmp limit ' ~ peer_group.additional_paths.send_ecmp_limit %} -{% elif peer_group.additional_paths.send_limit is arista.avd.defined and peer_group.additional_paths.send | arista.avd.default == 'limit' %} +{% elif peer_group.additional_paths.send_limit is arista.avd.defined and peer_group.additional_paths.send == 'limit' %} {% set ps_pg_add_path = ps_pg_add_path ~ ' limit ' ~ peer_group.additional_paths.send_limit %} {% else %} {% set ps_pg_add_path = ps_pg_add_path ~ ' ' ~ peer_group.additional_paths.send %} @@ -1308,7 +1314,7 @@ router bgp {{ router_bgp.as }} {% endif %} {% if neighbor.additional_paths.send is arista.avd.defined %} {% set ps_neighbor_add_path = 'neighbor ' ~ neighbor.ip_address ~ ' additional-paths send' %} -{% if neighbor.additional_paths.send_ecmp_limit is arista.avd.defined and neighbor.additional_paths.send | arista.avd.default == 'ecmp' %} +{% if neighbor.additional_paths.send_ecmp_limit is arista.avd.defined and neighbor.additional_paths.send == 'ecmp' %} {% set ps_neighbor_add_path = ps_neighbor_add_path ~ ' ecmp limit ' ~ neighbor.additional_paths.send_ecmp_limit %} {% elif neighbor.additional_paths.send_limit is arista.avd.defined and neighbor.additional_paths.send == 'limit' %} {% set ps_neighbor_add_path = ps_neighbor_add_path ~ ' limit ' ~ neighbor.additional_paths.send_limit %} @@ -1813,9 +1819,6 @@ router bgp {{ router_bgp.as }} {% set ipv4_add_path = ipv4_add_path ~ ' limit ' ~ vrf.address_family_ipv4.bgp.additional_paths.send_limit %} {% else %} {% set ipv4_add_path = ipv4_add_path ~ ' ' ~ vrf.address_family_ipv4.bgp.additional_paths.send %} -{% endif %} -{% if vrf.address_family_ipv4.bgp.additional_paths.prefix_list is arista.avd.defined %} -{% set ipv4_add_path = ipv4_add_path ~ ' ' ~ vrf.address_family_ipv4.bgp.additional_paths.prefix_list %} {% endif %} {{ ipv4_add_path }} {% endif %} @@ -1841,6 +1844,23 @@ 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.receive is arista.avd.defined %} + neighbor {{ neighbor.ip_address }} additional-paths receive +{% endif %} +{% if neighbor.additional_paths.send is arista.avd.defined %} +{% set vrf_ipv4_add_path = "neighbor " ~ neighbor.ip_address ~ " additional-paths send" %} +{% if neighbor.additional_paths.send_ecmp_limit is arista.avd.defined and neighbor.additional_paths.send == 'ecmp' %} +{% set vrf_ipv4_add_path = vrf_ipv4_add_path ~ ' ecmp limit ' ~ neighbor.additional_paths.send_ecmp_limit %} +{% elif neighbor.additional_paths.send_limit is arista.avd.defined and neighbor.additional_paths.send == 'limit' %} +{% set vrf_ipv4_add_path = vrf_ipv4_add_path ~ ' send limit ' ~ neighbor.additional_paths.send_limit %} +{% else %} +{% set vrf_ipv4_add_path = vrf_ipv4_add_path ~ ' ' ~ neighbor.additional_paths.send %} +{% endif %} +{% if vrf.address_family_ipv4.bgp.additional_paths.prefix_list is arista.avd.defined %} +{% set vrf_ipv4_add_path = vrf_ipv4_add_path ~ ' ' ~ neighbor.additional_paths.prefix_list %} +{% endif %} + {{ vrf_ipv4_add_path }} +{% 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" %} @@ -1911,6 +1931,23 @@ 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 %} + neighbor {{ neighbor.ip_address }} additional-paths receive +{% endif %} +{% if neighbor.additional_paths.send is arista.avd.defined %} +{% set vrf_ipv6mc_add_path = "neighbor " ~ neighbor.ip_address ~ " additional-paths send" %} +{% if neighbor.additional_paths.send_ecmp_limit is arista.avd.defined and neighbor.additional_paths.send == 'ecmp' %} +{% set vrf_ipv6mc_add_path = vrf_ipv6mc_add_path ~ ' ecmp limit ' ~ neighbor.additional_paths.send_ecmp_limit %} +{% elif neighbor.additional_paths.send_limit is arista.avd.defined and neighbor.additional_paths.send == 'limit' %} +{% set vrf_ipv6mc_add_path = vrf_ipv6mc_add_path ~ ' send limit ' ~ neighbor.additional_paths.send_limit %} +{% else %} +{% set vrf_ipv6mc_add_path = vrf_ipv6mc_add_path ~ ' ' ~ neighbor.additional_paths.send %} +{% endif %} +{% if vrf.address_family_ipv4.bgp.additional_paths.prefix_list is arista.avd.defined %} +{% set vrf_ipv6mc_add_path = vrf_ipv6mc_add_path ~ ' ' ~ neighbor.additional_paths.prefix_list %} +{% endif %} + {{ vrf_ipv6mc_add_path }} +{% endif %} {% endfor %} {% for network in vrf.address_family_ipv4_multicast.networks | arista.avd.natural_sort('prefix') %} {% set network_cli = "network " ~ network.prefix %} @@ -2054,6 +2091,9 @@ router bgp {{ router_bgp.as }} neighbor {{ neighbor.ip_address }} route-map {{ neighbor.route_map_out }} out {% endif %} {% endfor %} +{% if neighbor.additional_paths.receive is arista.avd.defined %} + neighbor {{ neighbor.ip_address }} additional-paths receive +{% endif %} {% for network in vrf.address_family_ipv6_multicast.networks | arista.avd.natural_sort('prefix') %} {% set network_cli = "network " ~ network.prefix %} {% if network.route_map is arista.avd.defined %} 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 7ec6e07af93..09e0bb07310 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 @@ -13152,6 +13152,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 @@ -14442,10 +14450,6 @@ keys: install_ecmp_primary: type: bool description: Allow additional path with ECMP primary path. - prefix_list: - type: str - description: Apply the configurations only to the routes - matching the prefix list. redistribute_internal: type: bool description: Allow redistribution of iBGP routes into an Interior @@ -14493,6 +14497,14 @@ keys: required: true originate: type: bool + additional_paths: + type: dict + $ref: eos_cli_config_gen#/$defs/additional_paths + keys: + prefix_list: + type: str + description: Apply the configurations only to the routes + matching the prefix list. networks: type: list primary_key: prefix @@ -14584,10 +14596,6 @@ keys: install_ecmp_primary: type: bool description: Allow additional path with ECMP primary path. - prefix_list: - type: str - description: Apply the configurations only to the routes - matching the prefix list. redistribute_internal: type: bool description: Allow redistribution of iBGP routes into an Interior @@ -14624,6 +14632,14 @@ keys: prefix_list_out: type: str description: Outbound prefix-list name. + additional_paths: + type: dict + $ref: eos_cli_config_gen#/$defs/additional_paths + keys: + prefix_list: + type: str + description: Apply the configurations only to the routes + matching the prefix list. networks: type: list primary_key: prefix @@ -14724,6 +14740,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 @@ -14822,6 +14843,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_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 ba7cfe825de..dd9d102765c 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 @@ -1387,6 +1387,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 @@ -2639,9 +2647,6 @@ keys: install_ecmp_primary: type: bool description: Allow additional path with ECMP primary path. - prefix_list: - type: str - description: Apply the configurations only to the routes matching the prefix list. redistribute_internal: type: bool description: Allow redistribution of iBGP routes into an Interior Gateway Protocol (IGP). EOS default is true. @@ -2688,6 +2693,13 @@ keys: required: true originate: type: bool + additional_paths: + type: dict + $ref: "eos_cli_config_gen#/$defs/additional_paths" + keys: + prefix_list: + type: str + description: Apply the configurations only to the routes matching the prefix list. networks: type: list primary_key: prefix @@ -2772,9 +2784,6 @@ keys: install_ecmp_primary: type: bool description: Allow additional path with ECMP primary path. - prefix_list: - type: str - description: Apply the configurations only to the routes matching the prefix list. redistribute_internal: type: bool description: Allow redistribution of iBGP routes into an Interior Gateway Protocol (IGP). EOS default is true. @@ -2810,6 +2819,13 @@ keys: prefix_list_out: type: str description: Outbound prefix-list name. + additional_paths: + type: dict + $ref: "eos_cli_config_gen#/$defs/additional_paths" + keys: + prefix_list: + type: str + description: Apply the configurations only to the routes matching the prefix list. networks: type: list primary_key: prefix @@ -2904,6 +2920,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 @@ -2996,6 +3017,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 From 764f145ffdf5c588f2965e072b8825c97ddc3f05 Mon Sep 17 00:00:00 2001 From: Laxmikant Chintakindi Date: Fri, 6 Sep 2024 17:05:26 +0530 Subject: [PATCH 20/55] Update the filename. --- .../schema/eos_cli_config_gen.schema.yml | 98 +++++++++---------- ...l => defs_bgp_additional_paths.schema.yml} | 2 +- .../schema_fragments/router_bgp.schema.yml | 18 ++-- 3 files changed, 59 insertions(+), 59 deletions(-) rename python-avd/pyavd/_eos_cli_config_gen/schema/schema_fragments/{defs_additional_paths.schema.yml => defs_bgp_additional_paths.schema.yml} (97%) 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 09e0bb07310..a1acb2d0545 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 @@ -12891,7 +12891,7 @@ keys: - mpls additional_paths: type: dict - $ref: eos_cli_config_gen#/$defs/additional_paths + $ref: eos_cli_config_gen#/$defs/bgp_additional_paths evpn_hostflap_detection: type: dict keys: @@ -12942,7 +12942,7 @@ keys: bgp_additional_paths: type: dict description: BGP additional-paths commands. - $ref: eos_cli_config_gen#/$defs/additional_paths + $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. @@ -13711,7 +13711,7 @@ keys: keys: additional_paths: type: dict - $ref: eos_cli_config_gen#/$defs/additional_paths + $ref: eos_cli_config_gen#/$defs/bgp_additional_paths neighbors: type: list primary_key: ip_address @@ -13724,7 +13724,7 @@ keys: type: bool additional_paths: type: dict - $ref: eos_cli_config_gen#/$defs/additional_paths + $ref: eos_cli_config_gen#/$defs/bgp_additional_paths peer_groups: type: list primary_key: name @@ -13738,7 +13738,7 @@ keys: type: bool additional_paths: type: dict - $ref: eos_cli_config_gen#/$defs/additional_paths + $ref: eos_cli_config_gen#/$defs/bgp_additional_paths address_family_vpn_ipv4: type: dict keys: @@ -14442,7 +14442,7 @@ keys: - permit additional_paths: type: dict - $ref: eos_cli_config_gen#/$defs/additional_paths + $ref: eos_cli_config_gen#/$defs/bgp_additional_paths keys: install: type: bool @@ -14499,7 +14499,7 @@ keys: type: bool additional_paths: type: dict - $ref: eos_cli_config_gen#/$defs/additional_paths + $ref: eos_cli_config_gen#/$defs/bgp_additional_paths keys: prefix_list: type: str @@ -14588,7 +14588,7 @@ keys: - permit additional_paths: type: dict - $ref: eos_cli_config_gen#/$defs/additional_paths + $ref: eos_cli_config_gen#/$defs/bgp_additional_paths keys: install: type: bool @@ -14634,7 +14634,7 @@ keys: description: Outbound prefix-list name. additional_paths: type: dict - $ref: eos_cli_config_gen#/$defs/additional_paths + $ref: eos_cli_config_gen#/$defs/bgp_additional_paths keys: prefix_list: type: str @@ -19102,46 +19102,6 @@ keys: type: dict $ref: eos_cli_config_gen#/keys/vxlan_interface/keys/vxlan1 $defs: - additional_paths: - type: dict - keys: - receive: - type: bool - send: - type: str - description: '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.' - 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 settings. 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. - convert_types: - - str - min: 2 - max: 64 application_traffic_recognition_application: type: dict keys: @@ -19211,6 +19171,46 @@ $defs: When the `protocols` list contain both `tcp` and `udp`, this key value must be the same as `udp_dest_port_set_name`.' + bgp_additional_paths: + type: dict + keys: + receive: + type: bool + send: + type: str + description: '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.' + 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 settings. 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. + convert_types: + - str + min: 2 + max: 64 flow_tracking: type: dict keys: diff --git a/python-avd/pyavd/_eos_cli_config_gen/schema/schema_fragments/defs_additional_paths.schema.yml b/python-avd/pyavd/_eos_cli_config_gen/schema/schema_fragments/defs_bgp_additional_paths.schema.yml similarity index 97% rename from python-avd/pyavd/_eos_cli_config_gen/schema/schema_fragments/defs_additional_paths.schema.yml rename to python-avd/pyavd/_eos_cli_config_gen/schema/schema_fragments/defs_bgp_additional_paths.schema.yml index 83ecadaf1e5..3b37a634dc6 100644 --- a/python-avd/pyavd/_eos_cli_config_gen/schema/schema_fragments/defs_additional_paths.schema.yml +++ b/python-avd/pyavd/_eos_cli_config_gen/schema/schema_fragments/defs_bgp_additional_paths.schema.yml @@ -3,7 +3,7 @@ # that can be found in the LICENSE file. type: dict $defs: - additional_paths: + bgp_additional_paths: type: dict keys: receive: 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 dd9d102765c..8fcb58c2961 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 @@ -1136,7 +1136,7 @@ keys: - "mpls" additional_paths: type: dict - $ref: "eos_cli_config_gen#/$defs/additional_paths" + $ref: "eos_cli_config_gen#/$defs/bgp_additional_paths" evpn_hostflap_detection: type: dict keys: @@ -1186,7 +1186,7 @@ keys: bgp_additional_paths: type: dict description: BGP additional-paths commands. - $ref: "eos_cli_config_gen#/$defs/additional_paths" + $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. @@ -1946,7 +1946,7 @@ keys: keys: additional_paths: type: dict - $ref: "eos_cli_config_gen#/$defs/additional_paths" + $ref: "eos_cli_config_gen#/$defs/bgp_additional_paths" neighbors: type: list primary_key: ip_address @@ -1959,7 +1959,7 @@ keys: type: bool additional_paths: type: dict - $ref: "eos_cli_config_gen#/$defs/additional_paths" + $ref: "eos_cli_config_gen#/$defs/bgp_additional_paths" peer_groups: type: list primary_key: name @@ -1973,7 +1973,7 @@ keys: type: bool additional_paths: type: dict - $ref: "eos_cli_config_gen#/$defs/additional_paths" + $ref: "eos_cli_config_gen#/$defs/bgp_additional_paths" address_family_vpn_ipv4: type: dict keys: @@ -2639,7 +2639,7 @@ keys: - "permit" additional_paths: type: dict - $ref: "eos_cli_config_gen#/$defs/additional_paths" + $ref: "eos_cli_config_gen#/$defs/bgp_additional_paths" keys: install: type: bool @@ -2695,7 +2695,7 @@ keys: type: bool additional_paths: type: dict - $ref: "eos_cli_config_gen#/$defs/additional_paths" + $ref: "eos_cli_config_gen#/$defs/bgp_additional_paths" keys: prefix_list: type: str @@ -2776,7 +2776,7 @@ keys: - "permit" additional_paths: type: dict - $ref: "eos_cli_config_gen#/$defs/additional_paths" + $ref: "eos_cli_config_gen#/$defs/bgp_additional_paths" keys: install: type: bool @@ -2821,7 +2821,7 @@ keys: description: Outbound prefix-list name. additional_paths: type: dict - $ref: "eos_cli_config_gen#/$defs/additional_paths" + $ref: "eos_cli_config_gen#/$defs/bgp_additional_paths" keys: prefix_list: type: str From b23297c895853aa2c484736f9b1c0e1d05cdcecf Mon Sep 17 00:00:00 2001 From: Laxmikant Chintakindi Date: Mon, 9 Sep 2024 15:03:42 +0530 Subject: [PATCH 21/55] Deprecate address_family_evpn.bgp_additional_paths. --- .../arista/avd/docs/porting-guides/5.x.x.md | 7 ++- .../inventory/host_vars/router-bgp-evpn.yml | 7 ++- .../documentation/devices/host1.md | 21 +++++++ .../host_vars/host1/bgp_additional_paths.yml | 5 ++ .../docs/tables/router-bgp.md | 63 +++++++++++++------ .../j2templates/eos/router-bgp.j2 | 24 ++++--- .../schema/eos_cli_config_gen.schema.yml | 12 +++- .../defs_bgp_additional_paths.schema.yml | 2 +- .../schema_fragments/router_bgp.schema.yml | 10 +++ 9 files changed, 119 insertions(+), 32 deletions(-) create mode 100644 ansible_collections/arista/avd/molecule/eos_cli_config_gen_deprecated_vars/inventory/host_vars/host1/bgp_additional_paths.yml 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 edeae98cc07..1d3281496a5 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 @@ -888,7 +888,7 @@ port_channel_interfaces: ### Data model for BGP additional-paths in `router_bgp.address_family_evpn/_vrfs[].ipv4/_vrfs[].ipv6/_path_selection` has been changed -In AVD 5.0.0, the data models for `router_bgp.address_family_evpn.vrfs[].address_family_ipv4.bgp.additional_paths`, `router_bgp.address_family_evpn.vrf[].address_family_ipv6.bgp.additional_paths`, `router_bgp.address_family_evpn.address_family_evpn.bgp.peer_groups[].additional_paths`, `router_bgp.address_family_evpn.address_family_evpn.bgp_additional_paths`, `router_bgp.address_family_evpn.address_family_path_selection.bgp.additional_paths`, `router_bgp.address_family_evpn.address_family_path_selection.neighbors[].additional_paths` have been changed. +In AVD 5.0.0, the data models for `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` have been changed. ```diff router_bgp: @@ -917,6 +917,11 @@ router_bgp: + send_ecmp_limit: 100 <...> address_family_evpn: + bgp_additional_paths: + receive: true +- send: +- ecmp ++ send: ecmp peer_groups: additional_paths: - send: 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 cdfeb7573ba..f18b0fa1818 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 @@ -141,9 +141,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 + 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_deprecated_vars/documentation/devices/host1.md b/ansible_collections/arista/avd/molecule/eos_cli_config_gen_deprecated_vars/documentation/devices/host1.md index 00ecb806057..4fd306a739f 100644 --- a/ansible_collections/arista/avd/molecule/eos_cli_config_gen_deprecated_vars/documentation/devices/host1.md +++ b/ansible_collections/arista/avd/molecule/eos_cli_config_gen_deprecated_vars/documentation/devices/host1.md @@ -5,6 +5,8 @@ - [Interfaces](#interfaces) - [Ethernet Interfaces](#ethernet-interfaces) - [Port-Channel Interfaces](#port-channel-interfaces) +- [Routing](#routing) + - [Router BGP](#router-bgp) - [Filters](#filters) - [Community-lists](#community-lists) @@ -233,6 +235,25 @@ interface Port-Channel10 client dot1q outer 10 inner 12 network dot1q outer 20 inner 22 ``` +## Routing + +### Router BGP + +ASN Notation: asplain + +#### Router BGP Summary + +| BGP AS | Router ID | +| ------ | --------- | +| - | - | + +#### Router BGP EVPN Address Family + +#### Router BGP Device Configuration + +```eos +``` + ## Filters ### Community-lists diff --git a/ansible_collections/arista/avd/molecule/eos_cli_config_gen_deprecated_vars/inventory/host_vars/host1/bgp_additional_paths.yml b/ansible_collections/arista/avd/molecule/eos_cli_config_gen_deprecated_vars/inventory/host_vars/host1/bgp_additional_paths.yml new file mode 100644 index 00000000000..be246b9dd04 --- /dev/null +++ b/ansible_collections/arista/avd/molecule/eos_cli_config_gen_deprecated_vars/inventory/host_vars/host1/bgp_additional_paths.yml @@ -0,0 +1,5 @@ +router_bgp: + address_family_evpn: + bgp_additional_paths: + receive: true + send: any 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 426281cc3d2..837fc01562e 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 @@ -308,7 +308,7 @@ | [        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") | 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. | - | [          send_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. `send` must be set to `ecmp` for this settings. If this key-value pair is not set, it will send all paths in best ECMP group. | + | [          send_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. `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_evpn.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. | | [    evpn_hostflap_detection](## "router_bgp.address_family_evpn.evpn_hostflap_detection") | Dictionary | | | | | | [      enabled](## "router_bgp.address_family_evpn.evpn_hostflap_detection.enabled") | Boolean | | | | | @@ -323,11 +323,17 @@ | [      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 | | | | | | [      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. | - | [      send_ecmp_limit](## "router_bgp.address_family_evpn.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 settings. If this key-value pair is not set, it will send all paths in best ECMP group. | + | [      send_ecmp_limit](## "router_bgp.address_family_evpn.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_evpn.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. | + | [    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 | | | | | + | [        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. | + | [        send_ecmp_limit](## "router_bgp.address_family_evpn.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_evpn.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. | | [    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. | @@ -524,7 +530,7 @@ | [      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") | 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. | - | [        send_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. `send` must be set to `ecmp` for this settings. If this key-value pair is not set, it will send all paths in best ECMP group. | + | [        send_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. `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_path_selection.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. | | [    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 | | | | @@ -532,7 +538,7 @@ | [        additional_paths](## "router_bgp.address_family_path_selection.neighbors.[].additional_paths") | Dictionary | | | | | | [          receive](## "router_bgp.address_family_path_selection.neighbors.[].additional_paths.receive") | Boolean | | | | | | [          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. | - | [          send_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. `send` must be set to `ecmp` for this settings. If this key-value pair is not set, it will send all paths in best ECMP group. | + | [          send_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. `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_path_selection.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. | | [    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. | @@ -540,7 +546,7 @@ | [        additional_paths](## "router_bgp.address_family_path_selection.peer_groups.[].additional_paths") | Dictionary | | | | | | [          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") | 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. | - | [          send_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. `send` must be set to `ecmp` for this settings. If this key-value pair is not set, it will send all paths in best ECMP group. | + | [          send_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. `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_path_selection.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. | | [  address_family_vpn_ipv4](## "router_bgp.address_family_vpn_ipv4") | Dictionary | | | | | | [    domain_identifier](## "router_bgp.address_family_vpn_ipv4.domain_identifier") | String | | | | | @@ -721,7 +727,7 @@ | [            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 | | | | | | [            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. | - | [            send_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. `send` must be set to `ecmp` for this settings. If this key-value pair is not set, it will send all paths in best ECMP group. | + | [            send_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. `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.vrfs.[].address_family_ipv4.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. | | [          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 | | | | | @@ -741,7 +747,7 @@ | [              prefix_list](## "router_bgp.vrfs.[].address_family_ipv4.neighbors.[].additional_paths.prefix_list") | String | | | | Apply the configurations only to the routes matching the prefix list. | | [              receive](## "router_bgp.vrfs.[].address_family_ipv4.neighbors.[].additional_paths.receive") | Boolean | | | | | | [              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. | - | [              send_ecmp_limit](## "router_bgp.vrfs.[].address_family_ipv4.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 settings. If this key-value pair is not set, it will send all paths in best ECMP group. | + | [              send_ecmp_limit](## "router_bgp.vrfs.[].address_family_ipv4.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.vrfs.[].address_family_ipv4.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. | | [        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". | @@ -762,7 +768,7 @@ | [            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 | | | | | | [            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. | - | [            send_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. `send` must be set to `ecmp` for this settings. If this key-value pair is not set, it will send all paths in best ECMP group. | + | [            send_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. `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.vrfs.[].address_family_ipv6.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. | | [          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 | | | | | @@ -778,7 +784,7 @@ | [              prefix_list](## "router_bgp.vrfs.[].address_family_ipv6.neighbors.[].additional_paths.prefix_list") | String | | | | Apply the configurations only to the routes matching the prefix list. | | [              receive](## "router_bgp.vrfs.[].address_family_ipv6.neighbors.[].additional_paths.receive") | Boolean | | | | | | [              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. | - | [              send_ecmp_limit](## "router_bgp.vrfs.[].address_family_ipv6.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 settings. If this key-value pair is not set, it will send all paths in best ECMP group. | + | [              send_ecmp_limit](## "router_bgp.vrfs.[].address_family_ipv6.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.vrfs.[].address_family_ipv6.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. | | [        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". | @@ -1454,7 +1460,7 @@ # limit: Limit to n eligible paths. send: - # Amount of ECMP paths to send. `send` must be set to `ecmp` for this settings. If this key-value pair is not set, it will send all paths in best ECMP group. + # 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. @@ -1480,6 +1486,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: @@ -1490,11 +1499,27 @@ # limit: Limit to n eligible paths. send: - # Amount of ECMP paths to send. `send` must be set to `ecmp` for this settings. If this key-value pair is not set, it will send all paths in best ECMP group. + # 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. send_limit: + bgp: + 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. + 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. + send_limit: # BGP layer-2 in-place FEC operation. layer_2_fec_in_place_update: @@ -1859,7 +1884,7 @@ # limit: Limit to n eligible paths. send: - # Amount of ECMP paths to send. `send` must be set to `ecmp` for this settings. If this key-value pair is not set, it will send all paths in best ECMP group. + # 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. @@ -1877,7 +1902,7 @@ # limit: Limit to n eligible paths. send: - # Amount of ECMP paths to send. `send` must be set to `ecmp` for this settings. If this key-value pair is not set, it will send all paths in best ECMP group. + # 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. @@ -1897,7 +1922,7 @@ # limit: Limit to n eligible paths. send: - # Amount of ECMP paths to send. `send` must be set to `ecmp` for this settings. If this key-value pair is not set, it will send all paths in best ECMP group. + # 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. @@ -2272,7 +2297,7 @@ # limit: Limit to n eligible paths. send: - # Amount of ECMP paths to send. `send` must be set to `ecmp` for this settings. If this key-value pair is not set, it will send all paths in best ECMP group. + # 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. @@ -2320,7 +2345,7 @@ # limit: Limit to n eligible paths. send: - # Amount of ECMP paths to send. `send` must be set to `ecmp` for this settings. If this key-value pair is not set, it will send all paths in best ECMP group. + # 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. @@ -2365,7 +2390,7 @@ # limit: Limit to n eligible paths. send: - # Amount of ECMP paths to send. `send` must be set to `ecmp` for this settings. If this key-value pair is not set, it will send all paths in best ECMP group. + # 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. @@ -2409,7 +2434,7 @@ # limit: Limit to n eligible paths. send: - # Amount of ECMP paths to send. `send` must be set to `ecmp` for this settings. If this key-value pair is not set, it will send all paths in best ECMP group. + # 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. 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 103a258ecc1..339ca1352cc 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 @@ -600,17 +600,27 @@ 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 {% endif %} -{% if router_bgp.address_family_evpn.bgp_additional_paths.send is arista.avd.defined %} -{% set evpn_add_path = 'bgp additional-paths send' %} +{% if router_bgp.address_family_evpn.bgp.additional_paths.send is arista.avd.defined %} +{% set evpn_add_path = 'bgp additional-paths send ' ~ router_bgp.address_family_evpn.bgp.additional_paths.send %} +{% if router_bgp.address_family_evpn.bgp.additional_paths.send_ecmp_limit is arista.avd.defined and router_bgp.address_family_evpn.bgp.additional_paths.send == 'ecmp' %} +{% set evpn_add_path = evpn_add_path ~ ' 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 and router_bgp.address_family_evpn.bgp.additional_paths.send == 'limit' %} +{% set evpn_add_path = evpn_add_path ~ ' ' ~ router_bgp.address_family_evpn.bgp.additional_paths.send_limit %} +{% endif %} + {{ evpn_add_path }} +{% endif %} +{% if router_bgp.address_family_evpn.bgp_additional_paths.receive is arista.avd.defined(true) and not router_bgp.address_family_evpn.bgp.additional_paths.receive is arista.avd.defined %} + bgp additional-paths receive +{% endif %} +{% if router_bgp.address_family_evpn.bgp_additional_paths.send is arista.avd.defined and not router_bgp.address_family_evpn.bgp.additional_paths.send is arista.avd.defined %} +{% set evpn_add_path = 'bgp additional-paths send ' ~ router_bgp.address_family_evpn.bgp_additional_paths.send %} {% if router_bgp.address_family_evpn.bgp_additional_paths.send_ecmp_limit is arista.avd.defined and router_bgp.address_family_evpn.bgp_additional_paths.send == 'ecmp' %} -{% set evpn_add_path = evpn_add_path ~ ' ecmp limit ' ~ router_bgp.address_family_evpn.bgp_additional_paths.send_ecmp_limit %} +{% set evpn_add_path = evpn_add_path ~ ' 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 and router_bgp.address_family_evpn.bgp_additional_paths.send == 'limit' %} -{% set evpn_add_path = evpn_add_path ~ ' limit ' ~ router_bgp.address_family_evpn.bgp_additional_paths.send_limit %} -{% else %} -{% set evpn_add_path = evpn_add_path ~ ' ' ~ router_bgp.address_family_evpn.bgp_additional_paths.send %} +{% set evpn_add_path = evpn_add_path ~ ' ' ~ router_bgp.address_family_evpn.bgp_additional_paths.send_limit %} {% endif %} {{ evpn_add_path }} {% endif %} 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 a1acb2d0545..7da7f4d4dd4 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 @@ -12941,8 +12941,18 @@ 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. $ref: eos_cli_config_gen#/$defs/bgp_additional_paths + 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. @@ -19197,7 +19207,7 @@ $defs: send_ecmp_limit: type: int description: Amount of ECMP paths to send. `send` must be set to `ecmp` for - this settings. If this key-value pair is not set, it will send all paths + this setting. If this key-value pair is not set, it will send all paths in best ECMP group. convert_types: - str 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 3b37a634dc6..771f60a756e 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 @@ -19,7 +19,7 @@ $defs: 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 settings. If this key-value pair is not set, it will send all paths in best ECMP group. + 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 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 8fcb58c2961..1b45ec43073 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 @@ -1185,8 +1185,18 @@ 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. $ref: "eos_cli_config_gen#/$defs/bgp_additional_paths" + 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. From 797d02f833a594d109ae0387dc927dd333865998 Mon Sep 17 00:00:00 2001 From: Laxmikant Chintakindi Date: Wed, 11 Sep 2024 15:31:56 +0530 Subject: [PATCH 22/55] Adding few fixes. --- .../router-bgp-vrf-address-families.md | 2 + .../router-bgp-vrf-address-families.cfg | 2 + .../host_vars/router-bgp-evpn-mpls.yml | 7 +- .../router-bgp-evpn-vpn-import-pruning.yml | 7 +- .../host_vars/router-bgp-v4-evpn.yml | 5 +- .../router-bgp-vrf-address-families.yml | 4 + .../host_vars/host1/bgp_additional_paths.yml | 3 +- .../docs/tables/router-bgp.md | 102 +++++++++++++++--- .../j2templates/eos/router-bgp.j2 | 101 +++++++++-------- .../schema/eos_cli_config_gen.schema.yml | 62 ++++++++++- .../schema_fragments/router_bgp.schema.yml | 62 ++++++++++- 11 files changed, 279 insertions(+), 78 deletions(-) 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 2d679803e31..eedcb3120ed 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 @@ -82,6 +82,7 @@ router bgp 65001 address-family ipv6 multicast bgp additional-paths receive no neighbor FOOBAR activate + neighbor aa::1 additional-paths receive redistribute isis rcf Router_BGP_Isis() redistribute ospf match internal redistribute ospfv3 match external @@ -141,6 +142,7 @@ router bgp 65001 neighbor aa::1 activate 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() 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 05485128a17..de0ed5f3123 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 @@ -27,6 +27,7 @@ router bgp 65001 address-family ipv6 multicast bgp additional-paths receive no neighbor FOOBAR activate + neighbor aa::1 additional-paths receive redistribute isis rcf Router_BGP_Isis() redistribute ospf match internal redistribute ospfv3 match external @@ -86,6 +87,7 @@ router bgp 65001 neighbor aa::1 activate 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() 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 5767e9b75b3..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 - 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 6028fc20cac..c4d8be3bcf4 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 - send_ecmp_limit: 20 + bgp: + additional_paths: + send: ecmp + 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-v4-evpn.yml b/ansible_collections/arista/avd/molecule/eos_cli_config_gen/inventory/host_vars/router-bgp-v4-evpn.yml index 06e596e65c0..34b8009a41d 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,8 +74,9 @@ router_bgp: - source_protocol: connected route_map: RM-CONN-2-BGP address_family_evpn: - bgp_additional_paths: - send: backup + bgp: + additional_paths: + send: backup peer_groups: - name: EVPN-OVERLAY-PEERS 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 28d261a1be0..8b625c18104 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 @@ -36,6 +36,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 diff --git a/ansible_collections/arista/avd/molecule/eos_cli_config_gen_deprecated_vars/inventory/host_vars/host1/bgp_additional_paths.yml b/ansible_collections/arista/avd/molecule/eos_cli_config_gen_deprecated_vars/inventory/host_vars/host1/bgp_additional_paths.yml index be246b9dd04..2c7a30a9b9f 100644 --- a/ansible_collections/arista/avd/molecule/eos_cli_config_gen_deprecated_vars/inventory/host_vars/host1/bgp_additional_paths.yml +++ b/ansible_collections/arista/avd/molecule/eos_cli_config_gen_deprecated_vars/inventory/host_vars/host1/bgp_additional_paths.yml @@ -2,4 +2,5 @@ router_bgp: address_family_evpn: bgp_additional_paths: receive: true - send: any + send: + any: 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 837fc01562e..addad2667b9 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 @@ -324,10 +324,13 @@ | [      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") 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 | | | | | - | [      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. | - | [      send_ecmp_limit](## "router_bgp.address_family_evpn.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_evpn.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. | + | [      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. | | [    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 | | | | | @@ -349,6 +352,13 @@ | [      - 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 | | | | | + | [        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. | + | [        send_ecmp_limit](## "router_bgp.address_family_ipv4.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.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. | | [      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. | @@ -379,6 +389,13 @@ | [        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 | | | | | + | [          install](## "router_bgp.address_family_ipv4.neighbors.[].additional_paths.install") | Boolean | | | | Install BGP backup path. | + | [          install_ecmp_primary](## "router_bgp.address_family_ipv4.neighbors.[].additional_paths.install_ecmp_primary") | Boolean | | | | Allow additional path with ECMP primary path. | + | [          receive](## "router_bgp.address_family_ipv4.neighbors.[].additional_paths.receive") | Boolean | | | | | + | [          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. | + | [          send_ecmp_limit](## "router_bgp.address_family_ipv4.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.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. | | [    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,6 +416,8 @@ | [        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_routes](## "router_bgp.address_family_ipv4_multicast.redistribute_routes") | List, items: Dictionary | | | | | | [      - source_protocol](## "router_bgp.address_family_ipv4_multicast.redistribute_routes.[].source_protocol") | String | Required | | | | | [        route_map](## "router_bgp.address_family_ipv4_multicast.redistribute_routes.[].route_map") | String | | | | | @@ -458,6 +477,8 @@ | [        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 | | | | | @@ -1490,20 +1511,27 @@ # Support will be removed in AVD version 6.0.0. # Use bgp.additional_paths instead. bgp_additional_paths: + + # Receive multiple 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. - send: + # Send multiple paths. + send: + + # Any eligible path. + any: + + # Best path and installed backup path. + backup: - # 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: + # All paths in best path ECMP group. + ecmp: - # Number of paths to send through bgp updates. `send` must be set to `limit` for this setting. - send_limit: + # Amount of ECMP paths to send. + ecmp_limit: + + # Amount of paths to send. + limit: bgp: additional_paths: receive: @@ -1545,6 +1573,27 @@ # Route-map name. route_map: bgp: + additional_paths: + + # Install BGP backup path. + install: + + # Allow additional path with ECMP primary path. + install_ecmp_primary: + 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. + 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. + send_limit: # Allow redistribution of iBGP routes into an Interior Gateway Protocol (IGP). EOS default is true. redistribute_internal: @@ -1608,6 +1657,27 @@ default_originate: always: route_map: + additional_paths: + + # Install BGP backup path. + install: + + # Allow additional path with ECMP primary path. + install_ecmp_primary: + 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. + 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. + send_limit: redistribute_routes: - source_protocol: route_map: @@ -1648,6 +1718,8 @@ # Outbound route-map name. route_map_out: + additional_paths: + receive: redistribute_routes: - source_protocol: route_map: @@ -1775,6 +1847,8 @@ # Outbound route-map name. route_map_out: + additional_paths: + receive: peer_groups: # Peer-group name. 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 339ca1352cc..a3a5d3ad49c 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 @@ -602,27 +602,29 @@ router bgp {{ router_bgp.as }} 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 is arista.avd.defined %} -{% set evpn_add_path = 'bgp additional-paths send ' ~ router_bgp.address_family_evpn.bgp.additional_paths.send %} -{% if router_bgp.address_family_evpn.bgp.additional_paths.send_ecmp_limit is arista.avd.defined and router_bgp.address_family_evpn.bgp.additional_paths.send == 'ecmp' %} -{% set evpn_add_path = evpn_add_path ~ ' 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 and router_bgp.address_family_evpn.bgp.additional_paths.send == 'limit' %} -{% set evpn_add_path = evpn_add_path ~ ' ' ~ router_bgp.address_family_evpn.bgp.additional_paths.send_limit %} -{% endif %} - {{ evpn_add_path }} -{% endif %} -{% if router_bgp.address_family_evpn.bgp_additional_paths.receive is arista.avd.defined(true) and not router_bgp.address_family_evpn.bgp.additional_paths.receive is arista.avd.defined %} +{% 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 is arista.avd.defined and not router_bgp.address_family_evpn.bgp.additional_paths.send is arista.avd.defined %} -{% set evpn_add_path = 'bgp additional-paths send ' ~ router_bgp.address_family_evpn.bgp_additional_paths.send %} -{% if router_bgp.address_family_evpn.bgp_additional_paths.send_ecmp_limit is arista.avd.defined and router_bgp.address_family_evpn.bgp_additional_paths.send == 'ecmp' %} -{% set evpn_add_path = evpn_add_path ~ ' 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 and router_bgp.address_family_evpn.bgp_additional_paths.send == 'limit' %} -{% set evpn_add_path = evpn_add_path ~ ' ' ~ router_bgp.address_family_evpn.bgp_additional_paths.send_limit %} -{% endif %} - {{ evpn_add_path }} +{% if router_bgp.address_family_evpn.bgp.additional_paths is arista.avd.defined %} +{% if router_bgp.address_family_evpn.bgp.additional_paths.send is arista.avd.defined %} +{% set af_evpn_add_path = 'bgp additional-paths send ' ~ router_bgp.address_family_evpn.bgp.additional_paths.send %} +{% if router_bgp.address_family_evpn.bgp.additional_paths.send_ecmp_limit is arista.avd.defined and router_bgp.address_family_evpn.bgp.additional_paths.send == 'ecmp' %} +{% set af_evpn_add_path = af_evpn_add_path ~ ' 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 and router_bgp.address_family_evpn.bgp.additional_paths.send == 'limit' %} +{% set af_evpn_add_path = af_evpn_add_path ~ ' ' ~ router_bgp.address_family_evpn.bgp.additional_paths.send_limit %} +{% endif %} + {{ af_evpn_add_path }} +{% 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 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 @@ -700,17 +702,13 @@ router bgp {{ router_bgp.as }} neighbor {{ peer_group.name }} additional-paths receive {% endif %} {% if peer_group.additional_paths.send is arista.avd.defined %} -{% set evpn_pg_add_path = 'neighbor ' ~ peer_group.name ~ ' additional-paths send' %} +{% set evpn_pg_add_path = 'neighbor ' ~ peer_group.name ~ ' additional-paths send ' ~ peer_group.additional_paths.send %} {% if peer_group.additional_paths.send == 'disabled' %} -{% set evpn_pg_add_path = 'no ' ~ evpn_pg_add_path ~ ' any' %} -{% else %} -{% if peer_group.additional_paths.send_ecmp_limit is arista.avd.defined and peer_group.additional_paths.send == 'ecmp' %} -{% set evpn_pg_add_path = evpn_pg_add_path ~ ' ecmp limit ' ~ peer_group.additional_paths.send_ecmp_limit %} -{% elif peer_group.additional_paths.send_limit is arista.avd.defined and peer_group.additional_paths.send == 'limit' %} -{% set evpn_pg_add_path = evpn_pg_add_path ~ ' limit ' ~ peer_group.additional_paths.send_limit %} -{% else %} -{% set evpn_pg_add_path = evpn_pg_add_path ~ ' ' ~ peer_group.additional_paths.send %} -{% endif %} +{% set evpn_pg_add_path = 'no neighbor ' ~ peer_group.name ~ ' additional-paths send any' %} +{% elif peer_group.additional_paths.send_ecmp_limit is arista.avd.defined and peer_group.additional_paths.send == 'ecmp' %} +{% set evpn_pg_add_path = evpn_pg_add_path ~ ' limit ' ~ peer_group.additional_paths.send_ecmp_limit %} +{% elif peer_group.additional_paths.send_limit is arista.avd.defined and peer_group.additional_paths.send == 'limit' %} +{% set evpn_pg_add_path = evpn_pg_add_path ~ ' ' ~ peer_group.additional_paths.send_limit %} {% endif %} {{ evpn_pg_add_path }} {% endif %} @@ -1165,6 +1163,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 %} @@ -1282,13 +1283,11 @@ router bgp {{ router_bgp.as }} bgp additional-paths receive {% endif %} {% if router_bgp.address_family_path_selection.bgp.additional_paths.send is arista.avd.defined %} -{% set ps_add_path = 'bgp additional-paths send' %} +{% set ps_add_path = 'bgp additional-paths send ' ~ router_bgp.address_family_path_selection.bgp.additional_paths.send %} {% if router_bgp.address_family_path_selection.bgp.additional_paths.send_ecmp_limit is arista.avd.defined and router_bgp.address_family_path_selection.bgp.additional_paths.send == 'ecmp' %} -{% set ps_add_path = ps_add_path ~ ' ecmp limit ' ~ router_bgp.address_family_path_selection.bgp.additional_paths.send_ecmp_limit %} +{% set ps_add_path = ps_add_path ~ ' 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 and router_bgp.address_family_path_selection.bgp.additional_paths.send == 'limit' %} -{% set ps_add_path = ps_add_path ~ ' send limit ' ~ router_bgp.address_family_path_selection.bgp.additional_paths.send_limit %} -{% else %} -{% set ps_add_path = ps_add_path ~ ' ' ~ router_bgp.address_family_path_selection.bgp.additional_paths.send %} +{% set ps_add_path = ps_add_path ~ ' ' ~ router_bgp.address_family_path_selection.bgp.additional_paths.send_limit %} {% endif %} {{ ps_add_path }} {% endif %} @@ -1858,13 +1857,11 @@ router bgp {{ router_bgp.as }} neighbor {{ neighbor.ip_address }} additional-paths receive {% endif %} {% if neighbor.additional_paths.send is arista.avd.defined %} -{% set vrf_ipv4_add_path = "neighbor " ~ neighbor.ip_address ~ " additional-paths send" %} +{% set vrf_ipv4_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 vrf_ipv4_add_path = vrf_ipv4_add_path ~ ' ecmp limit ' ~ neighbor.additional_paths.send_ecmp_limit %} +{% set vrf_ipv4_add_path = vrf_ipv4_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 vrf_ipv4_add_path = vrf_ipv4_add_path ~ ' send limit ' ~ neighbor.additional_paths.send_limit %} -{% else %} -{% set vrf_ipv4_add_path = vrf_ipv4_add_path ~ ' ' ~ neighbor.additional_paths.send %} +{% set vrf_ipv4_add_path = vrf_ipv4_add_path ~ ' ' ~ neighbor.additional_paths.send_limit %} {% endif %} {% if vrf.address_family_ipv4.bgp.additional_paths.prefix_list is arista.avd.defined %} {% set vrf_ipv4_add_path = vrf_ipv4_add_path ~ ' ' ~ neighbor.additional_paths.prefix_list %} @@ -1944,20 +1941,6 @@ router bgp {{ router_bgp.as }} {% if neighbor.additional_paths.receive is arista.avd.defined %} neighbor {{ neighbor.ip_address }} additional-paths receive {% endif %} -{% if neighbor.additional_paths.send is arista.avd.defined %} -{% set vrf_ipv6mc_add_path = "neighbor " ~ neighbor.ip_address ~ " additional-paths send" %} -{% if neighbor.additional_paths.send_ecmp_limit is arista.avd.defined and neighbor.additional_paths.send == 'ecmp' %} -{% set vrf_ipv6mc_add_path = vrf_ipv6mc_add_path ~ ' ecmp limit ' ~ neighbor.additional_paths.send_ecmp_limit %} -{% elif neighbor.additional_paths.send_limit is arista.avd.defined and neighbor.additional_paths.send == 'limit' %} -{% set vrf_ipv6mc_add_path = vrf_ipv6mc_add_path ~ ' send limit ' ~ neighbor.additional_paths.send_limit %} -{% else %} -{% set vrf_ipv6mc_add_path = vrf_ipv6mc_add_path ~ ' ' ~ neighbor.additional_paths.send %} -{% endif %} -{% if vrf.address_family_ipv4.bgp.additional_paths.prefix_list is arista.avd.defined %} -{% set vrf_ipv6mc_add_path = vrf_ipv6mc_add_path ~ ' ' ~ neighbor.additional_paths.prefix_list %} -{% endif %} - {{ vrf_ipv6mc_add_path }} -{% endif %} {% endfor %} {% for network in vrf.address_family_ipv4_multicast.networks | arista.avd.natural_sort('prefix') %} {% set network_cli = "network " ~ network.prefix %} @@ -2041,6 +2024,18 @@ 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 %} +{% set vrf_ipv6_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 vrf_ipv6_add_path = vrf_ipv6_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 vrf_ipv6_add_path = vrf_ipv6_add_path ~ ' ' ~ neighbor.additional_paths.send_limit %} +{% endif %} +{% if vrf.address_family_ipv4.bgp.additional_paths.prefix_list is arista.avd.defined %} +{% set vrf_ipv6_add_path = vrf_ipv6_add_path ~ ' ' ~ neighbor.additional_paths.prefix_list %} +{% endif %} + {{ vrf_ipv6_add_path }} +{% endif %} {% endfor %} {% for network in vrf.address_family_ipv6.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 7da7f4d4dd4..fb2b8fdcf0d 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 @@ -12946,7 +12946,37 @@ keys: remove_in_version: 6.0.0 new_key: bgp.additional_paths description: BGP additional-paths commands. - $ref: eos_cli_config_gen#/$defs/bgp_additional_paths + 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 bgp: type: dict keys: @@ -13006,6 +13036,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 @@ -13108,6 +13148,16 @@ keys: type: bool route_map: type: str + 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_routes: type: list primary_key: source_protocol @@ -13203,6 +13253,11 @@ keys: route_map_out: type: str description: Outbound route-map name. + additional_paths: + type: dict + keys: + receive: + type: bool redistribute_routes: type: list primary_key: source_protocol @@ -13443,6 +13498,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 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 1b45ec43073..c860cc879a9 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 @@ -1190,7 +1190,37 @@ keys: remove_in_version: 6.0.0 new_key: bgp.additional_paths description: BGP additional-paths commands. - $ref: "eos_cli_config_gen#/$defs/bgp_additional_paths" + 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 bgp: type: dict keys: @@ -1250,6 +1280,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. @@ -1351,6 +1391,16 @@ keys: type: bool route_map: type: str + 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_routes: type: list primary_key: source_protocol @@ -1438,6 +1488,11 @@ keys: route_map_out: type: str description: Outbound route-map name. + additional_paths: + type: dict + keys: + receive: + type: bool redistribute_routes: type: list primary_key: source_protocol @@ -1684,6 +1739,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 From 1e09e86e85a90427fa96dc7c495197e52942999f Mon Sep 17 00:00:00 2001 From: Laxmikant Chintakindi Date: Wed, 11 Sep 2024 17:08:32 +0530 Subject: [PATCH 23/55] Adding add_path under ipv4/v6 peer groups. --- .../documentation/devices/router-bgp-base.md | 4 + .../intended/configs/router-bgp-base.cfg | 4 + .../inventory/host_vars/router-bgp-base.yml | 8 ++ .../docs/tables/router-bgp.md | 112 ++++++++++++++++++ .../j2templates/eos/router-bgp.j2 | 24 ++++ .../schema/eos_cli_config_gen.schema.yml | 40 +++++++ .../schema_fragments/router_bgp.schema.yml | 40 +++++++ 7 files changed, 232 insertions(+) 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 313b509b99b..c19593b6704 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,9 +237,11 @@ router bgp 65101 redistribute static rcf Router_BGP_Static() ! address-family ipv4 + 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-path send ecmp limit 20 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 prefix-list PL-FOO-v4-IN in @@ -257,8 +259,10 @@ router bgp 65101 redistribute static rcf Address_Family_IPV4_Static() ! address-family ipv6 + 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-path send ecmp limit 20 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::2 rcf in Address_Family_IPV6_In() 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 748bd2e0e65..739179489d7 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,9 +97,11 @@ router bgp 65101 redistribute static rcf Router_BGP_Static() ! address-family ipv4 + 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-path send ecmp limit 20 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 prefix-list PL-FOO-v4-IN in @@ -117,8 +119,10 @@ router bgp 65101 redistribute static rcf Address_Family_IPV4_Static() ! address-family ipv6 + 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-path send ecmp limit 20 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::2 rcf in Address_Family_IPV6_In() 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 5646e2445de..3d22f442fb2 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 @@ -114,6 +114,10 @@ router_bgp: default_originate: always: true route_map: RM-FOO-MATCH + additional_paths: + receive: true + send: ecmp + send_ecmp_limit: 20 neighbors: - ip_address: 192.0.2.1 prefix_list_in: PL-FOO-v4-IN @@ -151,6 +155,10 @@ router_bgp: - name: baz prefix_list_in: PL-BAR-v6-IN prefix_list_out: PL-BAR-v6-OUT + additional_paths: + receive: true + send: ecmp + send_ecmp_limit: 20 neighbors: - ip_address: 2001:db8::1 prefix_list_in: PL-FOO-v6-IN 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 addad2667b9..6267bb32008 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 @@ -372,6 +372,13 @@ | [          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 | | | | | + | [          install](## "router_bgp.address_family_ipv4.peer_groups.[].additional_paths.install") | Boolean | | | | Install BGP backup path. | + | [          install_ecmp_primary](## "router_bgp.address_family_ipv4.peer_groups.[].additional_paths.install_ecmp_primary") | Boolean | | | | Allow additional path with ECMP primary path. | + | [          receive](## "router_bgp.address_family_ipv4.peer_groups.[].additional_paths.receive") | Boolean | | | | | + | [          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. | + | [          send_ecmp_limit](## "router_bgp.address_family_ipv4.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.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. | | [        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 | | | | @@ -441,6 +448,13 @@ | [        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 | | | | | + | [        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. | + | [        send_ecmp_limit](## "router_bgp.address_family_ipv6.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_ipv6.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. | | [    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 | | | | | @@ -450,6 +464,13 @@ | [        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 | | | | | + | [          install](## "router_bgp.address_family_ipv6.peer_groups.[].additional_paths.install") | Boolean | | | | Install BGP backup path. | + | [          install_ecmp_primary](## "router_bgp.address_family_ipv6.peer_groups.[].additional_paths.install_ecmp_primary") | Boolean | | | | Allow additional path with ECMP primary path. | + | [          receive](## "router_bgp.address_family_ipv6.peer_groups.[].additional_paths.receive") | Boolean | | | | | + | [          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. | + | [          send_ecmp_limit](## "router_bgp.address_family_ipv6.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_ipv6.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. | | [    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 | | | | | @@ -459,6 +480,13 @@ | [        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 | | | | | + | [          install](## "router_bgp.address_family_ipv6.neighbors.[].additional_paths.install") | Boolean | | | | Install BGP backup path. | + | [          install_ecmp_primary](## "router_bgp.address_family_ipv6.neighbors.[].additional_paths.install_ecmp_primary") | Boolean | | | | Allow additional path with ECMP primary path. | + | [          receive](## "router_bgp.address_family_ipv6.neighbors.[].additional_paths.receive") | Boolean | | | | | + | [          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. | + | [          send_ecmp_limit](## "router_bgp.address_family_ipv6.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_ipv6.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. | | [    redistribute_routes](## "router_bgp.address_family_ipv6.redistribute_routes") | List, items: Dictionary | | | | | | [      - source_protocol](## "router_bgp.address_family_ipv6.redistribute_routes.[].source_protocol") | String | Required | | | | | [        route_map](## "router_bgp.address_family_ipv6.redistribute_routes.[].route_map") | String | | | | | @@ -1627,6 +1655,27 @@ # Outbound prefix-list name. prefix_list_out: + additional_paths: + + # Install BGP backup path. + install: + + # Allow additional path with ECMP primary path. + install_ecmp_primary: + 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. + 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. + send_limit: next_hop: address_family_ipv6: enabled: @@ -1769,6 +1818,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: + 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. + 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. + send_limit: peer_groups: # Peer-group name. @@ -1794,6 +1864,27 @@ # Outbound prefix-list name. prefix_list_out: + additional_paths: + + # Install BGP backup path. + install: + + # Allow additional path with ECMP primary path. + install_ecmp_primary: + 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. + 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. + send_limit: neighbors: - ip_address: activate: @@ -1817,6 +1908,27 @@ # Outbound prefix-list name. prefix_list_out: + additional_paths: + + # Install BGP backup path. + install: + + # Allow additional path with ECMP primary path. + install_ecmp_primary: + 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. + 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. + send_limit: redistribute_routes: - source_protocol: route_map: 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 a3a5d3ad49c..ba51d273a54 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 @@ -844,6 +844,9 @@ router bgp {{ router_bgp.as }} ! address-family ipv4 {% 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 %} + 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 %} @@ -884,6 +887,15 @@ 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 %} +{% set af_ipv4_pg_add_path = 'neighbor ' ~ peer_group.name ~ ' additional-path send ' ~ peer_group.additional_paths.send %} +{% if peer_group.additional_paths.send_ecmp_limit is arista.avd.defined and peer_group.additional_paths.send == 'ecmp' %} +{% set af_ipv4_pg_add_path = af_ipv4_pg_add_path ~ ' limit ' ~ peer_group.additional_paths.send_ecmp_limit %} +{% elif peer_group.additional_paths.send_limit is arista.avd.defined and peer_group.additional_paths.send == 'limit' %} +{% set af_ipv4_pg_add_path = af_ipv4_pg_add_path ~ ' ' ~ peer_group.additional_paths.send_limit %} +{% endif %} + {{ af_ipv4_pg_add_path }} +{% endif %} {% endfor %} {% for neighbor in router_bgp.address_family_ipv4.neighbors | arista.avd.natural_sort('ip_address') %} {% if neighbor.route_map_in is arista.avd.defined %} @@ -1048,6 +1060,9 @@ router bgp {{ router_bgp.as }} ! address-family ipv6 {% 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 %} + 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 %} @@ -1071,6 +1086,15 @@ 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 %} +{% set af_ipv6_pg_add_path = 'neighbor ' ~ peer_group.name ~ ' additional-path send ' ~ peer_group.additional_paths.send %} +{% if peer_group.additional_paths.send_ecmp_limit is arista.avd.defined and peer_group.additional_paths.send == 'ecmp' %} +{% set af_ipv6_pg_add_path = af_ipv6_pg_add_path ~ ' limit ' ~ peer_group.additional_paths.send_ecmp_limit %} +{% elif peer_group.additional_paths.send_limit is arista.avd.defined and peer_group.additional_paths.send == 'limit' %} +{% set af_ipv6_pg_add_path = af_ipv6_pg_add_path ~ ' ' ~ peer_group.additional_paths.send_limit %} +{% endif %} + {{ af_ipv6_pg_add_path }} +{% endif %} {% endfor %} {% for neighbor in router_bgp.address_family_ipv6.neighbors | arista.avd.natural_sort('ip_address') %} {% if neighbor.route_map_in is arista.avd.defined %} 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 fb2b8fdcf0d..91d5217eb45 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 @@ -13091,6 +13091,16 @@ 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: + install: + type: bool + description: Install BGP backup path. + install_ecmp_primary: + type: bool + description: Allow additional path with ECMP primary path. next_hop: type: dict keys: @@ -13354,6 +13364,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 @@ -13387,6 +13407,16 @@ 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: + install: + type: bool + description: Install BGP backup path. + install_ecmp_primary: + type: bool + description: Allow additional path with ECMP primary path. neighbors: type: list primary_key: ip_address @@ -13419,6 +13449,16 @@ 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: + install: + type: bool + description: Install BGP backup path. + install_ecmp_primary: + type: bool + description: Allow additional path with ECMP primary path. redistribute_routes: type: list primary_key: source_protocol 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 c860cc879a9..d3a5addb21a 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 @@ -1334,6 +1334,16 @@ 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: + install: + type: bool + description: Install BGP backup path. + install_ecmp_primary: + type: bool + description: Allow additional path with ECMP primary path. next_hop: type: dict keys: @@ -1590,6 +1600,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 @@ -1623,6 +1643,16 @@ 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: + install: + type: bool + description: Install BGP backup path. + install_ecmp_primary: + type: bool + description: Allow additional path with ECMP primary path. neighbors: type: list primary_key: ip_address @@ -1655,6 +1685,16 @@ 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: + install: + type: bool + description: Install BGP backup path. + install_ecmp_primary: + type: bool + description: Allow additional path with ECMP primary path. redistribute_routes: type: list primary_key: source_protocol From 6b897deb4ab53673e5277158b65c56c198e8b406 Mon Sep 17 00:00:00 2001 From: Laxmikant Chintakindi Date: Wed, 11 Sep 2024 22:11:33 +0530 Subject: [PATCH 24/55] Address comment. --- .../j2templates/eos/router-bgp.j2 | 32 +++++++------------ 1 file changed, 12 insertions(+), 20 deletions(-) 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 ba51d273a54..56b20d294f4 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 @@ -1325,13 +1325,11 @@ router bgp {{ router_bgp.as }} neighbor {{ peer_group.name }} additional-paths receive {% endif %} {% if peer_group.additional_paths.send is arista.avd.defined %} -{% set ps_pg_add_path = 'neighbor ' ~ peer_group.name ~ ' additional-paths send' %} +{% set ps_pg_add_path = 'neighbor ' ~ peer_group.name ~ ' additional-paths send ' ~ peer_group.additional_paths.send %} {% if peer_group.additional_paths.send_ecmp_limit is arista.avd.defined and peer_group.additional_paths.send == 'ecmp' %} -{% set ps_pg_add_path = ps_pg_add_path ~ ' ecmp limit ' ~ peer_group.additional_paths.send_ecmp_limit %} +{% set ps_pg_add_path = ps_pg_add_path ~ ' limit ' ~ peer_group.additional_paths.send_ecmp_limit %} {% elif peer_group.additional_paths.send_limit is arista.avd.defined and peer_group.additional_paths.send == 'limit' %} -{% set ps_pg_add_path = ps_pg_add_path ~ ' limit ' ~ peer_group.additional_paths.send_limit %} -{% else %} -{% set ps_pg_add_path = ps_pg_add_path ~ ' ' ~ peer_group.additional_paths.send %} +{% set ps_pg_add_path = ps_pg_add_path ~ ' ' ~ peer_group.additional_paths.send_limit %} {% endif %} {{ ps_pg_add_path }} {% endif %} @@ -1346,13 +1344,11 @@ router bgp {{ router_bgp.as }} neighbor {{ neighbor.ip_address }} additional-paths receive {% endif %} {% if neighbor.additional_paths.send is arista.avd.defined %} -{% set ps_neighbor_add_path = 'neighbor ' ~ neighbor.ip_address ~ ' additional-paths send' %} +{% set ps_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 ps_neighbor_add_path = ps_neighbor_add_path ~ ' ecmp limit ' ~ neighbor.additional_paths.send_ecmp_limit %} +{% set ps_neighbor_add_path = ps_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 ps_neighbor_add_path = ps_neighbor_add_path ~ ' limit ' ~ neighbor.additional_paths.send_limit %} -{% else %} -{% set ps_neighbor_add_path = ps_neighbor_add_path ~ ' ' ~ neighbor.additional_paths.send %} +{% set ps_neighbor_add_path = ps_neighbor_add_path ~ ' ' ~ neighbor.additional_paths.send_limit %} {% endif %} {{ ps_neighbor_add_path }} {% endif %} @@ -1845,13 +1841,11 @@ router bgp {{ router_bgp.as }} bgp additional-paths receive {% endif %} {% if vrf.address_family_ipv4.bgp.additional_paths.send is arista.avd.defined %} -{% set ipv4_add_path = 'bgp additional-paths send' %} +{% set ipv4_add_path = 'bgp additional-paths send ' ~ vrf.address_family_ipv4.bgp.additional_paths.send %} {% if vrf.address_family_ipv4.bgp.additional_paths.send_ecmp_limit is arista.avd.defined and vrf.address_family_ipv4.bgp.additional_paths.send == 'ecmp' %} -{% set ipv4_add_path = ipv4_add_path ~ ' ecmp limit ' ~ vrf.address_family_ipv4.bgp.additional_paths.send_ecmp_limit %} +{% set ipv4_add_path = ipv4_add_path ~ ' 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 and vrf.address_family_ipv4.bgp.additional_paths.send == 'limit' %} -{% set ipv4_add_path = ipv4_add_path ~ ' limit ' ~ vrf.address_family_ipv4.bgp.additional_paths.send_limit %} -{% else %} -{% set ipv4_add_path = ipv4_add_path ~ ' ' ~ vrf.address_family_ipv4.bgp.additional_paths.send %} +{% set ipv4_add_path = ipv4_add_path ~ ' ' ~ vrf.address_family_ipv4.bgp.additional_paths.send_limit %} {% endif %} {{ ipv4_add_path }} {% endif %} @@ -2013,13 +2007,11 @@ router bgp {{ router_bgp.as }} bgp additional-paths receive {% endif %} {% if vrf.address_family_ipv6.bgp.additional_paths.send is arista.avd.defined %} -{% set vrf_add_path = 'bgp additional-paths send' %} +{% set vrf_add_path = 'bgp additional-paths send ' ~ vrf.address_family_ipv6.bgp.additional_paths.send %} {% if vrf.address_family_ipv6.bgp.additional_paths.send_ecmp_limit is arista.avd.defined and vrf.address_family_ipv6.bgp.additional_paths.send == 'ecmp' %} -{% set vrf_add_path = vrf_add_path ~ ' ecmp limit ' ~ vrf.address_family_ipv6.bgp.additional_paths.send_ecmp_limit %} +{% set vrf_add_path = vrf_add_path ~ ' 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 and vrf.address_family_ipv6.bgp.additional_paths.send == 'limit' %} -{% set vrf_add_path = vrf_add_path ~ ' limit ' ~ vrf.address_family_ipv6.bgp.additional_paths.send_limit %} -{% else %} -{% set vrf_add_path = vrf_add_path ~ ' ' ~ vrf.address_family_ipv6.bgp.additional_paths.send %} +{% set vrf_add_path = vrf_add_path ~ ' ' ~ vrf.address_family_ipv6.bgp.additional_paths.send_limit %} {% endif %} {% if vrf.address_family_ipv6.bgp.additional_paths.prefix_list is arista.avd.defined %} {% set vrf_add_path = vrf_add_path ~ ' ' ~ vrf.address_family_ipv6.bgp.additional_paths.prefix_list %} From e210cb265ed55bb55c632baca99c18fa716ab952 Mon Sep 17 00:00:00 2001 From: Laxmikant Chintakindi Date: Thu, 12 Sep 2024 15:01:38 +0530 Subject: [PATCH 25/55] Fixing templates. --- .../documentation/devices/router-bgp-base.md | 2 ++ .../router-bgp-vrf-address-families.md | 1 + .../intended/configs/router-bgp-base.cfg | 2 ++ .../router-bgp-vrf-address-families.cfg | 1 + .../inventory/host_vars/router-bgp-base.yml | 15 ++++++++ .../router-bgp-vrf-address-families.yml | 6 ++-- .../docs/tables/router-bgp.md | 24 +++++++++++++ .../j2templates/eos/router-bgp.j2 | 35 +++++++++++++++++++ .../schema/eos_cli_config_gen.schema.yml | 8 +++++ .../schema_fragments/router_bgp.schema.yml | 8 +++++ 10 files changed, 100 insertions(+), 2 deletions(-) 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 c19593b6704..c91d14fe567 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 @@ -244,6 +244,7 @@ router bgp 65101 neighbor foo additional-path send ecmp limit 20 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-path send limit 20 neighbor 192.0.2.1 prefix-list PL-FOO-v4-IN in neighbor 192.0.2.1 prefix-list PL-FOO-v4-OUT out network 10.0.0.0/8 @@ -265,6 +266,7 @@ router bgp 65101 neighbor baz additional-path send ecmp limit 20 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-path 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-vrf-address-families.md b/ansible_collections/arista/avd/molecule/eos_cli_config_gen/documentation/devices/router-bgp-vrf-address-families.md index eedcb3120ed..1ccc190c9e0 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 @@ -158,6 +158,7 @@ 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 network ff08:1::/64 redistribute connected redistribute ospf match external 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 739179489d7..2f339c096f7 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 @@ -104,6 +104,7 @@ router bgp 65101 neighbor foo additional-path send ecmp limit 20 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-path send limit 20 neighbor 192.0.2.1 prefix-list PL-FOO-v4-IN in neighbor 192.0.2.1 prefix-list PL-FOO-v4-OUT out network 10.0.0.0/8 @@ -125,6 +126,7 @@ router bgp 65101 neighbor baz additional-path send ecmp limit 20 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-path 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-vrf-address-families.cfg b/ansible_collections/arista/avd/molecule/eos_cli_config_gen/intended/configs/router-bgp-vrf-address-families.cfg index de0ed5f3123..32a99c78f11 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 @@ -103,6 +103,7 @@ 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 network ff08:1::/64 redistribute connected redistribute ospf match external 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 3d22f442fb2..9e8f55655d8 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,10 @@ router_bgp: route_map: RM-FOO-MATCH bgp: redistribute_internal: false + additional_paths: + receive: true + send: ecmp + send_ecmp_limit: 20 peer_groups: - name: foo prefix_list_in: PL-BAR-v4-IN @@ -122,6 +126,10 @@ router_bgp: - 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 - ip_address: 10.2.3.8 rcf_in: Address_Family_IPV4_In() - ip_address: 10.2.3.9 @@ -151,6 +159,9 @@ router_bgp: route_map: RM-BAR-MATCH bgp: redistribute_internal: true + additional_paths: + receive: true + send: any peer_groups: - name: baz prefix_list_in: PL-BAR-v6-IN @@ -163,6 +174,10 @@ router_bgp: - 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_ecmp_limit: 20 - 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-vrf-address-families.yml b/ansible_collections/arista/avd/molecule/eos_cli_config_gen/inventory/host_vars/router-bgp-vrf-address-families.yml index 8b625c18104..ccdfce75164 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 @@ -125,11 +125,11 @@ 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 @@ -153,6 +153,8 @@ 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 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 6267bb32008..be921da6f36 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 @@ -292,6 +292,11 @@ | [          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 | | | | | + | [          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. | + | [          send_ecmp_limit](## "router_bgp.address_family_evpn.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_evpn.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. | | [    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. | | [        activate](## "router_bgp.address_family_evpn.peer_groups.[].activate") | Boolean | | | | | @@ -510,6 +515,8 @@ | [    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 | | | | | @@ -1471,6 +1478,21 @@ # Example: MyFunction(myarg). rcf: route_map: + 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. + 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. + send_limit: peer_groups: # Peer-group name. @@ -1966,6 +1988,8 @@ # Peer-group name. - name: activate: + 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/eos/router-bgp.j2 b/python-avd/pyavd/_eos_cli_config_gen/j2templates/eos/router-bgp.j2 index 56b20d294f4..1fa3e757812 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 @@ -725,6 +725,17 @@ 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 %} +{% set evpn_neighbor_add_path = 'neighbor ' ~ peer_group.name ~ ' additional-paths send ' ~ peer_group.additional_paths.send %} +{% if neighbor.additional_paths.send == 'disabled' %} +{% set evpn_neighbor_add_path = 'no neighbor ' ~ neighbor.ip_address ~ ' additional-paths send any' %} +{% elif neighbor.additional_paths.send_ecmp_limit is arista.avd.defined and neighbor.additional_paths.send == 'ecmp' %} +{% set evpn_neighbor_add_path = evpn_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 evpn_neighbor_add_path = evpn_neighbor_add_path ~ ' ' ~ peer_group.additional_paths.send_limit %} +{% endif %} + {{ evpn_neighbor_add_path }} +{% endif %} {% if neighbor.rcf_in is arista.avd.defined %} neighbor {{ neighbor.ip_address }} rcf in {{ neighbor.rcf_in }} {% endif %} @@ -898,6 +909,15 @@ router bgp {{ router_bgp.as }} {% endif %} {% endfor %} {% for neighbor in router_bgp.address_family_ipv4.neighbors | arista.avd.natural_sort('ip_address') %} +{% if neighbor.additional_paths.send is arista.avd.defined %} +{% set ipv4_neighbor_add_path = 'neighbor ' ~ neighbor.ip_address ~ ' additional-path send ' ~ neighbor.additional_paths.send %} +{% if neighbor.additional_paths.send_ecmp_limit is arista.avd.defined and neighbor.additional_paths.send == 'ecmp' %} +{% set ipv4_neighbor_add_path = ipv4_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 ipv4_neighbor_add_path = ipv4_neighbor_add_path ~ ' ' ~ neighbor.additional_paths.send_limit %} +{% endif %} + {{ ipv4_neighbor_add_path }} +{% endif %} {% if neighbor.route_map_in is arista.avd.defined %} neighbor {{ neighbor.ip_address }} route-map {{ neighbor.route_map_in }} in {% endif %} @@ -1120,6 +1140,15 @@ 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 %} +{% set ipv6_neighbor_add_path = 'neighbor ' ~ neighbor.ip_address ~ ' additional-path send ' ~ neighbor.additional_paths.send %} +{% if neighbor.additional_paths.send_ecmp_limit is arista.avd.defined and neighbor.additional_paths.send == 'ecmp' %} +{% set ipv6_neighbor_add_path = ipv6_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 ipv6_neighbor_add_path = ipv6_neighbor_add_path ~ ' ' ~ neighbor.additional_paths.send_limit %} +{% endif %} + {{ ipv6_neighbor_add_path }} +{% endif %} {% endfor %} {% for network in router_bgp.address_family_ipv6.networks | arista.avd.natural_sort('prefix') %} {% if network.route_map is arista.avd.defined %} @@ -1176,6 +1205,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) %} @@ -2040,6 +2072,9 @@ 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.receive is arista.avd.defined(true) %} + neighbor {{ neighbor.ip_address }} additional-paths receive +{% endif %} {% if neighbor.additional_paths.send is arista.avd.defined %} {% set vrf_ipv6_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' %} 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 91d5217eb45..41f2a4f7203 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 @@ -12843,6 +12843,9 @@ keys: Example: MyFunction(myarg).' route_map: type: str + additional_paths: + type: dict + $ref: eos_cli_config_gen#/$defs/bgp_additional_paths peer_groups: type: list primary_key: name @@ -13554,6 +13557,11 @@ keys: description: Peer-group name. activate: type: bool + additional_paths: + type: dict + keys: + receive: + type: bool networks: type: list primary_key: prefix 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 d3a5addb21a..d158cc181fa 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 @@ -1088,6 +1088,9 @@ keys: Example: MyFunction(myarg). route_map: type: str + additional_paths: + type: dict + $ref: "eos_cli_config_gen#/$defs/bgp_additional_paths" peer_groups: type: list primary_key: name @@ -1795,6 +1798,11 @@ keys: description: Peer-group name. activate: type: bool + additional_paths: + type: dict + keys: + receive: + type: bool networks: type: list primary_key: prefix From 03ee1f26d53cfc6e88e4ff386b937c7ec0a88dbb Mon Sep 17 00:00:00 2001 From: Laxmikant Chintakindi Date: Thu, 12 Sep 2024 16:10:09 +0530 Subject: [PATCH 26/55] Fixing template --- .../documentation/devices/router-bgp-base.md | 2 ++ .../intended/configs/router-bgp-base.cfg | 2 ++ .../j2templates/eos/router-bgp.j2 | 18 ++++++++++++++++++ 3 files changed, 22 insertions(+) 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 c91d14fe567..f110563edbf 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 @@ -251,6 +251,7 @@ router bgp 65101 network 172.16.0.0/12 network 192.168.0.0/16 route-map RM-FOO-MATCH no bgp redistribute-internal + bgp additional-path send ecmp redistribute bgp leaked redistribute connected include leaked rcf Address_Family_IPV4_Connected() redistribute dynamic route-map Address_Family_IPV4_Dynamic_RM @@ -272,6 +273,7 @@ router bgp 65101 network 2001:db8:100::/40 network 2001:db8:200::/40 route-map RM-BAR-MATCH bgp redistribute-internal + bgp additional-path send any redistribute bgp leaked route-map RM-REDISTRIBUTE-BGP redistribute connected rcf Address_Family_IPV6_Connected() redistribute ospfv3 match external include leaked 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 2f339c096f7..eaf0738b7b6 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 @@ -111,6 +111,7 @@ router bgp 65101 network 172.16.0.0/12 network 192.168.0.0/16 route-map RM-FOO-MATCH no bgp redistribute-internal + bgp additional-path send ecmp redistribute bgp leaked redistribute connected include leaked rcf Address_Family_IPV4_Connected() redistribute dynamic route-map Address_Family_IPV4_Dynamic_RM @@ -132,6 +133,7 @@ router bgp 65101 network 2001:db8:100::/40 network 2001:db8:200::/40 route-map RM-BAR-MATCH bgp redistribute-internal + bgp additional-path send any redistribute bgp leaked route-map RM-REDISTRIBUTE-BGP redistribute connected rcf Address_Family_IPV6_Connected() redistribute ospfv3 match external include leaked 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 1fa3e757812..9e6179697a3 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 @@ -964,6 +964,15 @@ router bgp {{ router_bgp.as }} {% elif router_bgp.address_family_ipv4.bgp.redistribute_internal is arista.avd.defined(false) %} no bgp redistribute-internal {% endif %} +{% if router_bgp.address_family_ipv4.bgp.additional_paths.send is arista.avd.defined %} +{% set ipv4_bgp_add_path = 'bgp additional-path send ' ~ router_bgp.address_family_ipv4.bgp.additional_paths.send %} +{% if neighbor.additional_paths.send_ecmp_limit is arista.avd.defined and router_bgp.address_family_ipv4.bgp.additional_paths.send == 'ecmp' %} +{% set ipv4_bgp_add_path = ipv4_bgp_add_path ~ ' limit ' ~ router_bgp.address_family_ipv4.bgp.additional_paths.send_ecmp_limit %} +{% elif neighbor.additional_paths.send_limit is arista.avd.defined and router_bgp.address_family_ipv4.bgp.additional_paths.send == 'limit' %} +{% set ipv4_bgp_add_path = ipv4_bgp_add_path ~ ' ' ~ router_bgp.address_family_ipv4.bgp.additional_paths.send_limit %} +{% endif %} + {{ ipv4_bgp_add_path }} +{% endif %} {% for redistribute_route in router_bgp.address_family_ipv4.redistribute_routes | arista.avd.natural_sort('source_protocol') %} {% if redistribute_route.source_protocol is arista.avd.defined %} {% set redistribute_route_cli = "redistribute " ~ redistribute_route.source_protocol %} @@ -1162,6 +1171,15 @@ router bgp {{ router_bgp.as }} {% elif router_bgp.address_family_ipv6.bgp.redistribute_internal is arista.avd.defined(false) %} no bgp redistribute-internal {% endif %} +{% if router_bgp.address_family_ipv6.bgp.additional_paths.send is arista.avd.defined %} +{% set ipv6_bgp_add_path = 'bgp additional-path send ' ~ router_bgp.address_family_ipv6.bgp.additional_paths.send %} +{% if neighbor.additional_paths.send_ecmp_limit is arista.avd.defined and router_bgp.address_family_ipv6.bgp.additional_paths.send == 'ecmp' %} +{% set ipv6_bgp_add_path = ipv6_bgp_add_path ~ ' limit ' ~ router_bgp.address_family_ipv6.bgp.additional_paths.send_ecmp_limit %} +{% elif neighbor.additional_paths.send_limit is arista.avd.defined and router_bgp.address_family_ipv6.bgp.additional_paths.send == 'limit' %} +{% set ipv6_bgp_add_path = ipv6_bgp_add_path ~ ' ' ~ router_bgp.address_family_ipv6.bgp.additional_paths.send_limit %} +{% endif %} + {{ ipv6_bgp_add_path }} +{% endif %} {% for redistribute_route in router_bgp.address_family_ipv6.redistribute_routes | arista.avd.natural_sort('source_protocol') %} {% if redistribute_route.source_protocol is arista.avd.defined %} {% set redistribute_route_cli = "redistribute " ~ redistribute_route.source_protocol %} From 83068f1950255503a69b365cb2b7b2c170ff9c6e Mon Sep 17 00:00:00 2001 From: Laxmikant Chintakindi Date: Fri, 13 Sep 2024 14:07:22 +0530 Subject: [PATCH 27/55] Adding few more lines in templates and schema. --- .../router-bgp-vrf-address-families.md | 10 +++ .../router-bgp-vrf-address-families.cfg | 4 ++ .../router-bgp-vrf-address-families.yml | 10 +++ .../docs/tables/router-bgp.md | 64 ++++++++++++++----- .../j2templates/eos/router-bgp.j2 | 52 +++++++++++---- .../schema/eos_cli_config_gen.schema.yml | 27 ++++---- .../schema_fragments/router_bgp.schema.yml | 27 ++++---- 7 files changed, 137 insertions(+), 57 deletions(-) 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 1ccc190c9e0..93830d11a9a 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 | @@ -90,6 +96,8 @@ router bgp 65001 ! vrf VRF01 no bgp redistribute-internal + bgp additional-paths receive + bgp additional-path send any ! address-family flow-spec ipv4 bgp missing-policy direction in action permit @@ -167,6 +175,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 ! address-family ipv4 bgp additional-paths send backup 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 32a99c78f11..cb119cf54ec 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 @@ -35,6 +35,8 @@ router bgp 65001 ! vrf VRF01 no bgp redistribute-internal + bgp additional-paths receive + bgp additional-path send any ! address-family flow-spec ipv4 bgp missing-policy direction in action permit @@ -112,6 +114,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 ! address-family ipv4 bgp additional-paths send backup 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 ccdfce75164..d33a757c6b6 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 @@ -52,6 +52,10 @@ router_bgp: - name: VRF01 bgp: redistribute_internal: false + additional_paths: + receive: true + send: any + install: true address_family_ipv4: bgp: missing_policy: @@ -194,6 +198,12 @@ router_bgp: activate: true - name: VRF02 + neighbors: + - ip_address: 1.1.1.1 + additional_paths: + receive: true + send: ecmp + send_ecmp_limit: 24 address_family_ipv4: bgp: additional_paths: 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 be921da6f36..fe1a6e9b514 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 @@ -378,8 +378,6 @@ | [        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 | | | | | - | [          install](## "router_bgp.address_family_ipv4.peer_groups.[].additional_paths.install") | Boolean | | | | Install BGP backup path. | - | [          install_ecmp_primary](## "router_bgp.address_family_ipv4.peer_groups.[].additional_paths.install_ecmp_primary") | Boolean | | | | Allow additional path with ECMP primary path. | | [          receive](## "router_bgp.address_family_ipv4.peer_groups.[].additional_paths.receive") | Boolean | | | | | | [          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. | | [          send_ecmp_limit](## "router_bgp.address_family_ipv4.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. | @@ -402,8 +400,6 @@ | [          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 | | | | | - | [          install](## "router_bgp.address_family_ipv4.neighbors.[].additional_paths.install") | Boolean | | | | Install BGP backup path. | - | [          install_ecmp_primary](## "router_bgp.address_family_ipv4.neighbors.[].additional_paths.install_ecmp_primary") | Boolean | | | | Allow additional path with ECMP primary path. | | [          receive](## "router_bgp.address_family_ipv4.neighbors.[].additional_paths.receive") | Boolean | | | | | | [          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. | | [          send_ecmp_limit](## "router_bgp.address_family_ipv4.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. | @@ -664,6 +660,13 @@ | [    - 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 | | | | | + | [          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. | + | [          send_ecmp_limit](## "router_bgp.vrfs.[].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.vrfs.[].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. | | [      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. | @@ -752,6 +755,11 @@ | [          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 | | | | | + | [            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. | + | [            send_ecmp_limit](## "router_bgp.vrfs.[].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.vrfs.[].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. | | [          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 | | | | | @@ -1678,12 +1686,6 @@ # Outbound prefix-list name. prefix_list_out: additional_paths: - - # Install BGP backup path. - install: - - # Allow additional path with ECMP primary path. - install_ecmp_primary: receive: # Select an option to send multiple paths for same prefix through bgp updates. @@ -1729,12 +1731,6 @@ always: route_map: additional_paths: - - # Install BGP backup path. - install: - - # Allow additional path with ECMP primary path. - install_ecmp_primary: receive: # Select an option to send multiple paths for same prefix through bgp updates. @@ -2257,6 +2253,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: + 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. + 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. + send_limit: # Route distinguisher. rd: @@ -2448,6 +2465,21 @@ # Outbound route-map name. route_map_out: + 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. + 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. + send_limit: neighbor_interfaces: # Interface name. 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 9e6179697a3..9bb667e504e 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 @@ -726,13 +726,13 @@ router bgp {{ router_bgp.as }} no neighbor {{ neighbor.ip_address }} activate {% endif %} {% if neighbor.additional_paths.send is arista.avd.defined %} -{% set evpn_neighbor_add_path = 'neighbor ' ~ peer_group.name ~ ' additional-paths send ' ~ peer_group.additional_paths.send %} +{% set evpn_neighbor_add_path = 'neighbor ' ~ peer_group.name ~ ' additional-paths send ' ~ neighbor.additional_paths.send %} {% if neighbor.additional_paths.send == 'disabled' %} {% set evpn_neighbor_add_path = 'no neighbor ' ~ neighbor.ip_address ~ ' additional-paths send any' %} {% elif neighbor.additional_paths.send_ecmp_limit is arista.avd.defined and neighbor.additional_paths.send == 'ecmp' %} {% set evpn_neighbor_add_path = evpn_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 evpn_neighbor_add_path = evpn_neighbor_add_path ~ ' ' ~ peer_group.additional_paths.send_limit %} +{% set evpn_neighbor_add_path = evpn_neighbor_add_path ~ ' ' ~ neighbor.additional_paths.send_limit %} {% endif %} {{ evpn_neighbor_add_path }} {% endif %} @@ -855,7 +855,7 @@ router bgp {{ router_bgp.as }} ! address-family ipv4 {% 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 %} +{% 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 %} @@ -1029,7 +1029,7 @@ 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 %} +{% if neighbor.additional_paths.receive is arista.avd.defined(true) %} neighbor {{ neighbor.ip_address }} additional-paths receive {% endif %} {% endfor %} @@ -1089,7 +1089,7 @@ router bgp {{ router_bgp.as }} ! address-family ipv6 {% 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 %} +{% 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 %} @@ -1171,6 +1171,11 @@ router bgp {{ router_bgp.as }} {% elif router_bgp.address_family_ipv6.bgp.redistribute_internal is arista.avd.defined(false) %} no bgp redistribute-internal {% endif %} +{% 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.send is arista.avd.defined %} {% set ipv6_bgp_add_path = 'bgp additional-path send ' ~ router_bgp.address_family_ipv6.bgp.additional_paths.send %} {% if neighbor.additional_paths.send_ecmp_limit is arista.avd.defined and router_bgp.address_family_ipv6.bgp.additional_paths.send == 'ecmp' %} @@ -1788,6 +1793,18 @@ 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 %} +{% set vrf_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 vrf_neighbor_add_path = vrf_neighbor_add_path ~ ' limit ' ~ neighbor.additional_paths.send_ecmp_limit %} +{% elif vrf.bgp.additional_paths.send_limit is arista.avd.defined and vrf.bgp.additional_paths.send == 'limit' %} +{% set vrf_neighbor_add_path = vrf_neighbor_add_path ~ ' ' ~ neighbor.additional_paths.send_limit %} +{% endif %} + {{ vrf_neighbor_add_path }} +{% endif %} {% endfor %} {% for network in vrf.networks | arista.avd.natural_sort('prefix') %} {% if network.route_map is arista.avd.defined %} @@ -1801,6 +1818,18 @@ router bgp {{ router_bgp.as }} {% elif vrf.bgp.redistribute_internal is arista.avd.defined(false) %} no bgp redistribute-internal {% 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 %} +{% set vrf_add_path = 'bgp additional-path send ' ~ vrf.bgp.additional_paths.send %} +{% if vrf.bgp.additional_paths.send_ecmp_limit is arista.avd.defined and vrf.bgp.additional_paths.send == 'ecmp' %} +{% set vrf_add_path = vrf_add_path ~ ' limit ' ~ vrf.bgp.additional_paths.send_ecmp_limit %} +{% elif vrf.bgp.additional_paths.send_limit is arista.avd.defined and vrf.bgp.additional_paths.send == 'limit' %} +{% set vrf_add_path = vrf_add_path ~ ' ' ~ vrf.bgp.additional_paths.send_limit %} +{% endif %} + {{ vrf_add_path }} +{% endif %} {% for aggregate_address in vrf.aggregate_addresses | arista.avd.natural_sort('prefix') %} {% set aggregate_address_cli = "aggregate-address " ~ aggregate_address.prefix %} {% if aggregate_address.as_set is arista.avd.defined(true) %} @@ -1921,7 +1950,7 @@ 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.receive is arista.avd.defined %} +{% 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 %} @@ -1931,7 +1960,7 @@ router bgp {{ router_bgp.as }} {% elif neighbor.additional_paths.send_limit is arista.avd.defined and neighbor.additional_paths.send == 'limit' %} {% set vrf_ipv4_add_path = vrf_ipv4_add_path ~ ' ' ~ neighbor.additional_paths.send_limit %} {% endif %} -{% if vrf.address_family_ipv4.bgp.additional_paths.prefix_list is arista.avd.defined %} +{% if neighbor.bgp.additional_paths.prefix_list is arista.avd.defined %} {% set vrf_ipv4_add_path = vrf_ipv4_add_path ~ ' ' ~ neighbor.additional_paths.prefix_list %} {% endif %} {{ vrf_ipv4_add_path }} @@ -2006,7 +2035,7 @@ 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 %} +{% if neighbor.additional_paths.receive is arista.avd.defined(true) %} neighbor {{ neighbor.ip_address }} additional-paths receive {% endif %} {% endfor %} @@ -2062,9 +2091,6 @@ router bgp {{ router_bgp.as }} {% set vrf_add_path = vrf_add_path ~ ' 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 and vrf.address_family_ipv6.bgp.additional_paths.send == 'limit' %} {% set vrf_add_path = vrf_add_path ~ ' ' ~ vrf.address_family_ipv6.bgp.additional_paths.send_limit %} -{% endif %} -{% if vrf.address_family_ipv6.bgp.additional_paths.prefix_list is arista.avd.defined %} -{% set vrf_add_path = vrf_add_path ~ ' ' ~ vrf.address_family_ipv6.bgp.additional_paths.prefix_list %} {% endif %} {{ vrf_add_path }} {% endif %} @@ -2100,7 +2126,7 @@ router bgp {{ router_bgp.as }} {% elif neighbor.additional_paths.send_limit is arista.avd.defined and neighbor.additional_paths.send == 'limit' %} {% set vrf_ipv6_add_path = vrf_ipv6_add_path ~ ' ' ~ neighbor.additional_paths.send_limit %} {% endif %} -{% if vrf.address_family_ipv4.bgp.additional_paths.prefix_list is arista.avd.defined %} +{% if neighbor.bgp.additional_paths.prefix_list is arista.avd.defined %} {% set vrf_ipv6_add_path = vrf_ipv6_add_path ~ ' ' ~ neighbor.additional_paths.prefix_list %} {% endif %} {{ vrf_ipv6_add_path }} @@ -2165,7 +2191,7 @@ router bgp {{ router_bgp.as }} neighbor {{ neighbor.ip_address }} route-map {{ neighbor.route_map_out }} out {% endif %} {% endfor %} -{% if neighbor.additional_paths.receive is arista.avd.defined %} +{% if neighbor.additional_paths.receive is arista.avd.defined(true) %} neighbor {{ neighbor.ip_address }} additional-paths receive {% endif %} {% for network in vrf.address_family_ipv6_multicast.networks | arista.avd.natural_sort('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 41f2a4f7203..73a0f77611e 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 @@ -13097,13 +13097,6 @@ 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. next_hop: type: dict keys: @@ -13164,13 +13157,6 @@ 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_routes: type: list primary_key: source_protocol @@ -14063,6 +14049,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. @@ -14436,6 +14432,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. 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 d158cc181fa..da9e881138a 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 @@ -1340,13 +1340,6 @@ 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. next_hop: type: dict keys: @@ -1407,13 +1400,6 @@ 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_routes: type: list primary_key: source_protocol @@ -2297,6 +2283,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. @@ -2632,6 +2628,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. From af331b26417c888cb41b77558b0cbb39bfac3737 Mon Sep 17 00:00:00 2001 From: Laxmikant Chintakindi Date: Thu, 19 Sep 2024 13:43:59 +0530 Subject: [PATCH 28/55] Update additional_paths.instal under neighbor and peer groups. --- .../documentation/devices/router-bgp-base.md | 9 ++- .../intended/configs/router-bgp-base.cfg | 9 ++- .../inventory/host_vars/router-bgp-base.yml | 2 + .../docs/tables/router-bgp.md | 8 --- .../j2templates/eos/router-bgp.j2 | 62 ++++++++++++------- .../schema/eos_cli_config_gen.schema.yml | 7 --- .../schema_fragments/router_bgp.schema.yml | 7 --- 7 files changed, 54 insertions(+), 50 deletions(-) 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 f110563edbf..1fb249bf3d4 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,6 +237,9 @@ router bgp 65101 redistribute static rcf Router_BGP_Static() ! address-family ipv4 + bgp additional-paths receive + bgp additional-paths install + bgp additional-path send ecmp neighbor foo additional-paths receive neighbor foo prefix-list PL-BAR-v4-IN in neighbor foo prefix-list PL-BAR-v4-OUT out @@ -244,6 +247,7 @@ router bgp 65101 neighbor foo additional-path send ecmp limit 20 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 additional-path send limit 20 neighbor 192.0.2.1 prefix-list PL-FOO-v4-IN in neighbor 192.0.2.1 prefix-list PL-FOO-v4-OUT out @@ -251,7 +255,6 @@ router bgp 65101 network 172.16.0.0/12 network 192.168.0.0/16 route-map RM-FOO-MATCH no bgp redistribute-internal - bgp additional-path send ecmp redistribute bgp leaked redistribute connected include leaked rcf Address_Family_IPV4_Connected() redistribute dynamic route-map Address_Family_IPV4_Dynamic_RM @@ -261,6 +264,9 @@ router bgp 65101 redistribute static rcf Address_Family_IPV4_Static() ! address-family ipv6 + bgp additional-paths receive + bgp additional-paths install ecmp-primary + bgp additional-path 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 @@ -273,7 +279,6 @@ router bgp 65101 network 2001:db8:100::/40 network 2001:db8:200::/40 route-map RM-BAR-MATCH bgp redistribute-internal - bgp additional-path send any redistribute bgp leaked route-map RM-REDISTRIBUTE-BGP redistribute connected rcf Address_Family_IPV6_Connected() redistribute ospfv3 match external include leaked 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 eaf0738b7b6..0acb3ca290e 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,6 +97,9 @@ router bgp 65101 redistribute static rcf Router_BGP_Static() ! address-family ipv4 + bgp additional-paths receive + bgp additional-paths install + bgp additional-path send ecmp neighbor foo additional-paths receive neighbor foo prefix-list PL-BAR-v4-IN in neighbor foo prefix-list PL-BAR-v4-OUT out @@ -104,6 +107,7 @@ router bgp 65101 neighbor foo additional-path send ecmp limit 20 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 additional-path send limit 20 neighbor 192.0.2.1 prefix-list PL-FOO-v4-IN in neighbor 192.0.2.1 prefix-list PL-FOO-v4-OUT out @@ -111,7 +115,6 @@ router bgp 65101 network 172.16.0.0/12 network 192.168.0.0/16 route-map RM-FOO-MATCH no bgp redistribute-internal - bgp additional-path send ecmp redistribute bgp leaked redistribute connected include leaked rcf Address_Family_IPV4_Connected() redistribute dynamic route-map Address_Family_IPV4_Dynamic_RM @@ -121,6 +124,9 @@ router bgp 65101 redistribute static rcf Address_Family_IPV4_Static() ! address-family ipv6 + bgp additional-paths receive + bgp additional-paths install ecmp-primary + bgp additional-path 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 @@ -133,7 +139,6 @@ router bgp 65101 network 2001:db8:100::/40 network 2001:db8:200::/40 route-map RM-BAR-MATCH bgp redistribute-internal - bgp additional-path send any redistribute bgp leaked route-map RM-REDISTRIBUTE-BGP redistribute connected rcf Address_Family_IPV6_Connected() redistribute ospfv3 match external include leaked 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 9e8f55655d8..49e18322c3b 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 @@ -109,6 +109,7 @@ router_bgp: redistribute_internal: false additional_paths: receive: true + install: true send: ecmp send_ecmp_limit: 20 peer_groups: @@ -161,6 +162,7 @@ router_bgp: redistribute_internal: true additional_paths: receive: true + install_ecmp_primary: true send: any peer_groups: - name: baz 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 fe1a6e9b514..3d58913bbc6 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 @@ -466,8 +466,6 @@ | [        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 | | | | | - | [          install](## "router_bgp.address_family_ipv6.peer_groups.[].additional_paths.install") | Boolean | | | | Install BGP backup path. | - | [          install_ecmp_primary](## "router_bgp.address_family_ipv6.peer_groups.[].additional_paths.install_ecmp_primary") | Boolean | | | | Allow additional path with ECMP primary path. | | [          receive](## "router_bgp.address_family_ipv6.peer_groups.[].additional_paths.receive") | Boolean | | | | | | [          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. | | [          send_ecmp_limit](## "router_bgp.address_family_ipv6.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. | @@ -1883,12 +1881,6 @@ # Outbound prefix-list name. prefix_list_out: additional_paths: - - # Install BGP backup path. - install: - - # Allow additional path with ECMP primary path. - install_ecmp_primary: receive: # Select an option to send multiple paths for same prefix through bgp updates. 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 9bb667e504e..704d8283dda 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 @@ -726,7 +726,7 @@ router bgp {{ router_bgp.as }} no neighbor {{ neighbor.ip_address }} activate {% endif %} {% if neighbor.additional_paths.send is arista.avd.defined %} -{% set evpn_neighbor_add_path = 'neighbor ' ~ peer_group.name ~ ' additional-paths send ' ~ neighbor.additional_paths.send %} +{% set evpn_neighbor_add_path = 'neighbor ' ~ neighbor.ip_address ~ ' additional-paths send ' ~ neighbor.additional_paths.send %} {% if neighbor.additional_paths.send == 'disabled' %} {% set evpn_neighbor_add_path = 'no neighbor ' ~ neighbor.ip_address ~ ' additional-paths send any' %} {% elif neighbor.additional_paths.send_ecmp_limit is arista.avd.defined and neighbor.additional_paths.send == 'ecmp' %} @@ -854,6 +854,23 @@ 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.receive is arista.avd.defined(true) %} + bgp additional-paths receive +{% endif %} +{% 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.send is arista.avd.defined %} +{% set ipv4_bgp_add_path = 'bgp additional-path send ' ~ router_bgp.address_family_ipv4.bgp.additional_paths.send %} +{% if neighbor.additional_paths.send_ecmp_limit is arista.avd.defined and router_bgp.address_family_ipv4.bgp.additional_paths.send == 'ecmp' %} +{% set ipv4_bgp_add_path = ipv4_bgp_add_path ~ ' limit ' ~ router_bgp.address_family_ipv4.bgp.additional_paths.send_ecmp_limit %} +{% elif neighbor.additional_paths.send_limit is arista.avd.defined and router_bgp.address_family_ipv4.bgp.additional_paths.send == 'limit' %} +{% set ipv4_bgp_add_path = ipv4_bgp_add_path ~ ' ' ~ router_bgp.address_family_ipv4.bgp.additional_paths.send_limit %} +{% endif %} + {{ ipv4_bgp_add_path }} +{% 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 @@ -909,6 +926,9 @@ router bgp {{ router_bgp.as }} {% 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.additional_paths.send is arista.avd.defined %} {% set ipv4_neighbor_add_path = 'neighbor ' ~ neighbor.ip_address ~ ' additional-path send ' ~ neighbor.additional_paths.send %} {% if neighbor.additional_paths.send_ecmp_limit is arista.avd.defined and neighbor.additional_paths.send == 'ecmp' %} @@ -964,15 +984,6 @@ router bgp {{ router_bgp.as }} {% elif router_bgp.address_family_ipv4.bgp.redistribute_internal is arista.avd.defined(false) %} no bgp redistribute-internal {% endif %} -{% if router_bgp.address_family_ipv4.bgp.additional_paths.send is arista.avd.defined %} -{% set ipv4_bgp_add_path = 'bgp additional-path send ' ~ router_bgp.address_family_ipv4.bgp.additional_paths.send %} -{% if neighbor.additional_paths.send_ecmp_limit is arista.avd.defined and router_bgp.address_family_ipv4.bgp.additional_paths.send == 'ecmp' %} -{% set ipv4_bgp_add_path = ipv4_bgp_add_path ~ ' limit ' ~ router_bgp.address_family_ipv4.bgp.additional_paths.send_ecmp_limit %} -{% elif neighbor.additional_paths.send_limit is arista.avd.defined and router_bgp.address_family_ipv4.bgp.additional_paths.send == 'limit' %} -{% set ipv4_bgp_add_path = ipv4_bgp_add_path ~ ' ' ~ router_bgp.address_family_ipv4.bgp.additional_paths.send_limit %} -{% endif %} - {{ ipv4_bgp_add_path }} -{% endif %} {% for redistribute_route in router_bgp.address_family_ipv4.redistribute_routes | arista.avd.natural_sort('source_protocol') %} {% if redistribute_route.source_protocol is arista.avd.defined %} {% set redistribute_route_cli = "redistribute " ~ redistribute_route.source_protocol %} @@ -1088,6 +1099,23 @@ 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.receive is arista.avd.defined(true) %} + bgp additional-paths receive +{% endif %} +{% 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.send is arista.avd.defined %} +{% set ipv6_bgp_add_path = 'bgp additional-path send ' ~ router_bgp.address_family_ipv6.bgp.additional_paths.send %} +{% if neighbor.additional_paths.send_ecmp_limit is arista.avd.defined and router_bgp.address_family_ipv6.bgp.additional_paths.send == 'ecmp' %} +{% set ipv6_bgp_add_path = ipv6_bgp_add_path ~ ' limit ' ~ router_bgp.address_family_ipv6.bgp.additional_paths.send_ecmp_limit %} +{% elif neighbor.additional_paths.send_limit is arista.avd.defined and router_bgp.address_family_ipv6.bgp.additional_paths.send == 'limit' %} +{% set ipv6_bgp_add_path = ipv6_bgp_add_path ~ ' ' ~ router_bgp.address_family_ipv6.bgp.additional_paths.send_limit %} +{% endif %} + {{ ipv6_bgp_add_path }} +{% 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 @@ -1171,20 +1199,6 @@ router bgp {{ router_bgp.as }} {% elif router_bgp.address_family_ipv6.bgp.redistribute_internal is arista.avd.defined(false) %} no bgp redistribute-internal {% endif %} -{% 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.send is arista.avd.defined %} -{% set ipv6_bgp_add_path = 'bgp additional-path send ' ~ router_bgp.address_family_ipv6.bgp.additional_paths.send %} -{% if neighbor.additional_paths.send_ecmp_limit is arista.avd.defined and router_bgp.address_family_ipv6.bgp.additional_paths.send == 'ecmp' %} -{% set ipv6_bgp_add_path = ipv6_bgp_add_path ~ ' limit ' ~ router_bgp.address_family_ipv6.bgp.additional_paths.send_ecmp_limit %} -{% elif neighbor.additional_paths.send_limit is arista.avd.defined and router_bgp.address_family_ipv6.bgp.additional_paths.send == 'limit' %} -{% set ipv6_bgp_add_path = ipv6_bgp_add_path ~ ' ' ~ router_bgp.address_family_ipv6.bgp.additional_paths.send_limit %} -{% endif %} - {{ ipv6_bgp_add_path }} -{% endif %} {% for redistribute_route in router_bgp.address_family_ipv6.redistribute_routes | arista.avd.natural_sort('source_protocol') %} {% if redistribute_route.source_protocol is arista.avd.defined %} {% set redistribute_route_cli = "redistribute " ~ redistribute_route.source_protocol %} 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 73a0f77611e..ec74c37a030 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 @@ -13399,13 +13399,6 @@ 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. neighbors: type: list primary_key: ip_address 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 da9e881138a..fa5b419ae1f 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 @@ -1635,13 +1635,6 @@ 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. neighbors: type: list primary_key: ip_address From 5c6059c728ed3e945272fc420ea9e0a87c351907 Mon Sep 17 00:00:00 2001 From: Laxmikant Chintakindi Date: Thu, 19 Sep 2024 14:49:31 +0530 Subject: [PATCH 29/55] Remove extra line. --- .../j2templates/eos/router-bgp.j2 | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) 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 704d8283dda..3ca564bdb0f 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 @@ -605,16 +605,14 @@ router bgp {{ router_bgp.as }} {% 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 is arista.avd.defined %} -{% if router_bgp.address_family_evpn.bgp.additional_paths.send is arista.avd.defined %} -{% set af_evpn_add_path = 'bgp additional-paths send ' ~ router_bgp.address_family_evpn.bgp.additional_paths.send %} -{% if router_bgp.address_family_evpn.bgp.additional_paths.send_ecmp_limit is arista.avd.defined and router_bgp.address_family_evpn.bgp.additional_paths.send == 'ecmp' %} -{% set af_evpn_add_path = af_evpn_add_path ~ ' 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 and router_bgp.address_family_evpn.bgp.additional_paths.send == 'limit' %} -{% set af_evpn_add_path = af_evpn_add_path ~ ' ' ~ router_bgp.address_family_evpn.bgp.additional_paths.send_limit %} -{% endif %} - {{ af_evpn_add_path }} +{% if router_bgp.address_family_evpn.bgp.additional_paths.send is arista.avd.defined %} +{% set af_evpn_add_path = 'bgp additional-paths send ' ~ router_bgp.address_family_evpn.bgp.additional_paths.send %} +{% if router_bgp.address_family_evpn.bgp.additional_paths.send_ecmp_limit is arista.avd.defined and router_bgp.address_family_evpn.bgp.additional_paths.send == 'ecmp' %} +{% set af_evpn_add_path = af_evpn_add_path ~ ' 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 and router_bgp.address_family_evpn.bgp.additional_paths.send == 'limit' %} +{% set af_evpn_add_path = af_evpn_add_path ~ ' ' ~ router_bgp.address_family_evpn.bgp.additional_paths.send_limit %} {% endif %} + {{ af_evpn_add_path }} {% 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) %} From ebbd196f7cb5fc50c99c349c6aaa3c07bf8030be Mon Sep 17 00:00:00 2001 From: Laxmikant Chintakindi Date: Thu, 19 Sep 2024 17:17:05 +0530 Subject: [PATCH 30/55] Fixing different in schema and template. --- .../documentation/devices/router-bgp-base.md | 3 ++- .../intended/configs/router-bgp-base.cfg | 3 ++- .../docs/tables/router-bgp.md | 12 ++++------ .../j2templates/eos/router-bgp.j2 | 24 ++++++++++++------- .../schema/eos_cli_config_gen.schema.yml | 12 ++++------ .../schema_fragments/router_bgp.schema.yml | 12 ++++------ 6 files changed, 33 insertions(+), 33 deletions(-) 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 1fb249bf3d4..e1337c2bfd9 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 @@ -248,9 +248,9 @@ router bgp 65101 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 additional-path send limit 20 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-path send limit 20 network 10.0.0.0/8 network 172.16.0.0/12 network 192.168.0.0/16 route-map RM-FOO-MATCH @@ -271,6 +271,7 @@ router bgp 65101 neighbor baz prefix-list PL-BAR-v6-IN in neighbor baz prefix-list PL-BAR-v6-OUT out neighbor baz additional-path 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-path send ecmp limit 20 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 0acb3ca290e..3e902252cde 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 @@ -108,9 +108,9 @@ router bgp 65101 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 additional-path send limit 20 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-path send limit 20 network 10.0.0.0/8 network 172.16.0.0/12 network 192.168.0.0/16 route-map RM-FOO-MATCH @@ -131,6 +131,7 @@ router bgp 65101 neighbor baz prefix-list PL-BAR-v6-IN in neighbor baz prefix-list PL-BAR-v6-OUT out neighbor baz additional-path 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-path send ecmp limit 20 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 3d58913bbc6..9036264b142 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 @@ -419,6 +419,8 @@ | [        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 | | | | | @@ -480,8 +482,6 @@ | [        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 | | | | | - | [          install](## "router_bgp.address_family_ipv6.neighbors.[].additional_paths.install") | Boolean | | | | Install BGP backup path. | - | [          install_ecmp_primary](## "router_bgp.address_family_ipv6.neighbors.[].additional_paths.install_ecmp_primary") | Boolean | | | | Allow additional path with ECMP primary path. | | [          receive](## "router_bgp.address_family_ipv6.neighbors.[].additional_paths.receive") | Boolean | | | | | | [          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. | | [          send_ecmp_limit](## "router_bgp.address_family_ipv6.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. | @@ -1774,6 +1774,8 @@ # Outbound route-map name. route_map_out: + additional_paths: + receive: neighbors: - ip_address: activate: @@ -1919,12 +1921,6 @@ # Outbound prefix-list name. prefix_list_out: additional_paths: - - # Install BGP backup path. - install: - - # Allow additional path with ECMP primary path. - install_ecmp_primary: receive: # Select an option to send multiple paths for same prefix through bgp updates. 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 3ca564bdb0f..74cf071bd27 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 @@ -927,15 +927,6 @@ 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 is arista.avd.defined %} -{% set ipv4_neighbor_add_path = 'neighbor ' ~ neighbor.ip_address ~ ' additional-path send ' ~ neighbor.additional_paths.send %} -{% if neighbor.additional_paths.send_ecmp_limit is arista.avd.defined and neighbor.additional_paths.send == 'ecmp' %} -{% set ipv4_neighbor_add_path = ipv4_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 ipv4_neighbor_add_path = ipv4_neighbor_add_path ~ ' ' ~ neighbor.additional_paths.send_limit %} -{% endif %} - {{ ipv4_neighbor_add_path }} -{% endif %} {% if neighbor.route_map_in is arista.avd.defined %} neighbor {{ neighbor.ip_address }} route-map {{ neighbor.route_map_in }} in {% endif %} @@ -964,6 +955,15 @@ router bgp {{ router_bgp.as }} {% endif %} {{ neighbor_default_originate_cli }} {% endif %} +{% if neighbor.additional_paths.send is arista.avd.defined %} +{% set ipv4_neighbor_add_path = 'neighbor ' ~ neighbor.ip_address ~ ' additional-path send ' ~ neighbor.additional_paths.send %} +{% if neighbor.additional_paths.send_ecmp_limit is arista.avd.defined and neighbor.additional_paths.send == 'ecmp' %} +{% set ipv4_neighbor_add_path = ipv4_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 ipv4_neighbor_add_path = ipv4_neighbor_add_path ~ ' ' ~ neighbor.additional_paths.send_limit %} +{% endif %} + {{ ipv4_neighbor_add_path }} +{% endif %} {% if neighbor.activate is arista.avd.defined(true) %} neighbor {{ neighbor.ip_address }} activate {% elif neighbor.activate is arista.avd.defined(false) %} @@ -1025,6 +1025,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 %} @@ -1152,6 +1155,9 @@ router bgp {{ router_bgp.as }} {% 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 %} 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 ec74c37a030..88627564201 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 @@ -13236,6 +13236,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 @@ -13434,13 +13439,6 @@ 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_routes: type: list primary_key: source_protocol 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 fa5b419ae1f..863f87962f5 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 @@ -1471,6 +1471,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 @@ -1670,13 +1675,6 @@ 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_routes: type: list primary_key: source_protocol From a6c4826b17a79b52f700a7abb49610e0910e5004 Mon Sep 17 00:00:00 2001 From: Laxmikant Chintakindi Date: Fri, 20 Sep 2024 11:51:42 +0530 Subject: [PATCH 31/55] Fix. --- .../documentation/devices/router-bgp-evpn.md | 2 ++ .../intended/configs/router-bgp-evpn.cfg | 2 ++ .../inventory/host_vars/router-bgp-evpn.yml | 3 +++ .../j2templates/eos/router-bgp.j2 | 23 +++++++++++-------- 4 files changed, 20 insertions(+), 10 deletions(-) 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 38325299009..341e4072e58 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 @@ -276,7 +276,9 @@ router bgp 65101 neighbor EVPN-OVERLAY-PEERS encapsulation vxlan no neighbor MLAG-IPv4-UNDERLAY-PEER activate 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-evpn.cfg b/ansible_collections/arista/avd/molecule/eos_cli_config_gen/intended/configs/router-bgp-evpn.cfg index 12712f7c156..b3e790f597f 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 @@ -117,7 +117,9 @@ router bgp 65101 neighbor EVPN-OVERLAY-PEERS encapsulation vxlan no neighbor MLAG-IPv4-UNDERLAY-PEER activate 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/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 f18b0fa1818..7a25768ddd5 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 @@ -82,6 +82,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: 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 74cf071bd27..8858d6a97d5 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 @@ -723,16 +723,8 @@ 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 %} -{% set evpn_neighbor_add_path = 'neighbor ' ~ neighbor.ip_address ~ ' additional-paths send ' ~ neighbor.additional_paths.send %} -{% if neighbor.additional_paths.send == 'disabled' %} -{% set evpn_neighbor_add_path = 'no neighbor ' ~ neighbor.ip_address ~ ' additional-paths send any' %} -{% elif neighbor.additional_paths.send_ecmp_limit is arista.avd.defined and neighbor.additional_paths.send == 'ecmp' %} -{% set evpn_neighbor_add_path = evpn_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 evpn_neighbor_add_path = evpn_neighbor_add_path ~ ' ' ~ neighbor.additional_paths.send_limit %} -{% endif %} - {{ evpn_neighbor_add_path }} +{% 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 }} @@ -749,6 +741,17 @@ router bgp {{ router_bgp.as }} {% endif %} {{ neighbor_default_route_cli }} {% endif %} +{% if neighbor.additional_paths.send is arista.avd.defined %} +{% set evpn_neighbor_add_path = 'neighbor ' ~ neighbor.ip_address ~ ' additional-paths send ' ~ neighbor.additional_paths.send %} +{% if neighbor.additional_paths.send == 'disabled' %} +{% set evpn_neighbor_add_path = 'no neighbor ' ~ neighbor.ip_address ~ ' additional-paths send any' %} +{% elif neighbor.additional_paths.send_ecmp_limit is arista.avd.defined and neighbor.additional_paths.send == 'ecmp' %} +{% set evpn_neighbor_add_path = evpn_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 evpn_neighbor_add_path = evpn_neighbor_add_path ~ ' ' ~ neighbor.additional_paths.send_limit %} +{% endif %} + {{ evpn_neighbor_add_path }} +{% endif %} {% endfor %} {% if router_bgp.address_family_evpn.next_hop.resolution_disabled is arista.avd.defined(true) %} next-hop resolution disabled From 77e177e031b3f4ae385dd0a91065457a991e1080 Mon Sep 17 00:00:00 2001 From: Laxmikant Chintakindi Date: Fri, 20 Sep 2024 13:22:16 +0530 Subject: [PATCH 32/55] Changes. --- .../documentation/devices/router-bgp-base.md | 8 ++--- .../router-bgp-vrf-address-families.md | 7 +++++ .../intended/configs/router-bgp-base.cfg | 8 ++--- .../router-bgp-vrf-address-families.cfg | 7 +++++ .../inventory/host_vars/router-bgp-base.yml | 4 +++ .../router-bgp-vrf-address-families.yml | 13 ++++++-- .../docs/tables/router-bgp.md | 24 ++++++++++----- .../j2templates/eos/router-bgp.j2 | 26 +++++++++------- .../schema/eos_cli_config_gen.schema.yml | 30 ++++++++++++------- .../schema_fragments/router_bgp.schema.yml | 24 ++++++++++----- 10 files changed, 105 insertions(+), 46 deletions(-) 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 e1337c2bfd9..8663d5f6386 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 @@ -244,13 +244,13 @@ router bgp 65101 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-path send ecmp limit 20 + neighbor foo additional-path 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-path send limit 20 + neighbor 192.0.2.1 additional-path 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 @@ -270,11 +270,11 @@ router bgp 65101 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-path send ecmp limit 20 + neighbor baz additional-path send ecmp limit 20 prefix-list PL2 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-path send ecmp limit 20 + neighbor 2001:db8::1 additional-path send ecmp limit 20 prefix-list PL2 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-vrf-address-families.md b/ansible_collections/arista/avd/molecule/eos_cli_config_gen/documentation/devices/router-bgp-vrf-address-families.md index 93830d11a9a..19152e597aa 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 @@ -81,6 +81,9 @@ router bgp 65001 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 @@ -88,6 +91,7 @@ router bgp 65001 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 @@ -118,6 +122,7 @@ router bgp 65001 neighbor 1.2.3.4 activate 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 neighbor 1.2.3.4 additional-paths send any network 2.3.4.0/24 route-map BARFOO no bgp redistribute-internal @@ -150,6 +155,7 @@ router bgp 65001 neighbor aa::1 activate neighbor aa::1 route-map FOO in neighbor aa::1 route-map BAR out + neighbor aa::1 additional-paths receive neighbor aa::1 additional-paths send any neighbor aa::2 activate neighbor aa::2 rcf in VRF_AFIPV6_RCF_IN() @@ -167,6 +173,7 @@ router bgp 65001 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 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 3e902252cde..b14c2eb086a 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 @@ -104,13 +104,13 @@ router bgp 65101 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-path send ecmp limit 20 + neighbor foo additional-path 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-path send limit 20 + neighbor 192.0.2.1 additional-path 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 @@ -130,11 +130,11 @@ router bgp 65101 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-path send ecmp limit 20 + neighbor baz additional-path send ecmp limit 20 prefix-list PL2 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-path send ecmp limit 20 + neighbor 2001:db8::1 additional-path send ecmp limit 20 prefix-list PL2 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-vrf-address-families.cfg b/ansible_collections/arista/avd/molecule/eos_cli_config_gen/intended/configs/router-bgp-vrf-address-families.cfg index cb119cf54ec..e4ad9df2780 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 @@ -20,6 +20,9 @@ router bgp 65001 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 @@ -27,6 +30,7 @@ router bgp 65001 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 @@ -57,6 +61,7 @@ router bgp 65001 neighbor 1.2.3.4 activate 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 neighbor 1.2.3.4 additional-paths send any network 2.3.4.0/24 route-map BARFOO no bgp redistribute-internal @@ -89,6 +94,7 @@ router bgp 65001 neighbor aa::1 activate neighbor aa::1 route-map FOO in neighbor aa::1 route-map BAR out + neighbor aa::1 additional-paths receive neighbor aa::1 additional-paths send any neighbor aa::2 activate neighbor aa::2 rcf in VRF_AFIPV6_RCF_IN() @@ -106,6 +112,7 @@ router bgp 65001 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 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 49e18322c3b..49d39379680 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 @@ -123,6 +123,7 @@ router_bgp: receive: true send: ecmp send_ecmp_limit: 20 + prefix_list: PL1 neighbors: - ip_address: 192.0.2.1 prefix_list_in: PL-FOO-v4-IN @@ -131,6 +132,7 @@ router_bgp: 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 @@ -172,6 +174,7 @@ router_bgp: receive: true send: ecmp send_ecmp_limit: 20 + prefix_list: PL2 neighbors: - ip_address: 2001:db8::1 prefix_list_in: PL-FOO-v6-IN @@ -180,6 +183,7 @@ router_bgp: receive: true send: ecmp send_ecmp_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-vrf-address-families.yml b/ansible_collections/arista/avd/molecule/eos_cli_config_gen/inventory/host_vars/router-bgp-vrf-address-families.yml index d33a757c6b6..875e582549f 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 @@ -20,6 +20,13 @@ router_bgp: 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: @@ -27,6 +34,8 @@ router_bgp: peer_groups: - name: FOOBAR activate: false + additional_paths: + receive: true redistribute_routes: - source_protocol: ospfv3 ospf_route_type: external @@ -73,8 +82,8 @@ router_bgp: route_map_in: FOO route_map_out: BAR additional_paths: + receive: true send: any - prefix_list: PL2 networks: - prefix: 2.3.4.0/24 route_map: BARFOO @@ -106,7 +115,7 @@ router_bgp: route_map_out: BAR additional_paths: send: any - prefix_list: PL1 + receive: true - ip_address: aa::2 activate: true rcf_in: VRF_AFIPV6_RCF_IN() 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 9036264b142..11e8a1e168f 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 @@ -378,6 +378,7 @@ | [        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 | | | | | | [          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. | | [          send_ecmp_limit](## "router_bgp.address_family_ipv4.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. | @@ -400,6 +401,7 @@ | [          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 | | | | | | [          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. | | [          send_ecmp_limit](## "router_bgp.address_family_ipv4.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. | @@ -468,6 +470,7 @@ | [        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 | | | | | | [          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. | | [          send_ecmp_limit](## "router_bgp.address_family_ipv6.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. | @@ -482,6 +485,7 @@ | [        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 | | | | | | [          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. | | [          send_ecmp_limit](## "router_bgp.address_family_ipv6.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. | @@ -806,7 +810,6 @@ | [                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 | | | | | - | [              prefix_list](## "router_bgp.vrfs.[].address_family_ipv4.neighbors.[].additional_paths.prefix_list") | String | | | | Apply the configurations only to the routes matching the prefix list. | | [              receive](## "router_bgp.vrfs.[].address_family_ipv4.neighbors.[].additional_paths.receive") | Boolean | | | | | | [              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. | | [              send_ecmp_limit](## "router_bgp.vrfs.[].address_family_ipv4.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. | @@ -843,7 +846,6 @@ | [            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 | | | | | - | [              prefix_list](## "router_bgp.vrfs.[].address_family_ipv6.neighbors.[].additional_paths.prefix_list") | String | | | | Apply the configurations only to the routes matching the prefix list. | | [              receive](## "router_bgp.vrfs.[].address_family_ipv6.neighbors.[].additional_paths.receive") | Boolean | | | | | | [              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. | | [              send_ecmp_limit](## "router_bgp.vrfs.[].address_family_ipv6.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. | @@ -1684,6 +1686,9 @@ # Outbound prefix-list name. prefix_list_out: additional_paths: + + # Apply the configurations only to the routes matching the prefix list. + prefix_list: receive: # Select an option to send multiple paths for same prefix through bgp updates. @@ -1729,6 +1734,9 @@ always: route_map: additional_paths: + + # Apply the configurations only to the routes matching the prefix list. + prefix_list: receive: # Select an option to send multiple paths for same prefix through bgp updates. @@ -1883,6 +1891,9 @@ # Outbound prefix-list name. prefix_list_out: additional_paths: + + # Apply the configurations only to the routes matching the prefix list. + prefix_list: receive: # Select an option to send multiple paths for same prefix through bgp updates. @@ -1921,6 +1932,9 @@ # Outbound prefix-list name. prefix_list_out: additional_paths: + + # Apply the configurations only to the routes matching the prefix list. + prefix_list: receive: # Select an option to send multiple paths for same prefix through bgp updates. @@ -2563,9 +2577,6 @@ enabled: originate: additional_paths: - - # Apply the configurations only to the routes matching the prefix list. - prefix_list: receive: # Select an option to send multiple paths for same prefix through bgp updates. @@ -2652,9 +2663,6 @@ # Outbound prefix-list name. prefix_list_out: additional_paths: - - # Apply the configurations only to the routes matching the prefix list. - prefix_list: receive: # Select an option to send multiple paths for same prefix through bgp updates. 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 0f1c2968c26..0846e6b2316 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 @@ -922,6 +922,9 @@ router bgp {{ router_bgp.as }} {% set af_ipv4_pg_add_path = af_ipv4_pg_add_path ~ ' limit ' ~ peer_group.additional_paths.send_ecmp_limit %} {% elif peer_group.additional_paths.send_limit is arista.avd.defined and peer_group.additional_paths.send == 'limit' %} {% set af_ipv4_pg_add_path = af_ipv4_pg_add_path ~ ' ' ~ peer_group.additional_paths.send_limit %} +{% endif %} +{% if peer_group.additional_paths.prefix_list is arista.avd.defined %} +{% set af_ipv4_pg_add_path = af_ipv4_pg_add_path ~ " prefix-list " ~ peer_group.additional_paths.prefix_list %} {% endif %} {{ af_ipv4_pg_add_path }} {% endif %} @@ -964,6 +967,9 @@ router bgp {{ router_bgp.as }} {% set ipv4_neighbor_add_path = ipv4_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 ipv4_neighbor_add_path = ipv4_neighbor_add_path ~ ' ' ~ neighbor.additional_paths.send_limit %} +{% endif %} +{% if neighbor.additional_paths.prefix_list is arista.avd.defined %} +{% set ipv4_neighbor_add_path = ipv4_neighbor_add_path ~ " prefix-list " ~ neighbor.additional_paths.prefix_list %} {% endif %} {{ ipv4_neighbor_add_path }} {% endif %} @@ -1045,7 +1051,7 @@ router bgp {{ router_bgp.as }} no neighbor {{ neighbor.ip_address }} activate {% endif %} {% if neighbor.additional_paths.receive is arista.avd.defined(true) %} - neighbor {{ neighbor.ip_address }} additional-paths receive + neighbor {{ neighbor.ip_address }} additional-paths receive {% endif %} {% endfor %} {% for redistribute_route in router_bgp.address_family_ipv4_multicast.redistribute_routes | arista.avd.natural_sort('source_protocol') %} @@ -1153,6 +1159,9 @@ router bgp {{ router_bgp.as }} {% set af_ipv6_pg_add_path = af_ipv6_pg_add_path ~ ' limit ' ~ peer_group.additional_paths.send_ecmp_limit %} {% elif peer_group.additional_paths.send_limit is arista.avd.defined and peer_group.additional_paths.send == 'limit' %} {% set af_ipv6_pg_add_path = af_ipv6_pg_add_path ~ ' ' ~ peer_group.additional_paths.send_limit %} +{% endif %} +{% if peer_group.additional_paths.prefix_list is arista.avd.defined %} +{% set af_ipv6_pg_add_path = af_ipv6_pg_add_path ~ " prefix-list " ~ peer_group.additional_paths.prefix_list %} {% endif %} {{ af_ipv6_pg_add_path }} {% endif %} @@ -1190,6 +1199,9 @@ router bgp {{ router_bgp.as }} {% set ipv6_neighbor_add_path = ipv6_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 ipv6_neighbor_add_path = ipv6_neighbor_add_path ~ ' ' ~ neighbor.additional_paths.send_limit %} +{% endif %} +{% if neighbor.additional_paths.prefix_list is arista.avd.defined %} +{% set ipv6_neighbor_add_path = ipv6_neighbor_add_path ~ " prefix-list " ~ neighbor.additional_paths.prefix_list %} {% endif %} {{ ipv6_neighbor_add_path }} {% endif %} @@ -1980,9 +1992,6 @@ router bgp {{ router_bgp.as }} {% set vrf_ipv4_add_path = vrf_ipv4_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 vrf_ipv4_add_path = vrf_ipv4_add_path ~ ' ' ~ neighbor.additional_paths.send_limit %} -{% endif %} -{% if neighbor.bgp.additional_paths.prefix_list is arista.avd.defined %} -{% set vrf_ipv4_add_path = vrf_ipv4_add_path ~ ' ' ~ neighbor.additional_paths.prefix_list %} {% endif %} {{ vrf_ipv4_add_path }} {% endif %} @@ -2146,9 +2155,6 @@ router bgp {{ router_bgp.as }} {% set vrf_ipv6_add_path = vrf_ipv6_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 vrf_ipv6_add_path = vrf_ipv6_add_path ~ ' ' ~ neighbor.additional_paths.send_limit %} -{% endif %} -{% if neighbor.bgp.additional_paths.prefix_list is arista.avd.defined %} -{% set vrf_ipv6_add_path = vrf_ipv6_add_path ~ ' ' ~ neighbor.additional_paths.prefix_list %} {% endif %} {{ vrf_ipv6_add_path }} {% endif %} @@ -2211,10 +2217,10 @@ 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 %} -{% endfor %} -{% if neighbor.additional_paths.receive is arista.avd.defined(true) %} +{% if neighbor.additional_paths.receive is arista.avd.defined(true) %} neighbor {{ neighbor.ip_address }} additional-paths receive -{% endif %} +{% endif %} +{% endfor %} {% for network in vrf.address_family_ipv6_multicast.networks | arista.avd.natural_sort('prefix') %} {% set network_cli = "network " ~ network.prefix %} {% if network.route_map is arista.avd.defined %} 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 473ff525fb3..18720948886 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 @@ -13121,6 +13121,11 @@ keys: 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: @@ -13181,6 +13186,11 @@ keys: 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 @@ -13428,6 +13438,11 @@ keys: 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 @@ -13463,6 +13478,11 @@ keys: 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 @@ -14632,11 +14652,6 @@ keys: 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. networks: type: list primary_key: prefix @@ -14767,11 +14782,6 @@ keys: 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. networks: type: list primary_key: prefix 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 863f87962f5..7749374d29a 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 @@ -1340,6 +1340,10 @@ keys: 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: @@ -1400,6 +1404,10 @@ keys: 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 @@ -1640,6 +1648,10 @@ keys: 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 @@ -1675,6 +1687,10 @@ keys: 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 @@ -2804,10 +2820,6 @@ keys: 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. networks: type: list primary_key: prefix @@ -2930,10 +2942,6 @@ keys: 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. networks: type: list primary_key: prefix From 474ef4246e8e996444671038d419a71456ac7331 Mon Sep 17 00:00:00 2001 From: Laxmikant Chintakindi Date: Fri, 20 Sep 2024 13:38:49 +0530 Subject: [PATCH 33/55] Add deprecated var test. --- .../documentation/devices/host2.md | 28 +++++++++++++++++++ .../intended/configs/host2.cfg | 7 +++++ .../{host1 => host2}/bgp_additional_paths.yml | 2 ++ 3 files changed, 37 insertions(+) rename ansible_collections/arista/avd/molecule/eos_cli_config_gen_deprecated_vars/inventory/host_vars/{host1 => host2}/bgp_additional_paths.yml (74%) 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 8f181cd6bbe..d53679c23eb 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 ecn propagation 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 6e21b92d795..d5092e66c69 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 dscp propagation encapsulation no vxlan qos ecn propagation 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/host1/bgp_additional_paths.yml b/ansible_collections/arista/avd/molecule/eos_cli_config_gen_deprecated_vars/inventory/host_vars/host2/bgp_additional_paths.yml similarity index 74% rename from ansible_collections/arista/avd/molecule/eos_cli_config_gen_deprecated_vars/inventory/host_vars/host1/bgp_additional_paths.yml rename to ansible_collections/arista/avd/molecule/eos_cli_config_gen_deprecated_vars/inventory/host_vars/host2/bgp_additional_paths.yml index 2c7a30a9b9f..f86d8d4d95e 100644 --- a/ansible_collections/arista/avd/molecule/eos_cli_config_gen_deprecated_vars/inventory/host_vars/host1/bgp_additional_paths.yml +++ b/ansible_collections/arista/avd/molecule/eos_cli_config_gen_deprecated_vars/inventory/host_vars/host2/bgp_additional_paths.yml @@ -1,4 +1,6 @@ router_bgp: + as: 65101 + router_id: 192.168.255.3 address_family_evpn: bgp_additional_paths: receive: true From 89ccffff9c4585f09b55787a24aa3cca21608837 Mon Sep 17 00:00:00 2001 From: Laxmikant Chintakindi Date: Fri, 20 Sep 2024 14:18:08 +0530 Subject: [PATCH 34/55] Final Fix. --- .../documentation/devices/router-bgp-vrf-address-families.md | 1 + .../intended/configs/router-bgp-vrf-address-families.cfg | 1 + .../inventory/host_vars/router-bgp-vrf-address-families.yml | 2 +- .../pyavd/_eos_cli_config_gen/j2templates/eos/router-bgp.j2 | 5 +++++ 4 files changed, 8 insertions(+), 1 deletion(-) 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 19152e597aa..e18eae7c6a7 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 @@ -99,6 +99,7 @@ router bgp 65001 redistribute ospfv3 match nssa-external 2 ! vrf VRF01 + bgp additional-paths install no bgp redistribute-internal bgp additional-paths receive bgp additional-path send any 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 e4ad9df2780..8c18da7cae0 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 @@ -38,6 +38,7 @@ router bgp 65001 redistribute ospfv3 match nssa-external 2 ! vrf VRF01 + bgp additional-paths install no bgp redistribute-internal bgp additional-paths receive bgp additional-path send any 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 875e582549f..56511bab830 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 @@ -20,7 +20,7 @@ router_bgp: peer_groups: - name: FOOBAR activate: true - additional_paths: + additional_paths: receive: true neighbors: - ip_address: 10.1.1.1 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 0846e6b2316..1c3501ffd28 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 @@ -1846,6 +1846,11 @@ 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.redistribute_internal is arista.avd.defined(true) %} bgp redistribute-internal {% elif vrf.bgp.redistribute_internal is arista.avd.defined(false) %} From e4a0eb699be6b98a7c8f62a49d12ef97718eedf9 Mon Sep 17 00:00:00 2001 From: Laxmikant Chintakindi Date: Mon, 23 Sep 2024 19:26:40 +0530 Subject: [PATCH 35/55] Fix logic for limit --- .../documentation/devices/router-bgp-base.md | 12 +- .../router-bgp-vrf-address-families.md | 2 +- .../intended/configs/router-bgp-base.cfg | 12 +- .../router-bgp-vrf-address-families.cfg | 2 +- .../j2templates/eos/router-bgp.j2 | 248 ++++++++++-------- 5 files changed, 159 insertions(+), 117 deletions(-) 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 8663d5f6386..43d72a8df4e 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 @@ -239,18 +239,18 @@ router bgp 65101 address-family ipv4 bgp additional-paths receive bgp additional-paths install - bgp additional-path send ecmp + 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-path send ecmp limit 20 prefix-list PL1 + 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-path send limit 20 prefix-list PL1 + 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 @@ -266,15 +266,15 @@ router bgp 65101 address-family ipv6 bgp additional-paths receive bgp additional-paths install ecmp-primary - bgp additional-path send any + 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-path send ecmp limit 20 prefix-list PL2 + 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-path send ecmp limit 20 prefix-list PL2 + 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-vrf-address-families.md b/ansible_collections/arista/avd/molecule/eos_cli_config_gen/documentation/devices/router-bgp-vrf-address-families.md index e18eae7c6a7..e2f263c79df 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 @@ -102,7 +102,7 @@ router bgp 65001 bgp additional-paths install no bgp redistribute-internal bgp additional-paths receive - bgp additional-path send any + bgp additional-paths send any ! address-family flow-spec ipv4 bgp missing-policy direction in action permit 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 b14c2eb086a..e6ef28a4c4e 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 @@ -99,18 +99,18 @@ router bgp 65101 address-family ipv4 bgp additional-paths receive bgp additional-paths install - bgp additional-path send ecmp + 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-path send ecmp limit 20 prefix-list PL1 + 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-path send limit 20 prefix-list PL1 + 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 @@ -126,15 +126,15 @@ router bgp 65101 address-family ipv6 bgp additional-paths receive bgp additional-paths install ecmp-primary - bgp additional-path send any + 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-path send ecmp limit 20 prefix-list PL2 + 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-path send ecmp limit 20 prefix-list PL2 + 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-vrf-address-families.cfg b/ansible_collections/arista/avd/molecule/eos_cli_config_gen/intended/configs/router-bgp-vrf-address-families.cfg index 8c18da7cae0..50da40a25ae 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 @@ -41,7 +41,7 @@ router bgp 65001 bgp additional-paths install no bgp redistribute-internal bgp additional-paths receive - bgp additional-path send any + bgp additional-paths send any ! address-family flow-spec ipv4 bgp missing-policy direction in action permit 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 1c3501ffd28..f34812c6027 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 @@ -606,13 +606,15 @@ router bgp {{ router_bgp.as }} bgp additional-paths receive {% endif %} {% if router_bgp.address_family_evpn.bgp.additional_paths.send is arista.avd.defined %} -{% set af_evpn_add_path = 'bgp additional-paths send ' ~ router_bgp.address_family_evpn.bgp.additional_paths.send %} {% if router_bgp.address_family_evpn.bgp.additional_paths.send_ecmp_limit is arista.avd.defined and router_bgp.address_family_evpn.bgp.additional_paths.send == 'ecmp' %} -{% set af_evpn_add_path = af_evpn_add_path ~ ' 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 and router_bgp.address_family_evpn.bgp.additional_paths.send == 'limit' %} -{% set af_evpn_add_path = af_evpn_add_path ~ ' ' ~ router_bgp.address_family_evpn.bgp.additional_paths.send_limit %} + 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' %} +{% 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 %} - {{ af_evpn_add_path }} {% 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) %} @@ -700,15 +702,17 @@ router bgp {{ router_bgp.as }} neighbor {{ peer_group.name }} additional-paths receive {% endif %} {% if peer_group.additional_paths.send is arista.avd.defined %} -{% set evpn_pg_add_path = 'neighbor ' ~ peer_group.name ~ ' additional-paths send ' ~ peer_group.additional_paths.send %} {% if peer_group.additional_paths.send == 'disabled' %} -{% set evpn_pg_add_path = 'no neighbor ' ~ peer_group.name ~ ' additional-paths send any' %} + no neighbor {{ peer_group.name }} additional-paths send any {% elif peer_group.additional_paths.send_ecmp_limit is arista.avd.defined and peer_group.additional_paths.send == 'ecmp' %} -{% set evpn_pg_add_path = evpn_pg_add_path ~ ' limit ' ~ peer_group.additional_paths.send_ecmp_limit %} -{% elif peer_group.additional_paths.send_limit is arista.avd.defined and peer_group.additional_paths.send == 'limit' %} -{% set evpn_pg_add_path = evpn_pg_add_path ~ ' ' ~ peer_group.additional_paths.send_limit %} + neighbor {{ peer_group.name }} additional-paths send ecmp limit {{ peer_group.additional_paths.send_ecmp_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 %} - {{ evpn_pg_add_path }} {% endif %} {% if peer_group.domain_remote is arista.avd.defined(true) %} neighbor {{ peer_group.name }} domain remote @@ -742,15 +746,17 @@ router bgp {{ router_bgp.as }} {{ neighbor_default_route_cli }} {% endif %} {% if neighbor.additional_paths.send is arista.avd.defined %} -{% set evpn_neighbor_add_path = 'neighbor ' ~ neighbor.ip_address ~ ' additional-paths send ' ~ neighbor.additional_paths.send %} {% if neighbor.additional_paths.send == 'disabled' %} -{% set evpn_neighbor_add_path = 'no neighbor ' ~ neighbor.ip_address ~ ' additional-paths send any' %} + no neighbor {{ neighbor.ip_address }} additional-paths send any {% elif neighbor.additional_paths.send_ecmp_limit is arista.avd.defined and neighbor.additional_paths.send == 'ecmp' %} -{% set evpn_neighbor_add_path = evpn_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 evpn_neighbor_add_path = evpn_neighbor_add_path ~ ' ' ~ neighbor.additional_paths.send_limit %} + neighbor {{ neighbor.ip_address }} additional-paths send ecmp limit {{ neighbor.additional_paths.send_ecmp_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 %} - {{ evpn_neighbor_add_path }} {% endif %} {% endfor %} {% if router_bgp.address_family_evpn.next_hop.resolution_disabled is arista.avd.defined(true) %} @@ -855,22 +861,24 @@ 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.receive is arista.avd.defined(true) %} - bgp additional-paths receive -{% endif %} {% 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 %} -{% set ipv4_bgp_add_path = 'bgp additional-path send ' ~ router_bgp.address_family_ipv4.bgp.additional_paths.send %} -{% if neighbor.additional_paths.send_ecmp_limit is arista.avd.defined and router_bgp.address_family_ipv4.bgp.additional_paths.send == 'ecmp' %} -{% set ipv4_bgp_add_path = ipv4_bgp_add_path ~ ' limit ' ~ router_bgp.address_family_ipv4.bgp.additional_paths.send_ecmp_limit %} -{% elif neighbor.additional_paths.send_limit is arista.avd.defined and router_bgp.address_family_ipv4.bgp.additional_paths.send == 'limit' %} -{% set ipv4_bgp_add_path = ipv4_bgp_add_path ~ ' ' ~ router_bgp.address_family_ipv4.bgp.additional_paths.send_limit %} +{% if router_bgp.address_family_ipv4.bgp.additional_paths.send_ecmp_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_ecmp_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 %} - {{ ipv4_bgp_add_path }} {% 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) %} @@ -917,16 +925,19 @@ router bgp {{ router_bgp.as }} no neighbor {{ peer_group.name }} activate {% endif %} {% if peer_group.additional_paths.send is arista.avd.defined %} -{% set af_ipv4_pg_add_path = 'neighbor ' ~ peer_group.name ~ ' additional-path send ' ~ peer_group.additional_paths.send %} {% if peer_group.additional_paths.send_ecmp_limit is arista.avd.defined and peer_group.additional_paths.send == 'ecmp' %} -{% set af_ipv4_pg_add_path = af_ipv4_pg_add_path ~ ' limit ' ~ peer_group.additional_paths.send_ecmp_limit %} -{% elif peer_group.additional_paths.send_limit is arista.avd.defined and peer_group.additional_paths.send == 'limit' %} -{% set af_ipv4_pg_add_path = af_ipv4_pg_add_path ~ ' ' ~ peer_group.additional_paths.send_limit %} +{% set add_path_cli = 'neighbor ' ~ peer_group.name ~ ' additional-paths send ecmp limit ' ~ peer_group.additional_paths.send_ecmp_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 %} -{% set af_ipv4_pg_add_path = af_ipv4_pg_add_path ~ " prefix-list " ~ peer_group.additional_paths.prefix_list %} +{% set add_path_cli = add_path_cli ~ ' prefix-list ' ~ peer_group.additional_paths.prefix_list %} {% endif %} - {{ af_ipv4_pg_add_path }} + {{ add_path_cli }} {% endif %} {% endfor %} {% for neighbor in router_bgp.address_family_ipv4.neighbors | arista.avd.natural_sort('ip_address') %} @@ -962,16 +973,20 @@ router bgp {{ router_bgp.as }} {{ neighbor_default_originate_cli }} {% endif %} {% if neighbor.additional_paths.send is arista.avd.defined %} -{% set ipv4_neighbor_add_path = 'neighbor ' ~ neighbor.ip_address ~ ' additional-path send ' ~ neighbor.additional_paths.send %} +{% set add_path_cli = "" %} {% if neighbor.additional_paths.send_ecmp_limit is arista.avd.defined and neighbor.additional_paths.send == 'ecmp' %} -{% set ipv4_neighbor_add_path = ipv4_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 ipv4_neighbor_add_path = ipv4_neighbor_add_path ~ ' ' ~ neighbor.additional_paths.send_limit %} +{% set add_path_cli = 'neighbor ' ~ neighbor.ip_address ~ ' additional-paths send ecmp limit ' ~ neighbor.additional_paths.send_ecmp_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 ipv4_neighbor_add_path = ipv4_neighbor_add_path ~ " prefix-list " ~ neighbor.additional_paths.prefix_list %} +{% set add_path_cli = add_path_cli ~ ' prefix-list ' ~ neighbor.additional_paths.prefix_list %} {% endif %} - {{ ipv4_neighbor_add_path }} + {{ add_path_cli }} {% endif %} {% if neighbor.activate is arista.avd.defined(true) %} neighbor {{ neighbor.ip_address }} activate @@ -1118,13 +1133,16 @@ router bgp {{ router_bgp.as }} bgp additional-paths install ecmp-primary {% endif %} {% if router_bgp.address_family_ipv6.bgp.additional_paths.send is arista.avd.defined %} -{% set ipv6_bgp_add_path = 'bgp additional-path send ' ~ router_bgp.address_family_ipv6.bgp.additional_paths.send %} -{% if neighbor.additional_paths.send_ecmp_limit is arista.avd.defined and router_bgp.address_family_ipv6.bgp.additional_paths.send == 'ecmp' %} -{% set ipv6_bgp_add_path = ipv6_bgp_add_path ~ ' limit ' ~ router_bgp.address_family_ipv6.bgp.additional_paths.send_ecmp_limit %} -{% elif neighbor.additional_paths.send_limit is arista.avd.defined and router_bgp.address_family_ipv6.bgp.additional_paths.send == 'limit' %} -{% set ipv6_bgp_add_path = ipv6_bgp_add_path ~ ' ' ~ router_bgp.address_family_ipv6.bgp.additional_paths.send_limit %} +{% if router_bgp.address_family_ipv6.bgp.additional_paths.send_ecmp_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_ecmp_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 %} +{% set add_path_cli = 'bgp additional-paths send limit ' ~ router_bgp.address_family_ipv6.bgp.additional_paths.send_limit %} +{% endif %} + bgp additional-paths send limit {{ router_bgp.address_family_ipv6.bgp.additional_paths.send_limit }} +{% else %} + bgp additional-paths send {{ router_bgp.address_family_ipv6.bgp.additional_paths.send }} {% endif %} - {{ ipv6_bgp_add_path }} {% 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) %} @@ -1154,16 +1172,19 @@ router bgp {{ router_bgp.as }} no neighbor {{ peer_group.name }} activate {% endif %} {% if peer_group.additional_paths.send is arista.avd.defined %} -{% set af_ipv6_pg_add_path = 'neighbor ' ~ peer_group.name ~ ' additional-path send ' ~ peer_group.additional_paths.send %} {% if peer_group.additional_paths.send_ecmp_limit is arista.avd.defined and peer_group.additional_paths.send == 'ecmp' %} -{% set af_ipv6_pg_add_path = af_ipv6_pg_add_path ~ ' limit ' ~ peer_group.additional_paths.send_ecmp_limit %} -{% elif peer_group.additional_paths.send_limit is arista.avd.defined and peer_group.additional_paths.send == 'limit' %} -{% set af_ipv6_pg_add_path = af_ipv6_pg_add_path ~ ' ' ~ peer_group.additional_paths.send_limit %} +{% set add_path_cli = 'neighbor ' ~ peer_group.name ~ ' additional-paths send ecmp limit ' ~ peer_group.additional_paths.send_ecmp_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 %} -{% set af_ipv6_pg_add_path = af_ipv6_pg_add_path ~ " prefix-list " ~ peer_group.additional_paths.prefix_list %} +{% 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 %} - {{ af_ipv6_pg_add_path }} + {{ add_path_cli }} {% endif %} {% endfor %} {% for neighbor in router_bgp.address_family_ipv6.neighbors | arista.avd.natural_sort('ip_address') %} @@ -1194,16 +1215,19 @@ router bgp {{ router_bgp.as }} no neighbor {{ neighbor.ip_address }} activate {% endif %} {% if neighbor.additional_paths.send is arista.avd.defined %} -{% set ipv6_neighbor_add_path = 'neighbor ' ~ neighbor.ip_address ~ ' additional-path send ' ~ neighbor.additional_paths.send %} {% if neighbor.additional_paths.send_ecmp_limit is arista.avd.defined and neighbor.additional_paths.send == 'ecmp' %} -{% set ipv6_neighbor_add_path = ipv6_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 ipv6_neighbor_add_path = ipv6_neighbor_add_path ~ ' ' ~ neighbor.additional_paths.send_limit %} +{% set add_path_cli = 'neighbor ' ~ neighbor.ip_address ~ ' additional-paths send ecmp limit ' ~ neighbor.additional_paths.send_ecmp_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 ipv6_neighbor_add_path = ipv6_neighbor_add_path ~ " prefix-list " ~ neighbor.additional_paths.prefix_list %} +{% 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 %} - {{ ipv6_neighbor_add_path }} + {{ add_path_cli }} {% endif %} {% endfor %} {% for network in router_bgp.address_family_ipv6.networks | arista.avd.natural_sort('prefix') %} @@ -1395,13 +1419,15 @@ router bgp {{ router_bgp.as }} bgp additional-paths receive {% endif %} {% if router_bgp.address_family_path_selection.bgp.additional_paths.send is arista.avd.defined %} -{% set ps_add_path = 'bgp additional-paths send ' ~ router_bgp.address_family_path_selection.bgp.additional_paths.send %} {% if router_bgp.address_family_path_selection.bgp.additional_paths.send_ecmp_limit is arista.avd.defined and router_bgp.address_family_path_selection.bgp.additional_paths.send == 'ecmp' %} -{% set ps_add_path = ps_add_path ~ ' 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 and router_bgp.address_family_path_selection.bgp.additional_paths.send == 'limit' %} -{% set ps_add_path = ps_add_path ~ ' ' ~ router_bgp.address_family_path_selection.bgp.additional_paths.send_limit %} + 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' %} +{% 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 %} - {{ ps_add_path }} {% 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) %} @@ -1413,13 +1439,15 @@ router bgp {{ router_bgp.as }} neighbor {{ peer_group.name }} additional-paths receive {% endif %} {% if peer_group.additional_paths.send is arista.avd.defined %} -{% set ps_pg_add_path = 'neighbor ' ~ peer_group.name ~ ' additional-paths send ' ~ peer_group.additional_paths.send %} {% if peer_group.additional_paths.send_ecmp_limit is arista.avd.defined and peer_group.additional_paths.send == 'ecmp' %} -{% set ps_pg_add_path = ps_pg_add_path ~ ' limit ' ~ peer_group.additional_paths.send_ecmp_limit %} -{% elif peer_group.additional_paths.send_limit is arista.avd.defined and peer_group.additional_paths.send == 'limit' %} -{% set ps_pg_add_path = ps_pg_add_path ~ ' ' ~ peer_group.additional_paths.send_limit %} + neighbor {{ peer_group.name }} additional-paths send ecmp limit {{ peer_group.additional_paths.send_ecmp_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 %} - {{ ps_pg_add_path }} {% endif %} {% endfor %} {% for neighbor in router_bgp.address_family_path_selection.neighbors | arista.avd.natural_sort('ip_address') %} @@ -1432,13 +1460,15 @@ router bgp {{ router_bgp.as }} neighbor {{ neighbor.ip_address }} additional-paths receive {% endif %} {% if neighbor.additional_paths.send is arista.avd.defined %} -{% set ps_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 ps_neighbor_add_path = ps_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 ps_neighbor_add_path = ps_neighbor_add_path ~ ' ' ~ neighbor.additional_paths.send_limit %} + neighbor {{ neighbor.ip_address }} additional-paths send ecmp limit {{ neighbor.additional_paths.send_ecmp_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 %} - {{ ps_neighbor_add_path }} {% endif %} {% endfor %} {% endif %} @@ -1830,13 +1860,15 @@ router bgp {{ router_bgp.as }} neighbor {{ neighbor.ip_address }} additional-paths receive {% endif %} {% if neighbor.additional_paths.send is arista.avd.defined %} -{% set vrf_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 vrf_neighbor_add_path = vrf_neighbor_add_path ~ ' limit ' ~ neighbor.additional_paths.send_ecmp_limit %} -{% elif vrf.bgp.additional_paths.send_limit is arista.avd.defined and vrf.bgp.additional_paths.send == 'limit' %} -{% set vrf_neighbor_add_path = vrf_neighbor_add_path ~ ' ' ~ neighbor.additional_paths.send_limit %} + neighbor {{ neighbor.ip_address }} additional-paths send ecmp limit {{ neighbor.additional_paths.send_ecmp_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 %} - {{ vrf_neighbor_add_path }} {% endif %} {% endfor %} {% for network in vrf.networks | arista.avd.natural_sort('prefix') %} @@ -1860,13 +1892,15 @@ router bgp {{ router_bgp.as }} bgp additional-paths receive {% endif %} {% if vrf.bgp.additional_paths.send is arista.avd.defined %} -{% set vrf_add_path = 'bgp additional-path send ' ~ vrf.bgp.additional_paths.send %} {% if vrf.bgp.additional_paths.send_ecmp_limit is arista.avd.defined and vrf.bgp.additional_paths.send == 'ecmp' %} -{% set vrf_add_path = vrf_add_path ~ ' limit ' ~ vrf.bgp.additional_paths.send_ecmp_limit %} -{% elif vrf.bgp.additional_paths.send_limit is arista.avd.defined and vrf.bgp.additional_paths.send == 'limit' %} -{% set vrf_add_path = vrf_add_path ~ ' ' ~ vrf.bgp.additional_paths.send_limit %} + bgp additional-paths send ecmp limit {{ vrf.bgp.additional_paths.send_ecmp_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 %} - {{ vrf_add_path }} {% endif %} {% for aggregate_address in vrf.aggregate_addresses | arista.avd.natural_sort('prefix') %} {% set aggregate_address_cli = "aggregate-address " ~ aggregate_address.prefix %} @@ -1958,13 +1992,15 @@ router bgp {{ router_bgp.as }} bgp additional-paths receive {% endif %} {% if vrf.address_family_ipv4.bgp.additional_paths.send is arista.avd.defined %} -{% set ipv4_add_path = 'bgp additional-paths send ' ~ vrf.address_family_ipv4.bgp.additional_paths.send %} {% if vrf.address_family_ipv4.bgp.additional_paths.send_ecmp_limit is arista.avd.defined and vrf.address_family_ipv4.bgp.additional_paths.send == 'ecmp' %} -{% set ipv4_add_path = ipv4_add_path ~ ' 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 and vrf.address_family_ipv4.bgp.additional_paths.send == 'limit' %} -{% set ipv4_add_path = ipv4_add_path ~ ' ' ~ vrf.address_family_ipv4.bgp.additional_paths.send_limit %} + 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' %} +{% 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 %} - {{ ipv4_add_path }} {% endif %} {% for neighbor in vrf.address_family_ipv4.neighbors | arista.avd.natural_sort('ip_address') %} {% if neighbor.activate is arista.avd.defined(true) %} @@ -1992,13 +2028,15 @@ router bgp {{ router_bgp.as }} neighbor {{ neighbor.ip_address }} additional-paths receive {% endif %} {% if neighbor.additional_paths.send is arista.avd.defined %} -{% set vrf_ipv4_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 vrf_ipv4_add_path = vrf_ipv4_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 vrf_ipv4_add_path = vrf_ipv4_add_path ~ ' ' ~ neighbor.additional_paths.send_limit %} + neighbor {{ neighbor.ip_address }} additional-paths send ecmp limit {{ neighbor.additional_paths.send_ecmp_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 %} - {{ vrf_ipv4_add_path }} {% 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) %} @@ -2121,13 +2159,15 @@ router bgp {{ router_bgp.as }} bgp additional-paths receive {% endif %} {% if vrf.address_family_ipv6.bgp.additional_paths.send is arista.avd.defined %} -{% set vrf_add_path = 'bgp additional-paths send ' ~ vrf.address_family_ipv6.bgp.additional_paths.send %} {% if vrf.address_family_ipv6.bgp.additional_paths.send_ecmp_limit is arista.avd.defined and vrf.address_family_ipv6.bgp.additional_paths.send == 'ecmp' %} -{% set vrf_add_path = vrf_add_path ~ ' 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 and vrf.address_family_ipv6.bgp.additional_paths.send == 'limit' %} -{% set vrf_add_path = vrf_add_path ~ ' ' ~ vrf.address_family_ipv6.bgp.additional_paths.send_limit %} + 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' %} +{% 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 %} - {{ vrf_add_path }} {% endif %} {% for neighbor in vrf.address_family_ipv6.neighbors | arista.avd.natural_sort('ip_address') %} {% if neighbor.activate is arista.avd.defined(true) %} @@ -2155,13 +2195,15 @@ router bgp {{ router_bgp.as }} neighbor {{ neighbor.ip_address }} additional-paths receive {% endif %} {% if neighbor.additional_paths.send is arista.avd.defined %} -{% set vrf_ipv6_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 vrf_ipv6_add_path = vrf_ipv6_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 vrf_ipv6_add_path = vrf_ipv6_add_path ~ ' ' ~ neighbor.additional_paths.send_limit %} + neighbor {{ neighbor.ip_address }} additional-paths send ecmp limit {{ neighbor.additional_paths.send_ecmp_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 %} - {{ vrf_ipv6_add_path }} {% endif %} {% endfor %} {% for network in vrf.address_family_ipv6.networks | arista.avd.natural_sort('prefix') %} From b635deae939b6fca2cfded655ceaf03f22392b09 Mon Sep 17 00:00:00 2001 From: Laxmikant Chintakindi Date: Tue, 24 Sep 2024 12:14:42 +0530 Subject: [PATCH 36/55] Update sequence of additional paths commands. --- .../documentation/devices/router-bgp-base.md | 4 +- .../documentation/devices/router-bgp-evpn.md | 2 +- .../router-bgp-vrf-address-families.md | 6 +-- .../intended/configs/router-bgp-base.cfg | 4 +- .../intended/configs/router-bgp-evpn.cfg | 2 +- .../router-bgp-vrf-address-families.cfg | 6 +-- .../j2templates/eos/router-bgp.j2 | 40 +++++++++---------- 7 files changed, 32 insertions(+), 32 deletions(-) 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 43d72a8df4e..3c082f08129 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,8 +237,8 @@ router bgp 65101 redistribute static rcf Router_BGP_Static() ! address-family ipv4 - bgp additional-paths receive 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 @@ -264,8 +264,8 @@ router bgp 65101 redistribute static rcf Address_Family_IPV4_Static() ! address-family ipv6 - bgp additional-paths receive 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 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 341e4072e58..38be7420460 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 @@ -257,8 +257,8 @@ router bgp 65101 bgp next-hop-unchanged host-flap detection window 10 threshold 1 expiry timeout 3 seconds domain identifier 65101:0 - neighbor ADDITIONAL-PATH-PG-1 activate neighbor ADDITIONAL-PATH-PG-1 additional-paths receive + neighbor ADDITIONAL-PATH-PG-1 activate neighbor ADDITIONAL-PATH-PG-1 additional-paths send any neighbor ADDITIONAL-PATH-PG-2 activate neighbor ADDITIONAL-PATH-PG-2 additional-paths send backup 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 e2f263c79df..7efa7d4ead8 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 @@ -100,9 +100,9 @@ router bgp 65001 ! vrf VRF01 bgp additional-paths install + bgp additional-paths send any no bgp redistribute-internal bgp additional-paths receive - bgp additional-paths send any ! address-family flow-spec ipv4 bgp missing-policy direction in action permit @@ -121,9 +121,9 @@ 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 receive neighbor 1.2.3.4 additional-paths send any network 2.3.4.0/24 route-map BARFOO no bgp redistribute-internal @@ -154,9 +154,9 @@ 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 receive neighbor aa::1 additional-paths send any neighbor aa::2 activate neighbor aa::2 rcf in VRF_AFIPV6_RCF_IN() 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 e6ef28a4c4e..9539dfda4a7 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,8 +97,8 @@ router bgp 65101 redistribute static rcf Router_BGP_Static() ! address-family ipv4 - bgp additional-paths receive 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 @@ -124,8 +124,8 @@ router bgp 65101 redistribute static rcf Address_Family_IPV4_Static() ! address-family ipv6 - bgp additional-paths receive 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 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 b3e790f597f..524aa5a5fff 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 @@ -98,8 +98,8 @@ router bgp 65101 bgp next-hop-unchanged host-flap detection window 10 threshold 1 expiry timeout 3 seconds domain identifier 65101:0 - neighbor ADDITIONAL-PATH-PG-1 activate neighbor ADDITIONAL-PATH-PG-1 additional-paths receive + neighbor ADDITIONAL-PATH-PG-1 activate neighbor ADDITIONAL-PATH-PG-1 additional-paths send any neighbor ADDITIONAL-PATH-PG-2 activate neighbor ADDITIONAL-PATH-PG-2 additional-paths send backup 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 50da40a25ae..976160a8edb 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 @@ -39,9 +39,9 @@ router bgp 65001 ! vrf VRF01 bgp additional-paths install + bgp additional-paths send any no bgp redistribute-internal bgp additional-paths receive - bgp additional-paths send any ! address-family flow-spec ipv4 bgp missing-policy direction in action permit @@ -60,9 +60,9 @@ 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 receive neighbor 1.2.3.4 additional-paths send any network 2.3.4.0/24 route-map BARFOO no bgp redistribute-internal @@ -93,9 +93,9 @@ 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 receive neighbor aa::1 additional-paths send any neighbor aa::2 activate neighbor aa::2 rcf in VRF_AFIPV6_RCF_IN() 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 f34812c6027..a45b0142d6b 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 @@ -672,6 +672,9 @@ router bgp {{ router_bgp.as }} {% endif %} {% endif %} {% for peer_group in router_bgp.address_family_evpn.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 %} @@ -698,9 +701,6 @@ 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 %} {% 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 any @@ -1124,14 +1124,14 @@ 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.receive is arista.avd.defined(true) %} - bgp additional-paths receive -{% endif %} {% 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_ecmp_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_ecmp_limit }} @@ -1883,14 +1883,6 @@ router bgp {{ router_bgp.as }} {% elif vrf.bgp.additional_paths.install_ecmp_primary is arista.avd.defined(true) %} bgp additional-paths install ecmp-primary {% endif %} -{% if vrf.bgp.redistribute_internal is arista.avd.defined(true) %} - bgp redistribute-internal -{% elif vrf.bgp.redistribute_internal is arista.avd.defined(false) %} - no bgp redistribute-internal -{% 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_ecmp_limit is arista.avd.defined and vrf.bgp.additional_paths.send == 'ecmp' %} bgp additional-paths send ecmp limit {{ vrf.bgp.additional_paths.send_ecmp_limit }} @@ -1902,6 +1894,14 @@ router bgp {{ router_bgp.as }} 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) %} + no bgp redistribute-internal +{% endif %} +{% if vrf.bgp.additional_paths.receive is arista.avd.defined(true) %} + bgp additional-paths receive +{% endif %} {% for aggregate_address in vrf.aggregate_addresses | arista.avd.natural_sort('prefix') %} {% set aggregate_address_cli = "aggregate-address " ~ aggregate_address.prefix %} {% if aggregate_address.as_set is arista.avd.defined(true) %} @@ -2006,6 +2006,9 @@ router bgp {{ router_bgp.as }} {% 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 %} @@ -2024,9 +2027,6 @@ 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.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_ecmp_limit is arista.avd.defined and neighbor.additional_paths.send == 'ecmp' %} neighbor {{ neighbor.ip_address }} additional-paths send ecmp limit {{ neighbor.additional_paths.send_ecmp_limit }} @@ -2173,6 +2173,9 @@ router bgp {{ router_bgp.as }} {% 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 %} @@ -2191,9 +2194,6 @@ 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.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_ecmp_limit is arista.avd.defined and neighbor.additional_paths.send == 'ecmp' %} neighbor {{ neighbor.ip_address }} additional-paths send ecmp limit {{ neighbor.additional_paths.send_ecmp_limit }} From 5dcf901639ae9aef713789598ff76a96620bf710 Mon Sep 17 00:00:00 2001 From: Laxmikant Chintakindi Date: Tue, 24 Sep 2024 12:30:54 +0530 Subject: [PATCH 37/55] Update porting guide. --- ansible_collections/arista/avd/docs/porting-guides/5.x.x.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) 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 688faeac271..c546dfdc688 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 @@ -969,7 +969,9 @@ port_channel_interfaces: ### Data model for BGP additional-paths in `router_bgp.address_family_evpn/_vrfs[].ipv4/_vrfs[].ipv6/_path_selection` has been changed -In AVD 5.0.0, the data models for `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` have been changed. +In AVD 5.0.0, the data models for `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` have been changed. The key `additional_paths.send` is a string instead of dictionary. + +The difference shown below keeps the previous configurations. ```diff router_bgp: @@ -995,7 +997,7 @@ router_bgp: - send: - limit: 100 + send: limit -+ send_ecmp_limit: 100 ++ send_limit: 100 <...> address_family_evpn: bgp_additional_paths: From 7197ec609f20cf7a4d97b38130c92760a605d02e Mon Sep 17 00:00:00 2001 From: Laxmikant Chintakindi Date: Fri, 27 Sep 2024 11:55:36 +0530 Subject: [PATCH 38/55] Fix CI. --- .../avd/roles/eos_cli_config_gen/docs/tables/router-bgp.md | 3 +++ .../pyavd/_eos_cli_config_gen/j2templates/eos/router-bgp.j2 | 1 + 2 files changed, 4 insertions(+) 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 2f3ec645cd0..dd2bdfa0eec 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 @@ -1504,6 +1504,9 @@ # Number of paths to send through bgp updates. `send` must be set to `limit` for this setting. send_limit: + + # Transport encapsulation for the neighbor. + encapsulation: peer_groups: # Peer-group name. 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 2367f857831..6dbbe5ed26d 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 @@ -759,6 +759,7 @@ router bgp {{ router_bgp.as }} {% 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 %} From c5b221d209fe1d1f819fd3738a4f197bd6789c75 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Fri, 27 Sep 2024 06:25:51 +0000 Subject: [PATCH 39/55] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- ansible_collections/arista/avd/docs/porting-guides/5.x.x.md | 1 + 1 file changed, 1 insertion(+) 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 d95ee4c0d6d..f7c31c5fd1e 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 @@ -1249,6 +1249,7 @@ router_bgp: - 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. From bf677d6846d906502ef7a7829cbefeb97c8b9d13 Mon Sep 17 00:00:00 2001 From: Laxmikant Chintakindi Date: Fri, 27 Sep 2024 12:39:41 +0530 Subject: [PATCH 40/55] Address comments. --- .../j2templates/eos/router-bgp.j2 | 149 +++++++++++------- 1 file changed, 93 insertions(+), 56 deletions(-) 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 6dbbe5ed26d..6b3926267ce 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 @@ -606,7 +606,9 @@ router bgp {{ router_bgp.as }} bgp additional-paths receive {% endif %} {% if router_bgp.address_family_evpn.bgp.additional_paths.send is arista.avd.defined %} -{% if router_bgp.address_family_evpn.bgp.additional_paths.send_ecmp_limit is arista.avd.defined and router_bgp.address_family_evpn.bgp.additional_paths.send == 'ecmp' %} +{% 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_ecmp_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_ecmp_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 %} @@ -930,19 +932,23 @@ router bgp {{ router_bgp.as }} no neighbor {{ peer_group.name }} activate {% endif %} {% if peer_group.additional_paths.send is arista.avd.defined %} -{% if peer_group.additional_paths.send_ecmp_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_ecmp_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 %} +{% if peer_group.additional_paths.send == 'disabled' %} + no neighbor {{ peer_group.name }} additional-paths send {% 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 %} -{% set add_path_cli = add_path_cli ~ ' prefix-list ' ~ peer_group.additional_paths.prefix_list %} -{% endif %} +{% if peer_group.additional_paths.send_ecmp_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_ecmp_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 %} {{ add_path_cli }} +{% endif %} {% endif %} {% endfor %} {% for neighbor in router_bgp.address_family_ipv4.neighbors | arista.avd.natural_sort('ip_address') %} @@ -978,20 +984,23 @@ router bgp {{ router_bgp.as }} {{ neighbor_default_originate_cli }} {% endif %} {% if neighbor.additional_paths.send is arista.avd.defined %} -{% set add_path_cli = "" %} -{% if neighbor.additional_paths.send_ecmp_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_ecmp_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 %} +{% if neighbor.additional_paths.send == 'disabled' %} + no neighbor {{ neighbor.ip_address }} additional-paths send {% 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 neighbor.additional_paths.send_ecmp_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_ecmp_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 %} {{ add_path_cli }} +{% endif %} {% endif %} {% if neighbor.activate is arista.avd.defined(true) %} neighbor {{ neighbor.ip_address }} activate @@ -1138,7 +1147,9 @@ router bgp {{ router_bgp.as }} 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_ecmp_limit is arista.avd.defined and router_bgp.address_family_ipv6.bgp.additional_paths.send == 'ecmp' %} +{% 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_ecmp_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_ecmp_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 %} @@ -1177,19 +1188,23 @@ router bgp {{ router_bgp.as }} no neighbor {{ peer_group.name }} activate {% endif %} {% if peer_group.additional_paths.send is arista.avd.defined %} -{% if peer_group.additional_paths.send_ecmp_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_ecmp_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 %} +{% if peer_group.additional_paths.send == 'disabled' %} + no neighbor {{ peer_group.name }} additional-paths send {% 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 peer_group.additional_paths.send_ecmp_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_ecmp_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 %} {{ add_path_cli }} +{% endif %} {% endif %} {% endfor %} {% for neighbor in router_bgp.address_family_ipv6.neighbors | arista.avd.natural_sort('ip_address') %} @@ -1220,19 +1235,23 @@ router bgp {{ router_bgp.as }} no neighbor {{ neighbor.ip_address }} activate {% endif %} {% if neighbor.additional_paths.send is arista.avd.defined %} -{% if neighbor.additional_paths.send_ecmp_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_ecmp_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 %} +{% if neighbor.additional_paths.send == 'disabled' %} + no neighbor {{ neighbor.ip_address }} additional-paths send {% 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 neighbor.additional_paths.send_ecmp_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_ecmp_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 %} {{ add_path_cli }} +{% endif %} {% endif %} {% endfor %} {% for network in router_bgp.address_family_ipv6.networks | arista.avd.natural_sort('prefix') %} @@ -1424,7 +1443,9 @@ router bgp {{ router_bgp.as }} bgp additional-paths receive {% endif %} {% 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_ecmp_limit is arista.avd.defined and router_bgp.address_family_path_selection.bgp.additional_paths.send == 'ecmp' %} +{% if router_bgp.address_family_path_selection.bgp.additional_paths.send == 'disabled' %} + no bgp additional-paths send any +{% elif router_bgp.address_family_path_selection.bgp.additional_paths.send_ecmp_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_ecmp_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 %} @@ -1444,7 +1465,9 @@ router bgp {{ router_bgp.as }} neighbor {{ peer_group.name }} additional-paths receive {% endif %} {% if peer_group.additional_paths.send is arista.avd.defined %} -{% if peer_group.additional_paths.send_ecmp_limit is arista.avd.defined and peer_group.additional_paths.send == 'ecmp' %} +{% if peer_group.additional_paths.send == 'disabled' %} + no neighbor {{ peer_group.name }} send any +{% elif peer_group.additional_paths.send_ecmp_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_ecmp_limit }} {% elif peer_group.additional_paths.send == 'limit' %} {% if peer_group.additional_paths.send_limit is arista.avd.defined %} @@ -1465,7 +1488,9 @@ router bgp {{ router_bgp.as }} neighbor {{ neighbor.ip_address }} additional-paths receive {% endif %} {% if neighbor.additional_paths.send is arista.avd.defined %} -{% if neighbor.additional_paths.send_ecmp_limit is arista.avd.defined and neighbor.additional_paths.send == 'ecmp' %} +{% if neighbor.additional_paths.send == 'disabled' %} + no neighbor {{ neighbor.ip_address }} send +{% elif neighbor.additional_paths.send_ecmp_limit is arista.avd.defined and neighbor.additional_paths.send == 'ecmp' %} neighbor {{ neighbor.ip_address }} additional-paths send ecmp limit {{ neighbor.additional_paths.send_ecmp_limit }} {% elif neighbor.additional_paths.send == 'limit' %} {% if neighbor.additional_paths.send_limit is arista.avd.defined %} @@ -1865,7 +1890,9 @@ router bgp {{ router_bgp.as }} neighbor {{ neighbor.ip_address }} additional-paths receive {% endif %} {% if neighbor.additional_paths.send is arista.avd.defined %} -{% if neighbor.additional_paths.send_ecmp_limit is arista.avd.defined and neighbor.additional_paths.send == 'ecmp' %} +{% if neighbor.additional_paths.send == 'disabled' %} + no neighbor {{ neighbor.ip_address }} additional-paths send +{% elif neighbor.additional_paths.send_ecmp_limit is arista.avd.defined and neighbor.additional_paths.send == 'ecmp' %} neighbor {{ neighbor.ip_address }} additional-paths send ecmp limit {{ neighbor.additional_paths.send_ecmp_limit }} {% elif neighbor.additional_paths.send == 'limit' %} {% if neighbor.additional_paths.send_limit is arista.avd.defined %} @@ -1889,7 +1916,9 @@ router bgp {{ router_bgp.as }} bgp additional-paths install ecmp-primary {% endif %} {% if vrf.bgp.additional_paths.send is arista.avd.defined %} -{% if vrf.bgp.additional_paths.send_ecmp_limit is arista.avd.defined and vrf.bgp.additional_paths.send == 'ecmp' %} +{% if vrf.bgp.additional_paths.send == 'disabled' %} + no bgp additional-paths send +{% elif vrf.bgp.additional_paths.send_ecmp_limit is arista.avd.defined and vrf.bgp.additional_paths.send == 'ecmp' %} bgp additional-paths send ecmp limit {{ vrf.bgp.additional_paths.send_ecmp_limit }} {% elif vrf.bgp.additional_paths.send == 'limit' %} {% if vrf.bgp.additional_paths.send_limit is arista.avd.defined %} @@ -1997,7 +2026,9 @@ router bgp {{ router_bgp.as }} bgp additional-paths receive {% endif %} {% if vrf.address_family_ipv4.bgp.additional_paths.send is arista.avd.defined %} -{% if vrf.address_family_ipv4.bgp.additional_paths.send_ecmp_limit is arista.avd.defined and vrf.address_family_ipv4.bgp.additional_paths.send == 'ecmp' %} +{% if vrf.address_family_ipv4.bgp.additional_paths.send == 'disabled' %} + no bgp additional-paths send +{% elif vrf.address_family_ipv4.bgp.additional_paths.send_ecmp_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_ecmp_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 %} @@ -2033,7 +2064,9 @@ router bgp {{ router_bgp.as }} 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_ecmp_limit is arista.avd.defined and neighbor.additional_paths.send == 'ecmp' %} +{% if neighbor.additional_paths.send == 'disabled' %} + no neighbor {{ neighbor.ip_address }} additional-paths send +{% elif neighbor.additional_paths.send_ecmp_limit is arista.avd.defined and neighbor.additional_paths.send == 'ecmp' %} neighbor {{ neighbor.ip_address }} additional-paths send ecmp limit {{ neighbor.additional_paths.send_ecmp_limit }} {% elif neighbor.additional_paths.send == 'limit' %} {% if neighbor.additional_paths.send_limit is arista.avd.defined %} @@ -2164,7 +2197,9 @@ router bgp {{ router_bgp.as }} bgp additional-paths receive {% endif %} {% if vrf.address_family_ipv6.bgp.additional_paths.send is arista.avd.defined %} -{% if vrf.address_family_ipv6.bgp.additional_paths.send_ecmp_limit is arista.avd.defined and vrf.address_family_ipv6.bgp.additional_paths.send == 'ecmp' %} +{% if vrf.address_family_ipv6.bgp.additional_paths.send == 'disabled' %} + no bgp additional-paths send +{% elif vrf.address_family_ipv6.bgp.additional_paths.send_ecmp_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_ecmp_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 %} @@ -2200,7 +2235,9 @@ router bgp {{ router_bgp.as }} 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_ecmp_limit is arista.avd.defined and neighbor.additional_paths.send == 'ecmp' %} +{% if neighbor.additional_paths.send == 'disabled' %} + no neighbor {{ neighbor.ip_address }} send +{% elif neighbor.additional_paths.send_ecmp_limit is arista.avd.defined and neighbor.additional_paths.send == 'ecmp' %} neighbor {{ neighbor.ip_address }} additional-paths send ecmp limit {{ neighbor.additional_paths.send_ecmp_limit }} {% elif neighbor.additional_paths.send == 'limit' %} {% if neighbor.additional_paths.send_limit is arista.avd.defined %} From aff06c3b534677c132028fd9740c9acc4ee0c4b3 Mon Sep 17 00:00:00 2001 From: Laxmikant Chintakindi Date: Fri, 27 Sep 2024 12:43:10 +0530 Subject: [PATCH 41/55] Address comment. --- .../devices/router-bgp-vrf-address-families.md | 2 +- .../intended/configs/router-bgp-vrf-address-families.cfg | 2 +- .../pyavd/_eos_cli_config_gen/j2templates/eos/router-bgp.j2 | 6 +++--- 3 files changed, 5 insertions(+), 5 deletions(-) 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 7efa7d4ead8..641ddf4a59d 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 @@ -100,9 +100,9 @@ router bgp 65001 ! vrf VRF01 bgp additional-paths install + bgp additional-paths receive bgp additional-paths send any no bgp redistribute-internal - bgp additional-paths receive ! address-family flow-spec ipv4 bgp missing-policy direction in action permit 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 976160a8edb..9f0bd994e21 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 @@ -39,9 +39,9 @@ router bgp 65001 ! vrf VRF01 bgp additional-paths install + bgp additional-paths receive bgp additional-paths send any no bgp redistribute-internal - bgp additional-paths receive ! address-family flow-spec ipv4 bgp missing-policy direction in action permit 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 6b3926267ce..96169131cf9 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 @@ -1915,6 +1915,9 @@ router bgp {{ router_bgp.as }} {% 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 @@ -1933,9 +1936,6 @@ router bgp {{ router_bgp.as }} {% elif vrf.bgp.redistribute_internal is arista.avd.defined(false) %} no bgp redistribute-internal {% endif %} -{% if vrf.bgp.additional_paths.receive is arista.avd.defined(true) %} - bgp additional-paths receive -{% endif %} {% for aggregate_address in vrf.aggregate_addresses | arista.avd.natural_sort('prefix') %} {% set aggregate_address_cli = "aggregate-address " ~ aggregate_address.prefix %} {% if aggregate_address.as_set is arista.avd.defined(true) %} From 000975f47e0faa406ad0dae590f803a0449d3a35 Mon Sep 17 00:00:00 2001 From: Laxmikant Chintakindi Date: Fri, 27 Sep 2024 14:29:50 +0530 Subject: [PATCH 42/55] Adding condition for no bgp add-paths send any --- .../documentation/devices/router-bgp-evpn.md | 2 +- .../intended/configs/router-bgp-evpn.cfg | 2 +- .../docs/tables/router-bgp.md | 72 +++++++++---------- .../j2templates/eos/router-bgp.j2 | 40 ++++++++++- .../schema/eos_cli_config_gen.schema.yml | 1 + .../defs_bgp_additional_paths.schema.yml | 2 +- 6 files changed, 79 insertions(+), 40 deletions(-) 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 fae00e12213..7e5ea144773 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 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 b75bb9d0665..d2b1b9a8431 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 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 dd2bdfa0eec..ee50ae538ba 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 @@ -294,7 +294,7 @@ | [          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 | | | | | - | [          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. | + | [          send](## "router_bgp.address_family_evpn.neighbors.[].additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- disabled
- disabled_any | 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. | | [          send_ecmp_limit](## "router_bgp.address_family_evpn.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_evpn.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. | | [        encapsulation](## "router_bgp.address_family_evpn.neighbors.[].encapsulation") | String | | | Valid Values:
- vxlan
- mpls
- path-selection | Transport encapsulation for the neighbor. | @@ -313,7 +313,7 @@ | [        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") | 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. | + | [          send](## "router_bgp.address_family_evpn.peer_groups.[].additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- disabled
- disabled_any | 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. | | [          send_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. `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_evpn.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. | | [    evpn_hostflap_detection](## "router_bgp.address_family_evpn.evpn_hostflap_detection") | Dictionary | | | | | @@ -340,7 +340,7 @@ | [    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 | | | | | - | [        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. | + | [        send](## "router_bgp.address_family_evpn.bgp.additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- disabled
- disabled_any | 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. | | [        send_ecmp_limit](## "router_bgp.address_family_evpn.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_evpn.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. | | [    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. | @@ -362,7 +362,7 @@ | [        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 | | | | | - | [        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. | + | [        send](## "router_bgp.address_family_ipv4.bgp.additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- disabled
- disabled_any | 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. | | [        send_ecmp_limit](## "router_bgp.address_family_ipv4.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.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. | | [      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. | @@ -381,7 +381,7 @@ | [        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 | | | | | - | [          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. | + | [          send](## "router_bgp.address_family_ipv4.peer_groups.[].additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- disabled
- disabled_any | 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. | | [          send_ecmp_limit](## "router_bgp.address_family_ipv4.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.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. | | [        next_hop](## "router_bgp.address_family_ipv4.peer_groups.[].next_hop") | Dictionary | | | | | @@ -404,7 +404,7 @@ | [        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 | | | | | - | [          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. | + | [          send](## "router_bgp.address_family_ipv4.neighbors.[].additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- disabled
- disabled_any | 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. | | [          send_ecmp_limit](## "router_bgp.address_family_ipv4.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.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. | | [    redistribute_routes](## "router_bgp.address_family_ipv4.redistribute_routes") | List, items: Dictionary | | | | | @@ -458,7 +458,7 @@ | [        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 | | | | | - | [        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. | + | [        send](## "router_bgp.address_family_ipv6.bgp.additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- disabled
- disabled_any | 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. | | [        send_ecmp_limit](## "router_bgp.address_family_ipv6.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_ipv6.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. | | [    peer_groups](## "router_bgp.address_family_ipv6.peer_groups") | List, items: Dictionary | | | | | @@ -473,7 +473,7 @@ | [        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 | | | | | - | [          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. | + | [          send](## "router_bgp.address_family_ipv6.peer_groups.[].additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- disabled
- disabled_any | 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. | | [          send_ecmp_limit](## "router_bgp.address_family_ipv6.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_ipv6.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. | | [    neighbors](## "router_bgp.address_family_ipv6.neighbors") | List, items: Dictionary | | | | | @@ -488,7 +488,7 @@ | [        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 | | | | | - | [          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. | + | [          send](## "router_bgp.address_family_ipv6.neighbors.[].additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- disabled
- disabled_any | 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. | | [          send_ecmp_limit](## "router_bgp.address_family_ipv6.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_ipv6.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. | | [    redistribute_routes](## "router_bgp.address_family_ipv6.redistribute_routes") | List, items: Dictionary | | | | | @@ -584,7 +584,7 @@ | [    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") | 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. | + | [        send](## "router_bgp.address_family_path_selection.bgp.additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- disabled
- disabled_any | 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. | | [        send_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. `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_path_selection.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. | | [    neighbors](## "router_bgp.address_family_path_selection.neighbors") | List, items: Dictionary | | | | | @@ -592,7 +592,7 @@ | [        activate](## "router_bgp.address_family_path_selection.neighbors.[].activate") | Boolean | | | | | | [        additional_paths](## "router_bgp.address_family_path_selection.neighbors.[].additional_paths") | Dictionary | | | | | | [          receive](## "router_bgp.address_family_path_selection.neighbors.[].additional_paths.receive") | Boolean | | | | | - | [          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. | + | [          send](## "router_bgp.address_family_path_selection.neighbors.[].additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- disabled
- disabled_any | 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. | | [          send_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. `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_path_selection.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. | | [    peer_groups](## "router_bgp.address_family_path_selection.peer_groups") | List, items: Dictionary | | | | | @@ -600,7 +600,7 @@ | [        activate](## "router_bgp.address_family_path_selection.peer_groups.[].activate") | Boolean | | | | | | [        additional_paths](## "router_bgp.address_family_path_selection.peer_groups.[].additional_paths") | Dictionary | | | | | | [          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") | 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. | + | [          send](## "router_bgp.address_family_path_selection.peer_groups.[].additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- disabled
- disabled_any | 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. | | [          send_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. `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_path_selection.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. | | [  address_family_vpn_ipv4](## "router_bgp.address_family_vpn_ipv4") | Dictionary | | | | | @@ -667,7 +667,7 @@ | [          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 | | | | | - | [          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. | + | [          send](## "router_bgp.vrfs.[].bgp.additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- disabled
- disabled_any | 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. | | [          send_ecmp_limit](## "router_bgp.vrfs.[].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.vrfs.[].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. | | [      rd](## "router_bgp.vrfs.[].rd") | String | | | | Route distinguisher. | @@ -760,7 +760,7 @@ | [          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 | | | | | - | [            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. | + | [            send](## "router_bgp.vrfs.[].neighbors.[].additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- disabled
- disabled_any | 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. | | [            send_ecmp_limit](## "router_bgp.vrfs.[].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.vrfs.[].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. | | [          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. | @@ -793,7 +793,7 @@ | [            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 | | | | | - | [            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. | + | [            send](## "router_bgp.vrfs.[].address_family_ipv4.bgp.additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- disabled
- disabled_any | 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. | | [            send_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. `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.vrfs.[].address_family_ipv4.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. | | [          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. | @@ -812,7 +812,7 @@ | [                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 | | | | | - | [              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. | + | [              send](## "router_bgp.vrfs.[].address_family_ipv4.neighbors.[].additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- disabled
- disabled_any | 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. | | [              send_ecmp_limit](## "router_bgp.vrfs.[].address_family_ipv4.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.vrfs.[].address_family_ipv4.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. | | [        networks](## "router_bgp.vrfs.[].address_family_ipv4.networks") | List, items: Dictionary | | | | | @@ -833,7 +833,7 @@ | [            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 | | | | | - | [            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. | + | [            send](## "router_bgp.vrfs.[].address_family_ipv6.bgp.additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- disabled
- disabled_any | 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. | | [            send_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. `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.vrfs.[].address_family_ipv6.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. | | [          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. | @@ -848,7 +848,7 @@ | [            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 | | | | | - | [              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. | + | [              send](## "router_bgp.vrfs.[].address_family_ipv6.neighbors.[].additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- disabled
- disabled_any | 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. | | [              send_ecmp_limit](## "router_bgp.vrfs.[].address_family_ipv6.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.vrfs.[].address_family_ipv6.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. | | [        networks](## "router_bgp.vrfs.[].address_family_ipv6.networks") | List, items: Dictionary | | | | | @@ -1497,7 +1497,7 @@ # backup: Best path and installed backup path. # ecmp: All paths in best path ECMP group. # limit: Limit to n eligible paths. - send: + 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: @@ -1545,7 +1545,7 @@ # backup: Best path and installed backup path. # ecmp: All paths in best path ECMP group. # limit: Limit to n eligible paths. - send: + 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: @@ -1607,7 +1607,7 @@ # backup: Best path and installed backup path. # ecmp: All paths in best path ECMP group. # limit: Limit to n eligible paths. - send: + 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: @@ -1653,7 +1653,7 @@ # backup: Best path and installed backup path. # ecmp: All paths in best path ECMP group. # limit: Limit to n eligible paths. - send: + 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: @@ -1704,7 +1704,7 @@ # backup: Best path and installed backup path. # ecmp: All paths in best path ECMP group. # limit: Limit to n eligible paths. - send: + 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: @@ -1752,7 +1752,7 @@ # backup: Best path and installed backup path. # ecmp: All paths in best path ECMP group. # limit: Limit to n eligible paths. - send: + 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: @@ -1866,7 +1866,7 @@ # backup: Best path and installed backup path. # ecmp: All paths in best path ECMP group. # limit: Limit to n eligible paths. - send: + 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: @@ -1909,7 +1909,7 @@ # backup: Best path and installed backup path. # ecmp: All paths in best path ECMP group. # limit: Limit to n eligible paths. - send: + 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: @@ -1950,7 +1950,7 @@ # backup: Best path and installed backup path. # ecmp: All paths in best path ECMP group. # limit: Limit to n eligible paths. - send: + 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: @@ -2098,7 +2098,7 @@ # backup: Best path and installed backup path. # ecmp: All paths in best path ECMP group. # limit: Limit to n eligible paths. - send: + 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: @@ -2116,7 +2116,7 @@ # backup: Best path and installed backup path. # ecmp: All paths in best path ECMP group. # limit: Limit to n eligible paths. - send: + 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: @@ -2136,7 +2136,7 @@ # backup: Best path and installed backup path. # ecmp: All paths in best path ECMP group. # limit: Limit to n eligible paths. - send: + 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: @@ -2277,7 +2277,7 @@ # backup: Best path and installed backup path. # ecmp: All paths in best path ECMP group. # limit: Limit to n eligible paths. - send: + 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: @@ -2483,7 +2483,7 @@ # backup: Best path and installed backup path. # ecmp: All paths in best path ECMP group. # limit: Limit to n eligible paths. - send: + 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: @@ -2547,7 +2547,7 @@ # backup: Best path and installed backup path. # ecmp: All paths in best path ECMP group. # limit: Limit to n eligible paths. - send: + 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: @@ -2592,7 +2592,7 @@ # backup: Best path and installed backup path. # ecmp: All paths in best path ECMP group. # limit: Limit to n eligible paths. - send: + 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: @@ -2637,7 +2637,7 @@ # backup: Best path and installed backup path. # ecmp: All paths in best path ECMP group. # limit: Limit to n eligible paths. - send: + 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: @@ -2678,7 +2678,7 @@ # backup: Best path and installed backup path. # ecmp: All paths in best path ECMP group. # limit: Limit to n eligible paths. - send: + 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: 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 96169131cf9..46de715367e 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 @@ -608,6 +608,8 @@ router bgp {{ router_bgp.as }} {% 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 == 'disabled_any' %} + no bgp additional-paths send any {% elif router_bgp.address_family_evpn.bgp.additional_paths.send_ecmp_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_ecmp_limit }} {% elif router_bgp.address_family_evpn.bgp.additional_paths.send == 'limit' %} @@ -707,6 +709,8 @@ router bgp {{ router_bgp.as }} {% 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 +{% elif peer_group.additional_paths.send == 'disabled_any' %} no neighbor {{ peer_group.name }} additional-paths send any {% elif peer_group.additional_paths.send_ecmp_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_ecmp_limit }} @@ -751,6 +755,8 @@ router bgp {{ router_bgp.as }} {% 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 == 'disabled_any' %} no neighbor {{ neighbor.ip_address }} additional-paths send any {% elif neighbor.additional_paths.send_ecmp_limit is arista.avd.defined and neighbor.additional_paths.send == 'ecmp' %} neighbor {{ neighbor.ip_address }} additional-paths send ecmp limit {{ neighbor.additional_paths.send_ecmp_limit }} @@ -877,7 +883,11 @@ router bgp {{ router_bgp.as }} 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_ecmp_limit is arista.avd.defined and router_bgp.address_family_ipv4.bgp.additional_paths.send == 'ecmp' %} +{% if router_bgp.address_family_ipv4.bgp.additional_paths.send == 'disabled' %} + bgp additional-paths send +{% elif router_bgp.address_family_ipv4.bgp.additional_paths.send == 'disabled_any' %} + bgp additional-paths send any +{% elif router_bgp.address_family_ipv4.bgp.additional_paths.send_ecmp_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_ecmp_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 %} @@ -934,6 +944,8 @@ router bgp {{ router_bgp.as }} {% 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 == 'disabled_any' %} + no neighbor {{ peer_group.name }} additional-paths send any {% else %} {% if peer_group.additional_paths.send_ecmp_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_ecmp_limit %} @@ -986,6 +998,8 @@ router bgp {{ router_bgp.as }} {% 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 == 'disabled_any' %} + no neighbor {{ neighbor.ip_address }} additional-paths send any {% else %} {% if neighbor.additional_paths.send_ecmp_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_ecmp_limit %} @@ -1149,6 +1163,8 @@ router bgp {{ router_bgp.as }} {% 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 == 'disabled_any' %} + no bgp additional-paths send any {% elif router_bgp.address_family_ipv6.bgp.additional_paths.send_ecmp_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_ecmp_limit }} {% elif router_bgp.address_family_ipv6.bgp.additional_paths.send == 'limit' %} @@ -1190,6 +1206,8 @@ router bgp {{ router_bgp.as }} {% 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 == 'disabled_any' %} + no neighbor {{ peer_group.name }} additional-paths send any {% else %} {% if peer_group.additional_paths.send_ecmp_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_ecmp_limit %} @@ -1237,6 +1255,8 @@ router bgp {{ router_bgp.as }} {% 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 == 'disabled_any' %} + no neighbor {{ neighbor.ip_address }} additional-paths send any {% else %} {% if neighbor.additional_paths.send_ecmp_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_ecmp_limit %} @@ -1444,6 +1464,8 @@ router bgp {{ router_bgp.as }} {% endif %} {% 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 == 'disabled_any' %} no bgp additional-paths send any {% elif router_bgp.address_family_path_selection.bgp.additional_paths.send_ecmp_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_ecmp_limit }} @@ -1466,6 +1488,8 @@ router bgp {{ router_bgp.as }} {% endif %} {% 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 == 'disabled_any' %} no neighbor {{ peer_group.name }} send any {% elif peer_group.additional_paths.send_ecmp_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_ecmp_limit }} @@ -1490,6 +1514,8 @@ router bgp {{ router_bgp.as }} {% if neighbor.additional_paths.send is arista.avd.defined %} {% if neighbor.additional_paths.send == 'disabled' %} no neighbor {{ neighbor.ip_address }} send +{% elif neighbor.additional_paths.send == 'disabled_any' %} + no neighbor {{ neighbor.ip_address }} send any {% elif neighbor.additional_paths.send_ecmp_limit is arista.avd.defined and neighbor.additional_paths.send == 'ecmp' %} neighbor {{ neighbor.ip_address }} additional-paths send ecmp limit {{ neighbor.additional_paths.send_ecmp_limit }} {% elif neighbor.additional_paths.send == 'limit' %} @@ -1892,6 +1918,8 @@ router bgp {{ router_bgp.as }} {% 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 == 'disabled_any' %} + no neighbor {{ neighbor.ip_address }} additional-paths send any {% elif neighbor.additional_paths.send_ecmp_limit is arista.avd.defined and neighbor.additional_paths.send == 'ecmp' %} neighbor {{ neighbor.ip_address }} additional-paths send ecmp limit {{ neighbor.additional_paths.send_ecmp_limit }} {% elif neighbor.additional_paths.send == 'limit' %} @@ -1921,6 +1949,8 @@ router bgp {{ router_bgp.as }} {% 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 == 'disabled_any' %} + no bgp additional-paths send any {% elif vrf.bgp.additional_paths.send_ecmp_limit is arista.avd.defined and vrf.bgp.additional_paths.send == 'ecmp' %} bgp additional-paths send ecmp limit {{ vrf.bgp.additional_paths.send_ecmp_limit }} {% elif vrf.bgp.additional_paths.send == 'limit' %} @@ -2028,6 +2058,8 @@ router bgp {{ router_bgp.as }} {% 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 == 'disabled_any' %} + no bgp additional-paths send any {% elif vrf.address_family_ipv4.bgp.additional_paths.send_ecmp_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_ecmp_limit }} {% elif vrf.address_family_ipv4.bgp.additional_paths.send == 'limit' %} @@ -2066,6 +2098,8 @@ router bgp {{ router_bgp.as }} {% 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 == 'disabled_any' %} + no neighbor {{ neighbor.ip_address }} additional-paths send any {% elif neighbor.additional_paths.send_ecmp_limit is arista.avd.defined and neighbor.additional_paths.send == 'ecmp' %} neighbor {{ neighbor.ip_address }} additional-paths send ecmp limit {{ neighbor.additional_paths.send_ecmp_limit }} {% elif neighbor.additional_paths.send == 'limit' %} @@ -2199,6 +2233,8 @@ router bgp {{ router_bgp.as }} {% 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 == 'disabled_any' %} + no bgp additional-paths send any {% elif vrf.address_family_ipv6.bgp.additional_paths.send_ecmp_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_ecmp_limit }} {% elif vrf.address_family_ipv6.bgp.additional_paths.send == 'limit' %} @@ -2237,6 +2273,8 @@ router bgp {{ router_bgp.as }} {% if neighbor.additional_paths.send is arista.avd.defined %} {% if neighbor.additional_paths.send == 'disabled' %} no neighbor {{ neighbor.ip_address }} send +{% elif neighbor.additional_paths.send == 'disabled_any' %} + no neighbor {{ neighbor.ip_address }} send any {% elif neighbor.additional_paths.send_ecmp_limit is arista.avd.defined and neighbor.additional_paths.send == 'ecmp' %} neighbor {{ neighbor.ip_address }} additional-paths send ecmp limit {{ neighbor.additional_paths.send_ecmp_limit }} {% elif neighbor.additional_paths.send == 'limit' %} 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 ac3de48a483..b37c77ee602 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 @@ -19387,6 +19387,7 @@ $defs: - ecmp - limit - disabled + - disabled_any send_ecmp_limit: type: int description: Amount of ECMP paths to send. `send` must be set to `ecmp` for 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 771f60a756e..b6ffb347371 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 @@ -16,7 +16,7 @@ $defs: backup: Best path and installed backup path. ecmp: All paths in best path ECMP group. limit: Limit to n eligible paths. - valid_values: [ 'any', 'backup', 'ecmp', 'limit', 'disabled' ] + valid_values: [ 'any', 'backup', 'ecmp', 'limit', 'disabled', 'disabled_any' ] 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. From b90c8fe20f264b4574e33080590ff2709ae6ec78 Mon Sep 17 00:00:00 2001 From: Laxmikant Chintakindi Date: Fri, 27 Sep 2024 16:22:55 +0530 Subject: [PATCH 43/55] Address comments. --- .../documentation/devices/router-bgp-evpn.md | 4 +- .../intended/configs/router-bgp-evpn.cfg | 4 +- .../inventory/host_vars/router-bgp-evpn.yml | 2 +- .../docs/tables/router-bgp.md | 72 ++++++++++++++----- .../j2templates/eos/router-bgp.j2 | 16 ++--- .../schema/eos_cli_config_gen.schema.yml | 6 +- .../defs_bgp_additional_paths.schema.yml | 2 + 7 files changed, 74 insertions(+), 32 deletions(-) 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 7e5ea144773..1ea4ceddc74 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 @@ -276,8 +276,8 @@ router bgp 65101 host-flap detection window 10 threshold 1 expiry timeout 3 seconds domain identifier 65101:0 neighbor default encapsulation path-selection - neighbor ADDITIONAL-PATH-PG-1 additional-paths receive neighbor ADDITIONAL-PATH-PG-1 activate + neighbor ADDITIONAL-PATH-PG-1 additional-paths receive neighbor ADDITIONAL-PATH-PG-1 additional-paths send any neighbor ADDITIONAL-PATH-PG-2 activate neighbor ADDITIONAL-PATH-PG-2 additional-paths send backup @@ -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 + no neighbor ADDITIONAL-PATH-PG-6 additional-paths send any neighbor EVPN-OVERLAY-PEERS default-route neighbor EVPN-OVERLAY-PEERS activate neighbor EVPN-OVERLAY-PEERS domain remote 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 d2b1b9a8431..cddb9063f40 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 @@ -99,8 +99,8 @@ router bgp 65101 host-flap detection window 10 threshold 1 expiry timeout 3 seconds domain identifier 65101:0 neighbor default encapsulation path-selection - neighbor ADDITIONAL-PATH-PG-1 additional-paths receive neighbor ADDITIONAL-PATH-PG-1 activate + neighbor ADDITIONAL-PATH-PG-1 additional-paths receive neighbor ADDITIONAL-PATH-PG-1 additional-paths send any neighbor ADDITIONAL-PATH-PG-2 activate neighbor ADDITIONAL-PATH-PG-2 additional-paths send backup @@ -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 + no neighbor ADDITIONAL-PATH-PG-6 additional-paths send any neighbor EVPN-OVERLAY-PEERS default-route neighbor EVPN-OVERLAY-PEERS activate neighbor EVPN-OVERLAY-PEERS domain remote 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 1f0bdff88d7..5aa1445ab29 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 @@ -138,7 +138,7 @@ router_bgp: - name: ADDITIONAL-PATH-PG-6 activate: true additional_paths: - send: 'disabled' + send: 'disabled_any' - name: TEST-ENCAPSULATION activate: true encapsulation: mpls 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 ee50ae538ba..ef8191b4cca 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 @@ -294,7 +294,7 @@ | [          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 | | | | | - | [          send](## "router_bgp.address_family_evpn.neighbors.[].additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- disabled
- disabled_any | 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. | + | [          send](## "router_bgp.address_family_evpn.neighbors.[].additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- disabled
- disabled_any | 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 the paths
disabled_any: Disable sending any path | | [          send_ecmp_limit](## "router_bgp.address_family_evpn.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_evpn.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. | | [        encapsulation](## "router_bgp.address_family_evpn.neighbors.[].encapsulation") | String | | | Valid Values:
- vxlan
- mpls
- path-selection | Transport encapsulation for the neighbor. | @@ -313,7 +313,7 @@ | [        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") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- disabled
- disabled_any | 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. | + | [          send](## "router_bgp.address_family_evpn.peer_groups.[].additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- disabled
- disabled_any | 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 the paths
disabled_any: Disable sending any path | | [          send_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. `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_evpn.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. | | [    evpn_hostflap_detection](## "router_bgp.address_family_evpn.evpn_hostflap_detection") | Dictionary | | | | | @@ -340,7 +340,7 @@ | [    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 | | | | | - | [        send](## "router_bgp.address_family_evpn.bgp.additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- disabled
- disabled_any | 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. | + | [        send](## "router_bgp.address_family_evpn.bgp.additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- disabled
- disabled_any | 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 the paths
disabled_any: Disable sending any path | | [        send_ecmp_limit](## "router_bgp.address_family_evpn.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_evpn.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. | | [    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. | @@ -362,7 +362,7 @@ | [        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 | | | | | - | [        send](## "router_bgp.address_family_ipv4.bgp.additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- disabled
- disabled_any | 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. | + | [        send](## "router_bgp.address_family_ipv4.bgp.additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- disabled
- disabled_any | 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 the paths
disabled_any: Disable sending any path | | [        send_ecmp_limit](## "router_bgp.address_family_ipv4.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.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. | | [      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. | @@ -381,7 +381,7 @@ | [        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 | | | | | - | [          send](## "router_bgp.address_family_ipv4.peer_groups.[].additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- disabled
- disabled_any | 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. | + | [          send](## "router_bgp.address_family_ipv4.peer_groups.[].additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- disabled
- disabled_any | 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 the paths
disabled_any: Disable sending any path | | [          send_ecmp_limit](## "router_bgp.address_family_ipv4.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.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. | | [        next_hop](## "router_bgp.address_family_ipv4.peer_groups.[].next_hop") | Dictionary | | | | | @@ -404,7 +404,7 @@ | [        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 | | | | | - | [          send](## "router_bgp.address_family_ipv4.neighbors.[].additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- disabled
- disabled_any | 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. | + | [          send](## "router_bgp.address_family_ipv4.neighbors.[].additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- disabled
- disabled_any | 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 the paths
disabled_any: Disable sending any path | | [          send_ecmp_limit](## "router_bgp.address_family_ipv4.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.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. | | [    redistribute_routes](## "router_bgp.address_family_ipv4.redistribute_routes") | List, items: Dictionary | | | | | @@ -458,7 +458,7 @@ | [        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 | | | | | - | [        send](## "router_bgp.address_family_ipv6.bgp.additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- disabled
- disabled_any | 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. | + | [        send](## "router_bgp.address_family_ipv6.bgp.additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- disabled
- disabled_any | 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 the paths
disabled_any: Disable sending any path | | [        send_ecmp_limit](## "router_bgp.address_family_ipv6.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_ipv6.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. | | [    peer_groups](## "router_bgp.address_family_ipv6.peer_groups") | List, items: Dictionary | | | | | @@ -473,7 +473,7 @@ | [        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 | | | | | - | [          send](## "router_bgp.address_family_ipv6.peer_groups.[].additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- disabled
- disabled_any | 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. | + | [          send](## "router_bgp.address_family_ipv6.peer_groups.[].additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- disabled
- disabled_any | 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 the paths
disabled_any: Disable sending any path | | [          send_ecmp_limit](## "router_bgp.address_family_ipv6.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_ipv6.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. | | [    neighbors](## "router_bgp.address_family_ipv6.neighbors") | List, items: Dictionary | | | | | @@ -488,7 +488,7 @@ | [        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 | | | | | - | [          send](## "router_bgp.address_family_ipv6.neighbors.[].additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- disabled
- disabled_any | 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. | + | [          send](## "router_bgp.address_family_ipv6.neighbors.[].additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- disabled
- disabled_any | 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 the paths
disabled_any: Disable sending any path | | [          send_ecmp_limit](## "router_bgp.address_family_ipv6.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_ipv6.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. | | [    redistribute_routes](## "router_bgp.address_family_ipv6.redistribute_routes") | List, items: Dictionary | | | | | @@ -584,7 +584,7 @@ | [    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") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- disabled
- disabled_any | 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. | + | [        send](## "router_bgp.address_family_path_selection.bgp.additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- disabled
- disabled_any | 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 the paths
disabled_any: Disable sending any path | | [        send_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. `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_path_selection.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. | | [    neighbors](## "router_bgp.address_family_path_selection.neighbors") | List, items: Dictionary | | | | | @@ -592,7 +592,7 @@ | [        activate](## "router_bgp.address_family_path_selection.neighbors.[].activate") | Boolean | | | | | | [        additional_paths](## "router_bgp.address_family_path_selection.neighbors.[].additional_paths") | Dictionary | | | | | | [          receive](## "router_bgp.address_family_path_selection.neighbors.[].additional_paths.receive") | Boolean | | | | | - | [          send](## "router_bgp.address_family_path_selection.neighbors.[].additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- disabled
- disabled_any | 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. | + | [          send](## "router_bgp.address_family_path_selection.neighbors.[].additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- disabled
- disabled_any | 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 the paths
disabled_any: Disable sending any path | | [          send_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. `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_path_selection.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. | | [    peer_groups](## "router_bgp.address_family_path_selection.peer_groups") | List, items: Dictionary | | | | | @@ -600,7 +600,7 @@ | [        activate](## "router_bgp.address_family_path_selection.peer_groups.[].activate") | Boolean | | | | | | [        additional_paths](## "router_bgp.address_family_path_selection.peer_groups.[].additional_paths") | Dictionary | | | | | | [          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") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- disabled
- disabled_any | 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. | + | [          send](## "router_bgp.address_family_path_selection.peer_groups.[].additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- disabled
- disabled_any | 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 the paths
disabled_any: Disable sending any path | | [          send_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. `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_path_selection.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. | | [  address_family_vpn_ipv4](## "router_bgp.address_family_vpn_ipv4") | Dictionary | | | | | @@ -667,7 +667,7 @@ | [          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 | | | | | - | [          send](## "router_bgp.vrfs.[].bgp.additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- disabled
- disabled_any | 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. | + | [          send](## "router_bgp.vrfs.[].bgp.additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- disabled
- disabled_any | 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 the paths
disabled_any: Disable sending any path | | [          send_ecmp_limit](## "router_bgp.vrfs.[].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.vrfs.[].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. | | [      rd](## "router_bgp.vrfs.[].rd") | String | | | | Route distinguisher. | @@ -760,7 +760,7 @@ | [          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 | | | | | - | [            send](## "router_bgp.vrfs.[].neighbors.[].additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- disabled
- disabled_any | 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. | + | [            send](## "router_bgp.vrfs.[].neighbors.[].additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- disabled
- disabled_any | 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 the paths
disabled_any: Disable sending any path | | [            send_ecmp_limit](## "router_bgp.vrfs.[].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.vrfs.[].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. | | [          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. | @@ -793,7 +793,7 @@ | [            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 | | | | | - | [            send](## "router_bgp.vrfs.[].address_family_ipv4.bgp.additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- disabled
- disabled_any | 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. | + | [            send](## "router_bgp.vrfs.[].address_family_ipv4.bgp.additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- disabled
- disabled_any | 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 the paths
disabled_any: Disable sending any path | | [            send_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. `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.vrfs.[].address_family_ipv4.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. | | [          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. | @@ -812,7 +812,7 @@ | [                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 | | | | | - | [              send](## "router_bgp.vrfs.[].address_family_ipv4.neighbors.[].additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- disabled
- disabled_any | 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. | + | [              send](## "router_bgp.vrfs.[].address_family_ipv4.neighbors.[].additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- disabled
- disabled_any | 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 the paths
disabled_any: Disable sending any path | | [              send_ecmp_limit](## "router_bgp.vrfs.[].address_family_ipv4.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.vrfs.[].address_family_ipv4.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. | | [        networks](## "router_bgp.vrfs.[].address_family_ipv4.networks") | List, items: Dictionary | | | | | @@ -833,7 +833,7 @@ | [            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 | | | | | - | [            send](## "router_bgp.vrfs.[].address_family_ipv6.bgp.additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- disabled
- disabled_any | 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. | + | [            send](## "router_bgp.vrfs.[].address_family_ipv6.bgp.additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- disabled
- disabled_any | 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 the paths
disabled_any: Disable sending any path | | [            send_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. `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.vrfs.[].address_family_ipv6.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. | | [          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. | @@ -848,7 +848,7 @@ | [            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 | | | | | - | [              send](## "router_bgp.vrfs.[].address_family_ipv6.neighbors.[].additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- disabled
- disabled_any | 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. | + | [              send](## "router_bgp.vrfs.[].address_family_ipv6.neighbors.[].additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- disabled
- disabled_any | 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 the paths
disabled_any: Disable sending any path | | [              send_ecmp_limit](## "router_bgp.vrfs.[].address_family_ipv6.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.vrfs.[].address_family_ipv6.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. | | [        networks](## "router_bgp.vrfs.[].address_family_ipv6.networks") | List, items: Dictionary | | | | | @@ -1497,6 +1497,8 @@ # backup: Best path and installed backup path. # ecmp: All paths in best path ECMP group. # limit: Limit to n eligible paths. + # disabled: Disable sending the paths + # disabled_any: Disable sending any path 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. @@ -1545,6 +1547,8 @@ # backup: Best path and installed backup path. # ecmp: All paths in best path ECMP group. # limit: Limit to n eligible paths. + # disabled: Disable sending the paths + # disabled_any: Disable sending any path 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. @@ -1607,6 +1611,8 @@ # backup: Best path and installed backup path. # ecmp: All paths in best path ECMP group. # limit: Limit to n eligible paths. + # disabled: Disable sending the paths + # disabled_any: Disable sending any path 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. @@ -1653,6 +1659,8 @@ # backup: Best path and installed backup path. # ecmp: All paths in best path ECMP group. # limit: Limit to n eligible paths. + # disabled: Disable sending the paths + # disabled_any: Disable sending any path 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. @@ -1704,6 +1712,8 @@ # backup: Best path and installed backup path. # ecmp: All paths in best path ECMP group. # limit: Limit to n eligible paths. + # disabled: Disable sending the paths + # disabled_any: Disable sending any path 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. @@ -1752,6 +1762,8 @@ # backup: Best path and installed backup path. # ecmp: All paths in best path ECMP group. # limit: Limit to n eligible paths. + # disabled: Disable sending the paths + # disabled_any: Disable sending any path 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. @@ -1866,6 +1878,8 @@ # backup: Best path and installed backup path. # ecmp: All paths in best path ECMP group. # limit: Limit to n eligible paths. + # disabled: Disable sending the paths + # disabled_any: Disable sending any path 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. @@ -1909,6 +1923,8 @@ # backup: Best path and installed backup path. # ecmp: All paths in best path ECMP group. # limit: Limit to n eligible paths. + # disabled: Disable sending the paths + # disabled_any: Disable sending any path 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. @@ -1950,6 +1966,8 @@ # backup: Best path and installed backup path. # ecmp: All paths in best path ECMP group. # limit: Limit to n eligible paths. + # disabled: Disable sending the paths + # disabled_any: Disable sending any path 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. @@ -2098,6 +2116,8 @@ # backup: Best path and installed backup path. # ecmp: All paths in best path ECMP group. # limit: Limit to n eligible paths. + # disabled: Disable sending the paths + # disabled_any: Disable sending any path 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. @@ -2116,6 +2136,8 @@ # backup: Best path and installed backup path. # ecmp: All paths in best path ECMP group. # limit: Limit to n eligible paths. + # disabled: Disable sending the paths + # disabled_any: Disable sending any path 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. @@ -2136,6 +2158,8 @@ # backup: Best path and installed backup path. # ecmp: All paths in best path ECMP group. # limit: Limit to n eligible paths. + # disabled: Disable sending the paths + # disabled_any: Disable sending any path 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. @@ -2277,6 +2301,8 @@ # backup: Best path and installed backup path. # ecmp: All paths in best path ECMP group. # limit: Limit to n eligible paths. + # disabled: Disable sending the paths + # disabled_any: Disable sending any path 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. @@ -2483,6 +2509,8 @@ # backup: Best path and installed backup path. # ecmp: All paths in best path ECMP group. # limit: Limit to n eligible paths. + # disabled: Disable sending the paths + # disabled_any: Disable sending any path 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. @@ -2547,6 +2575,8 @@ # backup: Best path and installed backup path. # ecmp: All paths in best path ECMP group. # limit: Limit to n eligible paths. + # disabled: Disable sending the paths + # disabled_any: Disable sending any path 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. @@ -2592,6 +2622,8 @@ # backup: Best path and installed backup path. # ecmp: All paths in best path ECMP group. # limit: Limit to n eligible paths. + # disabled: Disable sending the paths + # disabled_any: Disable sending any path 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. @@ -2637,6 +2669,8 @@ # backup: Best path and installed backup path. # ecmp: All paths in best path ECMP group. # limit: Limit to n eligible paths. + # disabled: Disable sending the paths + # disabled_any: Disable sending any path 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. @@ -2678,6 +2712,8 @@ # backup: Best path and installed backup path. # ecmp: All paths in best path ECMP group. # limit: Limit to n eligible paths. + # disabled: Disable sending the paths + # disabled_any: Disable sending any path 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. 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 46de715367e..a656cbaa3c5 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 @@ -678,9 +678,6 @@ router bgp {{ router_bgp.as }} {% endif %} {% endif %} {% for peer_group in router_bgp.address_family_evpn.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 %} @@ -707,6 +704,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 %} {% 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 @@ -884,9 +884,9 @@ router bgp {{ router_bgp.as }} {% 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' %} - bgp additional-paths send + no bgp additional-paths send {% elif router_bgp.address_family_ipv4.bgp.additional_paths.send == 'disabled_any' %} - bgp additional-paths send any + no bgp additional-paths send any {% elif router_bgp.address_family_ipv4.bgp.additional_paths.send_ecmp_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_ecmp_limit }} {% elif router_bgp.address_family_ipv4.bgp.additional_paths.send == 'limit' %} @@ -1169,7 +1169,7 @@ router bgp {{ router_bgp.as }} bgp additional-paths send ecmp limit {{ router_bgp.address_family_ipv6.bgp.additional_paths.send_ecmp_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 %} -{% set add_path_cli = 'bgp additional-paths send limit ' ~ router_bgp.address_family_ipv6.bgp.additional_paths.send_limit %} + bgp additional-paths send limit {{ router_bgp.address_family_ipv6.bgp.additional_paths.send_limit }} {% endif %} bgp additional-paths send limit {{ router_bgp.address_family_ipv6.bgp.additional_paths.send_limit }} {% else %} @@ -1513,9 +1513,9 @@ router bgp {{ router_bgp.as }} {% endif %} {% if neighbor.additional_paths.send is arista.avd.defined %} {% if neighbor.additional_paths.send == 'disabled' %} - no neighbor {{ neighbor.ip_address }} send + no neighbor {{ neighbor.ip_address }} additional-paths send {% elif neighbor.additional_paths.send == 'disabled_any' %} - no neighbor {{ neighbor.ip_address }} send any + no neighbor {{ neighbor.ip_address }} additional-paths send any {% elif neighbor.additional_paths.send_ecmp_limit is arista.avd.defined and neighbor.additional_paths.send == 'ecmp' %} neighbor {{ neighbor.ip_address }} additional-paths send ecmp limit {{ neighbor.additional_paths.send_ecmp_limit }} {% elif neighbor.additional_paths.send == 'limit' %} 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 b37c77ee602..6ff5eb472c2 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 @@ -19380,7 +19380,11 @@ $defs: ecmp: All paths in best path ECMP group. - limit: Limit to n eligible paths.' + limit: Limit to n eligible paths. + + disabled: Disable sending the paths + + disabled_any: Disable sending any path' valid_values: - any - backup 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 b6ffb347371..39e87cb7df0 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 @@ -16,6 +16,8 @@ $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 the paths + disabled_any: Disable sending any path valid_values: [ 'any', 'backup', 'ecmp', 'limit', 'disabled', 'disabled_any' ] send_ecmp_limit: type: int From b25c141471cc9fcfd09256477fa5d787806f07c0 Mon Sep 17 00:00:00 2001 From: Laxmikant Chintakindi Date: Fri, 27 Sep 2024 17:10:43 +0530 Subject: [PATCH 44/55] Adding changes in bgp-labeled-unicast --- .../docs/tables/router-bgp.md | 33 ++++++------ .../j2templates/eos/router-bgp.j2 | 54 ++++++++++++------- .../schema/eos_cli_config_gen.schema.yml | 42 --------------- 3 files changed, 54 insertions(+), 75 deletions(-) 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 aaa6a0dd3f6..011b1843c7c 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 @@ -421,8 +421,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 | | | | | - | [        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 settings. If this key-value pair is not set, it will send all paths in best ECMP group. | + | [        send](## "router_bgp.address_family_ipv4_labeled_unicast.bgp.additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- disabled
- disabled_any | 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 the paths
disabled_any: 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. | | [      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. | @@ -446,8 +446,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 | | | | | - | [          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 settings. If this key-value pair is not set, it will send all paths in best ECMP group. | + | [          send](## "router_bgp.address_family_ipv4_labeled_unicast.peer_groups.[].additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- disabled
- disabled_any | 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 the paths
disabled_any: 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. | | [        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 | | | | | @@ -482,8 +482,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 | | | | | - | [          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 settings. If this key-value pair is not set, it will send all paths in best ECMP group. | + | [          send](## "router_bgp.address_family_ipv4_labeled_unicast.neighbors.[].additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- disabled
- disabled_any | 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 the paths
disabled_any: 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. | | [        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 | | | | | @@ -1914,10 +1914,11 @@ # 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: + # disabled: Disable sending the paths + # disabled_any: Disable sending any path + send: - # Amount of ECMP paths to send. `send` must be set to `ecmp` for this settings. If this key-value pair is not set, it will send all paths in best ECMP group. + # 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. @@ -1976,10 +1977,11 @@ # 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: + # disabled: Disable sending the paths + # disabled_any: Disable sending any path + send: - # Amount of ECMP paths to send. `send` must be set to `ecmp` for this settings. If this key-value pair is not set, it will send all paths in best ECMP group. + # 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. @@ -2064,10 +2066,11 @@ # 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: + # disabled: Disable sending the paths + # disabled_any: Disable sending any path + send: - # Amount of ECMP paths to send. `send` must be set to `ecmp` for this settings. If this key-value pair is not set, it will send all paths in best ECMP group. + # 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. 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 784b2f837a8..805306ea993 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 @@ -1092,13 +1092,19 @@ 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 == 'disabled_any' %} + no bgp additional-paths send any +{% elif 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" %} + bgp additional-paths send ecmp 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" %} +{% 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 @@ -1148,13 +1154,19 @@ 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 == 'disabled_any' %} + no neighbor {{ peer.name }} additional-paths send any +{% elif peer.additional_paths.send_ecmp_limit is arista.avd.defined and peer.additional_paths.send == "ecmp" %} + neighbor {{ peer.name }} additional-paths send ecmp limit {{ peer.additional_paths.send_ecmp_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 @@ -1237,13 +1249,19 @@ 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 == 'disabled_any' %} + no neighbor {{ neighbor.ip_address }} additional-paths send any +{% elif neighbor.additional_paths.send_ecmp_limit is arista.avd.defined and neighbor.additional_paths.send == "ecmp" %} + neighbor {{ neighbor.ip_address }} additional-paths send ecmp limit {{ neighbor.additional_paths.send_ecmp_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 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 85b7475ea3c..c4c6d039592 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 @@ -19818,48 +19818,6 @@ $defs: - str min: 2 max: 64 - bgp_additional_paths: - type: dict - keys: - receive: - type: bool - send: - type: str - description: '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.' - 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 settings. 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. - convert_types: - - str - min: 2 - max: 64 flow_tracking: type: dict keys: From 88000e6beec34b45b4233092ae3a369d9957b005 Mon Sep 17 00:00:00 2001 From: Laxmikant Chintakindi Date: Fri, 27 Sep 2024 17:17:10 +0530 Subject: [PATCH 45/55] Fix --- .../pyavd/_eos_cli_config_gen/j2templates/eos/router-bgp.j2 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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 805306ea993..abf3eaa76ae 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 @@ -2577,9 +2577,9 @@ router bgp {{ router_bgp.as }} {% endif %} {% if neighbor.additional_paths.send is arista.avd.defined %} {% if neighbor.additional_paths.send == 'disabled' %} - no neighbor {{ neighbor.ip_address }} send + no neighbor {{ neighbor.ip_address }} additional-paths send {% elif neighbor.additional_paths.send == 'disabled_any' %} - no neighbor {{ neighbor.ip_address }} send any + no neighbor {{ neighbor.ip_address }} additional-paths send any {% elif neighbor.additional_paths.send_ecmp_limit is arista.avd.defined and neighbor.additional_paths.send == 'ecmp' %} neighbor {{ neighbor.ip_address }} additional-paths send ecmp limit {{ neighbor.additional_paths.send_ecmp_limit }} {% elif neighbor.additional_paths.send == 'limit' %} From 8a3da5b22efaee4f19915a51c68f9708a7b075a4 Mon Sep 17 00:00:00 2001 From: Laxmikant Chintakindi Date: Mon, 30 Sep 2024 13:48:25 +0530 Subject: [PATCH 46/55] Address comments. --- .../docs/tables/router-bgp.md | 126 +++++++++--------- .../j2templates/eos/router-bgp.j2 | 1 - .../schema/eos_cli_config_gen.schema.yml | 4 +- .../defs_bgp_additional_paths.schema.yml | 4 +- 4 files changed, 67 insertions(+), 68 deletions(-) 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 011b1843c7c..d4424da6fdd 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 @@ -294,7 +294,7 @@ | [          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 | | | | | - | [          send](## "router_bgp.address_family_evpn.neighbors.[].additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- disabled
- disabled_any | 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 the paths
disabled_any: Disable sending any path | + | [          send](## "router_bgp.address_family_evpn.neighbors.[].additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- disabled
- disabled_any | 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 the paths.
disabled_any: Disable sending any path. | | [          send_ecmp_limit](## "router_bgp.address_family_evpn.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_evpn.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. | | [        encapsulation](## "router_bgp.address_family_evpn.neighbors.[].encapsulation") | String | | | Valid Values:
- vxlan
- mpls
- path-selection | Transport encapsulation for the neighbor. | @@ -313,7 +313,7 @@ | [        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") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- disabled
- disabled_any | 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 the paths
disabled_any: Disable sending any path | + | [          send](## "router_bgp.address_family_evpn.peer_groups.[].additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- disabled
- disabled_any | 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 the paths.
disabled_any: Disable sending any path. | | [          send_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. `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_evpn.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. | | [    evpn_hostflap_detection](## "router_bgp.address_family_evpn.evpn_hostflap_detection") | Dictionary | | | | | @@ -340,7 +340,7 @@ | [    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 | | | | | - | [        send](## "router_bgp.address_family_evpn.bgp.additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- disabled
- disabled_any | 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 the paths
disabled_any: Disable sending any path | + | [        send](## "router_bgp.address_family_evpn.bgp.additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- disabled
- disabled_any | 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 the paths.
disabled_any: Disable sending any path. | | [        send_ecmp_limit](## "router_bgp.address_family_evpn.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_evpn.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. | | [    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. | @@ -362,7 +362,7 @@ | [        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 | | | | | - | [        send](## "router_bgp.address_family_ipv4.bgp.additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- disabled
- disabled_any | 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 the paths
disabled_any: Disable sending any path | + | [        send](## "router_bgp.address_family_ipv4.bgp.additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- disabled
- disabled_any | 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 the paths.
disabled_any: Disable sending any path. | | [        send_ecmp_limit](## "router_bgp.address_family_ipv4.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.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. | | [      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. | @@ -381,7 +381,7 @@ | [        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 | | | | | - | [          send](## "router_bgp.address_family_ipv4.peer_groups.[].additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- disabled
- disabled_any | 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 the paths
disabled_any: Disable sending any path | + | [          send](## "router_bgp.address_family_ipv4.peer_groups.[].additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- disabled
- disabled_any | 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 the paths.
disabled_any: Disable sending any path. | | [          send_ecmp_limit](## "router_bgp.address_family_ipv4.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.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. | | [        next_hop](## "router_bgp.address_family_ipv4.peer_groups.[].next_hop") | Dictionary | | | | | @@ -404,7 +404,7 @@ | [        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 | | | | | - | [          send](## "router_bgp.address_family_ipv4.neighbors.[].additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- disabled
- disabled_any | 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 the paths
disabled_any: Disable sending any path | + | [          send](## "router_bgp.address_family_ipv4.neighbors.[].additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- disabled
- disabled_any | 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 the paths.
disabled_any: Disable sending any path. | | [          send_ecmp_limit](## "router_bgp.address_family_ipv4.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.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. | | [    redistribute_routes](## "router_bgp.address_family_ipv4.redistribute_routes") | List, items: Dictionary | | | | | @@ -421,7 +421,7 @@ | [    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 | | | | | - | [        send](## "router_bgp.address_family_ipv4_labeled_unicast.bgp.additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- disabled
- disabled_any | 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 the paths
disabled_any: Disable sending any path | + | [        send](## "router_bgp.address_family_ipv4_labeled_unicast.bgp.additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- disabled
- disabled_any | 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 the paths.
disabled_any: 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. | | [      missing_policy](## "router_bgp.address_family_ipv4_labeled_unicast.bgp.missing_policy") | Dictionary | | | | Missing policy configuration for all address-families. | @@ -446,7 +446,7 @@ | [        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 | | | | | - | [          send](## "router_bgp.address_family_ipv4_labeled_unicast.peer_groups.[].additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- disabled
- disabled_any | 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 the paths
disabled_any: Disable sending any path | + | [          send](## "router_bgp.address_family_ipv4_labeled_unicast.peer_groups.[].additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- disabled
- disabled_any | 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 the paths.
disabled_any: 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. | | [        aigp_session](## "router_bgp.address_family_ipv4_labeled_unicast.peer_groups.[].aigp_session") | Boolean | | | | | @@ -482,7 +482,7 @@ | [        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 | | | | | - | [          send](## "router_bgp.address_family_ipv4_labeled_unicast.neighbors.[].additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- disabled
- disabled_any | 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 the paths
disabled_any: Disable sending any path | + | [          send](## "router_bgp.address_family_ipv4_labeled_unicast.neighbors.[].additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- disabled
- disabled_any | 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 the paths.
disabled_any: 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. | | [        aigp_session](## "router_bgp.address_family_ipv4_labeled_unicast.neighbors.[].aigp_session") | Boolean | | | | | @@ -571,7 +571,7 @@ | [        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 | | | | | - | [        send](## "router_bgp.address_family_ipv6.bgp.additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- disabled
- disabled_any | 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 the paths
disabled_any: Disable sending any path | + | [        send](## "router_bgp.address_family_ipv6.bgp.additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- disabled
- disabled_any | 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 the paths.
disabled_any: Disable sending any path. | | [        send_ecmp_limit](## "router_bgp.address_family_ipv6.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_ipv6.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. | | [    peer_groups](## "router_bgp.address_family_ipv6.peer_groups") | List, items: Dictionary | | | | | @@ -586,7 +586,7 @@ | [        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 | | | | | - | [          send](## "router_bgp.address_family_ipv6.peer_groups.[].additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- disabled
- disabled_any | 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 the paths
disabled_any: Disable sending any path | + | [          send](## "router_bgp.address_family_ipv6.peer_groups.[].additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- disabled
- disabled_any | 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 the paths.
disabled_any: Disable sending any path. | | [          send_ecmp_limit](## "router_bgp.address_family_ipv6.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_ipv6.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. | | [    neighbors](## "router_bgp.address_family_ipv6.neighbors") | List, items: Dictionary | | | | | @@ -601,7 +601,7 @@ | [        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 | | | | | - | [          send](## "router_bgp.address_family_ipv6.neighbors.[].additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- disabled
- disabled_any | 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 the paths
disabled_any: Disable sending any path | + | [          send](## "router_bgp.address_family_ipv6.neighbors.[].additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- disabled
- disabled_any | 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 the paths.
disabled_any: Disable sending any path. | | [          send_ecmp_limit](## "router_bgp.address_family_ipv6.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_ipv6.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. | | [    redistribute_routes](## "router_bgp.address_family_ipv6.redistribute_routes") | List, items: Dictionary | | | | | @@ -697,7 +697,7 @@ | [    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") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- disabled
- disabled_any | 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 the paths
disabled_any: Disable sending any path | + | [        send](## "router_bgp.address_family_path_selection.bgp.additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- disabled
- disabled_any | 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 the paths.
disabled_any: Disable sending any path. | | [        send_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. `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_path_selection.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. | | [    neighbors](## "router_bgp.address_family_path_selection.neighbors") | List, items: Dictionary | | | | | @@ -705,7 +705,7 @@ | [        activate](## "router_bgp.address_family_path_selection.neighbors.[].activate") | Boolean | | | | | | [        additional_paths](## "router_bgp.address_family_path_selection.neighbors.[].additional_paths") | Dictionary | | | | | | [          receive](## "router_bgp.address_family_path_selection.neighbors.[].additional_paths.receive") | Boolean | | | | | - | [          send](## "router_bgp.address_family_path_selection.neighbors.[].additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- disabled
- disabled_any | 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 the paths
disabled_any: Disable sending any path | + | [          send](## "router_bgp.address_family_path_selection.neighbors.[].additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- disabled
- disabled_any | 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 the paths.
disabled_any: Disable sending any path. | | [          send_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. `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_path_selection.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. | | [    peer_groups](## "router_bgp.address_family_path_selection.peer_groups") | List, items: Dictionary | | | | | @@ -713,7 +713,7 @@ | [        activate](## "router_bgp.address_family_path_selection.peer_groups.[].activate") | Boolean | | | | | | [        additional_paths](## "router_bgp.address_family_path_selection.peer_groups.[].additional_paths") | Dictionary | | | | | | [          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") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- disabled
- disabled_any | 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 the paths
disabled_any: Disable sending any path | + | [          send](## "router_bgp.address_family_path_selection.peer_groups.[].additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- disabled
- disabled_any | 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 the paths.
disabled_any: Disable sending any path. | | [          send_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. `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_path_selection.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. | | [  address_family_vpn_ipv4](## "router_bgp.address_family_vpn_ipv4") | Dictionary | | | | | @@ -780,7 +780,7 @@ | [          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 | | | | | - | [          send](## "router_bgp.vrfs.[].bgp.additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- disabled
- disabled_any | 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 the paths
disabled_any: Disable sending any path | + | [          send](## "router_bgp.vrfs.[].bgp.additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- disabled
- disabled_any | 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 the paths.
disabled_any: Disable sending any path. | | [          send_ecmp_limit](## "router_bgp.vrfs.[].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.vrfs.[].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. | | [      rd](## "router_bgp.vrfs.[].rd") | String | | | | Route distinguisher. | @@ -873,7 +873,7 @@ | [          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 | | | | | - | [            send](## "router_bgp.vrfs.[].neighbors.[].additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- disabled
- disabled_any | 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 the paths
disabled_any: Disable sending any path | + | [            send](## "router_bgp.vrfs.[].neighbors.[].additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- disabled
- disabled_any | 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 the paths.
disabled_any: Disable sending any path. | | [            send_ecmp_limit](## "router_bgp.vrfs.[].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.vrfs.[].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. | | [          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. | @@ -906,7 +906,7 @@ | [            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 | | | | | - | [            send](## "router_bgp.vrfs.[].address_family_ipv4.bgp.additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- disabled
- disabled_any | 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 the paths
disabled_any: Disable sending any path | + | [            send](## "router_bgp.vrfs.[].address_family_ipv4.bgp.additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- disabled
- disabled_any | 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 the paths.
disabled_any: Disable sending any path. | | [            send_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. `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.vrfs.[].address_family_ipv4.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. | | [          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. | @@ -925,7 +925,7 @@ | [                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 | | | | | - | [              send](## "router_bgp.vrfs.[].address_family_ipv4.neighbors.[].additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- disabled
- disabled_any | 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 the paths
disabled_any: Disable sending any path | + | [              send](## "router_bgp.vrfs.[].address_family_ipv4.neighbors.[].additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- disabled
- disabled_any | 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 the paths.
disabled_any: Disable sending any path. | | [              send_ecmp_limit](## "router_bgp.vrfs.[].address_family_ipv4.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.vrfs.[].address_family_ipv4.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. | | [        networks](## "router_bgp.vrfs.[].address_family_ipv4.networks") | List, items: Dictionary | | | | | @@ -946,7 +946,7 @@ | [            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 | | | | | - | [            send](## "router_bgp.vrfs.[].address_family_ipv6.bgp.additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- disabled
- disabled_any | 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 the paths
disabled_any: Disable sending any path | + | [            send](## "router_bgp.vrfs.[].address_family_ipv6.bgp.additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- disabled
- disabled_any | 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 the paths.
disabled_any: Disable sending any path. | | [            send_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. `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.vrfs.[].address_family_ipv6.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. | | [          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. | @@ -961,7 +961,7 @@ | [            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 | | | | | - | [              send](## "router_bgp.vrfs.[].address_family_ipv6.neighbors.[].additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- disabled
- disabled_any | 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 the paths
disabled_any: Disable sending any path | + | [              send](## "router_bgp.vrfs.[].address_family_ipv6.neighbors.[].additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- disabled
- disabled_any | 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 the paths.
disabled_any: Disable sending any path. | | [              send_ecmp_limit](## "router_bgp.vrfs.[].address_family_ipv6.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.vrfs.[].address_family_ipv6.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. | | [        networks](## "router_bgp.vrfs.[].address_family_ipv6.networks") | List, items: Dictionary | | | | | @@ -1610,8 +1610,8 @@ # backup: Best path and installed backup path. # ecmp: All paths in best path ECMP group. # limit: Limit to n eligible paths. - # disabled: Disable sending the paths - # disabled_any: Disable sending any path + # disabled: Disable sending the paths. + # disabled_any: Disable sending any path. 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. @@ -1660,8 +1660,8 @@ # backup: Best path and installed backup path. # ecmp: All paths in best path ECMP group. # limit: Limit to n eligible paths. - # disabled: Disable sending the paths - # disabled_any: Disable sending any path + # disabled: Disable sending the paths. + # disabled_any: Disable sending any path. 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. @@ -1724,8 +1724,8 @@ # backup: Best path and installed backup path. # ecmp: All paths in best path ECMP group. # limit: Limit to n eligible paths. - # disabled: Disable sending the paths - # disabled_any: Disable sending any path + # disabled: Disable sending the paths. + # disabled_any: Disable sending any path. 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. @@ -1772,8 +1772,8 @@ # backup: Best path and installed backup path. # ecmp: All paths in best path ECMP group. # limit: Limit to n eligible paths. - # disabled: Disable sending the paths - # disabled_any: Disable sending any path + # disabled: Disable sending the paths. + # disabled_any: Disable sending any path. 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. @@ -1825,8 +1825,8 @@ # backup: Best path and installed backup path. # ecmp: All paths in best path ECMP group. # limit: Limit to n eligible paths. - # disabled: Disable sending the paths - # disabled_any: Disable sending any path + # disabled: Disable sending the paths. + # disabled_any: Disable sending any path. 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. @@ -1875,8 +1875,8 @@ # backup: Best path and installed backup path. # ecmp: All paths in best path ECMP group. # limit: Limit to n eligible paths. - # disabled: Disable sending the paths - # disabled_any: Disable sending any path + # disabled: Disable sending the paths. + # disabled_any: Disable sending any path. 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. @@ -1914,8 +1914,8 @@ # backup: Best path and installed backup path. # ecmp: All paths in best path ECMP group. # limit: Limit to n eligible paths. - # disabled: Disable sending the paths - # disabled_any: Disable sending any path + # disabled: Disable sending the paths. + # disabled_any: Disable sending any path. 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. @@ -1977,8 +1977,8 @@ # backup: Best path and installed backup path. # ecmp: All paths in best path ECMP group. # limit: Limit to n eligible paths. - # disabled: Disable sending the paths - # disabled_any: Disable sending any path + # disabled: Disable sending the paths. + # disabled_any: Disable sending any path. 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. @@ -2066,8 +2066,8 @@ # backup: Best path and installed backup path. # ecmp: All paths in best path ECMP group. # limit: Limit to n eligible paths. - # disabled: Disable sending the paths - # disabled_any: Disable sending any path + # disabled: Disable sending the paths. + # disabled_any: Disable sending any path. 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. @@ -2263,8 +2263,8 @@ # backup: Best path and installed backup path. # ecmp: All paths in best path ECMP group. # limit: Limit to n eligible paths. - # disabled: Disable sending the paths - # disabled_any: Disable sending any path + # disabled: Disable sending the paths. + # disabled_any: Disable sending any path. 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. @@ -2308,8 +2308,8 @@ # backup: Best path and installed backup path. # ecmp: All paths in best path ECMP group. # limit: Limit to n eligible paths. - # disabled: Disable sending the paths - # disabled_any: Disable sending any path + # disabled: Disable sending the paths. + # disabled_any: Disable sending any path. 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. @@ -2351,8 +2351,8 @@ # backup: Best path and installed backup path. # ecmp: All paths in best path ECMP group. # limit: Limit to n eligible paths. - # disabled: Disable sending the paths - # disabled_any: Disable sending any path + # disabled: Disable sending the paths. + # disabled_any: Disable sending any path. 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. @@ -2501,8 +2501,8 @@ # backup: Best path and installed backup path. # ecmp: All paths in best path ECMP group. # limit: Limit to n eligible paths. - # disabled: Disable sending the paths - # disabled_any: Disable sending any path + # disabled: Disable sending the paths. + # disabled_any: Disable sending any path. 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. @@ -2521,8 +2521,8 @@ # backup: Best path and installed backup path. # ecmp: All paths in best path ECMP group. # limit: Limit to n eligible paths. - # disabled: Disable sending the paths - # disabled_any: Disable sending any path + # disabled: Disable sending the paths. + # disabled_any: Disable sending any path. 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. @@ -2543,8 +2543,8 @@ # backup: Best path and installed backup path. # ecmp: All paths in best path ECMP group. # limit: Limit to n eligible paths. - # disabled: Disable sending the paths - # disabled_any: Disable sending any path + # disabled: Disable sending the paths. + # disabled_any: Disable sending any path. 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. @@ -2686,8 +2686,8 @@ # backup: Best path and installed backup path. # ecmp: All paths in best path ECMP group. # limit: Limit to n eligible paths. - # disabled: Disable sending the paths - # disabled_any: Disable sending any path + # disabled: Disable sending the paths. + # disabled_any: Disable sending any path. 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. @@ -2894,8 +2894,8 @@ # backup: Best path and installed backup path. # ecmp: All paths in best path ECMP group. # limit: Limit to n eligible paths. - # disabled: Disable sending the paths - # disabled_any: Disable sending any path + # disabled: Disable sending the paths. + # disabled_any: Disable sending any path. 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. @@ -2960,8 +2960,8 @@ # backup: Best path and installed backup path. # ecmp: All paths in best path ECMP group. # limit: Limit to n eligible paths. - # disabled: Disable sending the paths - # disabled_any: Disable sending any path + # disabled: Disable sending the paths. + # disabled_any: Disable sending any path. 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. @@ -3007,8 +3007,8 @@ # backup: Best path and installed backup path. # ecmp: All paths in best path ECMP group. # limit: Limit to n eligible paths. - # disabled: Disable sending the paths - # disabled_any: Disable sending any path + # disabled: Disable sending the paths. + # disabled_any: Disable sending any path. 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. @@ -3054,8 +3054,8 @@ # backup: Best path and installed backup path. # ecmp: All paths in best path ECMP group. # limit: Limit to n eligible paths. - # disabled: Disable sending the paths - # disabled_any: Disable sending any path + # disabled: Disable sending the paths. + # disabled_any: Disable sending any path. 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. @@ -3097,8 +3097,8 @@ # backup: Best path and installed backup path. # ecmp: All paths in best path ECMP group. # limit: Limit to n eligible paths. - # disabled: Disable sending the paths - # disabled_any: Disable sending any path + # disabled: Disable sending the paths. + # disabled_any: Disable sending any path. 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. 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 abf3eaa76ae..66fe90b3def 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 @@ -1476,7 +1476,6 @@ router bgp {{ router_bgp.as }} {% 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 %} - bgp additional-paths send limit {{ router_bgp.address_family_ipv6.bgp.additional_paths.send_limit }} {% else %} bgp additional-paths send {{ router_bgp.address_family_ipv6.bgp.additional_paths.send }} {% endif %} 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 c4c6d039592..32e86a77575 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 @@ -19791,9 +19791,9 @@ $defs: limit: Limit to n eligible paths. - disabled: Disable sending the paths + disabled: Disable sending the paths. - disabled_any: Disable sending any path' + disabled_any: Disable sending any path.' valid_values: - any - backup 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 39e87cb7df0..2e8f7bd7846 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 @@ -16,8 +16,8 @@ $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 the paths - disabled_any: Disable sending any path + disabled: Disable sending the paths. + disabled_any: Disable sending any path. valid_values: [ 'any', 'backup', 'ecmp', 'limit', 'disabled', 'disabled_any' ] send_ecmp_limit: type: int From 1c1d61ea09b011932323103563a2bd37eb29a190 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 1 Oct 2024 04:49:48 +0000 Subject: [PATCH 47/55] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- .../docs/tables/router-bgp.md | 88 +++++++++++++------ .../schema/eos_cli_config_gen.schema.yml | 1 - 2 files changed, 61 insertions(+), 28 deletions(-) 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 5e243e22ae1..8b389b9e444 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,7 +43,7 @@ | [      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](## "router_bgp.bgp.additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- disabled
- disabled_any | 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 the paths.
disabled_any: 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. | | [    redistribute_internal](## "router_bgp.bgp.redistribute_internal") | Boolean | | | | Allow redistribution of iBGP routes into an Interior Gateway Protocol (IGP). EOS default is true. | @@ -298,7 +298,7 @@ | [          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 | | | | | + | [          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
- disabled_any | 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 the paths.
disabled_any: Disable sending any path. | | [          send_ecmp_limit](## "router_bgp.address_family_evpn.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_evpn.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. | @@ -317,7 +317,7 @@ | [        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 | | | | | + | [          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
- disabled_any | 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 the paths.
disabled_any: Disable sending any path. | | [          send_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. `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_evpn.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. | @@ -344,7 +344,7 @@ | [        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 | | | | | + | [        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
- disabled_any | 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 the paths.
disabled_any: Disable sending any path. | | [        send_ecmp_limit](## "router_bgp.address_family_evpn.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_evpn.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. | @@ -366,7 +366,7 @@ | [      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 | | | | | + | [        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
- disabled_any | 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 the paths.
disabled_any: Disable sending any path. | | [        send_ecmp_limit](## "router_bgp.address_family_ipv4.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.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. | @@ -385,7 +385,7 @@ | [        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 | | | | | + | [          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
- disabled_any | 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 the paths.
disabled_any: Disable sending any path. | | [          send_ecmp_limit](## "router_bgp.address_family_ipv4.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.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. | @@ -408,7 +408,7 @@ | [          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 | | | | | + | [          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
- disabled_any | 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 the paths.
disabled_any: Disable sending any path. | | [          send_ecmp_limit](## "router_bgp.address_family_ipv4.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.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. | @@ -425,11 +425,8 @@ | [      ibgp](## "router_bgp.address_family_ipv4_labeled_unicast.aigp_session.ibgp") | Boolean | | | | | | [    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 | | | | | - | [        send](## "router_bgp.address_family_ipv4_labeled_unicast.bgp.additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- disabled
- disabled_any | 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 the paths.
disabled_any: 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. | | [        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](## "router_bgp.address_family_ipv4_labeled_unicast.bgp.additional_paths.send") | String | | | Valid Values:
- any
- backup
- ecmp
- limit
- disabled
- disabled_any | 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 the paths.
disabled_any: 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. | | [      missing_policy](## "router_bgp.address_family_ipv4_labeled_unicast.bgp.missing_policy") | Dictionary | | | | Missing policy configuration for all address-families. | @@ -453,7 +450,7 @@ | [      - name](## "router_bgp.address_family_ipv4_labeled_unicast.peer_groups.[].name") | String | Required, Unique | | | Peer-group name. | | [        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 | | | | | + | [          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
- disabled_any | 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 the paths.
disabled_any: 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. | @@ -489,7 +486,7 @@ | [      - ip_address](## "router_bgp.address_family_ipv4_labeled_unicast.neighbors.[].ip_address") | String | Required, Unique | | | | | [        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 | | | | | + | [          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
- disabled_any | 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 the paths.
disabled_any: 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. | @@ -578,7 +575,7 @@ | [      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 | | | | | + | [        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
- disabled_any | 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 the paths.
disabled_any: Disable sending any path. | | [        send_ecmp_limit](## "router_bgp.address_family_ipv6.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_ipv6.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. | @@ -593,7 +590,7 @@ | [        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 | | | | | + | [          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
- disabled_any | 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 the paths.
disabled_any: Disable sending any path. | | [          send_ecmp_limit](## "router_bgp.address_family_ipv6.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_ipv6.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. | @@ -608,7 +605,7 @@ | [        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 | | | | | + | [          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
- disabled_any | 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 the paths.
disabled_any: Disable sending any path. | | [          send_ecmp_limit](## "router_bgp.address_family_ipv6.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_ipv6.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. | @@ -704,7 +701,7 @@ | [  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 | | | | | + | [        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
- disabled_any | 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 the paths.
disabled_any: Disable sending any path. | | [        send_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. `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_path_selection.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. | @@ -712,7 +709,7 @@ | [      - 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 | | | | | - | [          receive](## "router_bgp.address_family_path_selection.neighbors.[].additional_paths.receive") | Boolean | | | | | + | [          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
- disabled_any | 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 the paths.
disabled_any: Disable sending any path. | | [          send_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. `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_path_selection.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. | @@ -720,7 +717,7 @@ | [      - 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 | | | | | - | [          receive](## "router_bgp.address_family_path_selection.peer_groups.[].additional_paths.receive") | Boolean | | | | | + | [          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
- disabled_any | 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 the paths.
disabled_any: Disable sending any path. | | [          send_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. `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_path_selection.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. | @@ -787,7 +784,7 @@ | [        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 | | | | | + | [          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
- disabled_any | 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 the paths.
disabled_any: Disable sending any path. | | [          send_ecmp_limit](## "router_bgp.vrfs.[].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.vrfs.[].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. | @@ -880,7 +877,7 @@ | [          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 | | | | | + | [            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
- disabled_any | 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 the paths.
disabled_any: Disable sending any path. | | [            send_ecmp_limit](## "router_bgp.vrfs.[].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.vrfs.[].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. | @@ -913,7 +910,7 @@ | [          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 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 | | | | | + | [            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
- disabled_any | 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 the paths.
disabled_any: Disable sending any path. | | [            send_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. `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.vrfs.[].address_family_ipv4.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. | @@ -932,7 +929,7 @@ | [                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 | | | | | + | [              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
- disabled_any | 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 the paths.
disabled_any: Disable sending any path. | | [              send_ecmp_limit](## "router_bgp.vrfs.[].address_family_ipv4.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.vrfs.[].address_family_ipv4.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. | @@ -953,7 +950,7 @@ | [          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 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 | | | | | + | [            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
- disabled_any | 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 the paths.
disabled_any: Disable sending any path. | | [            send_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. `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.vrfs.[].address_family_ipv6.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. | @@ -968,7 +965,7 @@ | [            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 | | | | | + | [              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
- disabled_any | 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 the paths.
disabled_any: Disable sending any path. | | [              send_ecmp_limit](## "router_bgp.vrfs.[].address_family_ipv6.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.vrfs.[].address_family_ipv6.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. | @@ -1128,8 +1125,9 @@ # 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: + # disabled: Disable sending the paths. + # disabled_any: Disable sending any path. + 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: @@ -1629,6 +1627,8 @@ 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. @@ -1679,6 +1679,8 @@ # Transport encapsulation for the peer-group. encapsulation: additional_paths: + + # Enable or disable reception of additional-paths. receive: # Select an option to send multiple paths for same prefix through bgp updates. @@ -1743,6 +1745,8 @@ 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. @@ -1791,6 +1795,8 @@ # 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. @@ -1844,6 +1850,8 @@ # 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. @@ -1894,6 +1902,8 @@ # 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. @@ -2288,6 +2298,8 @@ # 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. @@ -2333,6 +2345,8 @@ # 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. @@ -2376,6 +2390,8 @@ # 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. @@ -2526,6 +2542,8 @@ address_family_path_selection: bgp: additional_paths: + + # Enable or disable reception of additional-paths. receive: # Select an option to send multiple paths for same prefix through bgp updates. @@ -2546,6 +2564,8 @@ - ip_address: activate: additional_paths: + + # Enable or disable reception of additional-paths. receive: # Select an option to send multiple paths for same prefix through bgp updates. @@ -2568,6 +2588,8 @@ - name: activate: additional_paths: + + # Enable or disable reception of additional-paths. receive: # Select an option to send multiple paths for same prefix through bgp updates. @@ -2711,6 +2733,8 @@ # 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. @@ -2919,6 +2943,8 @@ # 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. @@ -2985,6 +3011,8 @@ # 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. @@ -3032,6 +3060,8 @@ 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. @@ -3079,6 +3109,8 @@ # 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. @@ -3122,6 +3154,8 @@ # 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. 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 0ba13e97f99..5ccb5ffa016 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 @@ -19808,7 +19808,6 @@ $defs: 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 this setting. If this key-value pair is not set, it will send all paths in best ECMP group. convert_types: From 1318bbf61ca0165f5e493e21c582b11a704c16ea Mon Sep 17 00:00:00 2001 From: Laxmikant Chintakindi Date: Tue, 1 Oct 2024 11:12:07 +0530 Subject: [PATCH 48/55] Fix CI. --- .../intended/structured_configs/cv-pathfinder-edge4A.yml | 3 +-- .../intended/structured_configs/cv-pathfinder-edge4B.yml | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) 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 From 9cfb032a706d8297dc00ca3945bcb5e661c8a54a Mon Sep 17 00:00:00 2001 From: Laxmikant Chintakindi Date: Tue, 1 Oct 2024 11:37:28 +0530 Subject: [PATCH 49/55] Adding changes in templates for root additional path commands. --- .../j2templates/documentation/router-bgp.j2 | 14 +++++++------ .../j2templates/eos/router-bgp.j2 | 20 +++++++++---------- 2 files changed, 18 insertions(+), 16 deletions(-) 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 c280ff1b317..000f0b20809 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,17 +56,19 @@ 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 == 'disabled_any' %} +| no bgp additional-paths send 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') %} +{% elif router_bgp.bgp.additional_paths.send_ecmp_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_ecmp_limit }} | -{% elif router_bgp.bgp.additional_paths.send is arista.avd.defined('ecmp') %} +{% 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') %} +{% elif router_bgp.bgp.additional_paths.send_limit is arista.avd.defined and router_bgp.bgp.additional_paths.send == 'limit' %} | bgp additional-paths send {{ router_bgp.bgp.additional_paths.send_limit }} | {% endif %} {% endif %} 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 6f0ae0c9c83..a92bc3f169c 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,18 @@ 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') %} +{% elif router_bgp.bgp.additional_paths.send == "disabled_any" %} + no bgp additional-paths send any +{% elif router_bgp.bgp.additional_paths.send_ecmp_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_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" %} +{% 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 %} From 137924fcc8abe05b50c2aaada165f903ada30f30 Mon Sep 17 00:00:00 2001 From: laxmikantchintakindi <159624484+laxmikantchintakindi@users.noreply.github.com> Date: Tue, 1 Oct 2024 16:31:01 +0530 Subject: [PATCH 50/55] Update ansible_collections/arista/avd/docs/porting-guides/5.x.x.md Co-authored-by: Claus Holbech --- .../arista/avd/docs/porting-guides/5.x.x.md | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) 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 81b7dfed3c2..2236be4bed3 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 @@ -1286,7 +1286,16 @@ port_channel_interfaces: ### Data model for BGP additional-paths in `router_bgp.address_family_evpn/_vrfs[].ipv4/_vrfs[].ipv6/_path_selection` has been changed -In AVD 5.0.0, the data models for `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` have been changed. The key `additional_paths.send` is a string instead of dictionary. +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. From f5bd32fcf81912d0d2efca58a847930da3877b9a Mon Sep 17 00:00:00 2001 From: laxmikantchintakindi <159624484+laxmikantchintakindi@users.noreply.github.com> Date: Tue, 1 Oct 2024 16:42:16 +0530 Subject: [PATCH 51/55] Update ansible_collections/arista/avd/docs/porting-guides/5.x.x.md Co-authored-by: Claus Holbech --- ansible_collections/arista/avd/docs/porting-guides/5.x.x.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 2236be4bed3..85fe1387619 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 @@ -1284,7 +1284,7 @@ port_channel_interfaces: + encapsulation: unmatched ``` -### Data model for BGP additional-paths in `router_bgp.address_family_evpn/_vrfs[].ipv4/_vrfs[].ipv6/_path_selection` has been changed +### 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: From b83f082dc594afebcab831b216405be67a00f160 Mon Sep 17 00:00:00 2001 From: Laxmikant Chintakindi Date: Tue, 1 Oct 2024 16:47:34 +0530 Subject: [PATCH 52/55] Remove disabled_any --- .../documentation/devices/router-bgp-evpn.md | 2 +- .../intended/configs/router-bgp-evpn.cfg | 2 +- .../inventory/host_vars/router-bgp-evpn.yml | 2 +- .../docs/tables/router-bgp.md | 154 ++++++++---------- .../j2templates/eos/router-bgp.j2 | 44 ----- .../schema/eos_cli_config_gen.schema.yml | 5 +- .../defs_bgp_additional_paths.schema.yml | 5 +- 7 files changed, 72 insertions(+), 142 deletions(-) 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 1ea4ceddc74..60abd34d501 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 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 cddb9063f40..f957c4fa9e6 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 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 5aa1445ab29..1f0bdff88d7 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 @@ -138,7 +138,7 @@ router_bgp: - name: ADDITIONAL-PATH-PG-6 activate: true additional_paths: - send: 'disabled_any' + send: 'disabled' - name: TEST-ENCAPSULATION activate: true encapsulation: mpls 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 8b389b9e444..7128ac0a753 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,7 +43,7 @@ | [      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
- disabled_any | 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 the paths.
disabled_any: Disable sending any path. | + | [      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_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. | | [    redistribute_internal](## "router_bgp.bgp.redistribute_internal") | Boolean | | | | Allow redistribution of iBGP routes into an Interior Gateway Protocol (IGP). EOS default is true. | @@ -299,7 +299,7 @@ | [          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
- disabled_any | 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 the paths.
disabled_any: Disable sending any path. | + | [          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_ecmp_limit](## "router_bgp.address_family_evpn.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_evpn.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. | | [        encapsulation](## "router_bgp.address_family_evpn.neighbors.[].encapsulation") | String | | | Valid Values:
- vxlan
- mpls
- path-selection | Transport encapsulation for the neighbor. | @@ -318,7 +318,7 @@ | [        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 | | | | 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
- disabled_any | 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 the paths.
disabled_any: Disable sending any path. | + | [          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_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. `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_evpn.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. | | [    evpn_hostflap_detection](## "router_bgp.address_family_evpn.evpn_hostflap_detection") | Dictionary | | | | | @@ -345,7 +345,7 @@ | [    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
- disabled_any | 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 the paths.
disabled_any: Disable sending any path. | + | [        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_ecmp_limit](## "router_bgp.address_family_evpn.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_evpn.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. | | [    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. | @@ -367,7 +367,7 @@ | [        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
- disabled_any | 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 the paths.
disabled_any: Disable sending any path. | + | [        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_ecmp_limit](## "router_bgp.address_family_ipv4.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.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. | | [      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. | @@ -386,7 +386,7 @@ | [        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
- disabled_any | 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 the paths.
disabled_any: Disable sending any path. | + | [          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_ecmp_limit](## "router_bgp.address_family_ipv4.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.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. | | [        next_hop](## "router_bgp.address_family_ipv4.peer_groups.[].next_hop") | Dictionary | | | | | @@ -409,7 +409,7 @@ | [        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
- disabled_any | 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 the paths.
disabled_any: Disable sending any path. | + | [          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_ecmp_limit](## "router_bgp.address_family_ipv4.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.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. | | [    redistribute_routes](## "router_bgp.address_family_ipv4.redistribute_routes") | List, items: Dictionary | | | | | @@ -426,7 +426,7 @@ | [    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
- disabled_any | 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 the paths.
disabled_any: Disable sending any path. | + | [        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_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. | | [      missing_policy](## "router_bgp.address_family_ipv4_labeled_unicast.bgp.missing_policy") | Dictionary | | | | Missing policy configuration for all address-families. | @@ -451,7 +451,7 @@ | [        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
- disabled_any | 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 the paths.
disabled_any: Disable sending any path. | + | [          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_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. | | [        aigp_session](## "router_bgp.address_family_ipv4_labeled_unicast.peer_groups.[].aigp_session") | Boolean | | | | | @@ -487,7 +487,7 @@ | [        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
- disabled_any | 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 the paths.
disabled_any: Disable sending any path. | + | [          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_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. | | [        aigp_session](## "router_bgp.address_family_ipv4_labeled_unicast.neighbors.[].aigp_session") | Boolean | | | | | @@ -576,7 +576,7 @@ | [        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
- disabled_any | 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 the paths.
disabled_any: Disable sending any path. | + | [        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_ecmp_limit](## "router_bgp.address_family_ipv6.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_ipv6.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. | | [    peer_groups](## "router_bgp.address_family_ipv6.peer_groups") | List, items: Dictionary | | | | | @@ -591,7 +591,7 @@ | [        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
- disabled_any | 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 the paths.
disabled_any: Disable sending any path. | + | [          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_ecmp_limit](## "router_bgp.address_family_ipv6.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_ipv6.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. | | [    neighbors](## "router_bgp.address_family_ipv6.neighbors") | List, items: Dictionary | | | | | @@ -606,7 +606,7 @@ | [        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
- disabled_any | 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 the paths.
disabled_any: Disable sending any path. | + | [          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_ecmp_limit](## "router_bgp.address_family_ipv6.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_ipv6.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. | | [    redistribute_routes](## "router_bgp.address_family_ipv6.redistribute_routes") | List, items: Dictionary | | | | | @@ -702,7 +702,7 @@ | [    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 | | | | 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
- disabled_any | 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 the paths.
disabled_any: Disable sending any path. | + | [        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_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. `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_path_selection.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. | | [    neighbors](## "router_bgp.address_family_path_selection.neighbors") | List, items: Dictionary | | | | | @@ -710,7 +710,7 @@ | [        activate](## "router_bgp.address_family_path_selection.neighbors.[].activate") | Boolean | | | | | | [        additional_paths](## "router_bgp.address_family_path_selection.neighbors.[].additional_paths") | Dictionary | | | | | | [          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
- disabled_any | 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 the paths.
disabled_any: Disable sending any path. | + | [          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_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. `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_path_selection.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. | | [    peer_groups](## "router_bgp.address_family_path_selection.peer_groups") | List, items: Dictionary | | | | | @@ -718,7 +718,7 @@ | [        activate](## "router_bgp.address_family_path_selection.peer_groups.[].activate") | Boolean | | | | | | [        additional_paths](## "router_bgp.address_family_path_selection.peer_groups.[].additional_paths") | Dictionary | | | | | | [          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
- disabled_any | 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 the paths.
disabled_any: Disable sending any path. | + | [          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_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. `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_path_selection.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. | | [  address_family_vpn_ipv4](## "router_bgp.address_family_vpn_ipv4") | Dictionary | | | | | @@ -785,7 +785,7 @@ | [          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
- disabled_any | 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 the paths.
disabled_any: Disable sending any path. | + | [          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_ecmp_limit](## "router_bgp.vrfs.[].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.vrfs.[].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. | | [      rd](## "router_bgp.vrfs.[].rd") | String | | | | Route distinguisher. | @@ -878,7 +878,7 @@ | [          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
- disabled_any | 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 the paths.
disabled_any: Disable sending any path. | + | [            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_ecmp_limit](## "router_bgp.vrfs.[].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.vrfs.[].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. | | [          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. | @@ -911,7 +911,7 @@ | [            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
- disabled_any | 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 the paths.
disabled_any: Disable sending any path. | + | [            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_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. `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.vrfs.[].address_family_ipv4.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. | | [          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. | @@ -930,7 +930,7 @@ | [                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
- disabled_any | 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 the paths.
disabled_any: Disable sending any path. | + | [              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_ecmp_limit](## "router_bgp.vrfs.[].address_family_ipv4.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.vrfs.[].address_family_ipv4.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. | | [        networks](## "router_bgp.vrfs.[].address_family_ipv4.networks") | List, items: Dictionary | | | | | @@ -951,7 +951,7 @@ | [            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
- disabled_any | 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 the paths.
disabled_any: Disable sending any path. | + | [            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_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. `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.vrfs.[].address_family_ipv6.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. | | [          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. | @@ -966,7 +966,7 @@ | [            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
- disabled_any | 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 the paths.
disabled_any: Disable sending any path. | + | [              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_ecmp_limit](## "router_bgp.vrfs.[].address_family_ipv6.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.vrfs.[].address_family_ipv6.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. | | [        networks](## "router_bgp.vrfs.[].address_family_ipv6.networks") | List, items: Dictionary | | | | | @@ -1125,9 +1125,8 @@ # backup: Best path and installed backup path. # ecmp: All paths in best path ECMP group. # limit: Limit to n eligible paths. - # disabled: Disable sending the paths. - # disabled_any: Disable sending any path. - send: + # 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: @@ -1636,9 +1635,8 @@ # backup: Best path and installed backup path. # ecmp: All paths in best path ECMP group. # limit: Limit to n eligible paths. - # disabled: Disable sending the paths. - # disabled_any: Disable sending any path. - send: + # 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: @@ -1688,9 +1686,8 @@ # backup: Best path and installed backup path. # ecmp: All paths in best path ECMP group. # limit: Limit to n eligible paths. - # disabled: Disable sending the paths. - # disabled_any: Disable sending any path. - send: + # 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: @@ -1754,9 +1751,8 @@ # backup: Best path and installed backup path. # ecmp: All paths in best path ECMP group. # limit: Limit to n eligible paths. - # disabled: Disable sending the paths. - # disabled_any: Disable sending any path. - send: + # 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: @@ -1804,9 +1800,8 @@ # backup: Best path and installed backup path. # ecmp: All paths in best path ECMP group. # limit: Limit to n eligible paths. - # disabled: Disable sending the paths. - # disabled_any: Disable sending any path. - send: + # 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: @@ -1859,9 +1854,8 @@ # backup: Best path and installed backup path. # ecmp: All paths in best path ECMP group. # limit: Limit to n eligible paths. - # disabled: Disable sending the paths. - # disabled_any: Disable sending any path. - send: + # 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: @@ -1911,9 +1905,8 @@ # backup: Best path and installed backup path. # ecmp: All paths in best path ECMP group. # limit: Limit to n eligible paths. - # disabled: Disable sending the paths. - # disabled_any: Disable sending any path. - send: + # 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: @@ -1952,9 +1945,8 @@ # backup: Best path and installed backup path. # ecmp: All paths in best path ECMP group. # limit: Limit to n eligible paths. - # disabled: Disable sending the paths. - # disabled_any: Disable sending any path. - send: + # 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: @@ -2017,9 +2009,8 @@ # backup: Best path and installed backup path. # ecmp: All paths in best path ECMP group. # limit: Limit to n eligible paths. - # disabled: Disable sending the paths. - # disabled_any: Disable sending any path. - send: + # 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: @@ -2108,9 +2099,8 @@ # backup: Best path and installed backup path. # ecmp: All paths in best path ECMP group. # limit: Limit to n eligible paths. - # disabled: Disable sending the paths. - # disabled_any: Disable sending any path. - send: + # 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: @@ -2307,9 +2297,8 @@ # backup: Best path and installed backup path. # ecmp: All paths in best path ECMP group. # limit: Limit to n eligible paths. - # disabled: Disable sending the paths. - # disabled_any: Disable sending any path. - send: + # 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: @@ -2354,9 +2343,8 @@ # backup: Best path and installed backup path. # ecmp: All paths in best path ECMP group. # limit: Limit to n eligible paths. - # disabled: Disable sending the paths. - # disabled_any: Disable sending any path. - send: + # 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: @@ -2399,9 +2387,8 @@ # backup: Best path and installed backup path. # ecmp: All paths in best path ECMP group. # limit: Limit to n eligible paths. - # disabled: Disable sending the paths. - # disabled_any: Disable sending any path. - send: + # 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: @@ -2551,9 +2538,8 @@ # backup: Best path and installed backup path. # ecmp: All paths in best path ECMP group. # limit: Limit to n eligible paths. - # disabled: Disable sending the paths. - # disabled_any: Disable sending any path. - send: + # 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: @@ -2573,9 +2559,8 @@ # backup: Best path and installed backup path. # ecmp: All paths in best path ECMP group. # limit: Limit to n eligible paths. - # disabled: Disable sending the paths. - # disabled_any: Disable sending any path. - send: + # 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: @@ -2597,9 +2582,8 @@ # backup: Best path and installed backup path. # ecmp: All paths in best path ECMP group. # limit: Limit to n eligible paths. - # disabled: Disable sending the paths. - # disabled_any: Disable sending any path. - send: + # 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: @@ -2742,9 +2726,8 @@ # backup: Best path and installed backup path. # ecmp: All paths in best path ECMP group. # limit: Limit to n eligible paths. - # disabled: Disable sending the paths. - # disabled_any: Disable sending any path. - send: + # 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: @@ -2952,9 +2935,8 @@ # backup: Best path and installed backup path. # ecmp: All paths in best path ECMP group. # limit: Limit to n eligible paths. - # disabled: Disable sending the paths. - # disabled_any: Disable sending any path. - send: + # 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: @@ -3020,9 +3002,8 @@ # backup: Best path and installed backup path. # ecmp: All paths in best path ECMP group. # limit: Limit to n eligible paths. - # disabled: Disable sending the paths. - # disabled_any: Disable sending any path. - send: + # 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: @@ -3069,9 +3050,8 @@ # backup: Best path and installed backup path. # ecmp: All paths in best path ECMP group. # limit: Limit to n eligible paths. - # disabled: Disable sending the paths. - # disabled_any: Disable sending any path. - send: + # 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: @@ -3118,9 +3098,8 @@ # backup: Best path and installed backup path. # ecmp: All paths in best path ECMP group. # limit: Limit to n eligible paths. - # disabled: Disable sending the paths. - # disabled_any: Disable sending any path. - send: + # 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: @@ -3163,9 +3142,8 @@ # backup: Best path and installed backup path. # ecmp: All paths in best path ECMP group. # limit: Limit to n eligible paths. - # disabled: Disable sending the paths. - # disabled_any: Disable sending any path. - send: + # 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: 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 a92bc3f169c..d14c5a6cb79 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 @@ -86,8 +86,6 @@ router bgp {{ router_bgp.as }} {% if router_bgp.bgp.additional_paths.send is arista.avd.defined %} {% if router_bgp.bgp.additional_paths.send == "disabled" %} no bgp additional-paths send -{% elif router_bgp.bgp.additional_paths.send == "disabled_any" %} - no bgp additional-paths send any {% elif router_bgp.bgp.additional_paths.send_ecmp_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_ecmp_limit }} {% elif router_bgp.bgp.additional_paths.send == "limit" %} @@ -629,8 +627,6 @@ router bgp {{ router_bgp.as }} {% 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 == 'disabled_any' %} - no bgp additional-paths send any {% elif router_bgp.address_family_evpn.bgp.additional_paths.send_ecmp_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_ecmp_limit }} {% elif router_bgp.address_family_evpn.bgp.additional_paths.send == 'limit' %} @@ -731,8 +727,6 @@ router bgp {{ router_bgp.as }} {% 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 == 'disabled_any' %} - no neighbor {{ peer_group.name }} additional-paths send any {% elif peer_group.additional_paths.send_ecmp_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_ecmp_limit }} {% elif peer_group.additional_paths.send == 'limit' %} @@ -777,8 +771,6 @@ router bgp {{ router_bgp.as }} {% 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 == 'disabled_any' %} - no neighbor {{ neighbor.ip_address }} additional-paths send any {% elif neighbor.additional_paths.send_ecmp_limit is arista.avd.defined and neighbor.additional_paths.send == 'ecmp' %} neighbor {{ neighbor.ip_address }} additional-paths send ecmp limit {{ neighbor.additional_paths.send_ecmp_limit }} {% elif neighbor.additional_paths.send == 'limit' %} @@ -906,8 +898,6 @@ router bgp {{ router_bgp.as }} {% 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 == 'disabled_any' %} - no bgp additional-paths send any {% elif router_bgp.address_family_ipv4.bgp.additional_paths.send_ecmp_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_ecmp_limit }} {% elif router_bgp.address_family_ipv4.bgp.additional_paths.send == 'limit' %} @@ -965,8 +955,6 @@ router bgp {{ router_bgp.as }} {% 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 == 'disabled_any' %} - no neighbor {{ peer_group.name }} additional-paths send any {% else %} {% if peer_group.additional_paths.send_ecmp_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_ecmp_limit %} @@ -1019,8 +1007,6 @@ router bgp {{ router_bgp.as }} {% 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 == 'disabled_any' %} - no neighbor {{ neighbor.ip_address }} additional-paths send any {% else %} {% if neighbor.additional_paths.send_ecmp_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_ecmp_limit %} @@ -1115,8 +1101,6 @@ router bgp {{ router_bgp.as }} {% if router_bgp.address_family_ipv4_labeled_unicast.bgp.additional_paths.send is arista.avd.defined %} {% 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 == 'disabled_any' %} - no bgp additional-paths send any {% elif 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" %} bgp additional-paths send ecmp 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" %} @@ -1177,8 +1161,6 @@ router bgp {{ router_bgp.as }} {% if peer.additional_paths.send is arista.avd.defined %} {% if peer.additional_paths.send == 'disabled' %} no neighbor {{ peer.name }} additional-paths send -{% elif peer.additional_paths.send == 'disabled_any' %} - no neighbor {{ peer.name }} additional-paths send any {% elif peer.additional_paths.send_ecmp_limit is arista.avd.defined and peer.additional_paths.send == "ecmp" %} neighbor {{ peer.name }} additional-paths send ecmp limit {{ peer.additional_paths.send_ecmp_limit }} {% elif peer.additional_paths.send == "limit" %} @@ -1272,8 +1254,6 @@ router bgp {{ router_bgp.as }} {% 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 == 'disabled_any' %} - no neighbor {{ neighbor.ip_address }} additional-paths send any {% elif neighbor.additional_paths.send_ecmp_limit is arista.avd.defined and neighbor.additional_paths.send == "ecmp" %} neighbor {{ neighbor.ip_address }} additional-paths send ecmp limit {{ neighbor.additional_paths.send_ecmp_limit }} {% elif neighbor.additional_paths.send == "limit" %} @@ -1489,8 +1469,6 @@ router bgp {{ router_bgp.as }} {% 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 == 'disabled_any' %} - no bgp additional-paths send any {% elif router_bgp.address_family_ipv6.bgp.additional_paths.send_ecmp_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_ecmp_limit }} {% elif router_bgp.address_family_ipv6.bgp.additional_paths.send == 'limit' %} @@ -1531,8 +1509,6 @@ router bgp {{ router_bgp.as }} {% 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 == 'disabled_any' %} - no neighbor {{ peer_group.name }} additional-paths send any {% else %} {% if peer_group.additional_paths.send_ecmp_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_ecmp_limit %} @@ -1580,8 +1556,6 @@ router bgp {{ router_bgp.as }} {% 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 == 'disabled_any' %} - no neighbor {{ neighbor.ip_address }} additional-paths send any {% else %} {% if neighbor.additional_paths.send_ecmp_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_ecmp_limit %} @@ -1790,8 +1764,6 @@ router bgp {{ router_bgp.as }} {% 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 == 'disabled_any' %} - no bgp additional-paths send any {% elif router_bgp.address_family_path_selection.bgp.additional_paths.send_ecmp_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_ecmp_limit }} {% elif router_bgp.address_family_path_selection.bgp.additional_paths.send == 'limit' %} @@ -1814,8 +1786,6 @@ router bgp {{ router_bgp.as }} {% 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 == 'disabled_any' %} - no neighbor {{ peer_group.name }} send any {% elif peer_group.additional_paths.send_ecmp_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_ecmp_limit }} {% elif peer_group.additional_paths.send == 'limit' %} @@ -1839,8 +1809,6 @@ router bgp {{ router_bgp.as }} {% 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 == 'disabled_any' %} - no neighbor {{ neighbor.ip_address }} additional-paths send any {% elif neighbor.additional_paths.send_ecmp_limit is arista.avd.defined and neighbor.additional_paths.send == 'ecmp' %} neighbor {{ neighbor.ip_address }} additional-paths send ecmp limit {{ neighbor.additional_paths.send_ecmp_limit }} {% elif neighbor.additional_paths.send == 'limit' %} @@ -2243,8 +2211,6 @@ router bgp {{ router_bgp.as }} {% 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 == 'disabled_any' %} - no neighbor {{ neighbor.ip_address }} additional-paths send any {% elif neighbor.additional_paths.send_ecmp_limit is arista.avd.defined and neighbor.additional_paths.send == 'ecmp' %} neighbor {{ neighbor.ip_address }} additional-paths send ecmp limit {{ neighbor.additional_paths.send_ecmp_limit }} {% elif neighbor.additional_paths.send == 'limit' %} @@ -2274,8 +2240,6 @@ router bgp {{ router_bgp.as }} {% 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 == 'disabled_any' %} - no bgp additional-paths send any {% elif vrf.bgp.additional_paths.send_ecmp_limit is arista.avd.defined and vrf.bgp.additional_paths.send == 'ecmp' %} bgp additional-paths send ecmp limit {{ vrf.bgp.additional_paths.send_ecmp_limit }} {% elif vrf.bgp.additional_paths.send == 'limit' %} @@ -2383,8 +2347,6 @@ router bgp {{ router_bgp.as }} {% 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 == 'disabled_any' %} - no bgp additional-paths send any {% elif vrf.address_family_ipv4.bgp.additional_paths.send_ecmp_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_ecmp_limit }} {% elif vrf.address_family_ipv4.bgp.additional_paths.send == 'limit' %} @@ -2423,8 +2385,6 @@ router bgp {{ router_bgp.as }} {% 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 == 'disabled_any' %} - no neighbor {{ neighbor.ip_address }} additional-paths send any {% elif neighbor.additional_paths.send_ecmp_limit is arista.avd.defined and neighbor.additional_paths.send == 'ecmp' %} neighbor {{ neighbor.ip_address }} additional-paths send ecmp limit {{ neighbor.additional_paths.send_ecmp_limit }} {% elif neighbor.additional_paths.send == 'limit' %} @@ -2558,8 +2518,6 @@ router bgp {{ router_bgp.as }} {% 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 == 'disabled_any' %} - no bgp additional-paths send any {% elif vrf.address_family_ipv6.bgp.additional_paths.send_ecmp_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_ecmp_limit }} {% elif vrf.address_family_ipv6.bgp.additional_paths.send == 'limit' %} @@ -2598,8 +2556,6 @@ router bgp {{ router_bgp.as }} {% 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 == 'disabled_any' %} - no neighbor {{ neighbor.ip_address }} additional-paths send any {% elif neighbor.additional_paths.send_ecmp_limit is arista.avd.defined and neighbor.additional_paths.send == 'ecmp' %} neighbor {{ neighbor.ip_address }} additional-paths send ecmp limit {{ neighbor.additional_paths.send_ecmp_limit }} {% elif neighbor.additional_paths.send == 'limit' %} 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 5ccb5ffa016..620ec176e5a 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 @@ -19795,16 +19795,13 @@ $defs: limit: Limit to n eligible paths. - disabled: Disable sending the paths. - - disabled_any: Disable sending any path.' + disabled: Disable sending any paths.' valid_values: - any - backup - ecmp - limit - disabled - - disabled_any send_ecmp_limit: type: int description: Amount of ECMP paths to send. `send` must be set to `ecmp` for 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 21def2497bb..aea59e57167 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,9 +17,8 @@ $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 the paths. - disabled_any: Disable sending any path. - valid_values: [ 'any', 'backup', 'ecmp', 'limit', 'disabled', 'disabled_any' ] + 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. From d4795c50cce7f344c8a6ecbdecc382caccf9408b Mon Sep 17 00:00:00 2001 From: Laxmikant Chintakindi Date: Tue, 1 Oct 2024 17:13:50 +0530 Subject: [PATCH 53/55] Remove disabled_any from doc template --- .../_eos_cli_config_gen/j2templates/documentation/router-bgp.j2 | 2 -- 1 file changed, 2 deletions(-) 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 000f0b20809..afd51e85ca1 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 @@ -58,8 +58,6 @@ ASN Notation: {{ router_bgp.as_notation | arista.avd.default('asplain') }} {% if router_bgp.bgp.additional_paths.send is arista.avd.defined %} {% if router_bgp.bgp.additional_paths.send == 'disabled' %} | no bgp additional-paths send | -{% elif router_bgp.bgp.additional_paths.send == 'disabled_any' %} -| no bgp additional-paths send any | {% elif router_bgp.bgp.additional_paths.send == 'any' %} | bgp additional-paths send any | {% elif router_bgp.bgp.additional_paths.send == 'backup' %} From a45da3061a9365f24d00146ba1b34c690bdf8af1 Mon Sep 17 00:00:00 2001 From: Laxmikant Chintakindi Date: Tue, 1 Oct 2024 19:42:04 +0530 Subject: [PATCH 54/55] Remove key send_ecmp_limit --- .../arista/avd/docs/porting-guides/5.x.x.md | 2 +- .../router-bgp-additional-paths.yaml | 2 +- .../inventory/host_vars/router-bgp-base.yml | 8 +- .../router-bgp-evpn-vpn-import-pruning.yml | 2 +- .../inventory/host_vars/router-bgp-evpn.yml | 2 +- .../router-bgp-ipv4-labeled-unicast.yml | 2 +- .../host_vars/router-bgp-path-selection.yaml | 6 +- .../router-bgp-vrf-address-families.yml | 4 +- .../docs/tables/router-bgp.md | 176 +++++------------- .../j2templates/documentation/router-bgp.j2 | 4 +- .../j2templates/eos/router-bgp.j2 | 100 +++++----- .../schema/eos_cli_config_gen.schema.yml | 13 +- .../defs_bgp_additional_paths.schema.yml | 9 +- 13 files changed, 117 insertions(+), 213 deletions(-) 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 9d02ea7a0a9..527b2e12adc 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 @@ -1332,7 +1332,7 @@ router_bgp: - send: - ecmp_limit: 100 + send: ecmp -+ send_ecmp_limit: 100 ++ send_limit: 100 <...> address_family_ipv6: bgp: 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 49d39379680..12222318dd9 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 @@ -111,7 +111,7 @@ router_bgp: receive: true install: true send: ecmp - send_ecmp_limit: 20 + send_limit: 20 peer_groups: - name: foo prefix_list_in: PL-BAR-v4-IN @@ -122,7 +122,7 @@ router_bgp: additional_paths: receive: true send: ecmp - send_ecmp_limit: 20 + send_limit: 20 prefix_list: PL1 neighbors: - ip_address: 192.0.2.1 @@ -173,7 +173,7 @@ router_bgp: additional_paths: receive: true send: ecmp - send_ecmp_limit: 20 + send_limit: 20 prefix_list: PL2 neighbors: - ip_address: 2001:db8::1 @@ -182,7 +182,7 @@ router_bgp: additional_paths: receive: true send: ecmp - send_ecmp_limit: 20 + send_limit: 20 prefix_list: PL2 - ip_address: 2001:db8::2 rcf_in: Address_Family_IPV6_In() 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 c4d8be3bcf4..1740e8e8419 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 @@ -36,7 +36,7 @@ router_bgp: bgp: additional_paths: send: ecmp - send_ecmp_limit: 20 + 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 1f0bdff88d7..8881c9841e6 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 @@ -128,7 +128,7 @@ router_bgp: activate: true additional_paths: send: ecmp - send_ecmp_limit: 42 + send_limit: 42 - name: ADDITIONAL-PATH-PG-5 activate: true additional_paths: 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 009ac21abe1..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 @@ -30,7 +30,7 @@ router_bgp: additional_paths: receive: true send: ecmp - send_ecmp_limit: 42 + send_limit: 42 peer_groups: - name: PATH-SELECTION-PG-1 activate: true @@ -49,7 +49,7 @@ router_bgp: activate: true additional_paths: send: ecmp - send_ecmp_limit: 42 + send_limit: 42 - name: PATH-SELECTION-PG-5 activate: true additional_paths: @@ -73,7 +73,7 @@ router_bgp: activate: true additional_paths: send: ecmp - send_ecmp_limit: 42 + send_limit: 42 - ip_address: 172.31.255.4 activate: true additional_paths: 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 56511bab830..d6c8c57ad3f 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 @@ -74,7 +74,7 @@ router_bgp: install_ecmp_primary: true receive: true send: ecmp - send_ecmp_limit: 4 + send_limit: 4 redistribute_internal: false neighbors: - ip_address: 1.2.3.4 @@ -212,7 +212,7 @@ router_bgp: additional_paths: receive: true send: ecmp - send_ecmp_limit: 24 + send_limit: 24 address_family_ipv4: bgp: additional_paths: 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 7128ac0a753..a66ff6430d3 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 @@ -44,8 +44,7 @@ | [    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 paths. | - | [      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_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". | @@ -300,8 +299,7 @@ | [        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_ecmp_limit](## "router_bgp.address_family_evpn.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_evpn.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_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. | @@ -319,8 +317,7 @@ | [        additional_paths](## "router_bgp.address_family_evpn.peer_groups.[].additional_paths") | Dictionary | | | | | | [          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_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. `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_evpn.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_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. | @@ -346,8 +343,7 @@ | [      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_ecmp_limit](## "router_bgp.address_family_evpn.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_evpn.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_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. | @@ -368,8 +364,7 @@ | [        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_ecmp_limit](## "router_bgp.address_family_ipv4.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.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_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. | @@ -387,8 +382,7 @@ | [          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_ecmp_limit](## "router_bgp.address_family_ipv4.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.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_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 | | | | @@ -410,8 +404,7 @@ | [          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_ecmp_limit](## "router_bgp.address_family_ipv4.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.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_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 | | | | | @@ -427,8 +420,7 @@ | [      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 paths. | - | [        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_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. | @@ -452,8 +444,7 @@ | [        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 paths. | - | [          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_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 | | | | | @@ -488,8 +479,7 @@ | [        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 paths. | - | [          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_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 | | | | | @@ -577,8 +567,7 @@ | [        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_ecmp_limit](## "router_bgp.address_family_ipv6.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_ipv6.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_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 | | | | | @@ -592,8 +581,7 @@ | [          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_ecmp_limit](## "router_bgp.address_family_ipv6.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_ipv6.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_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 | | | | | @@ -607,8 +595,7 @@ | [          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_ecmp_limit](## "router_bgp.address_family_ipv6.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_ipv6.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_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_routes](## "router_bgp.address_family_ipv6.redistribute_routes") | List, items: Dictionary | | | | | | [      - source_protocol](## "router_bgp.address_family_ipv6.redistribute_routes.[].source_protocol") | String | Required | | | | | [        route_map](## "router_bgp.address_family_ipv6.redistribute_routes.[].route_map") | String | | | | | @@ -703,24 +690,21 @@ | [      additional_paths](## "router_bgp.address_family_path_selection.bgp.additional_paths") | Dictionary | | | | | | [        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_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. `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_path_selection.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_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 | | | | | | [          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_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. `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_path_selection.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_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 | | | | | | [          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_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. `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_path_selection.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_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 | | | | | @@ -786,8 +770,7 @@ | [          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_ecmp_limit](## "router_bgp.vrfs.[].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.vrfs.[].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_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. | @@ -879,8 +862,7 @@ | [          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_ecmp_limit](## "router_bgp.vrfs.[].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.vrfs.[].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_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 | | | | | @@ -912,8 +894,7 @@ | [            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_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. `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.vrfs.[].address_family_ipv4.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_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 | | | | @@ -931,8 +912,7 @@ | [            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_ecmp_limit](## "router_bgp.vrfs.[].address_family_ipv4.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.vrfs.[].address_family_ipv4.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_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 | | | | | @@ -952,8 +932,7 @@ | [            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_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. `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.vrfs.[].address_family_ipv6.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_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 | | | | @@ -967,8 +946,7 @@ | [            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_ecmp_limit](## "router_bgp.vrfs.[].address_family_ipv6.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.vrfs.[].address_family_ipv6.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_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 | | | | | @@ -1128,10 +1106,7 @@ # 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. @@ -1638,10 +1613,7 @@ # 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: # Transport encapsulation for the neighbor. @@ -1689,10 +1661,7 @@ # 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: evpn_hostflap_detection: enabled: @@ -1754,10 +1723,7 @@ # 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: # BGP layer-2 in-place FEC operation. @@ -1803,10 +1769,7 @@ # 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. @@ -1857,10 +1820,7 @@ # 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: next_hop: address_family_ipv6: @@ -1908,10 +1868,7 @@ # 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: redistribute_routes: - source_protocol: @@ -1948,10 +1905,7 @@ # 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. @@ -2012,10 +1966,7 @@ # 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: @@ -2102,10 +2053,7 @@ # 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: @@ -2300,10 +2248,7 @@ # 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: peer_groups: @@ -2346,10 +2291,7 @@ # 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: neighbors: - ip_address: @@ -2390,10 +2332,7 @@ # 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: redistribute_routes: - source_protocol: @@ -2541,10 +2480,7 @@ # 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: neighbors: - ip_address: @@ -2562,10 +2498,7 @@ # 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: peer_groups: @@ -2585,10 +2518,7 @@ # 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: address_family_vpn_ipv4: domain_identifier: @@ -2729,10 +2659,7 @@ # 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: # Route distinguisher. @@ -2938,10 +2865,7 @@ # 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: neighbor_interfaces: @@ -3005,10 +2929,7 @@ # 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. @@ -3053,10 +2974,7 @@ # 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: networks: @@ -3101,10 +3019,7 @@ # 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. @@ -3145,10 +3060,7 @@ # 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: networks: 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 afd51e85ca1..7035bfa8203 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 @@ -62,8 +62,8 @@ ASN Notation: {{ router_bgp.as_notation | arista.avd.default('asplain') }} | bgp additional-paths send any | {% 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 == 'ecmp' %} -| bgp additional-paths send ecmp limit {{ router_bgp.bgp.additional_paths.send_ecmp_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 == '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 == 'limit' %} 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 d14c5a6cb79..542b8dec6ac 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 @@ -86,8 +86,8 @@ router bgp {{ router_bgp.as }} {% if router_bgp.bgp.additional_paths.send is arista.avd.defined %} {% if router_bgp.bgp.additional_paths.send == "disabled" %} no bgp additional-paths send -{% elif router_bgp.bgp.additional_paths.send_ecmp_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_ecmp_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 }} @@ -627,8 +627,8 @@ router bgp {{ router_bgp.as }} {% 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_ecmp_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_ecmp_limit }} +{% 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 }} @@ -642,8 +642,8 @@ router bgp {{ router_bgp.as }} 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 %} @@ -727,8 +727,8 @@ router bgp {{ router_bgp.as }} {% 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_ecmp_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_ecmp_limit }} +{% 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 }} @@ -771,8 +771,8 @@ router bgp {{ router_bgp.as }} {% 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_ecmp_limit is arista.avd.defined and neighbor.additional_paths.send == 'ecmp' %} - 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 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 }} @@ -898,8 +898,8 @@ router bgp {{ router_bgp.as }} {% 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_ecmp_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_ecmp_limit }} +{% 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 }} @@ -956,8 +956,8 @@ router bgp {{ router_bgp.as }} {% if peer_group.additional_paths.send == 'disabled' %} no neighbor {{ peer_group.name }} additional-paths send {% else %} -{% if peer_group.additional_paths.send_ecmp_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_ecmp_limit %} +{% 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 %} @@ -968,7 +968,9 @@ router bgp {{ router_bgp.as }} {% 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 %} @@ -1008,8 +1010,8 @@ router bgp {{ router_bgp.as }} {% if neighbor.additional_paths.send == 'disabled' %} no neighbor {{ neighbor.ip_address }} additional-paths send {% else %} -{% if neighbor.additional_paths.send_ecmp_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_ecmp_limit %} +{% 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 %} @@ -1020,7 +1022,9 @@ router bgp {{ router_bgp.as }} {% 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) %} @@ -1101,8 +1105,8 @@ router bgp {{ router_bgp.as }} {% if router_bgp.address_family_ipv4_labeled_unicast.bgp.additional_paths.send is arista.avd.defined %} {% 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_ecmp_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_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 == "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 }} @@ -1161,8 +1165,8 @@ router bgp {{ router_bgp.as }} {% if peer.additional_paths.send is arista.avd.defined %} {% if peer.additional_paths.send == 'disabled' %} no neighbor {{ peer.name }} additional-paths send -{% elif peer.additional_paths.send_ecmp_limit is arista.avd.defined and peer.additional_paths.send == "ecmp" %} - neighbor {{ peer.name }} additional-paths send ecmp limit {{ peer.additional_paths.send_ecmp_limit }} +{% 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 }} @@ -1254,8 +1258,8 @@ router bgp {{ router_bgp.as }} {% 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_ecmp_limit is arista.avd.defined and neighbor.additional_paths.send == "ecmp" %} - 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 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 }} @@ -1469,8 +1473,8 @@ router bgp {{ router_bgp.as }} {% 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_ecmp_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_ecmp_limit }} +{% 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 }} @@ -1510,8 +1514,8 @@ router bgp {{ router_bgp.as }} {% if peer_group.additional_paths.send == 'disabled' %} no neighbor {{ peer_group.name }} additional-paths send {% else %} -{% if peer_group.additional_paths.send_ecmp_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_ecmp_limit %} +{% 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 %} @@ -1522,7 +1526,9 @@ router bgp {{ router_bgp.as }} {% 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 %} @@ -1557,8 +1563,8 @@ router bgp {{ router_bgp.as }} {% if neighbor.additional_paths.send == 'disabled' %} no neighbor {{ neighbor.ip_address }} additional-paths send {% else %} -{% if neighbor.additional_paths.send_ecmp_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_ecmp_limit %} +{% 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 %} @@ -1569,7 +1575,9 @@ router bgp {{ router_bgp.as }} {% 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 %} @@ -1764,8 +1772,8 @@ router bgp {{ router_bgp.as }} {% 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_ecmp_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_ecmp_limit }} +{% 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 }} @@ -1786,8 +1794,8 @@ router bgp {{ router_bgp.as }} {% 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_ecmp_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_ecmp_limit }} +{% 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 }} @@ -1809,8 +1817,8 @@ router bgp {{ router_bgp.as }} {% 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_ecmp_limit is arista.avd.defined and neighbor.additional_paths.send == 'ecmp' %} - 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 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 }} @@ -2211,8 +2219,8 @@ router bgp {{ router_bgp.as }} {% 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_ecmp_limit is arista.avd.defined and neighbor.additional_paths.send == 'ecmp' %} - 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 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 }} @@ -2240,8 +2248,8 @@ router bgp {{ router_bgp.as }} {% 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_ecmp_limit is arista.avd.defined and vrf.bgp.additional_paths.send == 'ecmp' %} - bgp additional-paths send ecmp limit {{ vrf.bgp.additional_paths.send_ecmp_limit }} +{% 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 }} @@ -2347,8 +2355,8 @@ router bgp {{ router_bgp.as }} {% 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_ecmp_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_ecmp_limit }} +{% 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 }} @@ -2385,8 +2393,8 @@ router bgp {{ router_bgp.as }} {% 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_ecmp_limit is arista.avd.defined and neighbor.additional_paths.send == 'ecmp' %} - 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 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 }} @@ -2518,8 +2526,8 @@ router bgp {{ router_bgp.as }} {% 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_ecmp_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_ecmp_limit }} +{% 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 }} @@ -2556,8 +2564,8 @@ router bgp {{ router_bgp.as }} {% 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_ecmp_limit is arista.avd.defined and neighbor.additional_paths.send == 'ecmp' %} - 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 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 }} 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 620ec176e5a..e48500bb0a8 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 @@ -19802,19 +19802,10 @@ $defs: - 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 aea59e57167..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 @@ -19,16 +19,9 @@ $defs: limit: Limit to n eligible paths. 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 From 7d8a1c14715d30a9b07b1c5bb6f504697acf0d65 Mon Sep 17 00:00:00 2001 From: Laxmikant Chintakindi Date: Thu, 3 Oct 2024 11:24:48 +0530 Subject: [PATCH 55/55] Fix doc template. --- .../_eos_cli_config_gen/j2templates/documentation/router-bgp.j2 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 fd4293e85e5..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 @@ -67,7 +67,7 @@ ASN Notation: {{ router_bgp.as_notation | arista.avd.default('asplain') }} {% 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 == 'limit' %} -| bgp additional-paths send {{ 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) %}