diff --git a/ansible_collections/arista/avd/examples/cv-pathfinder/intended/structured_configs/site1-wan1.yml b/ansible_collections/arista/avd/examples/cv-pathfinder/intended/structured_configs/site1-wan1.yml
index 26ebe38fe11..1184ca94d6e 100644
--- a/ansible_collections/arista/avd/examples/cv-pathfinder/intended/structured_configs/site1-wan1.yml
+++ b/ansible_collections/arista/avd/examples/cv-pathfinder/intended/structured_configs/site1-wan1.yml
@@ -334,9 +334,9 @@ ethernet_interfaces:
switchport:
enabled: false
description: REGION1-INTERNET-CORP_inet-site1-wan1_inet-cloud_Ethernet5
- access_group_in: ACL-INTERNET-IN_Ethernet4
flow_tracker:
hardware: FLOW-TRACKER
+ access_group_in: ACL-INTERNET-IN_Ethernet4
loopback_interfaces:
- name: Loopback0
description: ROUTER_ID
diff --git a/ansible_collections/arista/avd/examples/cv-pathfinder/intended/structured_configs/site1-wan2.yml b/ansible_collections/arista/avd/examples/cv-pathfinder/intended/structured_configs/site1-wan2.yml
index 6cd61b9e2be..4bb66fe57cb 100644
--- a/ansible_collections/arista/avd/examples/cv-pathfinder/intended/structured_configs/site1-wan2.yml
+++ b/ansible_collections/arista/avd/examples/cv-pathfinder/intended/structured_configs/site1-wan2.yml
@@ -334,9 +334,9 @@ ethernet_interfaces:
switchport:
enabled: false
description: REGION1-INTERNET-CORP_inet-site1-wan2_inet-cloud_Ethernet6
- access_group_in: ACL-INTERNET-IN_Ethernet4
flow_tracker:
hardware: FLOW-TRACKER
+ access_group_in: ACL-INTERNET-IN_Ethernet4
dhcp_client_accept_default_route: true
loopback_interfaces:
- name: Loopback0
diff --git a/ansible_collections/arista/avd/examples/cv-pathfinder/intended/structured_configs/site2-wan2.yml b/ansible_collections/arista/avd/examples/cv-pathfinder/intended/structured_configs/site2-wan2.yml
index b95710ba067..22e9e1adb78 100644
--- a/ansible_collections/arista/avd/examples/cv-pathfinder/intended/structured_configs/site2-wan2.yml
+++ b/ansible_collections/arista/avd/examples/cv-pathfinder/intended/structured_configs/site2-wan2.yml
@@ -365,9 +365,9 @@ ethernet_interfaces:
switchport:
enabled: false
description: REGION2-INTERNET-CORP_inet-site2-wan2_inet-cloud_Ethernet7
- access_group_in: ACL-INTERNET-IN_Ethernet4
flow_tracker:
hardware: FLOW-TRACKER
+ access_group_in: ACL-INTERNET-IN_Ethernet4
- name: Ethernet5
switchport:
enabled: false
diff --git a/ansible_collections/arista/avd/examples/cv-pathfinder/intended/structured_configs/site3-wan1.yml b/ansible_collections/arista/avd/examples/cv-pathfinder/intended/structured_configs/site3-wan1.yml
index a5c8da00bd0..5e33a03c44d 100644
--- a/ansible_collections/arista/avd/examples/cv-pathfinder/intended/structured_configs/site3-wan1.yml
+++ b/ansible_collections/arista/avd/examples/cv-pathfinder/intended/structured_configs/site3-wan1.yml
@@ -223,9 +223,9 @@ ethernet_interfaces:
switchport:
enabled: false
description: REGION2-INTERNET-CORP_inet-site3-wan1_inet-cloud_Ethernet8
- access_group_in: ACL-INTERNET-IN_Ethernet4
flow_tracker:
hardware: FLOW-TRACKER
+ access_group_in: ACL-INTERNET-IN_Ethernet4
dhcp_client_accept_default_route: true
loopback_interfaces:
- name: Loopback0
diff --git a/ansible_collections/arista/avd/molecule/eos_designs_negative_unit_tests/inventory/host_vars/ipv4-acl-in-missing-on-wan-interface.yml b/ansible_collections/arista/avd/molecule/eos_designs_negative_unit_tests/inventory/host_vars/ipv4-acl-in-missing-on-wan-interface.yml
index 0c2656b2281..5930aa1e75e 100644
--- a/ansible_collections/arista/avd/molecule/eos_designs_negative_unit_tests/inventory/host_vars/ipv4-acl-in-missing-on-wan-interface.yml
+++ b/ansible_collections/arista/avd/molecule/eos_designs_negative_unit_tests/inventory/host_vars/ipv4-acl-in-missing-on-wan-interface.yml
@@ -24,4 +24,4 @@ wan_path_groups:
expected_error_message: >-
'ipv4_acl_in' must be set on WAN interfaces where 'wan_carrier' is set,
- unless the carrier is configured as 'trusted' under 'wan_carriers'. 'ipv4_acl_in' is missing on interface 'Ethernet1'.
+ unless the carrier is configured as 'trusted' under 'wan_carriers'. 'ipv4_acl_in' is missing on L3 interface 'Ethernet1'.
diff --git a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/configs/node-type-l3-port-channels.cfg b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/configs/node-type-l3-port-channels.cfg
new file mode 100644
index 00000000000..a10f3398080
--- /dev/null
+++ b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/configs/node-type-l3-port-channels.cfg
@@ -0,0 +1,122 @@
+!
+no enable password
+no aaa root
+!
+vlan internal order ascending range 1006 1199
+!
+flow tracking sampled
+ sample 10000
+ tracker FLOW-TRACKER
+ record export on inactive timeout 70000
+ record export on interval 300000
+ exporter CV-TELEMETRY
+ collector 127.0.0.1
+ local interface Loopback0
+ template interval 3600000
+ no shutdown
+!
+transceiver qsfp default-mode 4x10G
+!
+service routing protocols model multi-agent
+!
+hostname node-type-l3-port-channels
+!
+spanning-tree mode none
+!
+vrf instance MGMT
+!
+management api http-commands
+ protocol https
+ no shutdown
+ !
+ vrf MGMT
+ no shutdown
+!
+interface Port-Channel2
+ description Cybercast_101_peer1_Port-Channel10
+ no shutdown
+ no switchport
+ flow tracker sampled FLOW-TRACKER
+ ip address 192.168.1.102/31
+ service-profile TEST-QOS-PROFILE1
+!
+interface Port-Channel5
+ description StreamFast_102_peer2_Port-Channel15
+ no shutdown
+ no switchport
+ ip address 192.168.1.105/31
+ service-policy type qos input TEST_POLICY
+ service-profile TEST-QOS-PROFILE1
+ ! TEST RAW_EOS_CLI
+
+!
+interface Port-Channel5.100
+ description ExtremeCable_105_peer2_Port-Channel15
+ no shutdown
+ encapsulation dot1q vlan 108
+ flow tracker sampled FLOW-TRACKER
+ ip address 192.168.100.115/31
+ service-profile TEST-QOS-PROFILE2
+!
+interface Ethernet1
+ description Cybercast_101_peerDevice1_Ethernet11
+ no shutdown
+ speed forced 10000full
+ no switchport
+ channel-group 2 mode active
+!
+interface Ethernet1/4
+ description StreamFast_102_peerDevice2_Ethernet1/12
+ no shutdown
+ speed forced 10000full
+ no switchport
+ channel-group 5 mode passive
+!
+interface Ethernet1/5
+ description StreamFast_102_peer2_Port-Channel15
+ no shutdown
+ speed forced 10000full
+ no switchport
+ channel-group 5 mode passive
+!
+interface Ethernet2
+ description Cybercast_101_peer1_Port-Channel10
+ no shutdown
+ speed forced 10000full
+ no switchport
+ channel-group 2 mode active
+!
+interface Ethernet3
+ description Custom eth3 description
+ no shutdown
+ no switchport
+ channel-group 2 mode active
+!
+interface Loopback0
+ description ROUTER_ID
+ no shutdown
+ ip address 2.3.4.1/32
+!
+ip routing
+no ip routing vrf MGMT
+!
+ip prefix-list PL-LOOPBACKS-EVPN-OVERLAY
+ seq 10 permit 2.3.4.5/24 eq 32
+!
+route-map RM-CONN-2-BGP permit 10
+ match ip address prefix-list PL-LOOPBACKS-EVPN-OVERLAY
+!
+router bgp 65005
+ router-id 2.3.4.1
+ update wait-install
+ no bgp default ipv4-unicast
+ maximum-paths 4 ecmp 4
+ neighbor IPv4-UNDERLAY-PEERS peer group
+ neighbor IPv4-UNDERLAY-PEERS send-community
+ neighbor IPv4-UNDERLAY-PEERS maximum-routes 12000
+ redistribute connected route-map RM-CONN-2-BGP
+ !
+ address-family ipv4
+ neighbor IPv4-UNDERLAY-PEERS activate
+!
+end
diff --git a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/node-type-l3-port-channels.yml b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/node-type-l3-port-channels.yml
new file mode 100644
index 00000000000..6839d83f5b7
--- /dev/null
+++ b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/node-type-l3-port-channels.yml
@@ -0,0 +1,181 @@
+hostname: node-type-l3-port-channels
+is_deployed: true
+router_bgp:
+ as: '65005'
+ router_id: 2.3.4.1
+ bgp:
+ default:
+ ipv4_unicast: false
+ maximum_paths:
+ paths: 4
+ ecmp: 4
+ redistribute:
+ connected:
+ enabled: true
+ route_map: RM-CONN-2-BGP
+ updates:
+ wait_install: true
+ peer_groups:
+ - name: IPv4-UNDERLAY-PEERS
+ type: ipv4
+ maximum_routes: 12000
+ send_community: all
+ address_family_ipv4:
+ peer_groups:
+ - name: IPv4-UNDERLAY-PEERS
+ activate: true
+service_routing_protocols_model: multi-agent
+ip_routing: true
+vlan_internal_order:
+ allocation: ascending
+ range:
+ beginning: 1006
+ ending: 1199
+aaa_root:
+ disabled: true
+config_end: true
+enable_password:
+ disabled: true
+transceiver_qsfp_default_mode_4x10: true
+spanning_tree:
+ mode: none
+vrfs:
+- name: MGMT
+ ip_routing: false
+management_api_http:
+ enable_vrfs:
+ - name: MGMT
+ enable_https: true
+ethernet_interfaces:
+- name: Ethernet1
+ description: Cybercast_101_peerDevice1_Ethernet11
+ peer_type: l3_port_channel
+ peer: peerDevice1
+ peer_interface: Ethernet11
+ shutdown: false
+ switchport:
+ enabled: false
+ speed: forced 10000full
+ channel_group:
+ id: 2
+ mode: active
+- name: Ethernet2
+ description: Cybercast_101_peer1_Port-Channel10
+ peer_type: l3_port_channel
+ peer: peer1
+ peer_interface: Port-Channel10
+ shutdown: false
+ switchport:
+ enabled: false
+ speed: forced 10000full
+ channel_group:
+ id: 2
+ mode: active
+- name: Ethernet3
+ description: Custom eth3 description
+ peer_type: l3_port_channel
+ peer: peer1
+ peer_interface: Port-Channel10
+ shutdown: false
+ switchport:
+ enabled: false
+ channel_group:
+ id: 2
+ mode: active
+- name: Ethernet1/4
+ description: StreamFast_102_peerDevice2_Ethernet1/12
+ peer_type: l3_port_channel
+ peer: peerDevice2
+ peer_interface: Ethernet1/12
+ shutdown: false
+ switchport:
+ enabled: false
+ speed: forced 10000full
+ channel_group:
+ id: 5
+ mode: passive
+- name: Ethernet1/5
+ description: StreamFast_102_peer2_Port-Channel15
+ peer_type: l3_port_channel
+ peer: peer2
+ peer_interface: Port-Channel15
+ shutdown: false
+ switchport:
+ enabled: false
+ speed: forced 10000full
+ channel_group:
+ id: 5
+ mode: passive
+port_channel_interfaces:
+- name: Port-Channel2
+ peer_type: l3_port_channel
+ peer: peer1
+ peer_interface: Port-Channel10
+ ip_address: 192.168.1.102/31
+ shutdown: false
+ switchport:
+ enabled: false
+ description: Cybercast_101_peer1_Port-Channel10
+ service_profile: TEST-QOS-PROFILE1
+ flow_tracker:
+ sampled: FLOW-TRACKER
+- name: Port-Channel5
+ peer_type: l3_port_channel
+ peer: peer2
+ peer_interface: Port-Channel15
+ ip_address: 192.168.1.105/31
+ shutdown: false
+ switchport:
+ enabled: false
+ description: StreamFast_102_peer2_Port-Channel15
+ service_profile: TEST-QOS-PROFILE1
+ eos_cli: '! TEST RAW_EOS_CLI
+
+ '
+ service_policy:
+ qos:
+ input: TEST_POLICY
+- name: Port-Channel5.100
+ peer_type: l3_port_channel
+ peer: peer2
+ peer_interface: Port-Channel15
+ ip_address: 192.168.100.115/31
+ shutdown: false
+ description: ExtremeCable_105_peer2_Port-Channel15
+ service_profile: TEST-QOS-PROFILE2
+ flow_tracker:
+ sampled: FLOW-TRACKER
+ encapsulation_dot1q:
+ vlan: 108
+loopback_interfaces:
+- name: Loopback0
+ description: ROUTER_ID
+ shutdown: false
+ ip_address: 2.3.4.1/32
+prefix_lists:
+- name: PL-LOOPBACKS-EVPN-OVERLAY
+ sequence_numbers:
+ - sequence: 10
+ action: permit 2.3.4.5/24 eq 32
+route_maps:
+- name: RM-CONN-2-BGP
+ sequence_numbers:
+ - sequence: 10
+ type: permit
+ match:
+ - ip address prefix-list PL-LOOPBACKS-EVPN-OVERLAY
+flow_tracking:
+ sampled:
+ sample: 10000
+ trackers:
+ - name: FLOW-TRACKER
+ record_export:
+ on_inactive_timeout: 70000
+ on_interval: 300000
+ exporters:
+ - name: CV-TELEMETRY
+ collector:
+ host: 127.0.0.1
+ local_interface: Loopback0
+ template_interval: 3600000
+ shutdown: false
diff --git a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/inventory/host_vars/node-type-l3-port-channels.yml b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/inventory/host_vars/node-type-l3-port-channels.yml
new file mode 100644
index 00000000000..90f403c6a93
--- /dev/null
+++ b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/inventory/host_vars/node-type-l3-port-channels.yml
@@ -0,0 +1,73 @@
+---
+type: spine
+spine:
+ nodes:
+ - name: node-type-l3-port-channels
+ id: 1
+ evpn_role: none
+ loopback_ipv4_pool: 2.3.4.5/24
+ bgp_as: 65005
+ l3_port_channels:
+ - # Port-Channel with 3 member ports
+ name: Port-Channel2
+ mode: active
+ member_interfaces:
+ - name: Ethernet1
+ peer: peerDevice1
+ peer_interface: Ethernet11
+ speed: "forced 10000full"
+ - # peer, peer_interface not set, use one from parent L3 Port-Channel
+ name: Ethernet2
+ speed: "forced 10000full"
+ - # one with structured config for member port (TO ADD)
+ name: Ethernet3
+ description: "Custom eth3 description"
+ ip_address: 192.168.1.102/31
+ peer: peer1
+ peer_port_channel: Port-Channel10
+ peer_ip: 192.168.1.10
+ static_routes:
+ - prefix: 0.0.0.0/0
+ qos_profile: TEST-QOS-PROFILE1
+ wan_carrier: Cybercast
+ wan_circuit_id: 101
+ flow_tracking:
+ enabled: true
+ - # Port-Channel with 2 member ports
+ name: Port-Channel5
+ mode: passive
+ member_interfaces:
+ - name: Ethernet1/4
+ peer: peerDevice2
+ peer_interface: Ethernet1/12
+ speed: "forced 10000full"
+ - # peer, peer_interface not set, use one from parent L3 Port-Channel
+ name: Ethernet1/5
+ speed: "forced 10000full"
+ ip_address: 192.168.1.105/31
+ peer: peer2
+ peer_port_channel: Port-Channel15
+ peer_ip: 192.168.1.15
+ qos_profile: TEST-QOS-PROFILE1
+ wan_carrier: StreamFast
+ wan_circuit_id: 102
+ flow_tracking:
+ enabled: false
+ structured_config:
+ service_policy:
+ qos:
+ input: TEST_POLICY
+ raw_eos_cli: |
+ ! TEST RAW_EOS_CLI
+ - # sub-interface for Port-Channel
+ name: Port-Channel5.100
+ encapsulation_dot1q_vlan: 108
+ ip_address: 192.168.100.115/31
+ peer: peer2
+ peer_port_channel: Port-Channel15
+ peer_ip: 192.168.1.15
+ qos_profile: TEST-QOS-PROFILE2
+ wan_carrier: ExtremeCable
+ wan_circuit_id: 105
+ flow_tracking:
+ enabled: true
diff --git a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/inventory/hosts.yml b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/inventory/hosts.yml
index 62a5b1e8ca0..032556ab7a4 100644
--- a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/inventory/hosts.yml
+++ b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/inventory/hosts.yml
@@ -50,6 +50,7 @@ all:
spanning-tree-mode-rapid-pvst:
node-type-l3-interfaces:
node-type-l3-interfaces-bgp:
+ node-type-l3-port-channels:
ipv4-acls:
only-connected-endpoints:
platform_settings:
diff --git a/ansible_collections/arista/avd/roles/eos_designs/docs/tables/management-flow-tracking-settings.md b/ansible_collections/arista/avd/roles/eos_designs/docs/tables/management-flow-tracking-settings.md
index 5eddb2ca443..27281796fe2 100644
--- a/ansible_collections/arista/avd/roles/eos_designs/docs/tables/management-flow-tracking-settings.md
+++ b/ansible_collections/arista/avd/roles/eos_designs/docs/tables/management-flow-tracking-settings.md
@@ -29,6 +29,9 @@
| [ l3_interfaces](## "fabric_flow_tracking.l3_interfaces") | Dictionary | | | | Enable flow-tracking on all node.l3_interfaces and network-services tenants.vrfs.l3_interfaces. |
| [ enabled](## "fabric_flow_tracking.l3_interfaces.enabled") | Boolean | | `False` | | |
| [ name](## "fabric_flow_tracking.l3_interfaces.name") | String | | `FLOW-TRACKER` | | Flow tracker name as defined in flow_tracking_settings. |
+ | [ l3_port_channels](## "fabric_flow_tracking.l3_port_channels") | Dictionary | | | | Enable flow-tracking on all node.l3_port_channels. |
+ | [ enabled](## "fabric_flow_tracking.l3_port_channels.enabled") | Boolean | | `False` | | |
+ | [ name](## "fabric_flow_tracking.l3_port_channels.name") | String | | `FLOW-TRACKER` | | Flow tracker name as defined in flow_tracking_settings. |
| [ dps_interfaces](## "fabric_flow_tracking.dps_interfaces") | Dictionary | | | | Enable flow-tracking on all dps_interfaces. |
| [ enabled](## "fabric_flow_tracking.dps_interfaces.enabled") | Boolean | | `True` | | |
| [ name](## "fabric_flow_tracking.dps_interfaces.name") | String | | `FLOW-TRACKER` | | Flow tracker name as defined in flow_tracking_settings. |
@@ -124,6 +127,13 @@
# Flow tracker name as defined in flow_tracking_settings.
name:
+ # Enable flow-tracking on all node.l3_port_channels.
+ l3_port_channels:
+ enabled:
+
+ # Flow tracker name as defined in flow_tracking_settings.
+ name:
+
# Enable flow-tracking on all dps_interfaces.
dps_interfaces:
enabled:
diff --git a/ansible_collections/arista/avd/roles/eos_designs/docs/tables/node-type-l3-interfaces-configuration.md b/ansible_collections/arista/avd/roles/eos_designs/docs/tables/node-type-l3-interfaces-configuration.md
index 8c5ff47281d..0c16c173c87 100644
--- a/ansible_collections/arista/avd/roles/eos_designs/docs/tables/node-type-l3-interfaces-configuration.md
+++ b/ansible_collections/arista/avd/roles/eos_designs/docs/tables/node-type-l3-interfaces-configuration.md
@@ -9,7 +9,7 @@
| -------- | ---- | -------- | ------- | ------------------ | ----------- |
| [<node_type_keys.key>](## "") | Dictionary | | | | |
| [ defaults](## ".defaults") | Dictionary | | | | Define variables for all nodes of this type. |
- | [ l3_interfaces](## ".defaults.l3_interfaces") | List, items: Dictionary | | | | L3 Interfaces to configure on the node.
Used to define the node for WAN interfaces when `wan_carrier` is set. |
+ | [ l3_interfaces](## ".defaults.l3_interfaces") | List, items: Dictionary | | | | L3 Interfaces to configure on the node. |
| [ - profile](## ".defaults.l3_interfaces.[].profile") | String | | | | L3 interface profile name. Profile defined under `l3_interface_profiles`.
|
| [ name](## ".defaults.l3_interfaces.[].name") | String | Required, Unique | | Pattern: `Ethernet[\d/]+(.[\d]+)?` | Ethernet interface name like 'Ethernet2' or subinterface name like 'Ethernet2.42'.
For a subinterface, the parent physical interface is automatically created. |
| [ description](## ".defaults.l3_interfaces.[].description") | String | | | | Interface description.
If not set a default description will be configured with '[[ ]]'. |
@@ -48,7 +48,7 @@
| [ - group](## ".node_groups.[].group") | String | Required, Unique | | | The Node Group Name is used for MLAG domain unless set with 'mlag_domain_id'.
The Node Group Name is also used for peer description on downstream switches' uplinks.
|
| [ nodes](## ".node_groups.[].nodes") | List, items: Dictionary | | | | Define variables per node. |
| [ - name](## ".node_groups.[].nodes.[].name") | String | Required, Unique | | | The Node Name is used as "hostname". |
- | [ l3_interfaces](## ".node_groups.[].nodes.[].l3_interfaces") | List, items: Dictionary | | | | L3 Interfaces to configure on the node.
Used to define the node for WAN interfaces when `wan_carrier` is set. |
+ | [ l3_interfaces](## ".node_groups.[].nodes.[].l3_interfaces") | List, items: Dictionary | | | | L3 Interfaces to configure on the node. |
| [ - profile](## ".node_groups.[].nodes.[].l3_interfaces.[].profile") | String | | | | L3 interface profile name. Profile defined under `l3_interface_profiles`.
|
| [ name](## ".node_groups.[].nodes.[].l3_interfaces.[].name") | String | Required, Unique | | Pattern: `Ethernet[\d/]+(.[\d]+)?` | Ethernet interface name like 'Ethernet2' or subinterface name like 'Ethernet2.42'.
For a subinterface, the parent physical interface is automatically created. |
| [ description](## ".node_groups.[].nodes.[].l3_interfaces.[].description") | String | | | | Interface description.
If not set a default description will be configured with '[[ ]]'. |
@@ -83,7 +83,7 @@
| [ enabled](## ".node_groups.[].nodes.[].l3_interfaces.[].flow_tracking.enabled") | Boolean | | | | |
| [ name](## ".node_groups.[].nodes.[].l3_interfaces.[].flow_tracking.name") | String | | | | Flow tracker name as defined in flow_tracking_settings. |
| [ structured_config](## ".node_groups.[].nodes.[].l3_interfaces.[].structured_config") | Dictionary | | | | Custom structured config for the Ethernet interface. |
- | [ l3_interfaces](## ".node_groups.[].l3_interfaces") | List, items: Dictionary | | | | L3 Interfaces to configure on the node.
Used to define the node for WAN interfaces when `wan_carrier` is set. |
+ | [ l3_interfaces](## ".node_groups.[].l3_interfaces") | List, items: Dictionary | | | | L3 Interfaces to configure on the node. |
| [ - profile](## ".node_groups.[].l3_interfaces.[].profile") | String | | | | L3 interface profile name. Profile defined under `l3_interface_profiles`.
|
| [ name](## ".node_groups.[].l3_interfaces.[].name") | String | Required, Unique | | Pattern: `Ethernet[\d/]+(.[\d]+)?` | Ethernet interface name like 'Ethernet2' or subinterface name like 'Ethernet2.42'.
For a subinterface, the parent physical interface is automatically created. |
| [ description](## ".node_groups.[].l3_interfaces.[].description") | String | | | | Interface description.
If not set a default description will be configured with '[[ ]]'. |
@@ -120,7 +120,7 @@
| [ structured_config](## ".node_groups.[].l3_interfaces.[].structured_config") | Dictionary | | | | Custom structured config for the Ethernet interface. |
| [ nodes](## ".nodes") | List, items: Dictionary | | | | Define variables per node. |
| [ - name](## ".nodes.[].name") | String | Required, Unique | | | The Node Name is used as "hostname". |
- | [ l3_interfaces](## ".nodes.[].l3_interfaces") | List, items: Dictionary | | | | L3 Interfaces to configure on the node.
Used to define the node for WAN interfaces when `wan_carrier` is set. |
+ | [ l3_interfaces](## ".nodes.[].l3_interfaces") | List, items: Dictionary | | | | L3 Interfaces to configure on the node. |
| [ - profile](## ".nodes.[].l3_interfaces.[].profile") | String | | | | L3 interface profile name. Profile defined under `l3_interface_profiles`.
|
| [ name](## ".nodes.[].l3_interfaces.[].name") | String | Required, Unique | | Pattern: `Ethernet[\d/]+(.[\d]+)?` | Ethernet interface name like 'Ethernet2' or subinterface name like 'Ethernet2.42'.
For a subinterface, the parent physical interface is automatically created. |
| [ description](## ".nodes.[].l3_interfaces.[].description") | String | | | | Interface description.
If not set a default description will be configured with '[[ ]]'. |
@@ -200,7 +200,6 @@
defaults:
# L3 Interfaces to configure on the node.
- # Used to define the node for WAN interfaces when `wan_carrier` is set.
l3_interfaces:
# L3 interface profile name. Profile defined under `l3_interface_profiles`.
@@ -341,7 +340,6 @@
- name:
# L3 Interfaces to configure on the node.
- # Used to define the node for WAN interfaces when `wan_carrier` is set.
l3_interfaces:
# L3 interface profile name. Profile defined under `l3_interface_profiles`.
@@ -469,7 +467,6 @@
structured_config:
# L3 Interfaces to configure on the node.
- # Used to define the node for WAN interfaces when `wan_carrier` is set.
l3_interfaces:
# L3 interface profile name. Profile defined under `l3_interface_profiles`.
@@ -603,7 +600,6 @@
- name:
# L3 Interfaces to configure on the node.
- # Used to define the node for WAN interfaces when `wan_carrier` is set.
l3_interfaces:
# L3 interface profile name. Profile defined under `l3_interface_profiles`.
diff --git a/ansible_collections/arista/avd/roles/eos_designs/docs/tables/node-type-l3-port-channels-configuration.md b/ansible_collections/arista/avd/roles/eos_designs/docs/tables/node-type-l3-port-channels-configuration.md
index 00496f9888a..cd09e3b40d9 100644
--- a/ansible_collections/arista/avd/roles/eos_designs/docs/tables/node-type-l3-port-channels-configuration.md
+++ b/ansible_collections/arista/avd/roles/eos_designs/docs/tables/node-type-l3-port-channels-configuration.md
@@ -9,10 +9,10 @@
| -------- | ---- | -------- | ------- | ------------------ | ----------- |
| [<node_type_keys.key>](## "") | Dictionary | | | | |
| [ defaults](## ".defaults") | Dictionary | | | | Define variables for all nodes of this type. |
- | [ l3_port_channels](## ".defaults.l3_port_channels") | List, items: Dictionary | | | | L3 Port-Channel interfaces to configure on the node.
Used to define the node for WAN interfaces when `wan_carrier` is set. |
+ | [ l3_port_channels](## ".defaults.l3_port_channels") | List, items: Dictionary | | | | L3 Port-Channel interfaces to configure on the node. |
| [ - name](## ".defaults.l3_port_channels.[].name") | String | Required, Unique | | Pattern: `Port-Channel[\d/]+(.[\d]+)?` | Port-Channel interface name like 'Port-Channel2' or subinterface name like 'Port-Channel2.42'.
For a Port-Channel subinterface, the parent Port-Channel interface must be defined as well. |
| [ description](## ".defaults.l3_port_channels.[].description") | String | | | | Interface description.
If not set a default description will be configured with '[[ ]]'. |
- | [ mode](## ".defaults.l3_port_channels.[].mode") | String | | `on` | Valid Values:
- active
- passive
- on
| Port-Channel mode.
Should not be set on Port-Channel subinterfaces. |
+ | [ mode](## ".defaults.l3_port_channels.[].mode") | String | | `active` | Valid Values:
- active
- passive
- on
| Port-Channel mode.
Should not be set on Port-Channel subinterfaces. |
| [ member_interfaces](## ".defaults.l3_port_channels.[].member_interfaces") | List, items: Dictionary | | | | Port-Channel member interfaces.
Should not be set on Port-Channel subinterfaces. |
| [ - name](## ".defaults.l3_port_channels.[].member_interfaces.[].name") | String | Required, Unique | | Pattern: `Ethernet[\d/]+` | Ethernet interface name like 'Ethernet2'.
Member interface cannot be subinterface. |
| [ description](## ".defaults.l3_port_channels.[].member_interfaces.[].description") | String | | | | Interface description for this member.
If not set a default description will be configured with '[[ ]]'. |
@@ -35,7 +35,7 @@
| [ ipv4_acl_in](## ".defaults.l3_port_channels.[].ipv4_acl_in") | String | | | | Name of the IPv4 access-list to be assigned in the ingress direction.
The access-list must be defined under `ipv4_acls` and supports field substitution for "interface_ip" and "peer_ip".
Required for all WAN interfaces (`wan_carrier` is set) unless the carrier is marked as 'trusted' under `wan_carriers`. |
| [ ipv4_acl_out](## ".defaults.l3_port_channels.[].ipv4_acl_out") | String | | | | Name of the IPv4 Access-list to be assigned in the egress direction.
The access-list must be defined under `ipv4_acls` and supports field substitution for "interface_ip" and "peer_ip". |
| [ static_routes](## ".defaults.l3_port_channels.[].static_routes") | List, items: Dictionary | | | Min Length: 1 | Configure IPv4 static routes pointing to `peer_ip`. |
- | [ - prefix](## ".defaults.l3_port_channels.[].static_routes.[].prefix") | String | Required | | | IPv4_network/Mask. |
+ | [ - prefix](## ".defaults.l3_port_channels.[].static_routes.[].prefix") | String | Required, Unique | | | IPv4_network/Mask. |
| [ qos_profile](## ".defaults.l3_port_channels.[].qos_profile") | String | | | | QOS service profile. |
| [ wan_carrier](## ".defaults.l3_port_channels.[].wan_carrier") | String | | | | The WAN carrier this interface is connected to.
This is used to infer the path-groups in which this interface should be configured.
Unless the carrier is marked as 'trusted' under `wan_carriers`, `ipv4_acl_in` is also required on all WAN interfaces. |
| [ wan_circuit_id](## ".defaults.l3_port_channels.[].wan_circuit_id") | String | | | | The WAN circuit ID for this interface.
This is not rendered in the configuration but used for WAN designs. |
@@ -44,8 +44,8 @@
| [ policies](## ".defaults.l3_port_channels.[].cv_pathfinder_internet_exit.policies") | List, items: Dictionary | | | | List of Internet-exit policies using this interface as exit. |
| [ - name](## ".defaults.l3_port_channels.[].cv_pathfinder_internet_exit.policies.[].name") | String | Required, Unique | | | Internet-exit policy name. |
| [ tunnel_interface_numbers](## ".defaults.l3_port_channels.[].cv_pathfinder_internet_exit.policies.[].tunnel_interface_numbers") | String | | | | Number range to use for Tunnel interfaces to an internet-exit service provider using this local interface.
Examples: '1-3' or '100,200,300' |
- | [ raw_eos_cli](## ".defaults.l3_port_channels.[].raw_eos_cli") | String | | | | EOS CLI rendered directly on the interface in the final EOS configuration. |
- | [ flow_tracking](## ".defaults.l3_port_channels.[].flow_tracking") | Dictionary | | | | Configures flow-tracking on the interface. Overrides `fabric_flow_tracking.l3_interfaces` setting. |
+ | [ raw_eos_cli](## ".defaults.l3_port_channels.[].raw_eos_cli") | String | | | | EOS CLI rendered directly on the Port-Channel interface in the final EOS configuration. |
+ | [ flow_tracking](## ".defaults.l3_port_channels.[].flow_tracking") | Dictionary | | | | Configures flow-tracking on the interface. Overrides `fabric_flow_tracking.l3_port_channels` setting. |
| [ enabled](## ".defaults.l3_port_channels.[].flow_tracking.enabled") | Boolean | | | | |
| [ name](## ".defaults.l3_port_channels.[].flow_tracking.name") | String | | | | Flow tracker name as defined in flow_tracking_settings. |
| [ structured_config](## ".defaults.l3_port_channels.[].structured_config") | Dictionary | | | | Custom structured config for the Port-Channel interface. |
@@ -53,10 +53,10 @@
| [ - group](## ".node_groups.[].group") | String | Required, Unique | | | The Node Group Name is used for MLAG domain unless set with 'mlag_domain_id'.
The Node Group Name is also used for peer description on downstream switches' uplinks.
|
| [ nodes](## ".node_groups.[].nodes") | List, items: Dictionary | | | | Define variables per node. |
| [ - name](## ".node_groups.[].nodes.[].name") | String | Required, Unique | | | The Node Name is used as "hostname". |
- | [ l3_port_channels](## ".node_groups.[].nodes.[].l3_port_channels") | List, items: Dictionary | | | | L3 Port-Channel interfaces to configure on the node.
Used to define the node for WAN interfaces when `wan_carrier` is set. |
+ | [ l3_port_channels](## ".node_groups.[].nodes.[].l3_port_channels") | List, items: Dictionary | | | | L3 Port-Channel interfaces to configure on the node. |
| [ - name](## ".node_groups.[].nodes.[].l3_port_channels.[].name") | String | Required, Unique | | Pattern: `Port-Channel[\d/]+(.[\d]+)?` | Port-Channel interface name like 'Port-Channel2' or subinterface name like 'Port-Channel2.42'.
For a Port-Channel subinterface, the parent Port-Channel interface must be defined as well. |
| [ description](## ".node_groups.[].nodes.[].l3_port_channels.[].description") | String | | | | Interface description.
If not set a default description will be configured with '[[ ]]'. |
- | [ mode](## ".node_groups.[].nodes.[].l3_port_channels.[].mode") | String | | `on` | Valid Values:
- active
- passive
- on
| Port-Channel mode.
Should not be set on Port-Channel subinterfaces. |
+ | [ mode](## ".node_groups.[].nodes.[].l3_port_channels.[].mode") | String | | `active` | Valid Values:
- active
- passive
- on
| Port-Channel mode.
Should not be set on Port-Channel subinterfaces. |
| [ member_interfaces](## ".node_groups.[].nodes.[].l3_port_channels.[].member_interfaces") | List, items: Dictionary | | | | Port-Channel member interfaces.
Should not be set on Port-Channel subinterfaces. |
| [ - name](## ".node_groups.[].nodes.[].l3_port_channels.[].member_interfaces.[].name") | String | Required, Unique | | Pattern: `Ethernet[\d/]+` | Ethernet interface name like 'Ethernet2'.
Member interface cannot be subinterface. |
| [ description](## ".node_groups.[].nodes.[].l3_port_channels.[].member_interfaces.[].description") | String | | | | Interface description for this member.
If not set a default description will be configured with '[[ ]]'. |
@@ -79,7 +79,7 @@
| [ ipv4_acl_in](## ".node_groups.[].nodes.[].l3_port_channels.[].ipv4_acl_in") | String | | | | Name of the IPv4 access-list to be assigned in the ingress direction.
The access-list must be defined under `ipv4_acls` and supports field substitution for "interface_ip" and "peer_ip".
Required for all WAN interfaces (`wan_carrier` is set) unless the carrier is marked as 'trusted' under `wan_carriers`. |
| [ ipv4_acl_out](## ".node_groups.[].nodes.[].l3_port_channels.[].ipv4_acl_out") | String | | | | Name of the IPv4 Access-list to be assigned in the egress direction.
The access-list must be defined under `ipv4_acls` and supports field substitution for "interface_ip" and "peer_ip". |
| [ static_routes](## ".node_groups.[].nodes.[].l3_port_channels.[].static_routes") | List, items: Dictionary | | | Min Length: 1 | Configure IPv4 static routes pointing to `peer_ip`. |
- | [ - prefix](## ".node_groups.[].nodes.[].l3_port_channels.[].static_routes.[].prefix") | String | Required | | | IPv4_network/Mask. |
+ | [ - prefix](## ".node_groups.[].nodes.[].l3_port_channels.[].static_routes.[].prefix") | String | Required, Unique | | | IPv4_network/Mask. |
| [ qos_profile](## ".node_groups.[].nodes.[].l3_port_channels.[].qos_profile") | String | | | | QOS service profile. |
| [ wan_carrier](## ".node_groups.[].nodes.[].l3_port_channels.[].wan_carrier") | String | | | | The WAN carrier this interface is connected to.
This is used to infer the path-groups in which this interface should be configured.
Unless the carrier is marked as 'trusted' under `wan_carriers`, `ipv4_acl_in` is also required on all WAN interfaces. |
| [ wan_circuit_id](## ".node_groups.[].nodes.[].l3_port_channels.[].wan_circuit_id") | String | | | | The WAN circuit ID for this interface.
This is not rendered in the configuration but used for WAN designs. |
@@ -88,15 +88,15 @@
| [ policies](## ".node_groups.[].nodes.[].l3_port_channels.[].cv_pathfinder_internet_exit.policies") | List, items: Dictionary | | | | List of Internet-exit policies using this interface as exit. |
| [ - name](## ".node_groups.[].nodes.[].l3_port_channels.[].cv_pathfinder_internet_exit.policies.[].name") | String | Required, Unique | | | Internet-exit policy name. |
| [ tunnel_interface_numbers](## ".node_groups.[].nodes.[].l3_port_channels.[].cv_pathfinder_internet_exit.policies.[].tunnel_interface_numbers") | String | | | | Number range to use for Tunnel interfaces to an internet-exit service provider using this local interface.
Examples: '1-3' or '100,200,300' |
- | [ raw_eos_cli](## ".node_groups.[].nodes.[].l3_port_channels.[].raw_eos_cli") | String | | | | EOS CLI rendered directly on the interface in the final EOS configuration. |
- | [ flow_tracking](## ".node_groups.[].nodes.[].l3_port_channels.[].flow_tracking") | Dictionary | | | | Configures flow-tracking on the interface. Overrides `fabric_flow_tracking.l3_interfaces` setting. |
+ | [ raw_eos_cli](## ".node_groups.[].nodes.[].l3_port_channels.[].raw_eos_cli") | String | | | | EOS CLI rendered directly on the Port-Channel interface in the final EOS configuration. |
+ | [ flow_tracking](## ".node_groups.[].nodes.[].l3_port_channels.[].flow_tracking") | Dictionary | | | | Configures flow-tracking on the interface. Overrides `fabric_flow_tracking.l3_port_channels` setting. |
| [ enabled](## ".node_groups.[].nodes.[].l3_port_channels.[].flow_tracking.enabled") | Boolean | | | | |
| [ name](## ".node_groups.[].nodes.[].l3_port_channels.[].flow_tracking.name") | String | | | | Flow tracker name as defined in flow_tracking_settings. |
| [ structured_config](## ".node_groups.[].nodes.[].l3_port_channels.[].structured_config") | Dictionary | | | | Custom structured config for the Port-Channel interface. |
- | [ l3_port_channels](## ".node_groups.[].l3_port_channels") | List, items: Dictionary | | | | L3 Port-Channel interfaces to configure on the node.
Used to define the node for WAN interfaces when `wan_carrier` is set. |
+ | [ l3_port_channels](## ".node_groups.[].l3_port_channels") | List, items: Dictionary | | | | L3 Port-Channel interfaces to configure on the node. |
| [ - name](## ".node_groups.[].l3_port_channels.[].name") | String | Required, Unique | | Pattern: `Port-Channel[\d/]+(.[\d]+)?` | Port-Channel interface name like 'Port-Channel2' or subinterface name like 'Port-Channel2.42'.
For a Port-Channel subinterface, the parent Port-Channel interface must be defined as well. |
| [ description](## ".node_groups.[].l3_port_channels.[].description") | String | | | | Interface description.
If not set a default description will be configured with '[[ ]]'. |
- | [ mode](## ".node_groups.[].l3_port_channels.[].mode") | String | | `on` | Valid Values:
- active
- passive
- on
| Port-Channel mode.
Should not be set on Port-Channel subinterfaces. |
+ | [ mode](## ".node_groups.[].l3_port_channels.[].mode") | String | | `active` | Valid Values:
- active
- passive
- on
| Port-Channel mode.
Should not be set on Port-Channel subinterfaces. |
| [ member_interfaces](## ".node_groups.[].l3_port_channels.[].member_interfaces") | List, items: Dictionary | | | | Port-Channel member interfaces.
Should not be set on Port-Channel subinterfaces. |
| [ - name](## ".node_groups.[].l3_port_channels.[].member_interfaces.[].name") | String | Required, Unique | | Pattern: `Ethernet[\d/]+` | Ethernet interface name like 'Ethernet2'.
Member interface cannot be subinterface. |
| [ description](## ".node_groups.[].l3_port_channels.[].member_interfaces.[].description") | String | | | | Interface description for this member.
If not set a default description will be configured with '[[ ]]'. |
@@ -119,7 +119,7 @@
| [ ipv4_acl_in](## ".node_groups.[].l3_port_channels.[].ipv4_acl_in") | String | | | | Name of the IPv4 access-list to be assigned in the ingress direction.
The access-list must be defined under `ipv4_acls` and supports field substitution for "interface_ip" and "peer_ip".
Required for all WAN interfaces (`wan_carrier` is set) unless the carrier is marked as 'trusted' under `wan_carriers`. |
| [ ipv4_acl_out](## ".node_groups.[].l3_port_channels.[].ipv4_acl_out") | String | | | | Name of the IPv4 Access-list to be assigned in the egress direction.
The access-list must be defined under `ipv4_acls` and supports field substitution for "interface_ip" and "peer_ip". |
| [ static_routes](## ".node_groups.[].l3_port_channels.[].static_routes") | List, items: Dictionary | | | Min Length: 1 | Configure IPv4 static routes pointing to `peer_ip`. |
- | [ - prefix](## ".node_groups.[].l3_port_channels.[].static_routes.[].prefix") | String | Required | | | IPv4_network/Mask. |
+ | [ - prefix](## ".node_groups.[].l3_port_channels.[].static_routes.[].prefix") | String | Required, Unique | | | IPv4_network/Mask. |
| [ qos_profile](## ".node_groups.[].l3_port_channels.[].qos_profile") | String | | | | QOS service profile. |
| [ wan_carrier](## ".node_groups.[].l3_port_channels.[].wan_carrier") | String | | | | The WAN carrier this interface is connected to.
This is used to infer the path-groups in which this interface should be configured.
Unless the carrier is marked as 'trusted' under `wan_carriers`, `ipv4_acl_in` is also required on all WAN interfaces. |
| [ wan_circuit_id](## ".node_groups.[].l3_port_channels.[].wan_circuit_id") | String | | | | The WAN circuit ID for this interface.
This is not rendered in the configuration but used for WAN designs. |
@@ -128,17 +128,17 @@
| [ policies](## ".node_groups.[].l3_port_channels.[].cv_pathfinder_internet_exit.policies") | List, items: Dictionary | | | | List of Internet-exit policies using this interface as exit. |
| [ - name](## ".node_groups.[].l3_port_channels.[].cv_pathfinder_internet_exit.policies.[].name") | String | Required, Unique | | | Internet-exit policy name. |
| [ tunnel_interface_numbers](## ".node_groups.[].l3_port_channels.[].cv_pathfinder_internet_exit.policies.[].tunnel_interface_numbers") | String | | | | Number range to use for Tunnel interfaces to an internet-exit service provider using this local interface.
Examples: '1-3' or '100,200,300' |
- | [ raw_eos_cli](## ".node_groups.[].l3_port_channels.[].raw_eos_cli") | String | | | | EOS CLI rendered directly on the interface in the final EOS configuration. |
- | [ flow_tracking](## ".node_groups.[].l3_port_channels.[].flow_tracking") | Dictionary | | | | Configures flow-tracking on the interface. Overrides `fabric_flow_tracking.l3_interfaces` setting. |
+ | [ raw_eos_cli](## ".node_groups.[].l3_port_channels.[].raw_eos_cli") | String | | | | EOS CLI rendered directly on the Port-Channel interface in the final EOS configuration. |
+ | [ flow_tracking](## ".node_groups.[].l3_port_channels.[].flow_tracking") | Dictionary | | | | Configures flow-tracking on the interface. Overrides `fabric_flow_tracking.l3_port_channels` setting. |
| [ enabled](## ".node_groups.[].l3_port_channels.[].flow_tracking.enabled") | Boolean | | | | |
| [ name](## ".node_groups.[].l3_port_channels.[].flow_tracking.name") | String | | | | Flow tracker name as defined in flow_tracking_settings. |
| [ structured_config](## ".node_groups.[].l3_port_channels.[].structured_config") | Dictionary | | | | Custom structured config for the Port-Channel interface. |
| [ nodes](## ".nodes") | List, items: Dictionary | | | | Define variables per node. |
| [ - name](## ".nodes.[].name") | String | Required, Unique | | | The Node Name is used as "hostname". |
- | [ l3_port_channels](## ".nodes.[].l3_port_channels") | List, items: Dictionary | | | | L3 Port-Channel interfaces to configure on the node.
Used to define the node for WAN interfaces when `wan_carrier` is set. |
+ | [ l3_port_channels](## ".nodes.[].l3_port_channels") | List, items: Dictionary | | | | L3 Port-Channel interfaces to configure on the node. |
| [ - name](## ".nodes.[].l3_port_channels.[].name") | String | Required, Unique | | Pattern: `Port-Channel[\d/]+(.[\d]+)?` | Port-Channel interface name like 'Port-Channel2' or subinterface name like 'Port-Channel2.42'.
For a Port-Channel subinterface, the parent Port-Channel interface must be defined as well. |
| [ description](## ".nodes.[].l3_port_channels.[].description") | String | | | | Interface description.
If not set a default description will be configured with '[[ ]]'. |
- | [ mode](## ".nodes.[].l3_port_channels.[].mode") | String | | `on` | Valid Values:
- active
- passive
- on
| Port-Channel mode.
Should not be set on Port-Channel subinterfaces. |
+ | [ mode](## ".nodes.[].l3_port_channels.[].mode") | String | | `active` | Valid Values:
- active
- passive
- on
| Port-Channel mode.
Should not be set on Port-Channel subinterfaces. |
| [ member_interfaces](## ".nodes.[].l3_port_channels.[].member_interfaces") | List, items: Dictionary | | | | Port-Channel member interfaces.
Should not be set on Port-Channel subinterfaces. |
| [ - name](## ".nodes.[].l3_port_channels.[].member_interfaces.[].name") | String | Required, Unique | | Pattern: `Ethernet[\d/]+` | Ethernet interface name like 'Ethernet2'.
Member interface cannot be subinterface. |
| [ description](## ".nodes.[].l3_port_channels.[].member_interfaces.[].description") | String | | | | Interface description for this member.
If not set a default description will be configured with '[[ ]]'. |
@@ -161,7 +161,7 @@
| [ ipv4_acl_in](## ".nodes.[].l3_port_channels.[].ipv4_acl_in") | String | | | | Name of the IPv4 access-list to be assigned in the ingress direction.
The access-list must be defined under `ipv4_acls` and supports field substitution for "interface_ip" and "peer_ip".
Required for all WAN interfaces (`wan_carrier` is set) unless the carrier is marked as 'trusted' under `wan_carriers`. |
| [ ipv4_acl_out](## ".nodes.[].l3_port_channels.[].ipv4_acl_out") | String | | | | Name of the IPv4 Access-list to be assigned in the egress direction.
The access-list must be defined under `ipv4_acls` and supports field substitution for "interface_ip" and "peer_ip". |
| [ static_routes](## ".nodes.[].l3_port_channels.[].static_routes") | List, items: Dictionary | | | Min Length: 1 | Configure IPv4 static routes pointing to `peer_ip`. |
- | [ - prefix](## ".nodes.[].l3_port_channels.[].static_routes.[].prefix") | String | Required | | | IPv4_network/Mask. |
+ | [ - prefix](## ".nodes.[].l3_port_channels.[].static_routes.[].prefix") | String | Required, Unique | | | IPv4_network/Mask. |
| [ qos_profile](## ".nodes.[].l3_port_channels.[].qos_profile") | String | | | | QOS service profile. |
| [ wan_carrier](## ".nodes.[].l3_port_channels.[].wan_carrier") | String | | | | The WAN carrier this interface is connected to.
This is used to infer the path-groups in which this interface should be configured.
Unless the carrier is marked as 'trusted' under `wan_carriers`, `ipv4_acl_in` is also required on all WAN interfaces. |
| [ wan_circuit_id](## ".nodes.[].l3_port_channels.[].wan_circuit_id") | String | | | | The WAN circuit ID for this interface.
This is not rendered in the configuration but used for WAN designs. |
@@ -170,8 +170,8 @@
| [ policies](## ".nodes.[].l3_port_channels.[].cv_pathfinder_internet_exit.policies") | List, items: Dictionary | | | | List of Internet-exit policies using this interface as exit. |
| [ - name](## ".nodes.[].l3_port_channels.[].cv_pathfinder_internet_exit.policies.[].name") | String | Required, Unique | | | Internet-exit policy name. |
| [ tunnel_interface_numbers](## ".nodes.[].l3_port_channels.[].cv_pathfinder_internet_exit.policies.[].tunnel_interface_numbers") | String | | | | Number range to use for Tunnel interfaces to an internet-exit service provider using this local interface.
Examples: '1-3' or '100,200,300' |
- | [ raw_eos_cli](## ".nodes.[].l3_port_channels.[].raw_eos_cli") | String | | | | EOS CLI rendered directly on the interface in the final EOS configuration. |
- | [ flow_tracking](## ".nodes.[].l3_port_channels.[].flow_tracking") | Dictionary | | | | Configures flow-tracking on the interface. Overrides `fabric_flow_tracking.l3_interfaces` setting. |
+ | [ raw_eos_cli](## ".nodes.[].l3_port_channels.[].raw_eos_cli") | String | | | | EOS CLI rendered directly on the Port-Channel interface in the final EOS configuration. |
+ | [ flow_tracking](## ".nodes.[].l3_port_channels.[].flow_tracking") | Dictionary | | | | Configures flow-tracking on the interface. Overrides `fabric_flow_tracking.l3_port_channels` setting. |
| [ enabled](## ".nodes.[].l3_port_channels.[].flow_tracking.enabled") | Boolean | | | | |
| [ name](## ".nodes.[].l3_port_channels.[].flow_tracking.name") | String | | | | Flow tracker name as defined in flow_tracking_settings. |
| [ structured_config](## ".nodes.[].l3_port_channels.[].structured_config") | Dictionary | | | | Custom structured config for the Port-Channel interface. |
@@ -185,7 +185,6 @@
defaults:
# L3 Port-Channel interfaces to configure on the node.
- # Used to define the node for WAN interfaces when `wan_carrier` is set.
l3_port_channels:
# Port-Channel interface name like 'Port-Channel2' or subinterface name like 'Port-Channel2.42'.
@@ -198,7 +197,7 @@
# Port-Channel mode.
# Should not be set on Port-Channel subinterfaces.
- mode:
+ mode:
# Port-Channel member interfaces.
# Should not be set on Port-Channel subinterfaces.
@@ -289,7 +288,7 @@
static_routes: # >=1 items
# IPv4_network/Mask.
- - prefix:
+ - prefix:
# QOS service profile.
qos_profile:
@@ -319,10 +318,10 @@
# Examples: '1-3' or '100,200,300'
tunnel_interface_numbers:
- # EOS CLI rendered directly on the interface in the final EOS configuration.
+ # EOS CLI rendered directly on the Port-Channel interface in the final EOS configuration.
raw_eos_cli:
- # Configures flow-tracking on the interface. Overrides `fabric_flow_tracking.l3_interfaces` setting.
+ # Configures flow-tracking on the interface. Overrides `fabric_flow_tracking.l3_port_channels` setting.
flow_tracking:
enabled:
@@ -346,7 +345,6 @@
- name:
# L3 Port-Channel interfaces to configure on the node.
- # Used to define the node for WAN interfaces when `wan_carrier` is set.
l3_port_channels:
# Port-Channel interface name like 'Port-Channel2' or subinterface name like 'Port-Channel2.42'.
@@ -359,7 +357,7 @@
# Port-Channel mode.
# Should not be set on Port-Channel subinterfaces.
- mode:
+ mode:
# Port-Channel member interfaces.
# Should not be set on Port-Channel subinterfaces.
@@ -450,7 +448,7 @@
static_routes: # >=1 items
# IPv4_network/Mask.
- - prefix:
+ - prefix:
# QOS service profile.
qos_profile:
@@ -480,10 +478,10 @@
# Examples: '1-3' or '100,200,300'
tunnel_interface_numbers:
- # EOS CLI rendered directly on the interface in the final EOS configuration.
+ # EOS CLI rendered directly on the Port-Channel interface in the final EOS configuration.
raw_eos_cli:
- # Configures flow-tracking on the interface. Overrides `fabric_flow_tracking.l3_interfaces` setting.
+ # Configures flow-tracking on the interface. Overrides `fabric_flow_tracking.l3_port_channels` setting.
flow_tracking:
enabled:
@@ -494,7 +492,6 @@
structured_config:
# L3 Port-Channel interfaces to configure on the node.
- # Used to define the node for WAN interfaces when `wan_carrier` is set.
l3_port_channels:
# Port-Channel interface name like 'Port-Channel2' or subinterface name like 'Port-Channel2.42'.
@@ -507,7 +504,7 @@
# Port-Channel mode.
# Should not be set on Port-Channel subinterfaces.
- mode:
+ mode:
# Port-Channel member interfaces.
# Should not be set on Port-Channel subinterfaces.
@@ -598,7 +595,7 @@
static_routes: # >=1 items
# IPv4_network/Mask.
- - prefix:
+ - prefix:
# QOS service profile.
qos_profile:
@@ -628,10 +625,10 @@
# Examples: '1-3' or '100,200,300'
tunnel_interface_numbers:
- # EOS CLI rendered directly on the interface in the final EOS configuration.
+ # EOS CLI rendered directly on the Port-Channel interface in the final EOS configuration.
raw_eos_cli:
- # Configures flow-tracking on the interface. Overrides `fabric_flow_tracking.l3_interfaces` setting.
+ # Configures flow-tracking on the interface. Overrides `fabric_flow_tracking.l3_port_channels` setting.
flow_tracking:
enabled:
@@ -648,7 +645,6 @@
- name:
# L3 Port-Channel interfaces to configure on the node.
- # Used to define the node for WAN interfaces when `wan_carrier` is set.
l3_port_channels:
# Port-Channel interface name like 'Port-Channel2' or subinterface name like 'Port-Channel2.42'.
@@ -661,7 +657,7 @@
# Port-Channel mode.
# Should not be set on Port-Channel subinterfaces.
- mode:
+ mode:
# Port-Channel member interfaces.
# Should not be set on Port-Channel subinterfaces.
@@ -752,7 +748,7 @@
static_routes: # >=1 items
# IPv4_network/Mask.
- - prefix:
+ - prefix:
# QOS service profile.
qos_profile:
@@ -782,10 +778,10 @@
# Examples: '1-3' or '100,200,300'
tunnel_interface_numbers:
- # EOS CLI rendered directly on the interface in the final EOS configuration.
+ # EOS CLI rendered directly on the Port-Channel interface in the final EOS configuration.
raw_eos_cli:
- # Configures flow-tracking on the interface. Overrides `fabric_flow_tracking.l3_interfaces` setting.
+ # Configures flow-tracking on the interface. Overrides `fabric_flow_tracking.l3_port_channels` setting.
flow_tracking:
enabled:
diff --git a/python-avd/pyavd/_eos_designs/schema/__init__.py b/python-avd/pyavd/_eos_designs/schema/__init__.py
index afa5548636b..c70c5a4f8e7 100644
--- a/python-avd/pyavd/_eos_designs/schema/__init__.py
+++ b/python-avd/pyavd/_eos_designs/schema/__init__.py
@@ -3400,6 +3400,46 @@ def __init__(
L3Interfaces.
+ Subclass of AvdModel.
+
+ Args:
+ enabled: enabled
+ name: Flow tracker name as defined in flow_tracking_settings.
+ _custom_data: _custom_data
+
+ """
+
+ class L3PortChannels(AvdModel):
+ """Subclass of AvdModel."""
+
+ _fields: ClassVar[dict] = {
+ "enabled": {"type": bool, "default": False},
+ "name": {"type": str, "default": "FLOW-TRACKER"},
+ "_custom_data": {"type": dict},
+ }
+ enabled: bool
+ """Default value: `False`"""
+ name: str
+ """
+ Flow tracker name as defined in flow_tracking_settings.
+
+ Default value: `"FLOW-TRACKER"`
+ """
+ _custom_data: dict[str, Any]
+
+ if TYPE_CHECKING:
+
+ def __init__(
+ self,
+ *,
+ enabled: bool | UndefinedType = Undefined,
+ name: str | UndefinedType = Undefined,
+ _custom_data: dict[str, Any] | UndefinedType = Undefined,
+ ) -> None:
+ """
+ L3PortChannels.
+
+
Subclass of AvdModel.
Args:
@@ -3497,6 +3537,7 @@ def __init__(
"core_interfaces": {"type": CoreInterfaces},
"mlag_interfaces": {"type": MlagInterfaces},
"l3_interfaces": {"type": L3Interfaces},
+ "l3_port_channels": {"type": L3PortChannels},
"dps_interfaces": {"type": DpsInterfaces},
"direct_wan_ha_links": {"type": DirectWanHaLinks},
"_custom_data": {"type": dict},
@@ -3540,6 +3581,12 @@ def __init__(
l3_interfaces: L3Interfaces
"""
Enable flow-tracking on all node.l3_interfaces and network-services tenants.vrfs.l3_interfaces.
+ Subclass of AvdModel.
+ """
+ l3_port_channels: L3PortChannels
+ """
+ Enable flow-tracking on all node.l3_port_channels.
+
Subclass of AvdModel.
"""
dps_interfaces: DpsInterfaces
@@ -3568,6 +3615,7 @@ def __init__(
core_interfaces: CoreInterfaces | UndefinedType = Undefined,
mlag_interfaces: MlagInterfaces | UndefinedType = Undefined,
l3_interfaces: L3Interfaces | UndefinedType = Undefined,
+ l3_port_channels: L3PortChannels | UndefinedType = Undefined,
dps_interfaces: DpsInterfaces | UndefinedType = Undefined,
direct_wan_ha_links: DirectWanHaLinks | UndefinedType = Undefined,
_custom_data: dict[str, Any] | UndefinedType = Undefined,
@@ -3605,6 +3653,10 @@ def __init__(
Subclass of AvdModel.
l3_interfaces:
Enable flow-tracking on all node.l3_interfaces and network-services tenants.vrfs.l3_interfaces.
+ Subclass of AvdModel.
+ l3_port_channels:
+ Enable flow-tracking on all node.l3_port_channels.
+
Subclass of AvdModel.
dps_interfaces:
Enable flow-tracking on all dps_interfaces.
@@ -21191,6 +21243,627 @@ class L3Interfaces(AvdIndexedList[str, L3InterfacesItem]):
L3Interfaces._item_type = L3InterfacesItem
+ class L3PortChannelsItem(AvdModel):
+ """Subclass of AvdModel."""
+
+ class MemberInterfacesItem(AvdModel):
+ """Subclass of AvdModel."""
+
+ _fields: ClassVar[dict] = {
+ "name": {"type": str},
+ "description": {"type": str},
+ "peer": {"type": str},
+ "peer_interface": {"type": str},
+ "speed": {"type": str},
+ "_custom_data": {"type": dict},
+ }
+ name: str
+ """
+ Ethernet interface name like 'Ethernet2'.
+ Member interface cannot be subinterface.
+ """
+ description: str | None
+ """
+ Interface description for this member.
+ If not set a default description will be configured with
+ '[[ ]]'.
+ """
+ peer: str | None
+ """
+ The peer device name. Used for description and documentation.
+ If not set, this inherits the peer
+ setting on the port-channel interface.
+ """
+ peer_interface: str | None
+ """The peer device interface. Used for description and documentation."""
+ speed: str | None
+ """
+ Speed should be set in the format `` or `forced ` or `auto
+ `.
+ """
+ _custom_data: dict[str, Any]
+
+ if TYPE_CHECKING:
+
+ def __init__(
+ self,
+ *,
+ name: str | UndefinedType = Undefined,
+ description: str | None | UndefinedType = Undefined,
+ peer: str | None | UndefinedType = Undefined,
+ peer_interface: str | None | UndefinedType = Undefined,
+ speed: str | None | UndefinedType = Undefined,
+ _custom_data: dict[str, Any] | UndefinedType = Undefined,
+ ) -> None:
+ """
+ MemberInterfacesItem.
+
+
+ Subclass of AvdModel.
+
+ Args:
+ name:
+ Ethernet interface name like 'Ethernet2'.
+ Member interface cannot be subinterface.
+ description:
+ Interface description for this member.
+ If not set a default description will be configured with
+ '[[ ]]'.
+ peer:
+ The peer device name. Used for description and documentation.
+ If not set, this inherits the peer
+ setting on the port-channel interface.
+ peer_interface: The peer device interface. Used for description and documentation.
+ speed:
+ Speed should be set in the format `` or `forced ` or `auto
+ `.
+ _custom_data: _custom_data
+
+ """
+
+ class MemberInterfaces(AvdIndexedList[str, MemberInterfacesItem]):
+ """Subclass of AvdIndexedList with `MemberInterfacesItem` items. Primary key is `name` (`str`)."""
+
+ _primary_key: ClassVar[str] = "name"
+
+ MemberInterfaces._item_type = MemberInterfacesItem
+
+ class Bgp(AvdModel):
+ """Subclass of AvdModel."""
+
+ _fields: ClassVar[dict] = {
+ "peer_as": {"type": str},
+ "ipv4_prefix_list_in": {"type": str},
+ "ipv4_prefix_list_out": {"type": str},
+ "_custom_data": {"type": dict},
+ }
+ peer_as: str
+ """
+ BGP AS <1-4294967295> or AS number in asdot notation "<1-65535>.<0-65535>".
+ For asdot notation in
+ YAML inputs, the value must be put in quotes, to prevent it from being interpreted as a float
+ number.
+ """
+ ipv4_prefix_list_in: str | None
+ """
+ Prefix List Name. Accept routes for only these prefixes from the peer.
+ Required for wan interfaces.
+ """
+ ipv4_prefix_list_out: str | None
+ """
+ Prefix List Name. Advertise routes for only these prefixes.
+ If not specified, nothing would be
+ advertised.
+ """
+ _custom_data: dict[str, Any]
+
+ if TYPE_CHECKING:
+
+ def __init__(
+ self,
+ *,
+ peer_as: str | UndefinedType = Undefined,
+ ipv4_prefix_list_in: str | None | UndefinedType = Undefined,
+ ipv4_prefix_list_out: str | None | UndefinedType = Undefined,
+ _custom_data: dict[str, Any] | UndefinedType = Undefined,
+ ) -> None:
+ """
+ Bgp.
+
+
+ Subclass of AvdModel.
+
+ Args:
+ peer_as:
+ BGP AS <1-4294967295> or AS number in asdot notation "<1-65535>.<0-65535>".
+ For asdot notation in
+ YAML inputs, the value must be put in quotes, to prevent it from being interpreted as a float
+ number.
+ ipv4_prefix_list_in:
+ Prefix List Name. Accept routes for only these prefixes from the peer.
+ Required for wan interfaces.
+ ipv4_prefix_list_out:
+ Prefix List Name. Advertise routes for only these prefixes.
+ If not specified, nothing would be
+ advertised.
+ _custom_data: _custom_data
+
+ """
+
+ class StaticRoutesItem(AvdModel):
+ """Subclass of AvdModel."""
+
+ _fields: ClassVar[dict] = {"prefix": {"type": str}, "_custom_data": {"type": dict}}
+ prefix: str
+ """IPv4_network/Mask."""
+ _custom_data: dict[str, Any]
+
+ if TYPE_CHECKING:
+
+ def __init__(
+ self, *, prefix: str | UndefinedType = Undefined, _custom_data: dict[str, Any] | UndefinedType = Undefined
+ ) -> None:
+ """
+ StaticRoutesItem.
+
+
+ Subclass of AvdModel.
+
+ Args:
+ prefix: IPv4_network/Mask.
+ _custom_data: _custom_data
+
+ """
+
+ class StaticRoutes(AvdIndexedList[str, StaticRoutesItem]):
+ """Subclass of AvdIndexedList with `StaticRoutesItem` items. Primary key is `prefix` (`str`)."""
+
+ _primary_key: ClassVar[str] = "prefix"
+
+ StaticRoutes._item_type = StaticRoutesItem
+
+ class CvPathfinderInternetExit(AvdModel):
+ """Subclass of AvdModel."""
+
+ class PoliciesItem(AvdModel):
+ """Subclass of AvdModel."""
+
+ _fields: ClassVar[dict] = {"name": {"type": str}, "tunnel_interface_numbers": {"type": str}, "_custom_data": {"type": dict}}
+ name: str
+ """Internet-exit policy name."""
+ tunnel_interface_numbers: str | None
+ """
+ Number range to use for Tunnel interfaces to an internet-exit service provider using this local
+ interface.
+ Examples: '1-3' or '100,200,300'
+ """
+ _custom_data: dict[str, Any]
+
+ if TYPE_CHECKING:
+
+ def __init__(
+ self,
+ *,
+ name: str | UndefinedType = Undefined,
+ tunnel_interface_numbers: str | None | UndefinedType = Undefined,
+ _custom_data: dict[str, Any] | UndefinedType = Undefined,
+ ) -> None:
+ """
+ PoliciesItem.
+
+
+ Subclass of AvdModel.
+
+ Args:
+ name: Internet-exit policy name.
+ tunnel_interface_numbers:
+ Number range to use for Tunnel interfaces to an internet-exit service provider using this local
+ interface.
+ Examples: '1-3' or '100,200,300'
+ _custom_data: _custom_data
+
+ """
+
+ class Policies(AvdIndexedList[str, PoliciesItem]):
+ """Subclass of AvdIndexedList with `PoliciesItem` items. Primary key is `name` (`str`)."""
+
+ _primary_key: ClassVar[str] = "name"
+
+ Policies._item_type = PoliciesItem
+
+ _fields: ClassVar[dict] = {"policies": {"type": Policies}, "_custom_data": {"type": dict}}
+ policies: Policies
+ """
+ List of Internet-exit policies using this interface as exit.
+
+ Subclass of AvdIndexedList with
+ `PoliciesItem` items. Primary key is `name` (`str`).
+ """
+ _custom_data: dict[str, Any]
+
+ if TYPE_CHECKING:
+
+ def __init__(
+ self, *, policies: Policies | UndefinedType = Undefined, _custom_data: dict[str, Any] | UndefinedType = Undefined
+ ) -> None:
+ """
+ CvPathfinderInternetExit.
+
+
+ Subclass of AvdModel.
+
+ Args:
+ policies:
+ List of Internet-exit policies using this interface as exit.
+
+ Subclass of AvdIndexedList with
+ `PoliciesItem` items. Primary key is `name` (`str`).
+ _custom_data: _custom_data
+
+ """
+
+ class FlowTracking(AvdModel):
+ """Subclass of AvdModel."""
+
+ _fields: ClassVar[dict] = {"enabled": {"type": bool}, "name": {"type": str}, "_custom_data": {"type": dict}}
+ enabled: bool | None
+ name: str | None
+ """Flow tracker name as defined in flow_tracking_settings."""
+ _custom_data: dict[str, Any]
+
+ if TYPE_CHECKING:
+
+ def __init__(
+ self,
+ *,
+ enabled: bool | None | UndefinedType = Undefined,
+ name: str | None | UndefinedType = Undefined,
+ _custom_data: dict[str, Any] | UndefinedType = Undefined,
+ ) -> None:
+ """
+ FlowTracking.
+
+
+ Subclass of AvdModel.
+
+ Args:
+ enabled: enabled
+ name: Flow tracker name as defined in flow_tracking_settings.
+ _custom_data: _custom_data
+
+ """
+
+ class StructuredConfig(EosCliConfigGen.PortChannelInterfacesItem):
+ """Subclass of AvdModel."""
+
+ _fields: ClassVar[dict] = {
+ "name": {"type": str},
+ "description": {"type": str},
+ "mode": {"type": str, "default": "active"},
+ "member_interfaces": {"type": MemberInterfaces},
+ "ip_address": {"type": str},
+ "dhcp_ip": {"type": str},
+ "public_ip": {"type": str},
+ "encapsulation_dot1q_vlan": {"type": int},
+ "dhcp_accept_default_route": {"type": bool, "default": True},
+ "enabled": {"type": bool, "default": True},
+ "peer": {"type": str},
+ "peer_port_channel": {"type": str},
+ "peer_ip": {"type": str},
+ "bgp": {"type": Bgp},
+ "ipv4_acl_in": {"type": str},
+ "ipv4_acl_out": {"type": str},
+ "static_routes": {"type": StaticRoutes},
+ "qos_profile": {"type": str},
+ "wan_carrier": {"type": str},
+ "wan_circuit_id": {"type": str},
+ "connected_to_pathfinder": {"type": bool, "default": True},
+ "cv_pathfinder_internet_exit": {"type": CvPathfinderInternetExit},
+ "raw_eos_cli": {"type": str},
+ "flow_tracking": {"type": FlowTracking},
+ "structured_config": {"type": StructuredConfig},
+ "_custom_data": {"type": dict},
+ }
+ name: str
+ """
+ Port-Channel interface name like 'Port-Channel2' or subinterface name like 'Port-Channel2.42'.
+ For a
+ Port-Channel subinterface, the parent Port-Channel interface must be defined as well.
+ """
+ description: str | None
+ """
+ Interface description.
+ If not set a default description will be configured with '[[
+ ]]'.
+ """
+ mode: Literal["active", "passive", "on"]
+ """
+ Port-Channel mode.
+ Should not be set on Port-Channel subinterfaces.
+
+ Default value: `"active"`
+ """
+ member_interfaces: MemberInterfaces
+ """
+ Port-Channel member interfaces.
+ Should not be set on Port-Channel subinterfaces.
+
+ Subclass of
+ AvdIndexedList with `MemberInterfacesItem` items. Primary key is `name` (`str`).
+ """
+ ip_address: str | None
+ """Node IPv4 address/Mask or 'dhcp'."""
+ dhcp_ip: str | None
+ """
+ When the `ip_address` is `dhcp`, this optional field allows to indicate the expected
+ IPv4 address
+ (without mask) to be allocated on the interface if known.
+ This is not rendered in the configuration
+ but can be used for substitution of 'interface_ip' in the Access-list
+ set under `ipv4_acl_in` and
+ `ipv4_acl_out`.
+ """
+ public_ip: str | None
+ """
+ Node IPv4 address (no mask).
+
+ This is used to get the public IP (if known) when the device is behind
+ NAT.
+ This is only used for `wan_rr` routers (AutoVPN RRs and Pathfinders) to determine the Public IP
+ with the following preference:
+ `wan_route_servers.path_groups.interfaces.ip_address`
+ ->
+ `l3_port_channels.public_ip`
+ -> `l3_port_channels.ip_address`
+
+ The determined Public IP is
+ used by WAN routers when peering with this interface.
+ """
+ encapsulation_dot1q_vlan: int | None
+ """
+ For subinterfaces the dot1q vlan is derived from the interface name by default, but can also be
+ specified.
+ """
+ dhcp_accept_default_route: bool
+ """
+ Accept a default route from DHCP if `ip_address` is set to `dhcp`.
+
+ Default value: `True`
+ """
+ enabled: bool
+ """
+ Enable or Shutdown the interface.
+
+ Default value: `True`
+ """
+ peer: str | None
+ """The peer device name. Used for description and documentation."""
+ peer_port_channel: str | None
+ """The peer device port-channel interface. Used for description and documentation."""
+ peer_ip: str | None
+ """
+ The peer device IPv4 address (no mask). Used as default route gateway if `set_default_route` is true
+ and `ip` is an IP address.
+ """
+ bgp: Bgp
+ """
+ Enforce IPv4 BGP peering for the peer
+
+ Subclass of AvdModel.
+ """
+ ipv4_acl_in: str | None
+ """
+ Name of the IPv4 access-list to be assigned in the ingress direction.
+ The access-list must be
+ defined under `ipv4_acls` and supports field substitution for "interface_ip" and "peer_ip".
+ Required
+ for all WAN interfaces (`wan_carrier` is set) unless the carrier is marked as 'trusted' under
+ `wan_carriers`.
+ """
+ ipv4_acl_out: str | None
+ """
+ Name of the IPv4 Access-list to be assigned in the egress direction.
+ The access-list must be defined
+ under `ipv4_acls` and supports field substitution for "interface_ip" and "peer_ip".
+ """
+ static_routes: StaticRoutes
+ """
+ Configure IPv4 static routes pointing to `peer_ip`.
+
+ Subclass of AvdIndexedList with
+ `StaticRoutesItem` items. Primary key is `prefix` (`str`).
+ """
+ qos_profile: str | None
+ """QOS service profile."""
+ wan_carrier: str | None
+ """
+ The WAN carrier this interface is connected to.
+ This is used to infer the path-groups in which this
+ interface should be configured.
+ Unless the carrier is marked as 'trusted' under `wan_carriers`,
+ `ipv4_acl_in` is also required on all WAN interfaces.
+ """
+ wan_circuit_id: str | None
+ """
+ The WAN circuit ID for this interface.
+ This is not rendered in the configuration but used for WAN
+ designs.
+ """
+ connected_to_pathfinder: bool
+ """
+ For a WAN interface (`wan_carrier` is set), allow to disable the static tunnel towards Pathfinders.
+
+ Default value: `True`
+ """
+ cv_pathfinder_internet_exit: CvPathfinderInternetExit
+ """
+ PREVIEW: This key is in preview mode
+
+ Subclass of AvdModel.
+ """
+ raw_eos_cli: str | None
+ """EOS CLI rendered directly on the Port-Channel interface in the final EOS configuration."""
+ flow_tracking: FlowTracking
+ """
+ Configures flow-tracking on the interface. Overrides `fabric_flow_tracking.l3_port_channels`
+ setting.
+
+ Subclass of AvdModel.
+ """
+ structured_config: StructuredConfig
+ """
+ Custom structured config for the Port-Channel interface.
+
+ Subclass of AvdModel.
+ """
+ _custom_data: dict[str, Any]
+
+ if TYPE_CHECKING:
+
+ def __init__(
+ self,
+ *,
+ name: str | UndefinedType = Undefined,
+ description: str | None | UndefinedType = Undefined,
+ mode: Literal["active", "passive", "on"] | UndefinedType = Undefined,
+ member_interfaces: MemberInterfaces | UndefinedType = Undefined,
+ ip_address: str | None | UndefinedType = Undefined,
+ dhcp_ip: str | None | UndefinedType = Undefined,
+ public_ip: str | None | UndefinedType = Undefined,
+ encapsulation_dot1q_vlan: int | None | UndefinedType = Undefined,
+ dhcp_accept_default_route: bool | UndefinedType = Undefined,
+ enabled: bool | UndefinedType = Undefined,
+ peer: str | None | UndefinedType = Undefined,
+ peer_port_channel: str | None | UndefinedType = Undefined,
+ peer_ip: str | None | UndefinedType = Undefined,
+ bgp: Bgp | UndefinedType = Undefined,
+ ipv4_acl_in: str | None | UndefinedType = Undefined,
+ ipv4_acl_out: str | None | UndefinedType = Undefined,
+ static_routes: StaticRoutes | UndefinedType = Undefined,
+ qos_profile: str | None | UndefinedType = Undefined,
+ wan_carrier: str | None | UndefinedType = Undefined,
+ wan_circuit_id: str | None | UndefinedType = Undefined,
+ connected_to_pathfinder: bool | UndefinedType = Undefined,
+ cv_pathfinder_internet_exit: CvPathfinderInternetExit | UndefinedType = Undefined,
+ raw_eos_cli: str | None | UndefinedType = Undefined,
+ flow_tracking: FlowTracking | UndefinedType = Undefined,
+ structured_config: StructuredConfig | UndefinedType = Undefined,
+ _custom_data: dict[str, Any] | UndefinedType = Undefined,
+ ) -> None:
+ """
+ L3PortChannelsItem.
+
+
+ Subclass of AvdModel.
+
+ Args:
+ name:
+ Port-Channel interface name like 'Port-Channel2' or subinterface name like 'Port-Channel2.42'.
+ For a
+ Port-Channel subinterface, the parent Port-Channel interface must be defined as well.
+ description:
+ Interface description.
+ If not set a default description will be configured with '[[
+ ]]'.
+ mode:
+ Port-Channel mode.
+ Should not be set on Port-Channel subinterfaces.
+ member_interfaces:
+ Port-Channel member interfaces.
+ Should not be set on Port-Channel subinterfaces.
+
+ Subclass of
+ AvdIndexedList with `MemberInterfacesItem` items. Primary key is `name` (`str`).
+ ip_address: Node IPv4 address/Mask or 'dhcp'.
+ dhcp_ip:
+ When the `ip_address` is `dhcp`, this optional field allows to indicate the expected
+ IPv4 address
+ (without mask) to be allocated on the interface if known.
+ This is not rendered in the configuration
+ but can be used for substitution of 'interface_ip' in the Access-list
+ set under `ipv4_acl_in` and
+ `ipv4_acl_out`.
+ public_ip:
+ Node IPv4 address (no mask).
+
+ This is used to get the public IP (if known) when the device is behind
+ NAT.
+ This is only used for `wan_rr` routers (AutoVPN RRs and Pathfinders) to determine the Public IP
+ with the following preference:
+ `wan_route_servers.path_groups.interfaces.ip_address`
+ ->
+ `l3_port_channels.public_ip`
+ -> `l3_port_channels.ip_address`
+
+ The determined Public IP is
+ used by WAN routers when peering with this interface.
+ encapsulation_dot1q_vlan:
+ For subinterfaces the dot1q vlan is derived from the interface name by default, but can also be
+ specified.
+ dhcp_accept_default_route: Accept a default route from DHCP if `ip_address` is set to `dhcp`.
+ enabled: Enable or Shutdown the interface.
+ peer: The peer device name. Used for description and documentation.
+ peer_port_channel: The peer device port-channel interface. Used for description and documentation.
+ peer_ip:
+ The peer device IPv4 address (no mask). Used as default route gateway if `set_default_route` is true
+ and `ip` is an IP address.
+ bgp:
+ Enforce IPv4 BGP peering for the peer
+
+ Subclass of AvdModel.
+ ipv4_acl_in:
+ Name of the IPv4 access-list to be assigned in the ingress direction.
+ The access-list must be
+ defined under `ipv4_acls` and supports field substitution for "interface_ip" and "peer_ip".
+ Required
+ for all WAN interfaces (`wan_carrier` is set) unless the carrier is marked as 'trusted' under
+ `wan_carriers`.
+ ipv4_acl_out:
+ Name of the IPv4 Access-list to be assigned in the egress direction.
+ The access-list must be defined
+ under `ipv4_acls` and supports field substitution for "interface_ip" and "peer_ip".
+ static_routes:
+ Configure IPv4 static routes pointing to `peer_ip`.
+
+ Subclass of AvdIndexedList with
+ `StaticRoutesItem` items. Primary key is `prefix` (`str`).
+ qos_profile: QOS service profile.
+ wan_carrier:
+ The WAN carrier this interface is connected to.
+ This is used to infer the path-groups in which this
+ interface should be configured.
+ Unless the carrier is marked as 'trusted' under `wan_carriers`,
+ `ipv4_acl_in` is also required on all WAN interfaces.
+ wan_circuit_id:
+ The WAN circuit ID for this interface.
+ This is not rendered in the configuration but used for WAN
+ designs.
+ connected_to_pathfinder: For a WAN interface (`wan_carrier` is set), allow to disable the static tunnel towards Pathfinders.
+ cv_pathfinder_internet_exit:
+ PREVIEW: This key is in preview mode
+
+ Subclass of AvdModel.
+ raw_eos_cli: EOS CLI rendered directly on the Port-Channel interface in the final EOS configuration.
+ flow_tracking:
+ Configures flow-tracking on the interface. Overrides `fabric_flow_tracking.l3_port_channels`
+ setting.
+
+ Subclass of AvdModel.
+ structured_config:
+ Custom structured config for the Port-Channel interface.
+
+ Subclass of AvdModel.
+ _custom_data: _custom_data
+
+ """
+
+ class L3PortChannels(AvdIndexedList[str, L3PortChannelsItem]):
+ """Subclass of AvdIndexedList with `L3PortChannelsItem` items. Primary key is `name` (`str`)."""
+
+ _primary_key: ClassVar[str] = "name"
+
+ L3PortChannels._item_type = L3PortChannelsItem
+
_fields: ClassVar[dict] = {
"id": {"type": int},
"platform": {"type": str},
@@ -21295,6 +21968,7 @@ class L3Interfaces(AvdIndexedList[str, L3InterfacesItem]):
"wan_ha": {"type": WanHa},
"dps_mss_ipv4": {"type": str, "default": "auto"},
"l3_interfaces": {"type": L3Interfaces},
+ "l3_port_channels": {"type": L3PortChannels},
"data_plane_cpu_allocation_max": {"type": int},
"flow_tracker_type": {"type": str},
"_custom_data": {"type": dict},
@@ -22051,11 +22725,16 @@ class L3Interfaces(AvdIndexedList[str, L3InterfacesItem]):
l3_interfaces: L3Interfaces
"""
L3 Interfaces to configure on the node.
- Used to define the node for WAN interfaces when
- `wan_carrier` is set.
- Subclass of AvdIndexedList with `L3InterfacesItem` items. Primary key is
- `name` (`str`).
+ Subclass of AvdIndexedList with `L3InterfacesItem` items.
+ Primary key is `name` (`str`).
+ """
+ l3_port_channels: L3PortChannels
+ """
+ L3 Port-Channel interfaces to configure on the node.
+
+ Subclass of AvdIndexedList with
+ `L3PortChannelsItem` items. Primary key is `name` (`str`).
"""
data_plane_cpu_allocation_max: int | None
"""
@@ -22180,6 +22859,7 @@ def __init__(
wan_ha: WanHa | UndefinedType = Undefined,
dps_mss_ipv4: str | UndefinedType = Undefined,
l3_interfaces: L3Interfaces | UndefinedType = Undefined,
+ l3_port_channels: L3PortChannels | UndefinedType = Undefined,
data_plane_cpu_allocation_max: int | None | UndefinedType = Undefined,
flow_tracker_type: Literal["sampled", "hardware"] | None | UndefinedType = Undefined,
_custom_data: dict[str, Any] | UndefinedType = Undefined,
@@ -22715,11 +23395,14 @@ def __init__(
dps_mss_ipv4: IPv4 MSS value configured under "router path-selection" on WAN Devices.
l3_interfaces:
L3 Interfaces to configure on the node.
- Used to define the node for WAN interfaces when
- `wan_carrier` is set.
- Subclass of AvdIndexedList with `L3InterfacesItem` items. Primary key is
- `name` (`str`).
+ Subclass of AvdIndexedList with `L3InterfacesItem` items.
+ Primary key is `name` (`str`).
+ l3_port_channels:
+ L3 Port-Channel interfaces to configure on the node.
+
+ Subclass of AvdIndexedList with
+ `L3PortChannelsItem` items. Primary key is `name` (`str`).
data_plane_cpu_allocation_max:
Set the maximum number of CPU used for the data plane.
This setting is useful on virtual Route
@@ -24021,70 +24704,510 @@ def __init__(
"""
_fields: ClassVar[dict] = {
- "enabled": {"type": bool},
- "ipsec": {"type": bool, "default": True},
- "mtu": {"type": int, "default": 9194},
- "ha_interfaces": {"type": HaInterfaces},
- "ha_ipv4_pool": {"type": str},
- "max_ha_interfaces": {"type": int},
- "port_channel_id": {"type": int},
- "use_port_channel_for_direct_ha": {"type": bool, "default": True},
+ "enabled": {"type": bool},
+ "ipsec": {"type": bool, "default": True},
+ "mtu": {"type": int, "default": 9194},
+ "ha_interfaces": {"type": HaInterfaces},
+ "ha_ipv4_pool": {"type": str},
+ "max_ha_interfaces": {"type": int},
+ "port_channel_id": {"type": int},
+ "use_port_channel_for_direct_ha": {"type": bool, "default": True},
+ "flow_tracking": {"type": FlowTracking},
+ "_custom_data": {"type": dict},
+ }
+ enabled: bool | None
+ """Enable / Disable auto CV-Pathfinder HA, when two nodes are defined in the same node_group."""
+ ipsec: bool
+ """
+ Enable / Disable IPsec over HA path-group when HA is enabled.
+
+ Default value: `True`
+ """
+ mtu: int
+ """
+ Set MTU on WAN HA interfaces.
+
+ Default value: `9194`
+ """
+ ha_interfaces: HaInterfaces
+ """
+ Local WAN HA interfaces
+ Overwrite the default behavior which is to pick all the `uplink_interfaces`.
+ Can be used to filter uplink interfaces when there are multiple uplinks.
+ Limitations:
+ Either all
+ interfaces must be uplinks or all interfaces must not be uplinks.
+ Only one interface is supported
+ for non uplinks.
+
+ Subclass of AvdList with `str` items.
+ """
+ ha_ipv4_pool: str | None
+ """
+ IP address pool used for WAN HA connectivity.
+ IP is derived from the node ID.
+ Not used for uplink
+ interfaces.
+ """
+ max_ha_interfaces: int | None
+ """
+ Number of parallel links towards HA switches.
+ Can be used to reserve IP addresses for future
+ parallel HA links.
+ """
+ port_channel_id: int | None
+ """Port-channel ID to use for direct HA."""
+ use_port_channel_for_direct_ha: bool
+ """
+ Enable or disable using a port-channel interface for direct HA when there is only one interface.
+ This feature was introduced in EOS 4.33.0F.
+
+ Default value: `True`
+ """
+ flow_tracking: FlowTracking
+ """
+ Configures flow-tracking on the HA interfaces. Overrides `fabric_flow_tracking.wan_ha_links`
+ setting.
+
+ Subclass of AvdModel.
+ """
+ _custom_data: dict[str, Any]
+
+ if TYPE_CHECKING:
+
+ def __init__(
+ self,
+ *,
+ enabled: bool | None | UndefinedType = Undefined,
+ ipsec: bool | UndefinedType = Undefined,
+ mtu: int | UndefinedType = Undefined,
+ ha_interfaces: HaInterfaces | UndefinedType = Undefined,
+ ha_ipv4_pool: str | None | UndefinedType = Undefined,
+ max_ha_interfaces: int | None | UndefinedType = Undefined,
+ port_channel_id: int | None | UndefinedType = Undefined,
+ use_port_channel_for_direct_ha: bool | UndefinedType = Undefined,
+ flow_tracking: FlowTracking | UndefinedType = Undefined,
+ _custom_data: dict[str, Any] | UndefinedType = Undefined,
+ ) -> None:
+ """
+ WanHa.
+
+
+ Subclass of AvdModel.
+
+ Args:
+ enabled: Enable / Disable auto CV-Pathfinder HA, when two nodes are defined in the same node_group.
+ ipsec: Enable / Disable IPsec over HA path-group when HA is enabled.
+ mtu: Set MTU on WAN HA interfaces.
+ ha_interfaces:
+ Local WAN HA interfaces
+ Overwrite the default behavior which is to pick all the `uplink_interfaces`.
+ Can be used to filter uplink interfaces when there are multiple uplinks.
+ Limitations:
+ Either all
+ interfaces must be uplinks or all interfaces must not be uplinks.
+ Only one interface is supported
+ for non uplinks.
+
+ Subclass of AvdList with `str` items.
+ ha_ipv4_pool:
+ IP address pool used for WAN HA connectivity.
+ IP is derived from the node ID.
+ Not used for uplink
+ interfaces.
+ max_ha_interfaces:
+ Number of parallel links towards HA switches.
+ Can be used to reserve IP addresses for future
+ parallel HA links.
+ port_channel_id: Port-channel ID to use for direct HA.
+ use_port_channel_for_direct_ha:
+ Enable or disable using a port-channel interface for direct HA when there is only one interface.
+ This feature was introduced in EOS 4.33.0F.
+ flow_tracking:
+ Configures flow-tracking on the HA interfaces. Overrides `fabric_flow_tracking.wan_ha_links`
+ setting.
+
+ Subclass of AvdModel.
+ _custom_data: _custom_data
+
+ """
+
+ class L3InterfacesItem(AvdModel):
+ """Subclass of AvdModel."""
+
+ class Bgp(AvdModel):
+ """Subclass of AvdModel."""
+
+ _fields: ClassVar[dict] = {
+ "peer_as": {"type": str},
+ "ipv4_prefix_list_in": {"type": str},
+ "ipv4_prefix_list_out": {"type": str},
+ "_custom_data": {"type": dict},
+ }
+ peer_as: str
+ """
+ BGP AS <1-4294967295> or AS number in asdot notation "<1-65535>.<0-65535>".
+ For asdot notation in
+ YAML inputs, the value must be put in quotes, to prevent it from being interpreted as a float
+ number.
+ """
+ ipv4_prefix_list_in: str | None
+ """
+ Prefix List Name. Accept routes for only these prefixes from the peer.
+ Required for wan interfaces.
+ """
+ ipv4_prefix_list_out: str | None
+ """
+ Prefix List Name. Advertise routes for only these prefixes.
+ If not specified, nothing would be
+ advertised.
+ """
+ _custom_data: dict[str, Any]
+
+ if TYPE_CHECKING:
+
+ def __init__(
+ self,
+ *,
+ peer_as: str | UndefinedType = Undefined,
+ ipv4_prefix_list_in: str | None | UndefinedType = Undefined,
+ ipv4_prefix_list_out: str | None | UndefinedType = Undefined,
+ _custom_data: dict[str, Any] | UndefinedType = Undefined,
+ ) -> None:
+ """
+ Bgp.
+
+
+ Subclass of AvdModel.
+
+ Args:
+ peer_as:
+ BGP AS <1-4294967295> or AS number in asdot notation "<1-65535>.<0-65535>".
+ For asdot notation in
+ YAML inputs, the value must be put in quotes, to prevent it from being interpreted as a float
+ number.
+ ipv4_prefix_list_in:
+ Prefix List Name. Accept routes for only these prefixes from the peer.
+ Required for wan interfaces.
+ ipv4_prefix_list_out:
+ Prefix List Name. Advertise routes for only these prefixes.
+ If not specified, nothing would be
+ advertised.
+ _custom_data: _custom_data
+
+ """
+
+ class StaticRoutesItem(AvdModel):
+ """Subclass of AvdModel."""
+
+ _fields: ClassVar[dict] = {"prefix": {"type": str}, "_custom_data": {"type": dict}}
+ prefix: str
+ """IPv4_network/Mask."""
+ _custom_data: dict[str, Any]
+
+ if TYPE_CHECKING:
+
+ def __init__(
+ self, *, prefix: str | UndefinedType = Undefined, _custom_data: dict[str, Any] | UndefinedType = Undefined
+ ) -> None:
+ """
+ StaticRoutesItem.
+
+
+ Subclass of AvdModel.
+
+ Args:
+ prefix: IPv4_network/Mask.
+ _custom_data: _custom_data
+
+ """
+
+ class StaticRoutes(AvdList[StaticRoutesItem]):
+ """Subclass of AvdList with `StaticRoutesItem` items."""
+
+ StaticRoutes._item_type = StaticRoutesItem
+
+ class CvPathfinderInternetExit(AvdModel):
+ """Subclass of AvdModel."""
+
+ class PoliciesItem(AvdModel):
+ """Subclass of AvdModel."""
+
+ _fields: ClassVar[dict] = {"name": {"type": str}, "tunnel_interface_numbers": {"type": str}, "_custom_data": {"type": dict}}
+ name: str
+ """Internet-exit policy name."""
+ tunnel_interface_numbers: str | None
+ """
+ Number range to use for Tunnel interfaces to an internet-exit service provider using this local
+ interface.
+ Examples: '1-3' or '100,200,300'
+ """
+ _custom_data: dict[str, Any]
+
+ if TYPE_CHECKING:
+
+ def __init__(
+ self,
+ *,
+ name: str | UndefinedType = Undefined,
+ tunnel_interface_numbers: str | None | UndefinedType = Undefined,
+ _custom_data: dict[str, Any] | UndefinedType = Undefined,
+ ) -> None:
+ """
+ PoliciesItem.
+
+
+ Subclass of AvdModel.
+
+ Args:
+ name: Internet-exit policy name.
+ tunnel_interface_numbers:
+ Number range to use for Tunnel interfaces to an internet-exit service provider using this local
+ interface.
+ Examples: '1-3' or '100,200,300'
+ _custom_data: _custom_data
+
+ """
+
+ class Policies(AvdIndexedList[str, PoliciesItem]):
+ """Subclass of AvdIndexedList with `PoliciesItem` items. Primary key is `name` (`str`)."""
+
+ _primary_key: ClassVar[str] = "name"
+
+ Policies._item_type = PoliciesItem
+
+ _fields: ClassVar[dict] = {"policies": {"type": Policies}, "_custom_data": {"type": dict}}
+ policies: Policies
+ """
+ List of Internet-exit policies using this interface as exit.
+
+ Subclass of AvdIndexedList with
+ `PoliciesItem` items. Primary key is `name` (`str`).
+ """
+ _custom_data: dict[str, Any]
+
+ if TYPE_CHECKING:
+
+ def __init__(
+ self, *, policies: Policies | UndefinedType = Undefined, _custom_data: dict[str, Any] | UndefinedType = Undefined
+ ) -> None:
+ """
+ CvPathfinderInternetExit.
+
+
+ Subclass of AvdModel.
+
+ Args:
+ policies:
+ List of Internet-exit policies using this interface as exit.
+
+ Subclass of AvdIndexedList with
+ `PoliciesItem` items. Primary key is `name` (`str`).
+ _custom_data: _custom_data
+
+ """
+
+ class FlowTracking(AvdModel):
+ """Subclass of AvdModel."""
+
+ _fields: ClassVar[dict] = {"enabled": {"type": bool}, "name": {"type": str}, "_custom_data": {"type": dict}}
+ enabled: bool | None
+ name: str | None
+ """Flow tracker name as defined in flow_tracking_settings."""
+ _custom_data: dict[str, Any]
+
+ if TYPE_CHECKING:
+
+ def __init__(
+ self,
+ *,
+ enabled: bool | None | UndefinedType = Undefined,
+ name: str | None | UndefinedType = Undefined,
+ _custom_data: dict[str, Any] | UndefinedType = Undefined,
+ ) -> None:
+ """
+ FlowTracking.
+
+
+ Subclass of AvdModel.
+
+ Args:
+ enabled: enabled
+ name: Flow tracker name as defined in flow_tracking_settings.
+ _custom_data: _custom_data
+
+ """
+
+ class StructuredConfig(EosCliConfigGen.EthernetInterfacesItem):
+ """Subclass of AvdModel."""
+
+ _fields: ClassVar[dict] = {
+ "profile": {"type": str},
+ "name": {"type": str},
+ "description": {"type": str},
+ "ip_address": {"type": str},
+ "dhcp_ip": {"type": str},
+ "public_ip": {"type": str},
+ "encapsulation_dot1q_vlan": {"type": int},
+ "dhcp_accept_default_route": {"type": bool, "default": True},
+ "enabled": {"type": bool, "default": True},
+ "speed": {"type": str},
+ "peer": {"type": str},
+ "peer_interface": {"type": str},
+ "peer_ip": {"type": str},
+ "bgp": {"type": Bgp},
+ "ipv4_acl_in": {"type": str},
+ "ipv4_acl_out": {"type": str},
+ "static_routes": {"type": StaticRoutes},
+ "qos_profile": {"type": str},
+ "wan_carrier": {"type": str},
+ "wan_circuit_id": {"type": str},
+ "connected_to_pathfinder": {"type": bool, "default": True},
+ "cv_pathfinder_internet_exit": {"type": CvPathfinderInternetExit},
+ "raw_eos_cli": {"type": str},
"flow_tracking": {"type": FlowTracking},
+ "structured_config": {"type": StructuredConfig},
"_custom_data": {"type": dict},
}
- enabled: bool | None
- """Enable / Disable auto CV-Pathfinder HA, when two nodes are defined in the same node_group."""
- ipsec: bool
+ profile: str | None
+ """L3 interface profile name. Profile defined under `l3_interface_profiles`."""
+ name: str
"""
- Enable / Disable IPsec over HA path-group when HA is enabled.
+ Ethernet interface name like 'Ethernet2' or subinterface name like 'Ethernet2.42'.
+ For a
+ subinterface, the parent physical interface is automatically created.
+ """
+ description: str | None
+ """
+ Interface description.
+ If not set a default description will be configured with '[[
+ ]]'.
+ """
+ ip_address: str | None
+ """Node IPv4 address/Mask or 'dhcp'."""
+ dhcp_ip: str | None
+ """
+ When the `ip_address` is `dhcp`, this optional field allows to indicate the expected
+ IPv4 address
+ (without mask) to be allocated on the interface if known.
+ This is not rendered in the configuration
+ but can be used for substitution of 'interface_ip' in the Access-list
+ set under `ipv4_acl_in` and
+ `ipv4_acl_out`.
+ """
+ public_ip: str | None
+ """
+ Node IPv4 address (no mask).
+
+ This is used to get the public IP (if known) when the device is behind
+ NAT.
+ This is only used for `wan_rr` routers (AutoVPN RRs and Pathfinders) to determine the Public IP
+ with the following preference:
+ `wan_route_servers.path_groups.interfaces.ip_address`
+ ->
+ `l3_interfaces.public_ip`
+ -> `l3_interfaces.ip_address`
+
+ The determined Public IP is used
+ by WAN routers when peering with this interface.
+ """
+ encapsulation_dot1q_vlan: int | None
+ """
+ For subinterfaces the dot1q vlan is derived from the interface name by default, but can also be
+ specified.
+ """
+ dhcp_accept_default_route: bool
+ """
+ Accept a default route from DHCP if `ip_address` is set to `dhcp`.
Default value: `True`
"""
- mtu: int
+ enabled: bool
"""
- Set MTU on WAN HA interfaces.
+ Enable or Shutdown the interface.
- Default value: `9194`
+ Default value: `True`
"""
- ha_interfaces: HaInterfaces
+ speed: str | None
"""
- Local WAN HA interfaces
- Overwrite the default behavior which is to pick all the `uplink_interfaces`.
- Can be used to filter uplink interfaces when there are multiple uplinks.
- Limitations:
- Either all
- interfaces must be uplinks or all interfaces must not be uplinks.
- Only one interface is supported
- for non uplinks.
+ Speed should be set in the format `` or `forced ` or `auto
+ `.
+ """
+ peer: str | None
+ """The peer device name. Used for description and documentation."""
+ peer_interface: str | None
+ """The peer device interface. Used for description and documentation."""
+ peer_ip: str | None
+ """
+ The peer device IPv4 address (no mask). Used as default route gateway if `set_default_route` is true
+ and `ip` is an IP address.
+ """
+ bgp: Bgp
+ """
+ Enforce IPv4 BGP peering for the peer
- Subclass of AvdList with `str` items.
+ Subclass of AvdModel.
"""
- ha_ipv4_pool: str | None
+ ipv4_acl_in: str | None
"""
- IP address pool used for WAN HA connectivity.
- IP is derived from the node ID.
- Not used for uplink
- interfaces.
+ Name of the IPv4 access-list to be assigned in the ingress direction.
+ The access-list must be
+ defined under `ipv4_acls` and supports field substitution for "interface_ip" and "peer_ip".
+ Required
+ for all WAN interfaces (`wan_carrier` is set) unless the carrier is marked as 'trusted' under
+ `wan_carriers`.
"""
- max_ha_interfaces: int | None
+ ipv4_acl_out: str | None
"""
- Number of parallel links towards HA switches.
- Can be used to reserve IP addresses for future
- parallel HA links.
+ Name of the IPv4 Access-list to be assigned in the egress direction.
+ The access-list must be defined
+ under `ipv4_acls` and supports field substitution for "interface_ip" and "peer_ip".
"""
- port_channel_id: int | None
- """Port-channel ID to use for direct HA."""
- use_port_channel_for_direct_ha: bool
+ static_routes: StaticRoutes
"""
- Enable or disable using a port-channel interface for direct HA when there is only one interface.
- This feature was introduced in EOS 4.33.0F.
+ Configure IPv4 static routes pointing to `peer_ip`.
+
+ Subclass of AvdList with `StaticRoutesItem`
+ items.
+ """
+ qos_profile: str | None
+ """QOS service profile."""
+ wan_carrier: str | None
+ """
+ The WAN carrier this interface is connected to.
+ This is used to infer the path-groups in which this
+ interface should be configured.
+ Unless the carrier is marked as 'trusted' under `wan_carriers`,
+ `ipv4_acl_in` is also required on all WAN interfaces.
+ """
+ wan_circuit_id: str | None
+ """
+ The WAN circuit ID for this interface.
+ This is not rendered in the configuration but used for WAN
+ designs.
+ """
+ connected_to_pathfinder: bool
+ """
+ For a WAN interface (`wan_carrier` is set), allow to disable the static tunnel towards Pathfinders.
Default value: `True`
"""
+ cv_pathfinder_internet_exit: CvPathfinderInternetExit
+ """
+ PREVIEW: This key is in preview mode
+
+ Subclass of AvdModel.
+ """
+ raw_eos_cli: str | None
+ """EOS CLI rendered directly on the interface in the final EOS configuration."""
flow_tracking: FlowTracking
"""
- Configures flow-tracking on the HA interfaces. Overrides `fabric_flow_tracking.wan_ha_links`
- setting.
+ Configures flow-tracking on the interface. Overrides `fabric_flow_tracking.l3_interfaces` setting.
+ Subclass of AvdModel.
+ """
+ structured_config: StructuredConfig
+ """
+ Custom structured config for the Ethernet interface.
Subclass of AvdModel.
"""
@@ -24095,63 +25218,225 @@ def __init__(
def __init__(
self,
*,
- enabled: bool | None | UndefinedType = Undefined,
- ipsec: bool | UndefinedType = Undefined,
- mtu: int | UndefinedType = Undefined,
- ha_interfaces: HaInterfaces | UndefinedType = Undefined,
- ha_ipv4_pool: str | None | UndefinedType = Undefined,
- max_ha_interfaces: int | None | UndefinedType = Undefined,
- port_channel_id: int | None | UndefinedType = Undefined,
- use_port_channel_for_direct_ha: bool | UndefinedType = Undefined,
+ profile: str | None | UndefinedType = Undefined,
+ name: str | UndefinedType = Undefined,
+ description: str | None | UndefinedType = Undefined,
+ ip_address: str | None | UndefinedType = Undefined,
+ dhcp_ip: str | None | UndefinedType = Undefined,
+ public_ip: str | None | UndefinedType = Undefined,
+ encapsulation_dot1q_vlan: int | None | UndefinedType = Undefined,
+ dhcp_accept_default_route: bool | UndefinedType = Undefined,
+ enabled: bool | UndefinedType = Undefined,
+ speed: str | None | UndefinedType = Undefined,
+ peer: str | None | UndefinedType = Undefined,
+ peer_interface: str | None | UndefinedType = Undefined,
+ peer_ip: str | None | UndefinedType = Undefined,
+ bgp: Bgp | UndefinedType = Undefined,
+ ipv4_acl_in: str | None | UndefinedType = Undefined,
+ ipv4_acl_out: str | None | UndefinedType = Undefined,
+ static_routes: StaticRoutes | UndefinedType = Undefined,
+ qos_profile: str | None | UndefinedType = Undefined,
+ wan_carrier: str | None | UndefinedType = Undefined,
+ wan_circuit_id: str | None | UndefinedType = Undefined,
+ connected_to_pathfinder: bool | UndefinedType = Undefined,
+ cv_pathfinder_internet_exit: CvPathfinderInternetExit | UndefinedType = Undefined,
+ raw_eos_cli: str | None | UndefinedType = Undefined,
flow_tracking: FlowTracking | UndefinedType = Undefined,
+ structured_config: StructuredConfig | UndefinedType = Undefined,
_custom_data: dict[str, Any] | UndefinedType = Undefined,
) -> None:
"""
- WanHa.
+ L3InterfacesItem.
Subclass of AvdModel.
Args:
- enabled: Enable / Disable auto CV-Pathfinder HA, when two nodes are defined in the same node_group.
- ipsec: Enable / Disable IPsec over HA path-group when HA is enabled.
- mtu: Set MTU on WAN HA interfaces.
- ha_interfaces:
- Local WAN HA interfaces
- Overwrite the default behavior which is to pick all the `uplink_interfaces`.
- Can be used to filter uplink interfaces when there are multiple uplinks.
- Limitations:
- Either all
- interfaces must be uplinks or all interfaces must not be uplinks.
- Only one interface is supported
- for non uplinks.
+ profile: L3 interface profile name. Profile defined under `l3_interface_profiles`.
+ name:
+ Ethernet interface name like 'Ethernet2' or subinterface name like 'Ethernet2.42'.
+ For a
+ subinterface, the parent physical interface is automatically created.
+ description:
+ Interface description.
+ If not set a default description will be configured with '[[
+ ]]'.
+ ip_address: Node IPv4 address/Mask or 'dhcp'.
+ dhcp_ip:
+ When the `ip_address` is `dhcp`, this optional field allows to indicate the expected
+ IPv4 address
+ (without mask) to be allocated on the interface if known.
+ This is not rendered in the configuration
+ but can be used for substitution of 'interface_ip' in the Access-list
+ set under `ipv4_acl_in` and
+ `ipv4_acl_out`.
+ public_ip:
+ Node IPv4 address (no mask).
- Subclass of AvdList with `str` items.
- ha_ipv4_pool:
- IP address pool used for WAN HA connectivity.
- IP is derived from the node ID.
- Not used for uplink
- interfaces.
- max_ha_interfaces:
- Number of parallel links towards HA switches.
- Can be used to reserve IP addresses for future
- parallel HA links.
- port_channel_id: Port-channel ID to use for direct HA.
- use_port_channel_for_direct_ha:
- Enable or disable using a port-channel interface for direct HA when there is only one interface.
- This feature was introduced in EOS 4.33.0F.
+ This is used to get the public IP (if known) when the device is behind
+ NAT.
+ This is only used for `wan_rr` routers (AutoVPN RRs and Pathfinders) to determine the Public IP
+ with the following preference:
+ `wan_route_servers.path_groups.interfaces.ip_address`
+ ->
+ `l3_interfaces.public_ip`
+ -> `l3_interfaces.ip_address`
+
+ The determined Public IP is used
+ by WAN routers when peering with this interface.
+ encapsulation_dot1q_vlan:
+ For subinterfaces the dot1q vlan is derived from the interface name by default, but can also be
+ specified.
+ dhcp_accept_default_route: Accept a default route from DHCP if `ip_address` is set to `dhcp`.
+ enabled: Enable or Shutdown the interface.
+ speed:
+ Speed should be set in the format `` or `forced ` or `auto
+ `.
+ peer: The peer device name. Used for description and documentation.
+ peer_interface: The peer device interface. Used for description and documentation.
+ peer_ip:
+ The peer device IPv4 address (no mask). Used as default route gateway if `set_default_route` is true
+ and `ip` is an IP address.
+ bgp:
+ Enforce IPv4 BGP peering for the peer
+
+ Subclass of AvdModel.
+ ipv4_acl_in:
+ Name of the IPv4 access-list to be assigned in the ingress direction.
+ The access-list must be
+ defined under `ipv4_acls` and supports field substitution for "interface_ip" and "peer_ip".
+ Required
+ for all WAN interfaces (`wan_carrier` is set) unless the carrier is marked as 'trusted' under
+ `wan_carriers`.
+ ipv4_acl_out:
+ Name of the IPv4 Access-list to be assigned in the egress direction.
+ The access-list must be defined
+ under `ipv4_acls` and supports field substitution for "interface_ip" and "peer_ip".
+ static_routes:
+ Configure IPv4 static routes pointing to `peer_ip`.
+
+ Subclass of AvdList with `StaticRoutesItem`
+ items.
+ qos_profile: QOS service profile.
+ wan_carrier:
+ The WAN carrier this interface is connected to.
+ This is used to infer the path-groups in which this
+ interface should be configured.
+ Unless the carrier is marked as 'trusted' under `wan_carriers`,
+ `ipv4_acl_in` is also required on all WAN interfaces.
+ wan_circuit_id:
+ The WAN circuit ID for this interface.
+ This is not rendered in the configuration but used for WAN
+ designs.
+ connected_to_pathfinder: For a WAN interface (`wan_carrier` is set), allow to disable the static tunnel towards Pathfinders.
+ cv_pathfinder_internet_exit:
+ PREVIEW: This key is in preview mode
+
+ Subclass of AvdModel.
+ raw_eos_cli: EOS CLI rendered directly on the interface in the final EOS configuration.
flow_tracking:
- Configures flow-tracking on the HA interfaces. Overrides `fabric_flow_tracking.wan_ha_links`
- setting.
+ Configures flow-tracking on the interface. Overrides `fabric_flow_tracking.l3_interfaces` setting.
+ Subclass of AvdModel.
+ structured_config:
+ Custom structured config for the Ethernet interface.
Subclass of AvdModel.
_custom_data: _custom_data
"""
- class L3InterfacesItem(AvdModel):
+ class L3Interfaces(AvdIndexedList[str, L3InterfacesItem]):
+ """Subclass of AvdIndexedList with `L3InterfacesItem` items. Primary key is `name` (`str`)."""
+
+ _primary_key: ClassVar[str] = "name"
+
+ L3Interfaces._item_type = L3InterfacesItem
+
+ class L3PortChannelsItem(AvdModel):
"""Subclass of AvdModel."""
+ class MemberInterfacesItem(AvdModel):
+ """Subclass of AvdModel."""
+
+ _fields: ClassVar[dict] = {
+ "name": {"type": str},
+ "description": {"type": str},
+ "peer": {"type": str},
+ "peer_interface": {"type": str},
+ "speed": {"type": str},
+ "_custom_data": {"type": dict},
+ }
+ name: str
+ """
+ Ethernet interface name like 'Ethernet2'.
+ Member interface cannot be subinterface.
+ """
+ description: str | None
+ """
+ Interface description for this member.
+ If not set a default description will be configured with
+ '[[ ]]'.
+ """
+ peer: str | None
+ """
+ The peer device name. Used for description and documentation.
+ If not set, this inherits the peer
+ setting on the port-channel interface.
+ """
+ peer_interface: str | None
+ """The peer device interface. Used for description and documentation."""
+ speed: str | None
+ """
+ Speed should be set in the format `` or `forced ` or `auto
+ `.
+ """
+ _custom_data: dict[str, Any]
+
+ if TYPE_CHECKING:
+
+ def __init__(
+ self,
+ *,
+ name: str | UndefinedType = Undefined,
+ description: str | None | UndefinedType = Undefined,
+ peer: str | None | UndefinedType = Undefined,
+ peer_interface: str | None | UndefinedType = Undefined,
+ speed: str | None | UndefinedType = Undefined,
+ _custom_data: dict[str, Any] | UndefinedType = Undefined,
+ ) -> None:
+ """
+ MemberInterfacesItem.
+
+
+ Subclass of AvdModel.
+
+ Args:
+ name:
+ Ethernet interface name like 'Ethernet2'.
+ Member interface cannot be subinterface.
+ description:
+ Interface description for this member.
+ If not set a default description will be configured with
+ '[[ ]]'.
+ peer:
+ The peer device name. Used for description and documentation.
+ If not set, this inherits the peer
+ setting on the port-channel interface.
+ peer_interface: The peer device interface. Used for description and documentation.
+ speed:
+ Speed should be set in the format `` or `forced ` or `auto
+ `.
+ _custom_data: _custom_data
+
+ """
+
+ class MemberInterfaces(AvdIndexedList[str, MemberInterfacesItem]):
+ """Subclass of AvdIndexedList with `MemberInterfacesItem` items. Primary key is `name` (`str`)."""
+
+ _primary_key: ClassVar[str] = "name"
+
+ MemberInterfaces._item_type = MemberInterfacesItem
+
class Bgp(AvdModel):
"""Subclass of AvdModel."""
@@ -24239,8 +25524,10 @@ def __init__(
"""
- class StaticRoutes(AvdList[StaticRoutesItem]):
- """Subclass of AvdList with `StaticRoutesItem` items."""
+ class StaticRoutes(AvdIndexedList[str, StaticRoutesItem]):
+ """Subclass of AvdIndexedList with `StaticRoutesItem` items. Primary key is `prefix` (`str`)."""
+
+ _primary_key: ClassVar[str] = "prefix"
StaticRoutes._item_type = StaticRoutesItem
@@ -24355,22 +25642,22 @@ def __init__(
"""
- class StructuredConfig(EosCliConfigGen.EthernetInterfacesItem):
+ class StructuredConfig(EosCliConfigGen.PortChannelInterfacesItem):
"""Subclass of AvdModel."""
_fields: ClassVar[dict] = {
- "profile": {"type": str},
"name": {"type": str},
"description": {"type": str},
+ "mode": {"type": str, "default": "active"},
+ "member_interfaces": {"type": MemberInterfaces},
"ip_address": {"type": str},
"dhcp_ip": {"type": str},
"public_ip": {"type": str},
"encapsulation_dot1q_vlan": {"type": int},
"dhcp_accept_default_route": {"type": bool, "default": True},
"enabled": {"type": bool, "default": True},
- "speed": {"type": str},
"peer": {"type": str},
- "peer_interface": {"type": str},
+ "peer_port_channel": {"type": str},
"peer_ip": {"type": str},
"bgp": {"type": Bgp},
"ipv4_acl_in": {"type": str},
@@ -24386,19 +25673,32 @@ class StructuredConfig(EosCliConfigGen.EthernetInterfacesItem):
"structured_config": {"type": StructuredConfig},
"_custom_data": {"type": dict},
}
- profile: str | None
- """L3 interface profile name. Profile defined under `l3_interface_profiles`."""
name: str
"""
- Ethernet interface name like 'Ethernet2' or subinterface name like 'Ethernet2.42'.
+ Port-Channel interface name like 'Port-Channel2' or subinterface name like 'Port-Channel2.42'.
For a
- subinterface, the parent physical interface is automatically created.
+ Port-Channel subinterface, the parent Port-Channel interface must be defined as well.
"""
description: str | None
"""
Interface description.
If not set a default description will be configured with '[[
- ]]'.
+ ]]'.
+ """
+ mode: Literal["active", "passive", "on"]
+ """
+ Port-Channel mode.
+ Should not be set on Port-Channel subinterfaces.
+
+ Default value: `"active"`
+ """
+ member_interfaces: MemberInterfaces
+ """
+ Port-Channel member interfaces.
+ Should not be set on Port-Channel subinterfaces.
+
+ Subclass of
+ AvdIndexedList with `MemberInterfacesItem` items. Primary key is `name` (`str`).
"""
ip_address: str | None
"""Node IPv4 address/Mask or 'dhcp'."""
@@ -24422,11 +25722,11 @@ class StructuredConfig(EosCliConfigGen.EthernetInterfacesItem):
with the following preference:
`wan_route_servers.path_groups.interfaces.ip_address`
->
- `l3_interfaces.public_ip`
- -> `l3_interfaces.ip_address`
+ `l3_port_channels.public_ip`
+ -> `l3_port_channels.ip_address`
- The determined Public IP is used
- by WAN routers when peering with this interface.
+ The determined Public IP is
+ used by WAN routers when peering with this interface.
"""
encapsulation_dot1q_vlan: int | None
"""
@@ -24445,15 +25745,10 @@ class StructuredConfig(EosCliConfigGen.EthernetInterfacesItem):
Default value: `True`
"""
- speed: str | None
- """
- Speed should be set in the format `` or `forced ` or `auto
- `.
- """
peer: str | None
"""The peer device name. Used for description and documentation."""
- peer_interface: str | None
- """The peer device interface. Used for description and documentation."""
+ peer_port_channel: str | None
+ """The peer device port-channel interface. Used for description and documentation."""
peer_ip: str | None
"""
The peer device IPv4 address (no mask). Used as default route gateway if `set_default_route` is true
@@ -24484,8 +25779,8 @@ class StructuredConfig(EosCliConfigGen.EthernetInterfacesItem):
"""
Configure IPv4 static routes pointing to `peer_ip`.
- Subclass of AvdList with `StaticRoutesItem`
- items.
+ Subclass of AvdIndexedList with
+ `StaticRoutesItem` items. Primary key is `prefix` (`str`).
"""
qos_profile: str | None
"""QOS service profile."""
@@ -24516,15 +25811,17 @@ class StructuredConfig(EosCliConfigGen.EthernetInterfacesItem):
Subclass of AvdModel.
"""
raw_eos_cli: str | None
- """EOS CLI rendered directly on the interface in the final EOS configuration."""
+ """EOS CLI rendered directly on the Port-Channel interface in the final EOS configuration."""
flow_tracking: FlowTracking
"""
- Configures flow-tracking on the interface. Overrides `fabric_flow_tracking.l3_interfaces` setting.
+ Configures flow-tracking on the interface. Overrides `fabric_flow_tracking.l3_port_channels`
+ setting.
+
Subclass of AvdModel.
"""
structured_config: StructuredConfig
"""
- Custom structured config for the Ethernet interface.
+ Custom structured config for the Port-Channel interface.
Subclass of AvdModel.
"""
@@ -24535,18 +25832,18 @@ class StructuredConfig(EosCliConfigGen.EthernetInterfacesItem):
def __init__(
self,
*,
- profile: str | None | UndefinedType = Undefined,
name: str | UndefinedType = Undefined,
description: str | None | UndefinedType = Undefined,
+ mode: Literal["active", "passive", "on"] | UndefinedType = Undefined,
+ member_interfaces: MemberInterfaces | UndefinedType = Undefined,
ip_address: str | None | UndefinedType = Undefined,
dhcp_ip: str | None | UndefinedType = Undefined,
public_ip: str | None | UndefinedType = Undefined,
encapsulation_dot1q_vlan: int | None | UndefinedType = Undefined,
dhcp_accept_default_route: bool | UndefinedType = Undefined,
enabled: bool | UndefinedType = Undefined,
- speed: str | None | UndefinedType = Undefined,
peer: str | None | UndefinedType = Undefined,
- peer_interface: str | None | UndefinedType = Undefined,
+ peer_port_channel: str | None | UndefinedType = Undefined,
peer_ip: str | None | UndefinedType = Undefined,
bgp: Bgp | UndefinedType = Undefined,
ipv4_acl_in: str | None | UndefinedType = Undefined,
@@ -24563,21 +25860,29 @@ def __init__(
_custom_data: dict[str, Any] | UndefinedType = Undefined,
) -> None:
"""
- L3InterfacesItem.
+ L3PortChannelsItem.
Subclass of AvdModel.
Args:
- profile: L3 interface profile name. Profile defined under `l3_interface_profiles`.
name:
- Ethernet interface name like 'Ethernet2' or subinterface name like 'Ethernet2.42'.
+ Port-Channel interface name like 'Port-Channel2' or subinterface name like 'Port-Channel2.42'.
For a
- subinterface, the parent physical interface is automatically created.
+ Port-Channel subinterface, the parent Port-Channel interface must be defined as well.
description:
Interface description.
If not set a default description will be configured with '[[
- ]]'.
+