From 2245499e5146c764b1a9b212ca1ec9c064be0952 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 11 Feb 2025 01:02:45 +0000 Subject: [PATCH] Feat(eos_designs): Add support for RSS interface profile for select platforms Updated unit tests and addressed review feedback for more information, see https://pre-commit.ci --- ...ss-profile-duplicate-interface-members.yml | 27 + .../rss-profile-exceed-max-rx-queue-cnt.yml | 21 + .../rss-profile-worker-id-exceed-max.yml | 23 + .../inventory/hosts.yml | 3 + .../intended/configs/rss-profile-options.cfg | 161 +++ .../rss-profile-options.yml | 210 ++++ .../host_vars/rss-profile-options.yml | 71 ++ .../inventory/hosts.yml | 1 + .../node-type-l3-interfaces-configuration.md | 115 +- ...ode-type-l3-port-channels-configuration.md | 92 +- .../docs/tables/platform-settings.md | 45 +- .../pyavd/_eos_designs/schema/__init__.py | 1109 +++++++++++++---- .../schema/eos_designs.schema.yml | 91 +- .../defs_node_type_l3_interfaces.schema.yml | 18 +- ...defs_node_type_l3_port_channels.schema.yml | 18 +- .../platform_settings.schema.yml | 36 +- .../pyavd/_eos_designs/shared_utils/misc.py | 109 +- .../structured_config/base/__init__.py | 4 +- 18 files changed, 1788 insertions(+), 366 deletions(-) create mode 100644 ansible_collections/arista/avd/molecule/eos_designs_negative_unit_tests/inventory/host_vars/rss-profile-duplicate-interface-members.yml create mode 100644 ansible_collections/arista/avd/molecule/eos_designs_negative_unit_tests/inventory/host_vars/rss-profile-exceed-max-rx-queue-cnt.yml create mode 100644 ansible_collections/arista/avd/molecule/eos_designs_negative_unit_tests/inventory/host_vars/rss-profile-worker-id-exceed-max.yml create mode 100644 ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/configs/rss-profile-options.cfg create mode 100644 ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/rss-profile-options.yml create mode 100644 ansible_collections/arista/avd/molecule/eos_designs_unit_tests/inventory/host_vars/rss-profile-options.yml diff --git a/ansible_collections/arista/avd/molecule/eos_designs_negative_unit_tests/inventory/host_vars/rss-profile-duplicate-interface-members.yml b/ansible_collections/arista/avd/molecule/eos_designs_negative_unit_tests/inventory/host_vars/rss-profile-duplicate-interface-members.yml new file mode 100644 index 00000000000..65c3c947862 --- /dev/null +++ b/ansible_collections/arista/avd/molecule/eos_designs_negative_unit_tests/inventory/host_vars/rss-profile-duplicate-interface-members.yml @@ -0,0 +1,27 @@ +--- +type: l3leaf +l3leaf: + defaults: + platform: AWE-5510 + nodes: + - bgp_as: 65000 + name: rss-profile-duplicate-interface-members + id: 1 + loopback_ipv4_pool: 192.168.0.0/24 + vtep_loopback_ipv4_pool: 192.168.1.0/24 + l3_interfaces: + - name: Ethernet1/19 + ip_address: 172.16.0.3/30 + rx_queue: + count: 2 + l3_port_channels: + - name: Port-Channel5 + ip_address: 172.16.0.2/30 + member_interfaces: + - name: Ethernet1/19 + rx_queue: + mode: exclusive + +expected_error_message: >- + Found duplicate objects with conflicting data while generating configuration for Port-Channel member interface defined with RSS settings. + {'name': 'Ethernet1/19', 'rx_queue': {'mode': 'exclusive'}} conflicts with {'name': 'Ethernet1/19', 'rx_queue': {'count': 2}}. diff --git a/ansible_collections/arista/avd/molecule/eos_designs_negative_unit_tests/inventory/host_vars/rss-profile-exceed-max-rx-queue-cnt.yml b/ansible_collections/arista/avd/molecule/eos_designs_negative_unit_tests/inventory/host_vars/rss-profile-exceed-max-rx-queue-cnt.yml new file mode 100644 index 00000000000..5da60a78a9d --- /dev/null +++ b/ansible_collections/arista/avd/molecule/eos_designs_negative_unit_tests/inventory/host_vars/rss-profile-exceed-max-rx-queue-cnt.yml @@ -0,0 +1,21 @@ +--- +type: l3leaf +l3leaf: + defaults: + platform: AWE-5310 + nodes: + - bgp_as: 65000 + name: rss-profile-exceed-max-rx-queue-cnt + id: 1 + loopback_ipv4_pool: 192.168.0.0/24 + vtep_loopback_ipv4_pool: 192.168.1.0/24 + l3_port_channels: + - name: Port-Channel5 + ip_address: 172.16.0.2/30 + member_interfaces: + - name: Ethernet1/19 + rx_queue: + count: 10 + +expected_error_message: >- + 'rx_queue' count for interface 'Ethernet1/19' exceeds maximum supported '6' for this platform. diff --git a/ansible_collections/arista/avd/molecule/eos_designs_negative_unit_tests/inventory/host_vars/rss-profile-worker-id-exceed-max.yml b/ansible_collections/arista/avd/molecule/eos_designs_negative_unit_tests/inventory/host_vars/rss-profile-worker-id-exceed-max.yml new file mode 100644 index 00000000000..55fec62143a --- /dev/null +++ b/ansible_collections/arista/avd/molecule/eos_designs_negative_unit_tests/inventory/host_vars/rss-profile-worker-id-exceed-max.yml @@ -0,0 +1,23 @@ +--- +type: l3leaf +l3leaf: + defaults: + platform: AWE-5510 + nodes: + - bgp_as: 65000 + name: rss-profile-worker-id-exceed-max + id: 1 + loopback_ipv4_pool: 192.168.0.0/24 + vtep_loopback_ipv4_pool: 192.168.1.0/24 + l3_port_channels: + - name: Port-Channel5 + ip_address: 172.16.0.2/30 + member_interfaces: + - name: Ethernet1/19 + rx_queue: + worker: + - 2 + - 14-17 + +expected_error_message: >- + One or more worker ids within '14-17' under 'rx_queue' for interface 'Ethernet1/19' equal or exceed maximum supported '16' for this platform. diff --git a/ansible_collections/arista/avd/molecule/eos_designs_negative_unit_tests/inventory/hosts.yml b/ansible_collections/arista/avd/molecule/eos_designs_negative_unit_tests/inventory/hosts.yml index fee05668376..61bc5a0f9f3 100644 --- a/ansible_collections/arista/avd/molecule/eos_designs_negative_unit_tests/inventory/hosts.yml +++ b/ansible_collections/arista/avd/molecule/eos_designs_negative_unit_tests/inventory/hosts.yml @@ -130,6 +130,9 @@ all: missing-wan-router-l3-interfaces-ip-address: ntp-settings-server-vrf-missing-mgmt-ip: ntp-settings-server-vrf-missing-inband-mgmt-interface: + rss-profile-duplicate-interface-members: + rss-profile-exceed-max-rx-queue-cnt: + rss-profile-worker-id-exceed-max: source-interfaces-domain-lookup-duplicate-vrf: source-interfaces-domain-lookup-missing-inband-mgmt-interface: source-interfaces-domain-lookup-missing-mgmt-ip: diff --git a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/configs/rss-profile-options.cfg b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/configs/rss-profile-options.cfg new file mode 100644 index 00000000000..8f2f72f9d6f --- /dev/null +++ b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/configs/rss-profile-options.cfg @@ -0,0 +1,161 @@ +! +no enable password +no aaa root +! +vlan internal order ascending range 1006 1199 +! +transceiver qsfp default-mode 4x10G +! +platform sfe interface + interface profile Default_RSS_Profile + ! + profile Default_RSS_Profile + interface Ethernet1/10 + rx-queue worker 5 + ! + interface Ethernet2 + rx-queue count 2 + rx-queue worker 0,3 + rx-queue mode shared + ! + interface Ethernet3 + rx-queue count 2 + ! + interface Ethernet5 + rx-queue worker 1-2,4 + rx-queue mode shared + ! + interface Ethernet9 + rx-queue count 3 + rx-queue mode shared +! +service routing protocols model multi-agent +! +hostname rss-profile-options +! +platform sfe data-plane cpu allocation maximum 3 +! +vrf instance MGMT +! +management api http-commands + protocol https + no shutdown + ! + vrf MGMT + no shutdown +! +interface Port-Channel2 + description Cybercast + no shutdown + no switchport + ip address 192.168.1.102/31 +! +interface Port-Channel5 + description StreamFast + no shutdown + no switchport + ip address 192.168.1.105/31 +! +interface Port-Channel5.108 + no shutdown + encapsulation dot1q vlan 108 + ip address 192.168.100.115/31 +! +interface Port-Channel8 + no shutdown + no switchport + ip address 192.168.100.125/31 +! +interface Ethernet1 + no shutdown + channel-group 2 mode active +! +interface Ethernet1/4 + no shutdown + channel-group 5 mode passive +! +interface Ethernet1/5 + no shutdown + channel-group 5 mode passive +! +interface Ethernet1/10 + description peerDevice3_Ethernet1/10 + no shutdown + channel-group 8 mode on +! +interface Ethernet2 + no shutdown + channel-group 2 mode active +! +interface Ethernet3 + no shutdown + channel-group 2 mode active +! +interface Ethernet5 + no shutdown + no switchport + ip address 192.168.1.201/31 +! +interface Ethernet7 + no shutdown + no switchport + ip address dhcp + dhcp client accept default-route +! +interface Ethernet9 + description Cybercast + no shutdown + no switchport + ip address 192.168.1.202/31 +! +interface Loopback0 + description ROUTER_ID + no shutdown + ip address 192.168.255.1/32 +! +interface Loopback1 + description VXLAN_TUNNEL_SOURCE + no shutdown + ip address 192.168.142.1/32 +! +interface Vxlan1 + description rss-profile-options_VTEP + vxlan source-interface Loopback1 + vxlan udp-port 4789 +! +ip routing +no ip routing vrf MGMT +! +ip prefix-list PL-LOOPBACKS-EVPN-OVERLAY + seq 10 permit 192.168.255.0/24 eq 32 + seq 20 permit 192.168.142.0/24 eq 32 +! +route-map RM-CONN-2-BGP permit 10 + match ip address prefix-list PL-LOOPBACKS-EVPN-OVERLAY +! +router bfd + multihop interval 300 min-rx 300 multiplier 3 +! +router bgp 65005 + router-id 192.168.255.1 + no bgp default ipv4-unicast + maximum-paths 4 ecmp 4 + neighbor EVPN-OVERLAY-PEERS peer group + neighbor EVPN-OVERLAY-PEERS update-source Loopback0 + neighbor EVPN-OVERLAY-PEERS bfd + neighbor EVPN-OVERLAY-PEERS ebgp-multihop 3 + neighbor EVPN-OVERLAY-PEERS send-community + neighbor EVPN-OVERLAY-PEERS maximum-routes 0 + 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 evpn + neighbor EVPN-OVERLAY-PEERS activate + ! + address-family ipv4 + no neighbor EVPN-OVERLAY-PEERS activate + neighbor IPv4-UNDERLAY-PEERS activate +! +end diff --git a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/rss-profile-options.yml b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/rss-profile-options.yml new file mode 100644 index 00000000000..dba91ae0653 --- /dev/null +++ b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/rss-profile-options.yml @@ -0,0 +1,210 @@ +aaa_root: + disabled: true +config_end: true +enable_password: + disabled: true +ethernet_interfaces: +- name: Ethernet5 + shutdown: false + ip_address: 192.168.1.201/31 + peer_type: l3_interface + switchport: + enabled: false +- name: Ethernet7 + shutdown: false + ip_address: dhcp + dhcp_client_accept_default_route: true + peer_type: l3_interface + switchport: + enabled: false +- name: Ethernet9 + description: Cybercast + shutdown: false + ip_address: 192.168.1.202/31 + peer_type: l3_interface + switchport: + enabled: false +- name: Ethernet1 + shutdown: false + channel_group: + id: 2 + mode: active + peer_type: l3_port_channel_member +- name: Ethernet2 + shutdown: false + channel_group: + id: 2 + mode: active + peer_type: l3_port_channel_member +- name: Ethernet3 + shutdown: false + channel_group: + id: 2 + mode: active + peer_type: l3_port_channel_member +- name: Ethernet1/4 + shutdown: false + channel_group: + id: 5 + mode: passive + peer_type: l3_port_channel_member +- name: Ethernet1/5 + shutdown: false + channel_group: + id: 5 + mode: passive + peer_type: l3_port_channel_member +- name: Ethernet1/10 + description: peerDevice3_Ethernet1/10 + shutdown: false + channel_group: + id: 8 + mode: 'on' + peer: peerDevice3 + peer_interface: Ethernet1/10 + peer_type: l3_port_channel_member +hostname: rss-profile-options +ip_igmp_snooping: + globally_enabled: true +ip_routing: true +is_deployed: true +loopback_interfaces: +- name: Loopback0 + description: ROUTER_ID + shutdown: false + ip_address: 192.168.255.1/32 +- name: Loopback1 + description: VXLAN_TUNNEL_SOURCE + shutdown: false + ip_address: 192.168.142.1/32 +management_api_http: + enable_https: true + enable_vrfs: + - name: MGMT +metadata: + platform: AWE-5310 + fabric_name: EOS_DESIGNS_UNIT_TESTS +platform: + sfe: + data_plane_cpu_allocation_max: 3 + interface: + profiles: + - name: Default_RSS_Profile + interfaces: + - name: Ethernet5 + rx_queue: + worker: 1-2,4 + mode: shared + - name: Ethernet9 + rx_queue: + count: 3 + mode: shared + - name: Ethernet2 + rx_queue: + count: 2 + worker: 0,3 + mode: shared + - name: Ethernet3 + rx_queue: + count: 2 + - name: Ethernet1/10 + rx_queue: + worker: '5' + interface_profile: Default_RSS_Profile +port_channel_interfaces: +- name: Port-Channel2 + description: Cybercast + shutdown: false + ip_address: 192.168.1.102/31 + peer_type: l3_port_channel + switchport: + enabled: false +- name: Port-Channel5 + description: StreamFast + shutdown: false + ip_address: 192.168.1.105/31 + peer_type: l3_port_channel + switchport: + enabled: false +- name: Port-Channel5.108 + shutdown: false + encapsulation_dot1q: + vlan: 108 + ip_address: 192.168.100.115/31 + peer_type: l3_port_channel +- name: Port-Channel8 + shutdown: false + ip_address: 192.168.100.125/31 + peer_type: l3_port_channel + switchport: + enabled: false +prefix_lists: +- name: PL-LOOPBACKS-EVPN-OVERLAY + sequence_numbers: + - sequence: 10 + action: permit 192.168.255.0/24 eq 32 + - sequence: 20 + action: permit 192.168.142.0/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 +router_bfd: + multihop: + interval: 300 + min_rx: 300 + multiplier: 3 +router_bgp: + as: '65005' + router_id: 192.168.255.1 + maximum_paths: + paths: 4 + ecmp: 4 + bgp: + default: + ipv4_unicast: false + peer_groups: + - name: IPv4-UNDERLAY-PEERS + type: ipv4 + send_community: all + maximum_routes: 12000 + - name: EVPN-OVERLAY-PEERS + type: evpn + update_source: Loopback0 + bfd: true + ebgp_multihop: 3 + send_community: all + maximum_routes: 0 + redistribute: + connected: + enabled: true + route_map: RM-CONN-2-BGP + address_family_evpn: + peer_groups: + - name: EVPN-OVERLAY-PEERS + activate: true + address_family_ipv4: + peer_groups: + - name: IPv4-UNDERLAY-PEERS + activate: true + - name: EVPN-OVERLAY-PEERS + activate: false +service_routing_protocols_model: multi-agent +transceiver_qsfp_default_mode_4x10: true +vlan_internal_order: + allocation: ascending + range: + beginning: 1006 + ending: 1199 +vrfs: +- name: MGMT + ip_routing: false +vxlan_interface: + vxlan1: + description: rss-profile-options_VTEP + vxlan: + source_interface: Loopback1 + udp_port: 4789 diff --git a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/inventory/host_vars/rss-profile-options.yml b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/inventory/host_vars/rss-profile-options.yml new file mode 100644 index 00000000000..64404b3b2c9 --- /dev/null +++ b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/inventory/host_vars/rss-profile-options.yml @@ -0,0 +1,71 @@ +--- +# This yml file is being used to test generation of RSS profile for regular L3 interfaces and member interfaces of +# L3 Port-Channel based on presence of 'rx_queue' schema key. +type: l3leaf + +l3leaf: + defaults: + platform: AWE-5310 + data_plane_cpu_allocation_max: 3 + node_groups: + - group: Site511 + uplink_type: p2p-vrfs + nodes: + - name: rss-profile-options + id: 1 + loopback_ipv4_pool: 192.168.255.0/24 + vtep_loopback_ipv4_pool: 192.168.142.0/24 + bgp_as: 65005 + l3_interfaces: + - name: Ethernet5 + ip_address: 192.168.1.201/31 + rx_queue: + mode: shared + worker: + - 1-2 + - 4 + - name: Ethernet7 + ip_address: dhcp + - name: Ethernet9 + ip_address: 192.168.1.202/31 + rx_queue: + mode: shared + count: 3 + wan_carrier: Cybercast + l3_port_channels: + - name: Port-Channel2 + mode: active + member_interfaces: + - name: Ethernet1 + - name: Ethernet2 + rx_queue: + mode: shared + worker: + - 0 + - 3 + count: 2 + - name: Ethernet3 + rx_queue: + count: 2 + ip_address: 192.168.1.102/31 + wan_carrier: Cybercast + - name: Port-Channel5 + mode: passive + member_interfaces: + - name: Ethernet1/4 + - name: Ethernet1/5 + ip_address: 192.168.1.105/31 + wan_carrier: StreamFast + - name: Port-Channel5.108 + encapsulation_dot1q_vlan: 108 + ip_address: 192.168.100.115/31 + - name: Port-Channel8 + mode: 'on' + ip_address: 192.168.100.125/31 + member_interfaces: + - name: Ethernet1/10 + peer: peerDevice3 + peer_interface: Ethernet1/10 + rx_queue: + worker: + - 5 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 76c68fe22bf..71a73c88b8c 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 @@ -53,6 +53,7 @@ all: node-type-l3-interfaces: node-type-l3-interfaces-bgp: node-type-l3-port-channels: + rss-profile-options: ipv4-acls: only-connected-endpoints: platform_settings: 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 2f713916991..72d36733c09 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 @@ -39,10 +39,11 @@ | [          policies](## ".defaults.l3_interfaces.[].cv_pathfinder_internet_exit.policies") | List, items: Dictionary | | | | List of Internet-exit policies using this interface as exit. | | [            - name](## ".defaults.l3_interfaces.[].cv_pathfinder_internet_exit.policies.[].name") | String | Required, Unique | | | Internet-exit policy name. | | [              tunnel_interface_numbers](## ".defaults.l3_interfaces.[].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' | - | [        rx_queue](## ".defaults.l3_interfaces.[].rx_queue") | Dictionary | | | | Receive queue parameters for Receive Side Scaling (RSS) profile for this interface. | - | [          count](## ".defaults.l3_interfaces.[].rx_queue.count") | Integer | | | Min: 1 | Number of receive queues.
The maximum value is platform dependent. | - | [          worker](## ".defaults.l3_interfaces.[].rx_queue.worker") | String | | | | Worker ids specified as combination of range and/or comma separated values
such as 0-4,7. | - | [          mode](## ".defaults.l3_interfaces.[].rx_queue.mode") | String | | | Valid Values:
- shared
- exclusive | Mode applicable to the workers. Default mode is 'shared'. | + | [        rx_queue](## ".defaults.l3_interfaces.[].rx_queue") | Dictionary | | | | Receive queue parameters for Receive Side Scaling (RSS) profile for this interface.
This setting is ignored unless the `platform_sfe_interface_profile.supported` is set as `true` under `platform_settings.feature_support` for the `platform` set on this device. | + | [          count](## ".defaults.l3_interfaces.[].rx_queue.count") | Integer | | | Min: 1 | Number of receive queues.
The maximum value is determined by `platform_sfe_interface_profile.max_rx_queues` under `platform_settings.feature_support` for the `platform` set on this device. | + | [          worker](## ".defaults.l3_interfaces.[].rx_queue.worker") | List, items: String | | | | | + | [            - <str>](## ".defaults.l3_interfaces.[].rx_queue.worker.[]") | String | | | | Worker ids specified as values or range of values such as 0-4 or 7.
Valid values are between 0 and one less than maximum value determined by `platform_sfe_interface_profile.max_rx_queues` under `platform_settings.feature_support` for the `platform` set on this device. | + | [          mode](## ".defaults.l3_interfaces.[].rx_queue.mode") | String | | `shared` | Valid Values:
- shared
- exclusive | Mode applicable to the workers. | | [        raw_eos_cli](## ".defaults.l3_interfaces.[].raw_eos_cli") | String | | | | EOS CLI rendered directly on the interface in the final EOS configuration. | | [        flow_tracking](## ".defaults.l3_interfaces.[].flow_tracking") | Dictionary | | | | Configures flow-tracking on the interface. Overrides `fabric_flow_tracking.l3_interfaces` setting. | | [          enabled](## ".defaults.l3_interfaces.[].flow_tracking.enabled") | Boolean | | | | | @@ -82,10 +83,11 @@ | [                policies](## ".node_groups.[].nodes.[].l3_interfaces.[].cv_pathfinder_internet_exit.policies") | List, items: Dictionary | | | | List of Internet-exit policies using this interface as exit. | | [                  - name](## ".node_groups.[].nodes.[].l3_interfaces.[].cv_pathfinder_internet_exit.policies.[].name") | String | Required, Unique | | | Internet-exit policy name. | | [                    tunnel_interface_numbers](## ".node_groups.[].nodes.[].l3_interfaces.[].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' | - | [              rx_queue](## ".node_groups.[].nodes.[].l3_interfaces.[].rx_queue") | Dictionary | | | | Receive queue parameters for Receive Side Scaling (RSS) profile for this interface. | - | [                count](## ".node_groups.[].nodes.[].l3_interfaces.[].rx_queue.count") | Integer | | | Min: 1 | Number of receive queues.
The maximum value is platform dependent. | - | [                worker](## ".node_groups.[].nodes.[].l3_interfaces.[].rx_queue.worker") | String | | | | Worker ids specified as combination of range and/or comma separated values
such as 0-4,7. | - | [                mode](## ".node_groups.[].nodes.[].l3_interfaces.[].rx_queue.mode") | String | | | Valid Values:
- shared
- exclusive | Mode applicable to the workers. Default mode is 'shared'. | + | [              rx_queue](## ".node_groups.[].nodes.[].l3_interfaces.[].rx_queue") | Dictionary | | | | Receive queue parameters for Receive Side Scaling (RSS) profile for this interface.
This setting is ignored unless the `platform_sfe_interface_profile.supported` is set as `true` under `platform_settings.feature_support` for the `platform` set on this device. | + | [                count](## ".node_groups.[].nodes.[].l3_interfaces.[].rx_queue.count") | Integer | | | Min: 1 | Number of receive queues.
The maximum value is determined by `platform_sfe_interface_profile.max_rx_queues` under `platform_settings.feature_support` for the `platform` set on this device. | + | [                worker](## ".node_groups.[].nodes.[].l3_interfaces.[].rx_queue.worker") | List, items: String | | | | | + | [                  - <str>](## ".node_groups.[].nodes.[].l3_interfaces.[].rx_queue.worker.[]") | String | | | | Worker ids specified as values or range of values such as 0-4 or 7.
Valid values are between 0 and one less than maximum value determined by `platform_sfe_interface_profile.max_rx_queues` under `platform_settings.feature_support` for the `platform` set on this device. | + | [                mode](## ".node_groups.[].nodes.[].l3_interfaces.[].rx_queue.mode") | String | | `shared` | Valid Values:
- shared
- exclusive | Mode applicable to the workers. | | [              raw_eos_cli](## ".node_groups.[].nodes.[].l3_interfaces.[].raw_eos_cli") | String | | | | EOS CLI rendered directly on the interface in the final EOS configuration. | | [              flow_tracking](## ".node_groups.[].nodes.[].l3_interfaces.[].flow_tracking") | Dictionary | | | | Configures flow-tracking on the interface. Overrides `fabric_flow_tracking.l3_interfaces` setting. | | [                enabled](## ".node_groups.[].nodes.[].l3_interfaces.[].flow_tracking.enabled") | Boolean | | | | | @@ -121,10 +123,11 @@ | [            policies](## ".node_groups.[].l3_interfaces.[].cv_pathfinder_internet_exit.policies") | List, items: Dictionary | | | | List of Internet-exit policies using this interface as exit. | | [              - name](## ".node_groups.[].l3_interfaces.[].cv_pathfinder_internet_exit.policies.[].name") | String | Required, Unique | | | Internet-exit policy name. | | [                tunnel_interface_numbers](## ".node_groups.[].l3_interfaces.[].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' | - | [          rx_queue](## ".node_groups.[].l3_interfaces.[].rx_queue") | Dictionary | | | | Receive queue parameters for Receive Side Scaling (RSS) profile for this interface. | - | [            count](## ".node_groups.[].l3_interfaces.[].rx_queue.count") | Integer | | | Min: 1 | Number of receive queues.
The maximum value is platform dependent. | - | [            worker](## ".node_groups.[].l3_interfaces.[].rx_queue.worker") | String | | | | Worker ids specified as combination of range and/or comma separated values
such as 0-4,7. | - | [            mode](## ".node_groups.[].l3_interfaces.[].rx_queue.mode") | String | | | Valid Values:
- shared
- exclusive | Mode applicable to the workers. Default mode is 'shared'. | + | [          rx_queue](## ".node_groups.[].l3_interfaces.[].rx_queue") | Dictionary | | | | Receive queue parameters for Receive Side Scaling (RSS) profile for this interface.
This setting is ignored unless the `platform_sfe_interface_profile.supported` is set as `true` under `platform_settings.feature_support` for the `platform` set on this device. | + | [            count](## ".node_groups.[].l3_interfaces.[].rx_queue.count") | Integer | | | Min: 1 | Number of receive queues.
The maximum value is determined by `platform_sfe_interface_profile.max_rx_queues` under `platform_settings.feature_support` for the `platform` set on this device. | + | [            worker](## ".node_groups.[].l3_interfaces.[].rx_queue.worker") | List, items: String | | | | | + | [              - <str>](## ".node_groups.[].l3_interfaces.[].rx_queue.worker.[]") | String | | | | Worker ids specified as values or range of values such as 0-4 or 7.
Valid values are between 0 and one less than maximum value determined by `platform_sfe_interface_profile.max_rx_queues` under `platform_settings.feature_support` for the `platform` set on this device. | + | [            mode](## ".node_groups.[].l3_interfaces.[].rx_queue.mode") | String | | `shared` | Valid Values:
- shared
- exclusive | Mode applicable to the workers. | | [          raw_eos_cli](## ".node_groups.[].l3_interfaces.[].raw_eos_cli") | String | | | | EOS CLI rendered directly on the interface in the final EOS configuration. | | [          flow_tracking](## ".node_groups.[].l3_interfaces.[].flow_tracking") | Dictionary | | | | Configures flow-tracking on the interface. Overrides `fabric_flow_tracking.l3_interfaces` setting. | | [            enabled](## ".node_groups.[].l3_interfaces.[].flow_tracking.enabled") | Boolean | | | | | @@ -162,10 +165,11 @@ | [            policies](## ".nodes.[].l3_interfaces.[].cv_pathfinder_internet_exit.policies") | List, items: Dictionary | | | | List of Internet-exit policies using this interface as exit. | | [              - name](## ".nodes.[].l3_interfaces.[].cv_pathfinder_internet_exit.policies.[].name") | String | Required, Unique | | | Internet-exit policy name. | | [                tunnel_interface_numbers](## ".nodes.[].l3_interfaces.[].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' | - | [          rx_queue](## ".nodes.[].l3_interfaces.[].rx_queue") | Dictionary | | | | Receive queue parameters for Receive Side Scaling (RSS) profile for this interface. | - | [            count](## ".nodes.[].l3_interfaces.[].rx_queue.count") | Integer | | | Min: 1 | Number of receive queues.
The maximum value is platform dependent. | - | [            worker](## ".nodes.[].l3_interfaces.[].rx_queue.worker") | String | | | | Worker ids specified as combination of range and/or comma separated values
such as 0-4,7. | - | [            mode](## ".nodes.[].l3_interfaces.[].rx_queue.mode") | String | | | Valid Values:
- shared
- exclusive | Mode applicable to the workers. Default mode is 'shared'. | + | [          rx_queue](## ".nodes.[].l3_interfaces.[].rx_queue") | Dictionary | | | | Receive queue parameters for Receive Side Scaling (RSS) profile for this interface.
This setting is ignored unless the `platform_sfe_interface_profile.supported` is set as `true` under `platform_settings.feature_support` for the `platform` set on this device. | + | [            count](## ".nodes.[].l3_interfaces.[].rx_queue.count") | Integer | | | Min: 1 | Number of receive queues.
The maximum value is determined by `platform_sfe_interface_profile.max_rx_queues` under `platform_settings.feature_support` for the `platform` set on this device. | + | [            worker](## ".nodes.[].l3_interfaces.[].rx_queue.worker") | List, items: String | | | | | + | [              - <str>](## ".nodes.[].l3_interfaces.[].rx_queue.worker.[]") | String | | | | Worker ids specified as values or range of values such as 0-4 or 7.
Valid values are between 0 and one less than maximum value determined by `platform_sfe_interface_profile.max_rx_queues` under `platform_settings.feature_support` for the `platform` set on this device. | + | [            mode](## ".nodes.[].l3_interfaces.[].rx_queue.mode") | String | | `shared` | Valid Values:
- shared
- exclusive | Mode applicable to the workers. | | [          raw_eos_cli](## ".nodes.[].l3_interfaces.[].raw_eos_cli") | String | | | | EOS CLI rendered directly on the interface in the final EOS configuration. | | [          flow_tracking](## ".nodes.[].l3_interfaces.[].flow_tracking") | Dictionary | | | | Configures flow-tracking on the interface. Overrides `fabric_flow_tracking.l3_interfaces` setting. | | [            enabled](## ".nodes.[].l3_interfaces.[].flow_tracking.enabled") | Boolean | | | | | @@ -201,10 +205,11 @@ | [      policies](## "l3_interface_profiles.[].cv_pathfinder_internet_exit.policies") | List, items: Dictionary | | | | List of Internet-exit policies using this interface as exit. | | [        - name](## "l3_interface_profiles.[].cv_pathfinder_internet_exit.policies.[].name") | String | Required, Unique | | | Internet-exit policy name. | | [          tunnel_interface_numbers](## "l3_interface_profiles.[].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' | - | [    rx_queue](## "l3_interface_profiles.[].rx_queue") | Dictionary | | | | Receive queue parameters for Receive Side Scaling (RSS) profile for this interface. | - | [      count](## "l3_interface_profiles.[].rx_queue.count") | Integer | | | Min: 1 | Number of receive queues.
The maximum value is platform dependent. | - | [      worker](## "l3_interface_profiles.[].rx_queue.worker") | String | | | | Worker ids specified as combination of range and/or comma separated values
such as 0-4,7. | - | [      mode](## "l3_interface_profiles.[].rx_queue.mode") | String | | | Valid Values:
- shared
- exclusive | Mode applicable to the workers. Default mode is 'shared'. | + | [    rx_queue](## "l3_interface_profiles.[].rx_queue") | Dictionary | | | | Receive queue parameters for Receive Side Scaling (RSS) profile for this interface.
This setting is ignored unless the `platform_sfe_interface_profile.supported` is set as `true` under `platform_settings.feature_support` for the `platform` set on this device. | + | [      count](## "l3_interface_profiles.[].rx_queue.count") | Integer | | | Min: 1 | Number of receive queues.
The maximum value is determined by `platform_sfe_interface_profile.max_rx_queues` under `platform_settings.feature_support` for the `platform` set on this device. | + | [      worker](## "l3_interface_profiles.[].rx_queue.worker") | List, items: String | | | | | + | [        - <str>](## "l3_interface_profiles.[].rx_queue.worker.[]") | String | | | | Worker ids specified as values or range of values such as 0-4 or 7.
Valid values are between 0 and one less than maximum value determined by `platform_sfe_interface_profile.max_rx_queues` under `platform_settings.feature_support` for the `platform` set on this device. | + | [      mode](## "l3_interface_profiles.[].rx_queue.mode") | String | | `shared` | Valid Values:
- shared
- exclusive | Mode applicable to the workers. | | [    raw_eos_cli](## "l3_interface_profiles.[].raw_eos_cli") | String | | | | EOS CLI rendered directly on the interface in the final EOS configuration. | | [    flow_tracking](## "l3_interface_profiles.[].flow_tracking") | Dictionary | | | | Configures flow-tracking on the interface. Overrides `fabric_flow_tracking.l3_interfaces` setting. | | [      enabled](## "l3_interface_profiles.[].flow_tracking.enabled") | Boolean | | | | | @@ -334,18 +339,20 @@ tunnel_interface_numbers: # Receive queue parameters for Receive Side Scaling (RSS) profile for this interface. + # This setting is ignored unless the `platform_sfe_interface_profile.supported` is set as `true` under `platform_settings.feature_support` for the `platform` set on this device. rx_queue: # Number of receive queues. - # The maximum value is platform dependent. + # The maximum value is determined by `platform_sfe_interface_profile.max_rx_queues` under `platform_settings.feature_support` for the `platform` set on this device. count: =1> + worker: - # Worker ids specified as combination of range and/or comma separated values - # such as 0-4,7. - worker: + # Worker ids specified as values or range of values such as 0-4 or 7. + # Valid values are between 0 and one less than maximum value determined by `platform_sfe_interface_profile.max_rx_queues` under `platform_settings.feature_support` for the `platform` set on this device. + - - # Mode applicable to the workers. Default mode is 'shared'. - mode: + # Mode applicable to the workers. + mode: # EOS CLI rendered directly on the interface in the final EOS configuration. raw_eos_cli: @@ -488,18 +495,20 @@ tunnel_interface_numbers: # Receive queue parameters for Receive Side Scaling (RSS) profile for this interface. + # This setting is ignored unless the `platform_sfe_interface_profile.supported` is set as `true` under `platform_settings.feature_support` for the `platform` set on this device. rx_queue: # Number of receive queues. - # The maximum value is platform dependent. + # The maximum value is determined by `platform_sfe_interface_profile.max_rx_queues` under `platform_settings.feature_support` for the `platform` set on this device. count: =1> + worker: - # Worker ids specified as combination of range and/or comma separated values - # such as 0-4,7. - worker: + # Worker ids specified as values or range of values such as 0-4 or 7. + # Valid values are between 0 and one less than maximum value determined by `platform_sfe_interface_profile.max_rx_queues` under `platform_settings.feature_support` for the `platform` set on this device. + - - # Mode applicable to the workers. Default mode is 'shared'. - mode: + # Mode applicable to the workers. + mode: # EOS CLI rendered directly on the interface in the final EOS configuration. raw_eos_cli: @@ -629,18 +638,20 @@ tunnel_interface_numbers: # Receive queue parameters for Receive Side Scaling (RSS) profile for this interface. + # This setting is ignored unless the `platform_sfe_interface_profile.supported` is set as `true` under `platform_settings.feature_support` for the `platform` set on this device. rx_queue: # Number of receive queues. - # The maximum value is platform dependent. + # The maximum value is determined by `platform_sfe_interface_profile.max_rx_queues` under `platform_settings.feature_support` for the `platform` set on this device. count: =1> + worker: - # Worker ids specified as combination of range and/or comma separated values - # such as 0-4,7. - worker: + # Worker ids specified as values or range of values such as 0-4 or 7. + # Valid values are between 0 and one less than maximum value determined by `platform_sfe_interface_profile.max_rx_queues` under `platform_settings.feature_support` for the `platform` set on this device. + - - # Mode applicable to the workers. Default mode is 'shared'. - mode: + # Mode applicable to the workers. + mode: # EOS CLI rendered directly on the interface in the final EOS configuration. raw_eos_cli: @@ -776,18 +787,20 @@ tunnel_interface_numbers: # Receive queue parameters for Receive Side Scaling (RSS) profile for this interface. + # This setting is ignored unless the `platform_sfe_interface_profile.supported` is set as `true` under `platform_settings.feature_support` for the `platform` set on this device. rx_queue: # Number of receive queues. - # The maximum value is platform dependent. + # The maximum value is determined by `platform_sfe_interface_profile.max_rx_queues` under `platform_settings.feature_support` for the `platform` set on this device. count: =1> + worker: - # Worker ids specified as combination of range and/or comma separated values - # such as 0-4,7. - worker: + # Worker ids specified as values or range of values such as 0-4 or 7. + # Valid values are between 0 and one less than maximum value determined by `platform_sfe_interface_profile.max_rx_queues` under `platform_settings.feature_support` for the `platform` set on this device. + - - # Mode applicable to the workers. Default mode is 'shared'. - mode: + # Mode applicable to the workers. + mode: # EOS CLI rendered directly on the interface in the final EOS configuration. raw_eos_cli: @@ -918,18 +931,20 @@ tunnel_interface_numbers: # Receive queue parameters for Receive Side Scaling (RSS) profile for this interface. + # This setting is ignored unless the `platform_sfe_interface_profile.supported` is set as `true` under `platform_settings.feature_support` for the `platform` set on this device. rx_queue: # Number of receive queues. - # The maximum value is platform dependent. + # The maximum value is determined by `platform_sfe_interface_profile.max_rx_queues` under `platform_settings.feature_support` for the `platform` set on this device. count: =1> + worker: - # Worker ids specified as combination of range and/or comma separated values - # such as 0-4,7. - worker: + # Worker ids specified as values or range of values such as 0-4 or 7. + # Valid values are between 0 and one less than maximum value determined by `platform_sfe_interface_profile.max_rx_queues` under `platform_settings.feature_support` for the `platform` set on this device. + - - # Mode applicable to the workers. Default mode is 'shared'. - mode: + # Mode applicable to the workers. + mode: # EOS CLI rendered directly on the interface in the final EOS configuration. raw_eos_cli: 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 91e930f7b92..ccd7618d8d7 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 @@ -19,10 +19,11 @@ | [            peer](## ".defaults.l3_port_channels.[].member_interfaces.[].peer") | String | | | | The peer device name. Used for description and documentation.
If not set, this inherits the peer setting on the port-channel interface. | | [            peer_interface](## ".defaults.l3_port_channels.[].member_interfaces.[].peer_interface") | String | | | | The peer device interface. Used for description and documentation. | | [            speed](## ".defaults.l3_port_channels.[].member_interfaces.[].speed") | String | | | | Speed should be set in the format `` or `forced ` or `auto `. | - | [            rx_queue](## ".defaults.l3_port_channels.[].member_interfaces.[].rx_queue") | Dictionary | | | | Receive queue parameters for Receive Side Scaling (RSS) profile for this interface. | - | [              count](## ".defaults.l3_port_channels.[].member_interfaces.[].rx_queue.count") | Integer | | | Min: 1 | Number of receive queues.
The maximum value is platform dependent. | - | [              worker](## ".defaults.l3_port_channels.[].member_interfaces.[].rx_queue.worker") | String | | | | Worker ids specified as combination of range and/or comma separated values
such as 0-4,7. | - | [              mode](## ".defaults.l3_port_channels.[].member_interfaces.[].rx_queue.mode") | String | | | Valid Values:
- shared
- exclusive | Mode applicable to the workers. Default mode is 'shared'. | + | [            rx_queue](## ".defaults.l3_port_channels.[].member_interfaces.[].rx_queue") | Dictionary | | | | Receive queue parameters for Receive Side Scaling (RSS) profile for this interface.
This setting is ignored unless the `platform_sfe_interface_profile.supported` is set as `true` under `platform_settings.feature_support` for the `platform` set on this device. | + | [              count](## ".defaults.l3_port_channels.[].member_interfaces.[].rx_queue.count") | Integer | | | Min: 1 | Number of receive queues.
The maximum value is determined by `platform_sfe_interface_profile.max_rx_queues` under `platform_settings.feature_support` for the `platform` set on this device. | + | [              worker](## ".defaults.l3_port_channels.[].member_interfaces.[].rx_queue.worker") | List, items: String | | | | | + | [                - <str>](## ".defaults.l3_port_channels.[].member_interfaces.[].rx_queue.worker.[]") | String | | | | Worker ids specified as values or range of values such as 0-4 or 7.
Values are between 0 and one less than maximum value determined by `platform_sfe_interface_profile.max_rx_queues` under `platform_settings.feature_support` for the `platform` set on this device. | + | [              mode](## ".defaults.l3_port_channels.[].member_interfaces.[].rx_queue.mode") | String | | `shared` | Valid Values:
- shared
- exclusive | Mode applicable to the workers. | | [            structured_config](## ".defaults.l3_port_channels.[].member_interfaces.[].structured_config") | Dictionary | | | | Custom structured config for the member ethernet interface. | | [        ip_address](## ".defaults.l3_port_channels.[].ip_address") | String | | | | Node IPv4 address/Mask or 'dhcp'. | | [        dhcp_ip](## ".defaults.l3_port_channels.[].dhcp_ip") | String | | | | 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`. | @@ -64,10 +65,11 @@ | [                  peer](## ".node_groups.[].nodes.[].l3_port_channels.[].member_interfaces.[].peer") | String | | | | The peer device name. Used for description and documentation.
If not set, this inherits the peer setting on the port-channel interface. | | [                  peer_interface](## ".node_groups.[].nodes.[].l3_port_channels.[].member_interfaces.[].peer_interface") | String | | | | The peer device interface. Used for description and documentation. | | [                  speed](## ".node_groups.[].nodes.[].l3_port_channels.[].member_interfaces.[].speed") | String | | | | Speed should be set in the format `` or `forced ` or `auto `. | - | [                  rx_queue](## ".node_groups.[].nodes.[].l3_port_channels.[].member_interfaces.[].rx_queue") | Dictionary | | | | Receive queue parameters for Receive Side Scaling (RSS) profile for this interface. | - | [                    count](## ".node_groups.[].nodes.[].l3_port_channels.[].member_interfaces.[].rx_queue.count") | Integer | | | Min: 1 | Number of receive queues.
The maximum value is platform dependent. | - | [                    worker](## ".node_groups.[].nodes.[].l3_port_channels.[].member_interfaces.[].rx_queue.worker") | String | | | | Worker ids specified as combination of range and/or comma separated values
such as 0-4,7. | - | [                    mode](## ".node_groups.[].nodes.[].l3_port_channels.[].member_interfaces.[].rx_queue.mode") | String | | | Valid Values:
- shared
- exclusive | Mode applicable to the workers. Default mode is 'shared'. | + | [                  rx_queue](## ".node_groups.[].nodes.[].l3_port_channels.[].member_interfaces.[].rx_queue") | Dictionary | | | | Receive queue parameters for Receive Side Scaling (RSS) profile for this interface.
This setting is ignored unless the `platform_sfe_interface_profile.supported` is set as `true` under `platform_settings.feature_support` for the `platform` set on this device. | + | [                    count](## ".node_groups.[].nodes.[].l3_port_channels.[].member_interfaces.[].rx_queue.count") | Integer | | | Min: 1 | Number of receive queues.
The maximum value is determined by `platform_sfe_interface_profile.max_rx_queues` under `platform_settings.feature_support` for the `platform` set on this device. | + | [                    worker](## ".node_groups.[].nodes.[].l3_port_channels.[].member_interfaces.[].rx_queue.worker") | List, items: String | | | | | + | [                      - <str>](## ".node_groups.[].nodes.[].l3_port_channels.[].member_interfaces.[].rx_queue.worker.[]") | String | | | | Worker ids specified as values or range of values such as 0-4 or 7.
Values are between 0 and one less than maximum value determined by `platform_sfe_interface_profile.max_rx_queues` under `platform_settings.feature_support` for the `platform` set on this device. | + | [                    mode](## ".node_groups.[].nodes.[].l3_port_channels.[].member_interfaces.[].rx_queue.mode") | String | | `shared` | Valid Values:
- shared
- exclusive | Mode applicable to the workers. | | [                  structured_config](## ".node_groups.[].nodes.[].l3_port_channels.[].member_interfaces.[].structured_config") | Dictionary | | | | Custom structured config for the member ethernet interface. | | [              ip_address](## ".node_groups.[].nodes.[].l3_port_channels.[].ip_address") | String | | | | Node IPv4 address/Mask or 'dhcp'. | | [              dhcp_ip](## ".node_groups.[].nodes.[].l3_port_channels.[].dhcp_ip") | String | | | | 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`. | @@ -105,10 +107,11 @@ | [              peer](## ".node_groups.[].l3_port_channels.[].member_interfaces.[].peer") | String | | | | The peer device name. Used for description and documentation.
If not set, this inherits the peer setting on the port-channel interface. | | [              peer_interface](## ".node_groups.[].l3_port_channels.[].member_interfaces.[].peer_interface") | String | | | | The peer device interface. Used for description and documentation. | | [              speed](## ".node_groups.[].l3_port_channels.[].member_interfaces.[].speed") | String | | | | Speed should be set in the format `` or `forced ` or `auto `. | - | [              rx_queue](## ".node_groups.[].l3_port_channels.[].member_interfaces.[].rx_queue") | Dictionary | | | | Receive queue parameters for Receive Side Scaling (RSS) profile for this interface. | - | [                count](## ".node_groups.[].l3_port_channels.[].member_interfaces.[].rx_queue.count") | Integer | | | Min: 1 | Number of receive queues.
The maximum value is platform dependent. | - | [                worker](## ".node_groups.[].l3_port_channels.[].member_interfaces.[].rx_queue.worker") | String | | | | Worker ids specified as combination of range and/or comma separated values
such as 0-4,7. | - | [                mode](## ".node_groups.[].l3_port_channels.[].member_interfaces.[].rx_queue.mode") | String | | | Valid Values:
- shared
- exclusive | Mode applicable to the workers. Default mode is 'shared'. | + | [              rx_queue](## ".node_groups.[].l3_port_channels.[].member_interfaces.[].rx_queue") | Dictionary | | | | Receive queue parameters for Receive Side Scaling (RSS) profile for this interface.
This setting is ignored unless the `platform_sfe_interface_profile.supported` is set as `true` under `platform_settings.feature_support` for the `platform` set on this device. | + | [                count](## ".node_groups.[].l3_port_channels.[].member_interfaces.[].rx_queue.count") | Integer | | | Min: 1 | Number of receive queues.
The maximum value is determined by `platform_sfe_interface_profile.max_rx_queues` under `platform_settings.feature_support` for the `platform` set on this device. | + | [                worker](## ".node_groups.[].l3_port_channels.[].member_interfaces.[].rx_queue.worker") | List, items: String | | | | | + | [                  - <str>](## ".node_groups.[].l3_port_channels.[].member_interfaces.[].rx_queue.worker.[]") | String | | | | Worker ids specified as values or range of values such as 0-4 or 7.
Values are between 0 and one less than maximum value determined by `platform_sfe_interface_profile.max_rx_queues` under `platform_settings.feature_support` for the `platform` set on this device. | + | [                mode](## ".node_groups.[].l3_port_channels.[].member_interfaces.[].rx_queue.mode") | String | | `shared` | Valid Values:
- shared
- exclusive | Mode applicable to the workers. | | [              structured_config](## ".node_groups.[].l3_port_channels.[].member_interfaces.[].structured_config") | Dictionary | | | | Custom structured config for the member ethernet interface. | | [          ip_address](## ".node_groups.[].l3_port_channels.[].ip_address") | String | | | | Node IPv4 address/Mask or 'dhcp'. | | [          dhcp_ip](## ".node_groups.[].l3_port_channels.[].dhcp_ip") | String | | | | 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`. | @@ -148,10 +151,11 @@ | [              peer](## ".nodes.[].l3_port_channels.[].member_interfaces.[].peer") | String | | | | The peer device name. Used for description and documentation.
If not set, this inherits the peer setting on the port-channel interface. | | [              peer_interface](## ".nodes.[].l3_port_channels.[].member_interfaces.[].peer_interface") | String | | | | The peer device interface. Used for description and documentation. | | [              speed](## ".nodes.[].l3_port_channels.[].member_interfaces.[].speed") | String | | | | Speed should be set in the format `` or `forced ` or `auto `. | - | [              rx_queue](## ".nodes.[].l3_port_channels.[].member_interfaces.[].rx_queue") | Dictionary | | | | Receive queue parameters for Receive Side Scaling (RSS) profile for this interface. | - | [                count](## ".nodes.[].l3_port_channels.[].member_interfaces.[].rx_queue.count") | Integer | | | Min: 1 | Number of receive queues.
The maximum value is platform dependent. | - | [                worker](## ".nodes.[].l3_port_channels.[].member_interfaces.[].rx_queue.worker") | String | | | | Worker ids specified as combination of range and/or comma separated values
such as 0-4,7. | - | [                mode](## ".nodes.[].l3_port_channels.[].member_interfaces.[].rx_queue.mode") | String | | | Valid Values:
- shared
- exclusive | Mode applicable to the workers. Default mode is 'shared'. | + | [              rx_queue](## ".nodes.[].l3_port_channels.[].member_interfaces.[].rx_queue") | Dictionary | | | | Receive queue parameters for Receive Side Scaling (RSS) profile for this interface.
This setting is ignored unless the `platform_sfe_interface_profile.supported` is set as `true` under `platform_settings.feature_support` for the `platform` set on this device. | + | [                count](## ".nodes.[].l3_port_channels.[].member_interfaces.[].rx_queue.count") | Integer | | | Min: 1 | Number of receive queues.
The maximum value is determined by `platform_sfe_interface_profile.max_rx_queues` under `platform_settings.feature_support` for the `platform` set on this device. | + | [                worker](## ".nodes.[].l3_port_channels.[].member_interfaces.[].rx_queue.worker") | List, items: String | | | | | + | [                  - <str>](## ".nodes.[].l3_port_channels.[].member_interfaces.[].rx_queue.worker.[]") | String | | | | Worker ids specified as values or range of values such as 0-4 or 7.
Values are between 0 and one less than maximum value determined by `platform_sfe_interface_profile.max_rx_queues` under `platform_settings.feature_support` for the `platform` set on this device. | + | [                mode](## ".nodes.[].l3_port_channels.[].member_interfaces.[].rx_queue.mode") | String | | `shared` | Valid Values:
- shared
- exclusive | Mode applicable to the workers. | | [              structured_config](## ".nodes.[].l3_port_channels.[].member_interfaces.[].structured_config") | Dictionary | | | | Custom structured config for the member ethernet interface. | | [          ip_address](## ".nodes.[].l3_port_channels.[].ip_address") | String | | | | Node IPv4 address/Mask or 'dhcp'. | | [          dhcp_ip](## ".nodes.[].l3_port_channels.[].dhcp_ip") | String | | | | 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`. | @@ -226,18 +230,20 @@ speed: # Receive queue parameters for Receive Side Scaling (RSS) profile for this interface. + # This setting is ignored unless the `platform_sfe_interface_profile.supported` is set as `true` under `platform_settings.feature_support` for the `platform` set on this device. rx_queue: # Number of receive queues. - # The maximum value is platform dependent. + # The maximum value is determined by `platform_sfe_interface_profile.max_rx_queues` under `platform_settings.feature_support` for the `platform` set on this device. count: =1> + worker: - # Worker ids specified as combination of range and/or comma separated values - # such as 0-4,7. - worker: + # Worker ids specified as values or range of values such as 0-4 or 7. + # Values are between 0 and one less than maximum value determined by `platform_sfe_interface_profile.max_rx_queues` under `platform_settings.feature_support` for the `platform` set on this device. + - - # Mode applicable to the workers. Default mode is 'shared'. - mode: + # Mode applicable to the workers. + mode: # Custom structured config for the member ethernet interface. structured_config: @@ -390,18 +396,20 @@ speed: # Receive queue parameters for Receive Side Scaling (RSS) profile for this interface. + # This setting is ignored unless the `platform_sfe_interface_profile.supported` is set as `true` under `platform_settings.feature_support` for the `platform` set on this device. rx_queue: # Number of receive queues. - # The maximum value is platform dependent. + # The maximum value is determined by `platform_sfe_interface_profile.max_rx_queues` under `platform_settings.feature_support` for the `platform` set on this device. count: =1> + worker: - # Worker ids specified as combination of range and/or comma separated values - # such as 0-4,7. - worker: + # Worker ids specified as values or range of values such as 0-4 or 7. + # Values are between 0 and one less than maximum value determined by `platform_sfe_interface_profile.max_rx_queues` under `platform_settings.feature_support` for the `platform` set on this device. + - - # Mode applicable to the workers. Default mode is 'shared'. - mode: + # Mode applicable to the workers. + mode: # Custom structured config for the member ethernet interface. structured_config: @@ -541,18 +549,20 @@ speed: # Receive queue parameters for Receive Side Scaling (RSS) profile for this interface. + # This setting is ignored unless the `platform_sfe_interface_profile.supported` is set as `true` under `platform_settings.feature_support` for the `platform` set on this device. rx_queue: # Number of receive queues. - # The maximum value is platform dependent. + # The maximum value is determined by `platform_sfe_interface_profile.max_rx_queues` under `platform_settings.feature_support` for the `platform` set on this device. count: =1> + worker: - # Worker ids specified as combination of range and/or comma separated values - # such as 0-4,7. - worker: + # Worker ids specified as values or range of values such as 0-4 or 7. + # Values are between 0 and one less than maximum value determined by `platform_sfe_interface_profile.max_rx_queues` under `platform_settings.feature_support` for the `platform` set on this device. + - - # Mode applicable to the workers. Default mode is 'shared'. - mode: + # Mode applicable to the workers. + mode: # Custom structured config for the member ethernet interface. structured_config: @@ -698,18 +708,20 @@ speed: # Receive queue parameters for Receive Side Scaling (RSS) profile for this interface. + # This setting is ignored unless the `platform_sfe_interface_profile.supported` is set as `true` under `platform_settings.feature_support` for the `platform` set on this device. rx_queue: # Number of receive queues. - # The maximum value is platform dependent. + # The maximum value is determined by `platform_sfe_interface_profile.max_rx_queues` under `platform_settings.feature_support` for the `platform` set on this device. count: =1> + worker: - # Worker ids specified as combination of range and/or comma separated values - # such as 0-4,7. - worker: + # Worker ids specified as values or range of values such as 0-4 or 7. + # Values are between 0 and one less than maximum value determined by `platform_sfe_interface_profile.max_rx_queues` under `platform_settings.feature_support` for the `platform` set on this device. + - - # Mode applicable to the workers. Default mode is 'shared'. - mode: + # Mode applicable to the workers. + mode: # Custom structured config for the member ethernet interface. structured_config: diff --git a/ansible_collections/arista/avd/roles/eos_designs/docs/tables/platform-settings.md b/ansible_collections/arista/avd/roles/eos_designs/docs/tables/platform-settings.md index 0f354da8f59..2ced25188f3 100644 --- a/ansible_collections/arista/avd/roles/eos_designs/docs/tables/platform-settings.md +++ b/ansible_collections/arista/avd/roles/eos_designs/docs/tables/platform-settings.md @@ -25,7 +25,9 @@ | [      per_interface_mtu](## "custom_platform_settings.[].feature_support.per_interface_mtu") | Boolean | | `True` | | Support for configuration of per interface MTU for p2p links, MLAG SVIs and Network Services.
Effectively this means that all settings regarding interface MTU will be ignored if this is false.
Platforms without support for per interface MTU can use a single default interface MTU setting. Set this via "default_interface_mtu"
| | [      bgp_update_wait_install](## "custom_platform_settings.[].feature_support.bgp_update_wait_install") | Boolean | | `True` | | Disables FIB updates and route advertisement when the BGP instance is initiated until the BGP convergence state is reached.
Can be overridden by setting "bgp_update_wait_install" host/group_vars.
| | [      bgp_update_wait_for_convergence](## "custom_platform_settings.[].feature_support.bgp_update_wait_for_convergence") | Boolean | | `True` | | Do not advertise reachability to a prefix until that prefix has been installed in hardware.
This will eliminate any temporary black holes due to a BGP speaker advertising reachability to a prefix that may not yet be installed into the forwarding plane.
Can be overridden by setting "bgp_update_wait_for_convergence" host/group_vars.
| - | [      build_rss_profile](## "custom_platform_settings.[].feature_support.build_rss_profile") | Boolean | | `False` | | Build RSS interface profile for supported platforms. | + | [      platform_sfe_interface_profile](## "custom_platform_settings.[].feature_support.platform_sfe_interface_profile") | Dictionary | | | | Support for Platform SFE Interface Profiles used for Receive Side Scaling (RSS). | + | [        supported](## "custom_platform_settings.[].feature_support.platform_sfe_interface_profile.supported") | Boolean | | `False` | | Capability flag for generation of RSS profiles. | + | [        max_rx_queues](## "custom_platform_settings.[].feature_support.platform_sfe_interface_profile.max_rx_queues") | Integer | Required | `6` | | Maximum rx_queue count supported on any interface. | | [    management_interface](## "custom_platform_settings.[].management_interface") | String | | `Management1` | | | | [    security_entropy_sources](## "custom_platform_settings.[].security_entropy_sources") | Dictionary | | | | Entropy source improves the randomness of the numbers used to generate MACsec's cryptographic keys. | | [      hardware](## "custom_platform_settings.[].security_entropy_sources.hardware") | Boolean | | | | Use a hardware based source. | @@ -52,7 +54,9 @@ | [      per_interface_mtu](## "platform_settings.[].feature_support.per_interface_mtu") | Boolean | | `True` | | Support for configuration of per interface MTU for p2p links, MLAG SVIs and Network Services.
Effectively this means that all settings regarding interface MTU will be ignored if this is false.
Platforms without support for per interface MTU can use a single default interface MTU setting. Set this via "default_interface_mtu"
| | [      bgp_update_wait_install](## "platform_settings.[].feature_support.bgp_update_wait_install") | Boolean | | `True` | | Disables FIB updates and route advertisement when the BGP instance is initiated until the BGP convergence state is reached.
Can be overridden by setting "bgp_update_wait_install" host/group_vars.
| | [      bgp_update_wait_for_convergence](## "platform_settings.[].feature_support.bgp_update_wait_for_convergence") | Boolean | | `True` | | Do not advertise reachability to a prefix until that prefix has been installed in hardware.
This will eliminate any temporary black holes due to a BGP speaker advertising reachability to a prefix that may not yet be installed into the forwarding plane.
Can be overridden by setting "bgp_update_wait_for_convergence" host/group_vars.
| - | [      build_rss_profile](## "platform_settings.[].feature_support.build_rss_profile") | Boolean | | `False` | | Build RSS interface profile for supported platforms. | + | [      platform_sfe_interface_profile](## "platform_settings.[].feature_support.platform_sfe_interface_profile") | Dictionary | | | | Support for Platform SFE Interface Profiles used for Receive Side Scaling (RSS). | + | [        supported](## "platform_settings.[].feature_support.platform_sfe_interface_profile.supported") | Boolean | | `False` | | Capability flag for generation of RSS profiles. | + | [        max_rx_queues](## "platform_settings.[].feature_support.platform_sfe_interface_profile.max_rx_queues") | Integer | Required | `6` | | Maximum rx_queue count supported on any interface. | | [    management_interface](## "platform_settings.[].management_interface") | String | | `Management1` | | | | [    security_entropy_sources](## "platform_settings.[].security_entropy_sources") | Dictionary | | | | Entropy source improves the randomness of the numbers used to generate MACsec's cryptographic keys. | | [      hardware](## "platform_settings.[].security_entropy_sources.hardware") | Boolean | | | | Use a hardware based source. | @@ -115,8 +119,14 @@ # Can be overridden by setting "bgp_update_wait_for_convergence" host/group_vars. bgp_update_wait_for_convergence: - # Build RSS interface profile for supported platforms. - build_rss_profile: + # Support for Platform SFE Interface Profiles used for Receive Side Scaling (RSS). + platform_sfe_interface_profile: + + # Capability flag for generation of RSS profiles. + supported: + + # Maximum rx_queue count supported on any interface. + max_rx_queues: management_interface: # Entropy source improves the randomness of the numbers used to generate MACsec's cryptographic keys. @@ -184,8 +194,14 @@ # Can be overridden by setting "bgp_update_wait_for_convergence" host/group_vars. bgp_update_wait_for_convergence: - # Build RSS interface profile for supported platforms. - build_rss_profile: + # Support for Platform SFE Interface Profiles used for Receive Side Scaling (RSS). + platform_sfe_interface_profile: + + # Capability flag for generation of RSS profiles. + supported: + + # Maximum rx_queue count supported on any interface. + max_rx_queues: management_interface: # Entropy source improves the randomness of the numbers used to generate MACsec's cryptographic keys. @@ -364,16 +380,29 @@ - feature_support: bgp_update_wait_for_convergence: true bgp_update_wait_install: false - build_rss_profile: false interface_storm_control: false + platform_sfe_interface_profile: + max_rx_queues: 6 + supported: true queue_monitor_length_notify: false management_interface: Management1/1 p2p_uplinks_mtu: 9194 platforms: - AWE-5310 + - AWE-7230R + - feature_support: + bgp_update_wait_for_convergence: true + bgp_update_wait_install: false + interface_storm_control: false + platform_sfe_interface_profile: + max_rx_queues: 16 + supported: true + queue_monitor_length_notify: false + management_interface: Management1/1 + p2p_uplinks_mtu: 9194 + platforms: - AWE-5510 - AWE-7250R - - AWE-7230R - feature_support: bgp_update_wait_for_convergence: true bgp_update_wait_install: false diff --git a/python-avd/pyavd/_eos_designs/schema/__init__.py b/python-avd/pyavd/_eos_designs/schema/__init__.py index e36b9fb4106..3e8d43f4716 100644 --- a/python-avd/pyavd/_eos_designs/schema/__init__.py +++ b/python-avd/pyavd/_eos_designs/schema/__init__.py @@ -6037,20 +6037,27 @@ def __init__(self, *, policies: Policies | UndefinedType = Undefined) -> None: class RxQueue(AvdModel): """Subclass of AvdModel.""" - _fields: ClassVar[dict] = {"count": {"type": int}, "worker": {"type": str}, "mode": {"type": str}, "_custom_data": {"type": dict}} + class Worker(AvdList[str]): + """Subclass of AvdList with `str` items.""" + + Worker._item_type = str + + _fields: ClassVar[dict] = {"count": {"type": int}, "worker": {"type": Worker}, "mode": {"type": str, "default": "shared"}} count: int | None """ Number of receive queues. - The maximum value is platform dependent. + The maximum value is determined by + `platform_sfe_interface_profile.max_rx_queues` under `platform_settings.feature_support` for the + `platform` set on this device. """ - worker: str | None + worker: Worker + """Subclass of AvdList with `str` items.""" + mode: Literal["shared", "exclusive"] """ - Worker ids specified as combination of range and/or comma separated values - such as 0-4,7. + Mode applicable to the workers. + + Default value: `"shared"` """ - mode: Literal["shared", "exclusive"] | None - """Mode applicable to the workers. Default mode is 'shared'.""" - _custom_data: dict[str, Any] if TYPE_CHECKING: @@ -6058,9 +6065,8 @@ def __init__( self, *, count: int | None | UndefinedType = Undefined, - worker: str | None | UndefinedType = Undefined, - mode: Literal["shared", "exclusive"] | None | UndefinedType = Undefined, - _custom_data: dict[str, Any] | UndefinedType = Undefined, + worker: Worker | UndefinedType = Undefined, + mode: Literal["shared", "exclusive"] | UndefinedType = Undefined, ) -> None: """ RxQueue. @@ -6071,12 +6077,11 @@ def __init__( Args: count: Number of receive queues. - The maximum value is platform dependent. - worker: - Worker ids specified as combination of range and/or comma separated values - such as 0-4,7. - mode: Mode applicable to the workers. Default mode is 'shared'. - _custom_data: _custom_data + The maximum value is determined by + `platform_sfe_interface_profile.max_rx_queues` under `platform_settings.feature_support` for the + `platform` set on this device. + worker: Subclass of AvdList with `str` items. + mode: Mode applicable to the workers. """ @@ -6266,9 +6271,11 @@ def __init__(self, *, enabled: bool | None | UndefinedType = Undefined, name: st rx_queue: RxQueue """ Receive queue parameters for Receive Side Scaling (RSS) profile for this interface. + This setting is + ignored unless the `platform_sfe_interface_profile.supported` is set as `true` under + `platform_settings.feature_support` for the `platform` set on this device. - Subclass of - AvdModel. + Subclass of AvdModel. """ raw_eos_cli: str | None """EOS CLI rendered directly on the interface in the final EOS configuration.""" @@ -6404,9 +6411,11 @@ def __init__( Subclass of AvdModel. rx_queue: Receive queue parameters for Receive Side Scaling (RSS) profile for this interface. + This setting is + ignored unless the `platform_sfe_interface_profile.supported` is set as `true` under + `platform_settings.feature_support` for the `platform` set on this device. - Subclass of - AvdModel. + 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 interface. Overrides `fabric_flow_tracking.l3_interfaces` setting. @@ -9535,6 +9544,38 @@ def __init__(self, *, mlag: int | None | UndefinedType = Undefined, non_mlag: in class FeatureSupport(AvdModel): """Subclass of AvdModel.""" + class PlatformSfeInterfaceProfile(AvdModel): + """Subclass of AvdModel.""" + + _fields: ClassVar[dict] = {"supported": {"type": bool, "default": False}, "max_rx_queues": {"type": int, "default": 6}} + supported: bool + """ + Capability flag for generation of RSS profiles. + + Default value: `False` + """ + max_rx_queues: int + """ + Maximum rx_queue count supported on any interface. + + Default value: `6` + """ + + if TYPE_CHECKING: + + def __init__(self, *, supported: bool | UndefinedType = Undefined, max_rx_queues: int | UndefinedType = Undefined) -> None: + """ + PlatformSfeInterfaceProfile. + + + Subclass of AvdModel. + + Args: + supported: Capability flag for generation of RSS profiles. + max_rx_queues: Maximum rx_queue count supported on any interface. + + """ + _fields: ClassVar[dict] = { "queue_monitor_length_notify": {"type": bool, "default": True}, "interface_storm_control": {"type": bool, "default": True}, @@ -9542,6 +9583,7 @@ class FeatureSupport(AvdModel): "per_interface_mtu": {"type": bool, "default": True}, "bgp_update_wait_install": {"type": bool, "default": True}, "bgp_update_wait_for_convergence": {"type": bool, "default": True}, + "platform_sfe_interface_profile": {"type": PlatformSfeInterfaceProfile}, } queue_monitor_length_notify: bool """Default value: `True`""" @@ -9578,11 +9620,12 @@ class FeatureSupport(AvdModel): Default value: `True` """ - build_rss_profile: bool + platform_sfe_interface_profile: PlatformSfeInterfaceProfile """ - Build RSS interface profile for supported platforms. + Support for Platform SFE Interface Profiles used for Receive Side Scaling (RSS). - Default value: `False` + Subclass of + AvdModel. """ if TYPE_CHECKING: @@ -9596,8 +9639,7 @@ def __init__( per_interface_mtu: bool | UndefinedType = Undefined, bgp_update_wait_install: bool | UndefinedType = Undefined, bgp_update_wait_for_convergence: bool | UndefinedType = Undefined, - build_rss_profile: bool | UndefinedType = Undefined, - _custom_data: dict[str, Any] | UndefinedType = Undefined, + platform_sfe_interface_profile: PlatformSfeInterfaceProfile | UndefinedType = Undefined, ) -> None: """ FeatureSupport. @@ -9626,6 +9668,11 @@ def __init__( that may not yet be installed into the forwarding plane. Can be overridden by setting "bgp_update_wait_for_convergence" host/group_vars. + platform_sfe_interface_profile: + Support for Platform SFE Interface Profiles used for Receive Side Scaling (RSS). + + Subclass of + AvdModel. """ @@ -9807,6 +9854,38 @@ def __init__(self, *, mlag: int | None | UndefinedType = Undefined, non_mlag: in class FeatureSupport(AvdModel): """Subclass of AvdModel.""" + class PlatformSfeInterfaceProfile(AvdModel): + """Subclass of AvdModel.""" + + _fields: ClassVar[dict] = {"supported": {"type": bool, "default": False}, "max_rx_queues": {"type": int, "default": 6}} + supported: bool + """ + Capability flag for generation of RSS profiles. + + Default value: `False` + """ + max_rx_queues: int + """ + Maximum rx_queue count supported on any interface. + + Default value: `6` + """ + + if TYPE_CHECKING: + + def __init__(self, *, supported: bool | UndefinedType = Undefined, max_rx_queues: int | UndefinedType = Undefined) -> None: + """ + PlatformSfeInterfaceProfile. + + + Subclass of AvdModel. + + Args: + supported: Capability flag for generation of RSS profiles. + max_rx_queues: Maximum rx_queue count supported on any interface. + + """ + _fields: ClassVar[dict] = { "queue_monitor_length_notify": {"type": bool, "default": True}, "interface_storm_control": {"type": bool, "default": True}, @@ -9814,6 +9893,7 @@ class FeatureSupport(AvdModel): "per_interface_mtu": {"type": bool, "default": True}, "bgp_update_wait_install": {"type": bool, "default": True}, "bgp_update_wait_for_convergence": {"type": bool, "default": True}, + "platform_sfe_interface_profile": {"type": PlatformSfeInterfaceProfile}, } queue_monitor_length_notify: bool """Default value: `True`""" @@ -9850,11 +9930,12 @@ class FeatureSupport(AvdModel): Default value: `True` """ - build_rss_profile: bool + platform_sfe_interface_profile: PlatformSfeInterfaceProfile """ - Build RSS interface profile for supported platforms. + Support for Platform SFE Interface Profiles used for Receive Side Scaling (RSS). - Default value: `False` + Subclass of + AvdModel. """ if TYPE_CHECKING: @@ -9868,6 +9949,7 @@ def __init__( per_interface_mtu: bool | UndefinedType = Undefined, bgp_update_wait_install: bool | UndefinedType = Undefined, bgp_update_wait_for_convergence: bool | UndefinedType = Undefined, + platform_sfe_interface_profile: PlatformSfeInterfaceProfile | UndefinedType = Undefined, ) -> None: """ FeatureSupport. @@ -9896,6 +9978,11 @@ def __init__( that may not yet be installed into the forwarding plane. Can be overridden by setting "bgp_update_wait_for_convergence" host/group_vars. + platform_sfe_interface_profile: + Support for Platform SFE Interface Profiles used for Receive Side Scaling (RSS). + + Subclass of + AvdModel. """ @@ -19343,20 +19430,27 @@ def __init__(self, *, policies: Policies | UndefinedType = Undefined) -> None: class RxQueue(AvdModel): """Subclass of AvdModel.""" - _fields: ClassVar[dict] = {"count": {"type": int}, "worker": {"type": str}, "mode": {"type": str}, "_custom_data": {"type": dict}} + class Worker(AvdList[str]): + """Subclass of AvdList with `str` items.""" + + Worker._item_type = str + + _fields: ClassVar[dict] = {"count": {"type": int}, "worker": {"type": Worker}, "mode": {"type": str, "default": "shared"}} count: int | None """ Number of receive queues. - The maximum value is platform dependent. + The maximum value is determined by + `platform_sfe_interface_profile.max_rx_queues` under `platform_settings.feature_support` for the + `platform` set on this device. """ - worker: str | None + worker: Worker + """Subclass of AvdList with `str` items.""" + mode: Literal["shared", "exclusive"] """ - Worker ids specified as combination of range and/or comma separated values - such as 0-4,7. + Mode applicable to the workers. + + Default value: `"shared"` """ - mode: Literal["shared", "exclusive"] | None - """Mode applicable to the workers. Default mode is 'shared'.""" - _custom_data: dict[str, Any] if TYPE_CHECKING: @@ -19364,9 +19458,8 @@ def __init__( self, *, count: int | None | UndefinedType = Undefined, - worker: str | None | UndefinedType = Undefined, - mode: Literal["shared", "exclusive"] | None | UndefinedType = Undefined, - _custom_data: dict[str, Any] | UndefinedType = Undefined, + worker: Worker | UndefinedType = Undefined, + mode: Literal["shared", "exclusive"] | UndefinedType = Undefined, ) -> None: """ RxQueue. @@ -19377,12 +19470,11 @@ def __init__( Args: count: Number of receive queues. - The maximum value is platform dependent. - worker: - Worker ids specified as combination of range and/or comma separated values - such as 0-4,7. - mode: Mode applicable to the workers. Default mode is 'shared'. - _custom_data: _custom_data + The maximum value is determined by + `platform_sfe_interface_profile.max_rx_queues` under `platform_settings.feature_support` for the + `platform` set on this device. + worker: Subclass of AvdList with `str` items. + mode: Mode applicable to the workers. """ @@ -19569,9 +19661,11 @@ def __init__(self, *, enabled: bool | None | UndefinedType = Undefined, name: st rx_queue: RxQueue """ Receive queue parameters for Receive Side Scaling (RSS) profile for this interface. + This setting is + ignored unless the `platform_sfe_interface_profile.supported` is set as `true` under + `platform_settings.feature_support` for the `platform` set on this device. - Subclass of - AvdModel. + Subclass of AvdModel. """ raw_eos_cli: str | None """EOS CLI rendered directly on the interface in the final EOS configuration.""" @@ -19705,9 +19799,11 @@ def __init__( Subclass of AvdModel. rx_queue: Receive queue parameters for Receive Side Scaling (RSS) profile for this interface. + This setting is + ignored unless the `platform_sfe_interface_profile.supported` is set as `true` under + `platform_settings.feature_support` for the `platform` set on this device. - Subclass of - AvdModel. + 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 interface. Overrides `fabric_flow_tracking.l3_interfaces` setting. @@ -19729,12 +19825,64 @@ class L3PortChannelsItem(AvdModel): class MemberInterfacesItem(AvdModel): """Subclass of AvdModel.""" + class RxQueue(AvdModel): + """Subclass of AvdModel.""" + + class Worker(AvdList[str]): + """Subclass of AvdList with `str` items.""" + + Worker._item_type = str + + _fields: ClassVar[dict] = {"count": {"type": int}, "worker": {"type": Worker}, "mode": {"type": str, "default": "shared"}} + count: int | None + """ + Number of receive queues. + The maximum value is determined by + `platform_sfe_interface_profile.max_rx_queues` under `platform_settings.feature_support` for the + `platform` set on this device. + """ + worker: Worker + """Subclass of AvdList with `str` items.""" + mode: Literal["shared", "exclusive"] + """ + Mode applicable to the workers. + + Default value: `"shared"` + """ + + if TYPE_CHECKING: + + def __init__( + self, + *, + count: int | None | UndefinedType = Undefined, + worker: Worker | UndefinedType = Undefined, + mode: Literal["shared", "exclusive"] | UndefinedType = Undefined, + ) -> None: + """ + RxQueue. + + + Subclass of AvdModel. + + Args: + count: + Number of receive queues. + The maximum value is determined by + `platform_sfe_interface_profile.max_rx_queues` under `platform_settings.feature_support` for the + `platform` set on this device. + worker: Subclass of AvdList with `str` items. + mode: Mode applicable to the workers. + + """ + _fields: ClassVar[dict] = { "name": {"type": str}, "description": {"type": str}, "peer": {"type": str}, "peer_interface": {"type": str}, "speed": {"type": str}, + "rx_queue": {"type": RxQueue}, "structured_config": {"type": EosCliConfigGen.EthernetInterfacesItem}, } name: str @@ -19764,9 +19912,11 @@ class MemberInterfacesItem(AvdModel): rx_queue: RxQueue """ Receive queue parameters for Receive Side Scaling (RSS) profile for this interface. + This setting is + ignored unless the `platform_sfe_interface_profile.supported` is set as `true` under + `platform_settings.feature_support` for the `platform` set on this device. - Subclass of - AvdModel. + Subclass of AvdModel. """ structured_config: EosCliConfigGen.EthernetInterfacesItem """Custom structured config for the member ethernet interface.""" @@ -19781,6 +19931,7 @@ def __init__( peer: str | None | UndefinedType = Undefined, peer_interface: str | None | UndefinedType = Undefined, speed: str | None | UndefinedType = Undefined, + rx_queue: RxQueue | UndefinedType = Undefined, structured_config: EosCliConfigGen.EthernetInterfacesItem | UndefinedType = Undefined, ) -> None: """ @@ -19805,6 +19956,13 @@ def __init__( speed: Speed should be set in the format `` or `forced ` or `auto `. + rx_queue: + Receive queue parameters for Receive Side Scaling (RSS) profile for this interface. + This setting is + ignored unless the `platform_sfe_interface_profile.supported` is set as `true` under + `platform_settings.feature_support` for the `platform` set on this device. + + Subclass of AvdModel. structured_config: Custom structured config for the member ethernet interface. """ @@ -23235,25 +23393,27 @@ def __init__(self, *, policies: Policies | UndefinedType = Undefined) -> None: class RxQueue(AvdModel): """Subclass of AvdModel.""" - _fields: ClassVar[dict] = { - "count": {"type": int}, - "worker": {"type": str}, - "mode": {"type": str}, - "_custom_data": {"type": dict}, - } + class Worker(AvdList[str]): + """Subclass of AvdList with `str` items.""" + + Worker._item_type = str + + _fields: ClassVar[dict] = {"count": {"type": int}, "worker": {"type": Worker}, "mode": {"type": str, "default": "shared"}} count: int | None """ Number of receive queues. - The maximum value is platform dependent. + The maximum value is determined by + `platform_sfe_interface_profile.max_rx_queues` under `platform_settings.feature_support` for the + `platform` set on this device. """ - worker: str | None + worker: Worker + """Subclass of AvdList with `str` items.""" + mode: Literal["shared", "exclusive"] """ - Worker ids specified as combination of range and/or comma separated values - such as 0-4,7. + Mode applicable to the workers. + + Default value: `"shared"` """ - mode: Literal["shared", "exclusive"] | None - """Mode applicable to the workers. Default mode is 'shared'.""" - _custom_data: dict[str, Any] if TYPE_CHECKING: @@ -23261,9 +23421,8 @@ def __init__( self, *, count: int | None | UndefinedType = Undefined, - worker: str | None | UndefinedType = Undefined, - mode: Literal["shared", "exclusive"] | None | UndefinedType = Undefined, - _custom_data: dict[str, Any] | UndefinedType = Undefined, + worker: Worker | UndefinedType = Undefined, + mode: Literal["shared", "exclusive"] | UndefinedType = Undefined, ) -> None: """ RxQueue. @@ -23274,12 +23433,11 @@ def __init__( Args: count: Number of receive queues. - The maximum value is platform dependent. - worker: - Worker ids specified as combination of range and/or comma separated values - such as 0-4,7. - mode: Mode applicable to the workers. Default mode is 'shared'. - _custom_data: _custom_data + The maximum value is determined by + `platform_sfe_interface_profile.max_rx_queues` under `platform_settings.feature_support` for the + `platform` set on this device. + worker: Subclass of AvdList with `str` items. + mode: Mode applicable to the workers. """ @@ -23468,9 +23626,11 @@ def __init__( rx_queue: RxQueue """ Receive queue parameters for Receive Side Scaling (RSS) profile for this interface. + This setting is + ignored unless the `platform_sfe_interface_profile.supported` is set as `true` under + `platform_settings.feature_support` for the `platform` set on this device. - Subclass of - AvdModel. + Subclass of AvdModel. """ raw_eos_cli: str | None """EOS CLI rendered directly on the interface in the final EOS configuration.""" @@ -23604,9 +23764,11 @@ def __init__( Subclass of AvdModel. rx_queue: Receive queue parameters for Receive Side Scaling (RSS) profile for this interface. + This setting is + ignored unless the `platform_sfe_interface_profile.supported` is set as `true` under + `platform_settings.feature_support` for the `platform` set on this device. - Subclass of - AvdModel. + 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 interface. Overrides `fabric_flow_tracking.l3_interfaces` setting. @@ -23628,12 +23790,64 @@ class L3PortChannelsItem(AvdModel): class MemberInterfacesItem(AvdModel): """Subclass of AvdModel.""" + class RxQueue(AvdModel): + """Subclass of AvdModel.""" + + class Worker(AvdList[str]): + """Subclass of AvdList with `str` items.""" + + Worker._item_type = str + + _fields: ClassVar[dict] = {"count": {"type": int}, "worker": {"type": Worker}, "mode": {"type": str, "default": "shared"}} + count: int | None + """ + Number of receive queues. + The maximum value is determined by + `platform_sfe_interface_profile.max_rx_queues` under `platform_settings.feature_support` for the + `platform` set on this device. + """ + worker: Worker + """Subclass of AvdList with `str` items.""" + mode: Literal["shared", "exclusive"] + """ + Mode applicable to the workers. + + Default value: `"shared"` + """ + + if TYPE_CHECKING: + + def __init__( + self, + *, + count: int | None | UndefinedType = Undefined, + worker: Worker | UndefinedType = Undefined, + mode: Literal["shared", "exclusive"] | UndefinedType = Undefined, + ) -> None: + """ + RxQueue. + + + Subclass of AvdModel. + + Args: + count: + Number of receive queues. + The maximum value is determined by + `platform_sfe_interface_profile.max_rx_queues` under `platform_settings.feature_support` for the + `platform` set on this device. + worker: Subclass of AvdList with `str` items. + mode: Mode applicable to the workers. + + """ + _fields: ClassVar[dict] = { "name": {"type": str}, "description": {"type": str}, "peer": {"type": str}, "peer_interface": {"type": str}, "speed": {"type": str}, + "rx_queue": {"type": RxQueue}, "structured_config": {"type": EosCliConfigGen.EthernetInterfacesItem}, } name: str @@ -23663,9 +23877,11 @@ class MemberInterfacesItem(AvdModel): rx_queue: RxQueue """ Receive queue parameters for Receive Side Scaling (RSS) profile for this interface. + This setting is + ignored unless the `platform_sfe_interface_profile.supported` is set as `true` under + `platform_settings.feature_support` for the `platform` set on this device. - Subclass of - AvdModel. + Subclass of AvdModel. """ structured_config: EosCliConfigGen.EthernetInterfacesItem """Custom structured config for the member ethernet interface.""" @@ -23680,6 +23896,7 @@ def __init__( peer: str | None | UndefinedType = Undefined, peer_interface: str | None | UndefinedType = Undefined, speed: str | None | UndefinedType = Undefined, + rx_queue: RxQueue | UndefinedType = Undefined, structured_config: EosCliConfigGen.EthernetInterfacesItem | UndefinedType = Undefined, ) -> None: """ @@ -23704,6 +23921,13 @@ def __init__( speed: Speed should be set in the format `` or `forced ` or `auto `. + rx_queue: + Receive queue parameters for Receive Side Scaling (RSS) profile for this interface. + This setting is + ignored unless the `platform_sfe_interface_profile.supported` is set as `true` under + `platform_settings.feature_support` for the `platform` set on this device. + + Subclass of AvdModel. structured_config: Custom structured config for the member ethernet interface. """ @@ -27094,20 +27318,27 @@ def __init__(self, *, policies: Policies | UndefinedType = Undefined) -> None: class RxQueue(AvdModel): """Subclass of AvdModel.""" - _fields: ClassVar[dict] = {"count": {"type": int}, "worker": {"type": str}, "mode": {"type": str}, "_custom_data": {"type": dict}} + class Worker(AvdList[str]): + """Subclass of AvdList with `str` items.""" + + Worker._item_type = str + + _fields: ClassVar[dict] = {"count": {"type": int}, "worker": {"type": Worker}, "mode": {"type": str, "default": "shared"}} count: int | None """ Number of receive queues. - The maximum value is platform dependent. + The maximum value is determined by + `platform_sfe_interface_profile.max_rx_queues` under `platform_settings.feature_support` for the + `platform` set on this device. """ - worker: str | None + worker: Worker + """Subclass of AvdList with `str` items.""" + mode: Literal["shared", "exclusive"] """ - Worker ids specified as combination of range and/or comma separated values - such as 0-4,7. + Mode applicable to the workers. + + Default value: `"shared"` """ - mode: Literal["shared", "exclusive"] | None - """Mode applicable to the workers. Default mode is 'shared'.""" - _custom_data: dict[str, Any] if TYPE_CHECKING: @@ -27115,9 +27346,8 @@ def __init__( self, *, count: int | None | UndefinedType = Undefined, - worker: str | None | UndefinedType = Undefined, - mode: Literal["shared", "exclusive"] | None | UndefinedType = Undefined, - _custom_data: dict[str, Any] | UndefinedType = Undefined, + worker: Worker | UndefinedType = Undefined, + mode: Literal["shared", "exclusive"] | UndefinedType = Undefined, ) -> None: """ RxQueue. @@ -27128,12 +27358,11 @@ def __init__( Args: count: Number of receive queues. - The maximum value is platform dependent. - worker: - Worker ids specified as combination of range and/or comma separated values - such as 0-4,7. - mode: Mode applicable to the workers. Default mode is 'shared'. - _custom_data: _custom_data + The maximum value is determined by + `platform_sfe_interface_profile.max_rx_queues` under `platform_settings.feature_support` for the + `platform` set on this device. + worker: Subclass of AvdList with `str` items. + mode: Mode applicable to the workers. """ @@ -27320,9 +27549,11 @@ def __init__(self, *, enabled: bool | None | UndefinedType = Undefined, name: st rx_queue: RxQueue """ Receive queue parameters for Receive Side Scaling (RSS) profile for this interface. + This setting is + ignored unless the `platform_sfe_interface_profile.supported` is set as `true` under + `platform_settings.feature_support` for the `platform` set on this device. - Subclass of - AvdModel. + Subclass of AvdModel. """ raw_eos_cli: str | None """EOS CLI rendered directly on the interface in the final EOS configuration.""" @@ -27456,9 +27687,11 @@ def __init__( Subclass of AvdModel. rx_queue: Receive queue parameters for Receive Side Scaling (RSS) profile for this interface. + This setting is + ignored unless the `platform_sfe_interface_profile.supported` is set as `true` under + `platform_settings.feature_support` for the `platform` set on this device. - Subclass of - AvdModel. + 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 interface. Overrides `fabric_flow_tracking.l3_interfaces` setting. @@ -27480,12 +27713,64 @@ class L3PortChannelsItem(AvdModel): class MemberInterfacesItem(AvdModel): """Subclass of AvdModel.""" + class RxQueue(AvdModel): + """Subclass of AvdModel.""" + + class Worker(AvdList[str]): + """Subclass of AvdList with `str` items.""" + + Worker._item_type = str + + _fields: ClassVar[dict] = {"count": {"type": int}, "worker": {"type": Worker}, "mode": {"type": str, "default": "shared"}} + count: int | None + """ + Number of receive queues. + The maximum value is determined by + `platform_sfe_interface_profile.max_rx_queues` under `platform_settings.feature_support` for the + `platform` set on this device. + """ + worker: Worker + """Subclass of AvdList with `str` items.""" + mode: Literal["shared", "exclusive"] + """ + Mode applicable to the workers. + + Default value: `"shared"` + """ + + if TYPE_CHECKING: + + def __init__( + self, + *, + count: int | None | UndefinedType = Undefined, + worker: Worker | UndefinedType = Undefined, + mode: Literal["shared", "exclusive"] | UndefinedType = Undefined, + ) -> None: + """ + RxQueue. + + + Subclass of AvdModel. + + Args: + count: + Number of receive queues. + The maximum value is determined by + `platform_sfe_interface_profile.max_rx_queues` under `platform_settings.feature_support` for the + `platform` set on this device. + worker: Subclass of AvdList with `str` items. + mode: Mode applicable to the workers. + + """ + _fields: ClassVar[dict] = { "name": {"type": str}, "description": {"type": str}, "peer": {"type": str}, "peer_interface": {"type": str}, "speed": {"type": str}, + "rx_queue": {"type": RxQueue}, "structured_config": {"type": EosCliConfigGen.EthernetInterfacesItem}, } name: str @@ -27515,9 +27800,11 @@ class MemberInterfacesItem(AvdModel): rx_queue: RxQueue """ Receive queue parameters for Receive Side Scaling (RSS) profile for this interface. + This setting is + ignored unless the `platform_sfe_interface_profile.supported` is set as `true` under + `platform_settings.feature_support` for the `platform` set on this device. - Subclass of - AvdModel. + Subclass of AvdModel. """ structured_config: EosCliConfigGen.EthernetInterfacesItem """Custom structured config for the member ethernet interface.""" @@ -27532,6 +27819,7 @@ def __init__( peer: str | None | UndefinedType = Undefined, peer_interface: str | None | UndefinedType = Undefined, speed: str | None | UndefinedType = Undefined, + rx_queue: RxQueue | UndefinedType = Undefined, structured_config: EosCliConfigGen.EthernetInterfacesItem | UndefinedType = Undefined, ) -> None: """ @@ -27556,6 +27844,13 @@ def __init__( speed: Speed should be set in the format `` or `forced ` or `auto `. + rx_queue: + Receive queue parameters for Receive Side Scaling (RSS) profile for this interface. + This setting is + ignored unless the `platform_sfe_interface_profile.supported` is set as `true` under + `platform_settings.feature_support` for the `platform` set on this device. + + Subclass of AvdModel. structured_config: Custom structured config for the member ethernet interface. """ @@ -31004,20 +31299,27 @@ def __init__(self, *, policies: Policies | UndefinedType = Undefined) -> None: class RxQueue(AvdModel): """Subclass of AvdModel.""" - _fields: ClassVar[dict] = {"count": {"type": int}, "worker": {"type": str}, "mode": {"type": str}, "_custom_data": {"type": dict}} + class Worker(AvdList[str]): + """Subclass of AvdList with `str` items.""" + + Worker._item_type = str + + _fields: ClassVar[dict] = {"count": {"type": int}, "worker": {"type": Worker}, "mode": {"type": str, "default": "shared"}} count: int | None """ Number of receive queues. - The maximum value is platform dependent. + The maximum value is determined by + `platform_sfe_interface_profile.max_rx_queues` under `platform_settings.feature_support` for the + `platform` set on this device. """ - worker: str | None + worker: Worker + """Subclass of AvdList with `str` items.""" + mode: Literal["shared", "exclusive"] """ - Worker ids specified as combination of range and/or comma separated values - such as 0-4,7. + Mode applicable to the workers. + + Default value: `"shared"` """ - mode: Literal["shared", "exclusive"] | None - """Mode applicable to the workers. Default mode is 'shared'.""" - _custom_data: dict[str, Any] if TYPE_CHECKING: @@ -31025,9 +31327,8 @@ def __init__( self, *, count: int | None | UndefinedType = Undefined, - worker: str | None | UndefinedType = Undefined, - mode: Literal["shared", "exclusive"] | None | UndefinedType = Undefined, - _custom_data: dict[str, Any] | UndefinedType = Undefined, + worker: Worker | UndefinedType = Undefined, + mode: Literal["shared", "exclusive"] | UndefinedType = Undefined, ) -> None: """ RxQueue. @@ -31038,12 +31339,11 @@ def __init__( Args: count: Number of receive queues. - The maximum value is platform dependent. - worker: - Worker ids specified as combination of range and/or comma separated values - such as 0-4,7. - mode: Mode applicable to the workers. Default mode is 'shared'. - _custom_data: _custom_data + The maximum value is determined by + `platform_sfe_interface_profile.max_rx_queues` under `platform_settings.feature_support` for the + `platform` set on this device. + worker: Subclass of AvdList with `str` items. + mode: Mode applicable to the workers. """ @@ -31230,9 +31530,11 @@ def __init__(self, *, enabled: bool | None | UndefinedType = Undefined, name: st rx_queue: RxQueue """ Receive queue parameters for Receive Side Scaling (RSS) profile for this interface. + This setting is + ignored unless the `platform_sfe_interface_profile.supported` is set as `true` under + `platform_settings.feature_support` for the `platform` set on this device. - Subclass of - AvdModel. + Subclass of AvdModel. """ raw_eos_cli: str | None """EOS CLI rendered directly on the interface in the final EOS configuration.""" @@ -31366,9 +31668,11 @@ def __init__( Subclass of AvdModel. rx_queue: Receive queue parameters for Receive Side Scaling (RSS) profile for this interface. + This setting is + ignored unless the `platform_sfe_interface_profile.supported` is set as `true` under + `platform_settings.feature_support` for the `platform` set on this device. - Subclass of - AvdModel. + 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 interface. Overrides `fabric_flow_tracking.l3_interfaces` setting. @@ -31390,12 +31694,64 @@ class L3PortChannelsItem(AvdModel): class MemberInterfacesItem(AvdModel): """Subclass of AvdModel.""" + class RxQueue(AvdModel): + """Subclass of AvdModel.""" + + class Worker(AvdList[str]): + """Subclass of AvdList with `str` items.""" + + Worker._item_type = str + + _fields: ClassVar[dict] = {"count": {"type": int}, "worker": {"type": Worker}, "mode": {"type": str, "default": "shared"}} + count: int | None + """ + Number of receive queues. + The maximum value is determined by + `platform_sfe_interface_profile.max_rx_queues` under `platform_settings.feature_support` for the + `platform` set on this device. + """ + worker: Worker + """Subclass of AvdList with `str` items.""" + mode: Literal["shared", "exclusive"] + """ + Mode applicable to the workers. + + Default value: `"shared"` + """ + + if TYPE_CHECKING: + + def __init__( + self, + *, + count: int | None | UndefinedType = Undefined, + worker: Worker | UndefinedType = Undefined, + mode: Literal["shared", "exclusive"] | UndefinedType = Undefined, + ) -> None: + """ + RxQueue. + + + Subclass of AvdModel. + + Args: + count: + Number of receive queues. + The maximum value is determined by + `platform_sfe_interface_profile.max_rx_queues` under `platform_settings.feature_support` for the + `platform` set on this device. + worker: Subclass of AvdList with `str` items. + mode: Mode applicable to the workers. + + """ + _fields: ClassVar[dict] = { "name": {"type": str}, "description": {"type": str}, "peer": {"type": str}, "peer_interface": {"type": str}, "speed": {"type": str}, + "rx_queue": {"type": RxQueue}, "structured_config": {"type": EosCliConfigGen.EthernetInterfacesItem}, } name: str @@ -31425,9 +31781,11 @@ class MemberInterfacesItem(AvdModel): rx_queue: RxQueue """ Receive queue parameters for Receive Side Scaling (RSS) profile for this interface. + This setting is + ignored unless the `platform_sfe_interface_profile.supported` is set as `true` under + `platform_settings.feature_support` for the `platform` set on this device. - Subclass of - AvdModel. + Subclass of AvdModel. """ structured_config: EosCliConfigGen.EthernetInterfacesItem """Custom structured config for the member ethernet interface.""" @@ -31442,6 +31800,7 @@ def __init__( peer: str | None | UndefinedType = Undefined, peer_interface: str | None | UndefinedType = Undefined, speed: str | None | UndefinedType = Undefined, + rx_queue: RxQueue | UndefinedType = Undefined, structured_config: EosCliConfigGen.EthernetInterfacesItem | UndefinedType = Undefined, ) -> None: """ @@ -31466,6 +31825,13 @@ def __init__( speed: Speed should be set in the format `` or `forced ` or `auto `. + rx_queue: + Receive queue parameters for Receive Side Scaling (RSS) profile for this interface. + This setting is + ignored unless the `platform_sfe_interface_profile.supported` is set as `true` under + `platform_settings.feature_support` for the `platform` set on this device. + + Subclass of AvdModel. structured_config: Custom structured config for the member ethernet interface. """ @@ -41203,20 +41569,27 @@ def __init__(self, *, policies: Policies | UndefinedType = Undefined) -> None: class RxQueue(AvdModel): """Subclass of AvdModel.""" - _fields: ClassVar[dict] = {"count": {"type": int}, "worker": {"type": str}, "mode": {"type": str}, "_custom_data": {"type": dict}} + class Worker(AvdList[str]): + """Subclass of AvdList with `str` items.""" + + Worker._item_type = str + + _fields: ClassVar[dict] = {"count": {"type": int}, "worker": {"type": Worker}, "mode": {"type": str, "default": "shared"}} count: int | None """ Number of receive queues. - The maximum value is platform dependent. + The maximum value is determined by + `platform_sfe_interface_profile.max_rx_queues` under `platform_settings.feature_support` for the + `platform` set on this device. """ - worker: str | None + worker: Worker + """Subclass of AvdList with `str` items.""" + mode: Literal["shared", "exclusive"] """ - Worker ids specified as combination of range and/or comma separated values - such as 0-4,7. + Mode applicable to the workers. + + Default value: `"shared"` """ - mode: Literal["shared", "exclusive"] | None - """Mode applicable to the workers. Default mode is 'shared'.""" - _custom_data: dict[str, Any] if TYPE_CHECKING: @@ -41224,9 +41597,8 @@ def __init__( self, *, count: int | None | UndefinedType = Undefined, - worker: str | None | UndefinedType = Undefined, - mode: Literal["shared", "exclusive"] | None | UndefinedType = Undefined, - _custom_data: dict[str, Any] | UndefinedType = Undefined, + worker: Worker | UndefinedType = Undefined, + mode: Literal["shared", "exclusive"] | UndefinedType = Undefined, ) -> None: """ RxQueue. @@ -41237,12 +41609,11 @@ def __init__( Args: count: Number of receive queues. - The maximum value is platform dependent. - worker: - Worker ids specified as combination of range and/or comma separated values - such as 0-4,7. - mode: Mode applicable to the workers. Default mode is 'shared'. - _custom_data: _custom_data + The maximum value is determined by + `platform_sfe_interface_profile.max_rx_queues` under `platform_settings.feature_support` for the + `platform` set on this device. + worker: Subclass of AvdList with `str` items. + mode: Mode applicable to the workers. """ @@ -41429,9 +41800,11 @@ def __init__(self, *, enabled: bool | None | UndefinedType = Undefined, name: st rx_queue: RxQueue """ Receive queue parameters for Receive Side Scaling (RSS) profile for this interface. + This setting is + ignored unless the `platform_sfe_interface_profile.supported` is set as `true` under + `platform_settings.feature_support` for the `platform` set on this device. - Subclass of - AvdModel. + Subclass of AvdModel. """ raw_eos_cli: str | None """EOS CLI rendered directly on the interface in the final EOS configuration.""" @@ -41565,9 +41938,11 @@ def __init__( Subclass of AvdModel. rx_queue: Receive queue parameters for Receive Side Scaling (RSS) profile for this interface. + This setting is + ignored unless the `platform_sfe_interface_profile.supported` is set as `true` under + `platform_settings.feature_support` for the `platform` set on this device. - Subclass of - AvdModel. + 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 interface. Overrides `fabric_flow_tracking.l3_interfaces` setting. @@ -41589,12 +41964,64 @@ class L3PortChannelsItem(AvdModel): class MemberInterfacesItem(AvdModel): """Subclass of AvdModel.""" + class RxQueue(AvdModel): + """Subclass of AvdModel.""" + + class Worker(AvdList[str]): + """Subclass of AvdList with `str` items.""" + + Worker._item_type = str + + _fields: ClassVar[dict] = {"count": {"type": int}, "worker": {"type": Worker}, "mode": {"type": str, "default": "shared"}} + count: int | None + """ + Number of receive queues. + The maximum value is determined by + `platform_sfe_interface_profile.max_rx_queues` under `platform_settings.feature_support` for the + `platform` set on this device. + """ + worker: Worker + """Subclass of AvdList with `str` items.""" + mode: Literal["shared", "exclusive"] + """ + Mode applicable to the workers. + + Default value: `"shared"` + """ + + if TYPE_CHECKING: + + def __init__( + self, + *, + count: int | None | UndefinedType = Undefined, + worker: Worker | UndefinedType = Undefined, + mode: Literal["shared", "exclusive"] | UndefinedType = Undefined, + ) -> None: + """ + RxQueue. + + + Subclass of AvdModel. + + Args: + count: + Number of receive queues. + The maximum value is determined by + `platform_sfe_interface_profile.max_rx_queues` under `platform_settings.feature_support` for the + `platform` set on this device. + worker: Subclass of AvdList with `str` items. + mode: Mode applicable to the workers. + + """ + _fields: ClassVar[dict] = { "name": {"type": str}, "description": {"type": str}, "peer": {"type": str}, "peer_interface": {"type": str}, "speed": {"type": str}, + "rx_queue": {"type": RxQueue}, "structured_config": {"type": EosCliConfigGen.EthernetInterfacesItem}, } name: str @@ -41624,9 +42051,11 @@ class MemberInterfacesItem(AvdModel): rx_queue: RxQueue """ Receive queue parameters for Receive Side Scaling (RSS) profile for this interface. + This setting is + ignored unless the `platform_sfe_interface_profile.supported` is set as `true` under + `platform_settings.feature_support` for the `platform` set on this device. - Subclass of - AvdModel. + Subclass of AvdModel. """ structured_config: EosCliConfigGen.EthernetInterfacesItem """Custom structured config for the member ethernet interface.""" @@ -41641,6 +42070,7 @@ def __init__( peer: str | None | UndefinedType = Undefined, peer_interface: str | None | UndefinedType = Undefined, speed: str | None | UndefinedType = Undefined, + rx_queue: RxQueue | UndefinedType = Undefined, structured_config: EosCliConfigGen.EthernetInterfacesItem | UndefinedType = Undefined, ) -> None: """ @@ -41665,6 +42095,13 @@ def __init__( speed: Speed should be set in the format `` or `forced ` or `auto `. + rx_queue: + Receive queue parameters for Receive Side Scaling (RSS) profile for this interface. + This setting is + ignored unless the `platform_sfe_interface_profile.supported` is set as `true` under + `platform_settings.feature_support` for the `platform` set on this device. + + Subclass of AvdModel. structured_config: Custom structured config for the member ethernet interface. """ @@ -45095,25 +45532,27 @@ def __init__(self, *, policies: Policies | UndefinedType = Undefined) -> None: class RxQueue(AvdModel): """Subclass of AvdModel.""" - _fields: ClassVar[dict] = { - "count": {"type": int}, - "worker": {"type": str}, - "mode": {"type": str}, - "_custom_data": {"type": dict}, - } + class Worker(AvdList[str]): + """Subclass of AvdList with `str` items.""" + + Worker._item_type = str + + _fields: ClassVar[dict] = {"count": {"type": int}, "worker": {"type": Worker}, "mode": {"type": str, "default": "shared"}} count: int | None """ Number of receive queues. - The maximum value is platform dependent. + The maximum value is determined by + `platform_sfe_interface_profile.max_rx_queues` under `platform_settings.feature_support` for the + `platform` set on this device. """ - worker: str | None + worker: Worker + """Subclass of AvdList with `str` items.""" + mode: Literal["shared", "exclusive"] """ - Worker ids specified as combination of range and/or comma separated values - such as 0-4,7. + Mode applicable to the workers. + + Default value: `"shared"` """ - mode: Literal["shared", "exclusive"] | None - """Mode applicable to the workers. Default mode is 'shared'.""" - _custom_data: dict[str, Any] if TYPE_CHECKING: @@ -45121,9 +45560,8 @@ def __init__( self, *, count: int | None | UndefinedType = Undefined, - worker: str | None | UndefinedType = Undefined, - mode: Literal["shared", "exclusive"] | None | UndefinedType = Undefined, - _custom_data: dict[str, Any] | UndefinedType = Undefined, + worker: Worker | UndefinedType = Undefined, + mode: Literal["shared", "exclusive"] | UndefinedType = Undefined, ) -> None: """ RxQueue. @@ -45134,12 +45572,11 @@ def __init__( Args: count: Number of receive queues. - The maximum value is platform dependent. - worker: - Worker ids specified as combination of range and/or comma separated values - such as 0-4,7. - mode: Mode applicable to the workers. Default mode is 'shared'. - _custom_data: _custom_data + The maximum value is determined by + `platform_sfe_interface_profile.max_rx_queues` under `platform_settings.feature_support` for the + `platform` set on this device. + worker: Subclass of AvdList with `str` items. + mode: Mode applicable to the workers. """ @@ -45328,9 +45765,11 @@ def __init__( rx_queue: RxQueue """ Receive queue parameters for Receive Side Scaling (RSS) profile for this interface. + This setting is + ignored unless the `platform_sfe_interface_profile.supported` is set as `true` under + `platform_settings.feature_support` for the `platform` set on this device. - Subclass of - AvdModel. + Subclass of AvdModel. """ raw_eos_cli: str | None """EOS CLI rendered directly on the interface in the final EOS configuration.""" @@ -45464,9 +45903,11 @@ def __init__( Subclass of AvdModel. rx_queue: Receive queue parameters for Receive Side Scaling (RSS) profile for this interface. + This setting is + ignored unless the `platform_sfe_interface_profile.supported` is set as `true` under + `platform_settings.feature_support` for the `platform` set on this device. - Subclass of - AvdModel. + 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 interface. Overrides `fabric_flow_tracking.l3_interfaces` setting. @@ -45488,12 +45929,64 @@ class L3PortChannelsItem(AvdModel): class MemberInterfacesItem(AvdModel): """Subclass of AvdModel.""" + class RxQueue(AvdModel): + """Subclass of AvdModel.""" + + class Worker(AvdList[str]): + """Subclass of AvdList with `str` items.""" + + Worker._item_type = str + + _fields: ClassVar[dict] = {"count": {"type": int}, "worker": {"type": Worker}, "mode": {"type": str, "default": "shared"}} + count: int | None + """ + Number of receive queues. + The maximum value is determined by + `platform_sfe_interface_profile.max_rx_queues` under `platform_settings.feature_support` for the + `platform` set on this device. + """ + worker: Worker + """Subclass of AvdList with `str` items.""" + mode: Literal["shared", "exclusive"] + """ + Mode applicable to the workers. + + Default value: `"shared"` + """ + + if TYPE_CHECKING: + + def __init__( + self, + *, + count: int | None | UndefinedType = Undefined, + worker: Worker | UndefinedType = Undefined, + mode: Literal["shared", "exclusive"] | UndefinedType = Undefined, + ) -> None: + """ + RxQueue. + + + Subclass of AvdModel. + + Args: + count: + Number of receive queues. + The maximum value is determined by + `platform_sfe_interface_profile.max_rx_queues` under `platform_settings.feature_support` for the + `platform` set on this device. + worker: Subclass of AvdList with `str` items. + mode: Mode applicable to the workers. + + """ + _fields: ClassVar[dict] = { "name": {"type": str}, "description": {"type": str}, "peer": {"type": str}, "peer_interface": {"type": str}, "speed": {"type": str}, + "rx_queue": {"type": RxQueue}, "structured_config": {"type": EosCliConfigGen.EthernetInterfacesItem}, } name: str @@ -45523,9 +46016,11 @@ class MemberInterfacesItem(AvdModel): rx_queue: RxQueue """ Receive queue parameters for Receive Side Scaling (RSS) profile for this interface. + This setting is + ignored unless the `platform_sfe_interface_profile.supported` is set as `true` under + `platform_settings.feature_support` for the `platform` set on this device. - Subclass of - AvdModel. + Subclass of AvdModel. """ structured_config: EosCliConfigGen.EthernetInterfacesItem """Custom structured config for the member ethernet interface.""" @@ -45540,6 +46035,7 @@ def __init__( peer: str | None | UndefinedType = Undefined, peer_interface: str | None | UndefinedType = Undefined, speed: str | None | UndefinedType = Undefined, + rx_queue: RxQueue | UndefinedType = Undefined, structured_config: EosCliConfigGen.EthernetInterfacesItem | UndefinedType = Undefined, ) -> None: """ @@ -45564,6 +46060,13 @@ def __init__( speed: Speed should be set in the format `` or `forced ` or `auto `. + rx_queue: + Receive queue parameters for Receive Side Scaling (RSS) profile for this interface. + This setting is + ignored unless the `platform_sfe_interface_profile.supported` is set as `true` under + `platform_settings.feature_support` for the `platform` set on this device. + + Subclass of AvdModel. structured_config: Custom structured config for the member ethernet interface. """ @@ -48954,20 +49457,27 @@ def __init__(self, *, policies: Policies | UndefinedType = Undefined) -> None: class RxQueue(AvdModel): """Subclass of AvdModel.""" - _fields: ClassVar[dict] = {"count": {"type": int}, "worker": {"type": str}, "mode": {"type": str}, "_custom_data": {"type": dict}} + class Worker(AvdList[str]): + """Subclass of AvdList with `str` items.""" + + Worker._item_type = str + + _fields: ClassVar[dict] = {"count": {"type": int}, "worker": {"type": Worker}, "mode": {"type": str, "default": "shared"}} count: int | None """ Number of receive queues. - The maximum value is platform dependent. + The maximum value is determined by + `platform_sfe_interface_profile.max_rx_queues` under `platform_settings.feature_support` for the + `platform` set on this device. """ - worker: str | None + worker: Worker + """Subclass of AvdList with `str` items.""" + mode: Literal["shared", "exclusive"] """ - Worker ids specified as combination of range and/or comma separated values - such as 0-4,7. + Mode applicable to the workers. + + Default value: `"shared"` """ - mode: Literal["shared", "exclusive"] | None - """Mode applicable to the workers. Default mode is 'shared'.""" - _custom_data: dict[str, Any] if TYPE_CHECKING: @@ -48975,9 +49485,8 @@ def __init__( self, *, count: int | None | UndefinedType = Undefined, - worker: str | None | UndefinedType = Undefined, - mode: Literal["shared", "exclusive"] | None | UndefinedType = Undefined, - _custom_data: dict[str, Any] | UndefinedType = Undefined, + worker: Worker | UndefinedType = Undefined, + mode: Literal["shared", "exclusive"] | UndefinedType = Undefined, ) -> None: """ RxQueue. @@ -48988,12 +49497,11 @@ def __init__( Args: count: Number of receive queues. - The maximum value is platform dependent. - worker: - Worker ids specified as combination of range and/or comma separated values - such as 0-4,7. - mode: Mode applicable to the workers. Default mode is 'shared'. - _custom_data: _custom_data + The maximum value is determined by + `platform_sfe_interface_profile.max_rx_queues` under `platform_settings.feature_support` for the + `platform` set on this device. + worker: Subclass of AvdList with `str` items. + mode: Mode applicable to the workers. """ @@ -49180,9 +49688,11 @@ def __init__(self, *, enabled: bool | None | UndefinedType = Undefined, name: st rx_queue: RxQueue """ Receive queue parameters for Receive Side Scaling (RSS) profile for this interface. + This setting is + ignored unless the `platform_sfe_interface_profile.supported` is set as `true` under + `platform_settings.feature_support` for the `platform` set on this device. - Subclass of - AvdModel. + Subclass of AvdModel. """ raw_eos_cli: str | None """EOS CLI rendered directly on the interface in the final EOS configuration.""" @@ -49316,9 +49826,11 @@ def __init__( Subclass of AvdModel. rx_queue: Receive queue parameters for Receive Side Scaling (RSS) profile for this interface. + This setting is + ignored unless the `platform_sfe_interface_profile.supported` is set as `true` under + `platform_settings.feature_support` for the `platform` set on this device. - Subclass of - AvdModel. + 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 interface. Overrides `fabric_flow_tracking.l3_interfaces` setting. @@ -49340,12 +49852,64 @@ class L3PortChannelsItem(AvdModel): class MemberInterfacesItem(AvdModel): """Subclass of AvdModel.""" + class RxQueue(AvdModel): + """Subclass of AvdModel.""" + + class Worker(AvdList[str]): + """Subclass of AvdList with `str` items.""" + + Worker._item_type = str + + _fields: ClassVar[dict] = {"count": {"type": int}, "worker": {"type": Worker}, "mode": {"type": str, "default": "shared"}} + count: int | None + """ + Number of receive queues. + The maximum value is determined by + `platform_sfe_interface_profile.max_rx_queues` under `platform_settings.feature_support` for the + `platform` set on this device. + """ + worker: Worker + """Subclass of AvdList with `str` items.""" + mode: Literal["shared", "exclusive"] + """ + Mode applicable to the workers. + + Default value: `"shared"` + """ + + if TYPE_CHECKING: + + def __init__( + self, + *, + count: int | None | UndefinedType = Undefined, + worker: Worker | UndefinedType = Undefined, + mode: Literal["shared", "exclusive"] | UndefinedType = Undefined, + ) -> None: + """ + RxQueue. + + + Subclass of AvdModel. + + Args: + count: + Number of receive queues. + The maximum value is determined by + `platform_sfe_interface_profile.max_rx_queues` under `platform_settings.feature_support` for the + `platform` set on this device. + worker: Subclass of AvdList with `str` items. + mode: Mode applicable to the workers. + + """ + _fields: ClassVar[dict] = { "name": {"type": str}, "description": {"type": str}, "peer": {"type": str}, "peer_interface": {"type": str}, "speed": {"type": str}, + "rx_queue": {"type": RxQueue}, "structured_config": {"type": EosCliConfigGen.EthernetInterfacesItem}, } name: str @@ -49375,9 +49939,11 @@ class MemberInterfacesItem(AvdModel): rx_queue: RxQueue """ Receive queue parameters for Receive Side Scaling (RSS) profile for this interface. + This setting is + ignored unless the `platform_sfe_interface_profile.supported` is set as `true` under + `platform_settings.feature_support` for the `platform` set on this device. - Subclass of - AvdModel. + Subclass of AvdModel. """ structured_config: EosCliConfigGen.EthernetInterfacesItem """Custom structured config for the member ethernet interface.""" @@ -49392,6 +49958,7 @@ def __init__( peer: str | None | UndefinedType = Undefined, peer_interface: str | None | UndefinedType = Undefined, speed: str | None | UndefinedType = Undefined, + rx_queue: RxQueue | UndefinedType = Undefined, structured_config: EosCliConfigGen.EthernetInterfacesItem | UndefinedType = Undefined, ) -> None: """ @@ -49416,6 +49983,13 @@ def __init__( speed: Speed should be set in the format `` or `forced ` or `auto `. + rx_queue: + Receive queue parameters for Receive Side Scaling (RSS) profile for this interface. + This setting is + ignored unless the `platform_sfe_interface_profile.supported` is set as `true` under + `platform_settings.feature_support` for the `platform` set on this device. + + Subclass of AvdModel. structured_config: Custom structured config for the member ethernet interface. """ @@ -52864,20 +53438,27 @@ def __init__(self, *, policies: Policies | UndefinedType = Undefined) -> None: class RxQueue(AvdModel): """Subclass of AvdModel.""" - _fields: ClassVar[dict] = {"count": {"type": int}, "worker": {"type": str}, "mode": {"type": str}, "_custom_data": {"type": dict}} + class Worker(AvdList[str]): + """Subclass of AvdList with `str` items.""" + + Worker._item_type = str + + _fields: ClassVar[dict] = {"count": {"type": int}, "worker": {"type": Worker}, "mode": {"type": str, "default": "shared"}} count: int | None """ Number of receive queues. - The maximum value is platform dependent. + The maximum value is determined by + `platform_sfe_interface_profile.max_rx_queues` under `platform_settings.feature_support` for the + `platform` set on this device. """ - worker: str | None + worker: Worker + """Subclass of AvdList with `str` items.""" + mode: Literal["shared", "exclusive"] """ - Worker ids specified as combination of range and/or comma separated values - such as 0-4,7. + Mode applicable to the workers. + + Default value: `"shared"` """ - mode: Literal["shared", "exclusive"] | None - """Mode applicable to the workers. Default mode is 'shared'.""" - _custom_data: dict[str, Any] if TYPE_CHECKING: @@ -52885,9 +53466,8 @@ def __init__( self, *, count: int | None | UndefinedType = Undefined, - worker: str | None | UndefinedType = Undefined, - mode: Literal["shared", "exclusive"] | None | UndefinedType = Undefined, - _custom_data: dict[str, Any] | UndefinedType = Undefined, + worker: Worker | UndefinedType = Undefined, + mode: Literal["shared", "exclusive"] | UndefinedType = Undefined, ) -> None: """ RxQueue. @@ -52898,12 +53478,11 @@ def __init__( Args: count: Number of receive queues. - The maximum value is platform dependent. - worker: - Worker ids specified as combination of range and/or comma separated values - such as 0-4,7. - mode: Mode applicable to the workers. Default mode is 'shared'. - _custom_data: _custom_data + The maximum value is determined by + `platform_sfe_interface_profile.max_rx_queues` under `platform_settings.feature_support` for the + `platform` set on this device. + worker: Subclass of AvdList with `str` items. + mode: Mode applicable to the workers. """ @@ -53090,9 +53669,11 @@ def __init__(self, *, enabled: bool | None | UndefinedType = Undefined, name: st rx_queue: RxQueue """ Receive queue parameters for Receive Side Scaling (RSS) profile for this interface. + This setting is + ignored unless the `platform_sfe_interface_profile.supported` is set as `true` under + `platform_settings.feature_support` for the `platform` set on this device. - Subclass of - AvdModel. + Subclass of AvdModel. """ raw_eos_cli: str | None """EOS CLI rendered directly on the interface in the final EOS configuration.""" @@ -53226,9 +53807,11 @@ def __init__( Subclass of AvdModel. rx_queue: Receive queue parameters for Receive Side Scaling (RSS) profile for this interface. + This setting is + ignored unless the `platform_sfe_interface_profile.supported` is set as `true` under + `platform_settings.feature_support` for the `platform` set on this device. - Subclass of - AvdModel. + 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 interface. Overrides `fabric_flow_tracking.l3_interfaces` setting. @@ -53250,12 +53833,64 @@ class L3PortChannelsItem(AvdModel): class MemberInterfacesItem(AvdModel): """Subclass of AvdModel.""" + class RxQueue(AvdModel): + """Subclass of AvdModel.""" + + class Worker(AvdList[str]): + """Subclass of AvdList with `str` items.""" + + Worker._item_type = str + + _fields: ClassVar[dict] = {"count": {"type": int}, "worker": {"type": Worker}, "mode": {"type": str, "default": "shared"}} + count: int | None + """ + Number of receive queues. + The maximum value is determined by + `platform_sfe_interface_profile.max_rx_queues` under `platform_settings.feature_support` for the + `platform` set on this device. + """ + worker: Worker + """Subclass of AvdList with `str` items.""" + mode: Literal["shared", "exclusive"] + """ + Mode applicable to the workers. + + Default value: `"shared"` + """ + + if TYPE_CHECKING: + + def __init__( + self, + *, + count: int | None | UndefinedType = Undefined, + worker: Worker | UndefinedType = Undefined, + mode: Literal["shared", "exclusive"] | UndefinedType = Undefined, + ) -> None: + """ + RxQueue. + + + Subclass of AvdModel. + + Args: + count: + Number of receive queues. + The maximum value is determined by + `platform_sfe_interface_profile.max_rx_queues` under `platform_settings.feature_support` for the + `platform` set on this device. + worker: Subclass of AvdList with `str` items. + mode: Mode applicable to the workers. + + """ + _fields: ClassVar[dict] = { "name": {"type": str}, "description": {"type": str}, "peer": {"type": str}, "peer_interface": {"type": str}, "speed": {"type": str}, + "rx_queue": {"type": RxQueue}, "structured_config": {"type": EosCliConfigGen.EthernetInterfacesItem}, } name: str @@ -53285,9 +53920,11 @@ class MemberInterfacesItem(AvdModel): rx_queue: RxQueue """ Receive queue parameters for Receive Side Scaling (RSS) profile for this interface. + This setting is + ignored unless the `platform_sfe_interface_profile.supported` is set as `true` under + `platform_settings.feature_support` for the `platform` set on this device. - Subclass of - AvdModel. + Subclass of AvdModel. """ structured_config: EosCliConfigGen.EthernetInterfacesItem """Custom structured config for the member ethernet interface.""" @@ -53302,6 +53939,7 @@ def __init__( peer: str | None | UndefinedType = Undefined, peer_interface: str | None | UndefinedType = Undefined, speed: str | None | UndefinedType = Undefined, + rx_queue: RxQueue | UndefinedType = Undefined, structured_config: EosCliConfigGen.EthernetInterfacesItem | UndefinedType = Undefined, ) -> None: """ @@ -53326,6 +53964,13 @@ def __init__( speed: Speed should be set in the format `` or `forced ` or `auto `. + rx_queue: + Receive queue parameters for Receive Side Scaling (RSS) profile for this interface. + This setting is + ignored unless the `platform_sfe_interface_profile.supported` is set as `true` under + `platform_settings.feature_support` for the `platform` set on this device. + + Subclass of AvdModel. structured_config: Custom structured config for the member ethernet interface. """ @@ -55711,13 +56356,25 @@ def __init__( "reload_delay": {"mlag": 300, "non_mlag": 330}, }, { - "platforms": ["AWE-5310", "AWE-5510", "AWE-7250R", "AWE-7230R"], + "platforms": ["AWE-5310", "AWE-7230R"], + "feature_support": { + "bgp_update_wait_for_convergence": True, + "bgp_update_wait_install": False, + "interface_storm_control": False, + "queue_monitor_length_notify": False, + "platform_sfe_interface_profile": {"supported": True, "max_rx_queues": 6}, + }, + "management_interface": "Management1/1", + "p2p_uplinks_mtu": 9194, + }, + { + "platforms": ["AWE-5510", "AWE-7250R"], "feature_support": { "bgp_update_wait_for_convergence": True, "bgp_update_wait_install": False, "interface_storm_control": False, "queue_monitor_length_notify": False, - "build_rss_profile": False, + "platform_sfe_interface_profile": {"supported": True, "max_rx_queues": 16}, }, "management_interface": "Management1/1", "p2p_uplinks_mtu": 9194, @@ -57113,7 +57770,7 @@ def __init__( `custom_platform_settings` will be matched before the equivalent entries from `platform_settings`. Subclass of AvdList with `PlatformSettingsItem` items. - Default value: `lambda cls: coerce_type([{"platforms": ["default"], "feature_support": {"queue_monitor_length_notify": False}, "reload_delay": {"mlag": 300, "non_mlag": 330}}, {"platforms": ["7050X3"], "feature_support": {"queue_monitor_length_notify": False}, "reload_delay": {"mlag": 300, "non_mlag": 330}, "trident_forwarding_table_partition": "flexible exact-match 16384 l2-shared 98304 l3-shared 131072"}, {"platforms": ["720XP"], "feature_support": {"poe": True, "queue_monitor_length_notify": False}, "reload_delay": {"mlag": 300, "non_mlag": 330}, "trident_forwarding_table_partition": "flexible exact-match 16000 l2-shared 18000 l3-shared 22000"}, {"platforms": ["750", "755", "758"], "management_interface": "Management0", "feature_support": {"poe": True, "queue_monitor_length_notify": False}, "reload_delay": {"mlag": 300, "non_mlag": 330}}, {"platforms": ["720DP", "722XP", "710P"], "feature_support": {"poe": True, "queue_monitor_length_notify": False}, "reload_delay": {"mlag": 300, "non_mlag": 330}}, {"platforms": ["7010TX"], "feature_support": {"queue_monitor_length_notify": False, "per_interface_mtu": False}, "reload_delay": {"mlag": 300, "non_mlag": 330}}, {"platforms": ["7280R", "7280R2", "7020R"], "lag_hardware_only": True, "reload_delay": {"mlag": 900, "non_mlag": 1020}, "tcam_profile": "vxlan-routing"}, {"platforms": ["7280R3"], "reload_delay": {"mlag": 900, "non_mlag": 1020}, "tcam_profile": "vxlan-routing"}, {"platforms": ["7500R", "7500R2"], "lag_hardware_only": True, "management_interface": "Management0", "reload_delay": {"mlag": 900, "non_mlag": 1020}, "tcam_profile": "vxlan-routing"}, {"platforms": ["7500R3", "7800R3"], "management_interface": "Management0", "reload_delay": {"mlag": 900, "non_mlag": 1020}, "tcam_profile": "vxlan-routing"}, {"platforms": ["7358X4"], "management_interface": "Management1/1", "reload_delay": {"mlag": 300, "non_mlag": 330}, "feature_support": {"queue_monitor_length_notify": False, "interface_storm_control": True, "bgp_update_wait_for_convergence": True, "bgp_update_wait_install": False}}, {"platforms": ["7368X4"], "management_interface": "Management0", "reload_delay": {"mlag": 300, "non_mlag": 330}}, {"platforms": ["7300X3"], "management_interface": "Management0", "reload_delay": {"mlag": 1200, "non_mlag": 1320}, "trident_forwarding_table_partition": "flexible exact-match 16384 l2-shared 98304 l3-shared 131072"}, {"platforms": ["VEOS", "VEOS-LAB", "vEOS", "vEOS-lab"], "feature_support": {"bgp_update_wait_for_convergence": False, "bgp_update_wait_install": False, "interface_storm_control": False, "queue_monitor_length_notify": False}, "reload_delay": {"mlag": 300, "non_mlag": 330}}, {"platforms": ["CEOS", "cEOS", "ceos", "cEOSLab"], "feature_support": {"bgp_update_wait_for_convergence": False, "bgp_update_wait_install": False, "interface_storm_control": False, "queue_monitor_length_notify": False}, "management_interface": "Management0", "reload_delay": {"mlag": 300, "non_mlag": 330}}, {"platforms": ["AWE-5310", "AWE-5510", "AWE-7250R", "AWE-7230R"], "feature_support": {"bgp_update_wait_for_convergence": True, "bgp_update_wait_install": False, "interface_storm_control": False, "queue_monitor_length_notify": False, "build_rss_profile": False}, "management_interface": "Management1/1", "p2p_uplinks_mtu": 9194}, {"platforms": ["AWE-7220R"], "feature_support": {"bgp_update_wait_for_convergence": True, "bgp_update_wait_install": False, "interface_storm_control": False, "queue_monitor_length_notify": False, "poe": True}, "management_interface": "Management1", "p2p_uplinks_mtu": 9194}], target_type=cls)` + Default value: `lambda cls: coerce_type([{"platforms": ["default"], "feature_support": {"queue_monitor_length_notify": False}, "reload_delay": {"mlag": 300, "non_mlag": 330}}, {"platforms": ["7050X3"], "feature_support": {"queue_monitor_length_notify": False}, "reload_delay": {"mlag": 300, "non_mlag": 330}, "trident_forwarding_table_partition": "flexible exact-match 16384 l2-shared 98304 l3-shared 131072"}, {"platforms": ["720XP"], "feature_support": {"poe": True, "queue_monitor_length_notify": False}, "reload_delay": {"mlag": 300, "non_mlag": 330}, "trident_forwarding_table_partition": "flexible exact-match 16000 l2-shared 18000 l3-shared 22000"}, {"platforms": ["750", "755", "758"], "management_interface": "Management0", "feature_support": {"poe": True, "queue_monitor_length_notify": False}, "reload_delay": {"mlag": 300, "non_mlag": 330}}, {"platforms": ["720DP", "722XP", "710P"], "feature_support": {"poe": True, "queue_monitor_length_notify": False}, "reload_delay": {"mlag": 300, "non_mlag": 330}}, {"platforms": ["7010TX"], "feature_support": {"queue_monitor_length_notify": False, "per_interface_mtu": False}, "reload_delay": {"mlag": 300, "non_mlag": 330}}, {"platforms": ["7280R", "7280R2", "7020R"], "lag_hardware_only": True, "reload_delay": {"mlag": 900, "non_mlag": 1020}, "tcam_profile": "vxlan-routing"}, {"platforms": ["7280R3"], "reload_delay": {"mlag": 900, "non_mlag": 1020}, "tcam_profile": "vxlan-routing"}, {"platforms": ["7500R", "7500R2"], "lag_hardware_only": True, "management_interface": "Management0", "reload_delay": {"mlag": 900, "non_mlag": 1020}, "tcam_profile": "vxlan-routing"}, {"platforms": ["7500R3", "7800R3"], "management_interface": "Management0", "reload_delay": {"mlag": 900, "non_mlag": 1020}, "tcam_profile": "vxlan-routing"}, {"platforms": ["7358X4"], "management_interface": "Management1/1", "reload_delay": {"mlag": 300, "non_mlag": 330}, "feature_support": {"queue_monitor_length_notify": False, "interface_storm_control": True, "bgp_update_wait_for_convergence": True, "bgp_update_wait_install": False}}, {"platforms": ["7368X4"], "management_interface": "Management0", "reload_delay": {"mlag": 300, "non_mlag": 330}}, {"platforms": ["7300X3"], "management_interface": "Management0", "reload_delay": {"mlag": 1200, "non_mlag": 1320}, "trident_forwarding_table_partition": "flexible exact-match 16384 l2-shared 98304 l3-shared 131072"}, {"platforms": ["VEOS", "VEOS-LAB", "vEOS", "vEOS-lab"], "feature_support": {"bgp_update_wait_for_convergence": False, "bgp_update_wait_install": False, "interface_storm_control": False, "queue_monitor_length_notify": False}, "reload_delay": {"mlag": 300, "non_mlag": 330}}, {"platforms": ["CEOS", "cEOS", "ceos", "cEOSLab"], "feature_support": {"bgp_update_wait_for_convergence": False, "bgp_update_wait_install": False, "interface_storm_control": False, "queue_monitor_length_notify": False}, "management_interface": "Management0", "reload_delay": {"mlag": 300, "non_mlag": 330}}, {"platforms": ["AWE-5310", "AWE-7230R"], "feature_support": {"bgp_update_wait_for_convergence": True, "bgp_update_wait_install": False, "interface_storm_control": False, "queue_monitor_length_notify": False, "platform_sfe_interface_profile": {"supported": True, "max_rx_queues": 6}}, "management_interface": "Management1/1", "p2p_uplinks_mtu": 9194}, {"platforms": ["AWE-5510", "AWE-7250R"], "feature_support": {"bgp_update_wait_for_convergence": True, "bgp_update_wait_install": False, "interface_storm_control": False, "queue_monitor_length_notify": False, "platform_sfe_interface_profile": {"supported": True, "max_rx_queues": 16}}, "management_interface": "Management1/1", "p2p_uplinks_mtu": 9194}, {"platforms": ["AWE-7220R"], "feature_support": {"bgp_update_wait_for_convergence": True, "bgp_update_wait_install": False, "interface_storm_control": False, "queue_monitor_length_notify": False, "poe": True}, "management_interface": "Management1", "p2p_uplinks_mtu": 9194}], target_type=cls)` """ platform_speed_groups: PlatformSpeedGroups """ diff --git a/python-avd/pyavd/_eos_designs/schema/eos_designs.schema.yml b/python-avd/pyavd/_eos_designs/schema/eos_designs.schema.yml index 816c4c088d9..6ab7f4bf081 100644 --- a/python-avd/pyavd/_eos_designs/schema/eos_designs.schema.yml +++ b/python-avd/pyavd/_eos_designs/schema/eos_designs.schema.yml @@ -3395,10 +3395,22 @@ keys: Can be overridden by setting "bgp_update_wait_for_convergence" host/group_vars. ' - build_rss_profile: - type: bool - default: false - description: Build RSS interface profile for supported platforms. + platform_sfe_interface_profile: + type: dict + description: Support for Platform SFE Interface Profiles used for Receive + Side Scaling (RSS). + keys: + supported: + type: bool + default: false + description: Capability flag for generation of RSS profiles. + max_rx_queues: + type: int + required: true + default: 6 + convert_types: + - str + description: Maximum rx_queue count supported on any interface. management_interface: type: str default: Management1 @@ -3572,15 +3584,28 @@ keys: non_mlag: 330 - platforms: - AWE-5310 + - AWE-7230R + feature_support: + bgp_update_wait_for_convergence: true + bgp_update_wait_install: false + interface_storm_control: false + queue_monitor_length_notify: false + platform_sfe_interface_profile: + supported: true + max_rx_queues: 6 + management_interface: Management1/1 + p2p_uplinks_mtu: 9194 + - platforms: - AWE-5510 - AWE-7250R - - AWE-7230R feature_support: bgp_update_wait_for_convergence: true bgp_update_wait_install: false interface_storm_control: false queue_monitor_length_notify: false - build_rss_profile: false + platform_sfe_interface_profile: + supported: true + max_rx_queues: 16 management_interface: Management1/1 p2p_uplinks_mtu: 9194 - platforms: @@ -9798,8 +9823,12 @@ $defs: Examples: ''1-3'' or ''100,200,300''' rx_queue: type: dict - description: Receive queue parameters for Receive Side Scaling (RSS) profile + description: 'Receive queue parameters for Receive Side Scaling (RSS) profile for this interface. + + This setting is ignored unless the `platform_sfe_interface_profile.supported` + is set as `true` under `platform_settings.feature_support` for the `platform` + set on this device.' keys: count: type: int @@ -9808,16 +9837,25 @@ $defs: - str description: 'Number of receive queues. - The maximum value is platform dependent.' + The maximum value is determined by `platform_sfe_interface_profile.max_rx_queues` + under `platform_settings.feature_support` for the `platform` set on + this device.' worker: - type: str - description: 'Worker ids specified as combination of range and/or comma - separated values + type: list + items: + type: str + convert_types: + - int + description: 'Worker ids specified as values or range of values such + as 0-4 or 7. - such as 0-4,7.' + Valid values are between 0 and one less than maximum value determined + by `platform_sfe_interface_profile.max_rx_queues` under `platform_settings.feature_support` + for the `platform` set on this device.' mode: type: str - description: Mode applicable to the workers. Default mode is 'shared'. + description: Mode applicable to the workers. + default: shared valid_values: - shared - exclusive @@ -9903,8 +9941,12 @@ $defs: or `forced ` or `auto `. rx_queue: type: dict - description: Receive queue parameters for Receive Side Scaling (RSS) + description: 'Receive queue parameters for Receive Side Scaling (RSS) profile for this interface. + + This setting is ignored unless the `platform_sfe_interface_profile.supported` + is set as `true` under `platform_settings.feature_support` for the + `platform` set on this device.' keys: count: type: int @@ -9913,16 +9955,25 @@ $defs: - str description: 'Number of receive queues. - The maximum value is platform dependent.' + The maximum value is determined by `platform_sfe_interface_profile.max_rx_queues` + under `platform_settings.feature_support` for the `platform` + set on this device.' worker: - type: str - description: 'Worker ids specified as combination of range and/or - comma separated values + type: list + items: + type: str + convert_types: + - int + description: 'Worker ids specified as values or range of values + such as 0-4 or 7. - such as 0-4,7.' + Values are between 0 and one less than maximum value determined + by `platform_sfe_interface_profile.max_rx_queues` under `platform_settings.feature_support` + for the `platform` set on this device.' mode: type: str - description: Mode applicable to the workers. Default mode is 'shared'. + description: Mode applicable to the workers. + default: shared valid_values: - shared - exclusive diff --git a/python-avd/pyavd/_eos_designs/schema/schema_fragments/defs_node_type_l3_interfaces.schema.yml b/python-avd/pyavd/_eos_designs/schema/schema_fragments/defs_node_type_l3_interfaces.schema.yml index 369e61d0a45..9b09498ccf4 100644 --- a/python-avd/pyavd/_eos_designs/schema/schema_fragments/defs_node_type_l3_interfaces.schema.yml +++ b/python-avd/pyavd/_eos_designs/schema/schema_fragments/defs_node_type_l3_interfaces.schema.yml @@ -173,6 +173,7 @@ $defs: type: dict description: |- Receive queue parameters for Receive Side Scaling (RSS) profile for this interface. + This setting is ignored unless the `platform_sfe_interface_profile.supported` is set as `true` under `platform_settings.feature_support` for the `platform` set on this device. keys: count: type: int @@ -181,15 +182,20 @@ $defs: - str description: |- Number of receive queues. - The maximum value is platform dependent. + The maximum value is determined by `platform_sfe_interface_profile.max_rx_queues` under `platform_settings.feature_support` for the `platform` set on this device. worker: - type: str - description: |- - Worker ids specified as combination of range and/or comma separated values - such as 0-4,7. + type: list + items: + type: str + convert_types: + - int + description: |- + Worker ids specified as values or range of values such as 0-4 or 7. + Valid values are between 0 and one less than maximum value determined by `platform_sfe_interface_profile.max_rx_queues` under `platform_settings.feature_support` for the `platform` set on this device. mode: type: str - description: Mode applicable to the workers. Default mode is 'shared'. + description: Mode applicable to the workers. + default: shared valid_values: - shared - exclusive diff --git a/python-avd/pyavd/_eos_designs/schema/schema_fragments/defs_node_type_l3_port_channels.schema.yml b/python-avd/pyavd/_eos_designs/schema/schema_fragments/defs_node_type_l3_port_channels.schema.yml index b04cf9d03c2..925f464e8be 100644 --- a/python-avd/pyavd/_eos_designs/schema/schema_fragments/defs_node_type_l3_port_channels.schema.yml +++ b/python-avd/pyavd/_eos_designs/schema/schema_fragments/defs_node_type_l3_port_channels.schema.yml @@ -72,6 +72,7 @@ $defs: type: dict description: |- Receive queue parameters for Receive Side Scaling (RSS) profile for this interface. + This setting is ignored unless the `platform_sfe_interface_profile.supported` is set as `true` under `platform_settings.feature_support` for the `platform` set on this device. keys: count: type: int @@ -80,15 +81,20 @@ $defs: - str description: |- Number of receive queues. - The maximum value is platform dependent. + The maximum value is determined by `platform_sfe_interface_profile.max_rx_queues` under `platform_settings.feature_support` for the `platform` set on this device. worker: - type: str - description: |- - Worker ids specified as combination of range and/or comma separated values - such as 0-4,7. + type: list + items: + type: str + convert_types: + - int + description: |- + Worker ids specified as values or range of values such as 0-4 or 7. + Values are between 0 and one less than maximum value determined by `platform_sfe_interface_profile.max_rx_queues` under `platform_settings.feature_support` for the `platform` set on this device. mode: type: str - description: Mode applicable to the workers. Default mode is 'shared'. + description: Mode applicable to the workers. + default: shared valid_values: - shared - exclusive diff --git a/python-avd/pyavd/_eos_designs/schema/schema_fragments/platform_settings.schema.yml b/python-avd/pyavd/_eos_designs/schema/schema_fragments/platform_settings.schema.yml index ca5eab358e2..4591da9d41c 100644 --- a/python-avd/pyavd/_eos_designs/schema/schema_fragments/platform_settings.schema.yml +++ b/python-avd/pyavd/_eos_designs/schema/schema_fragments/platform_settings.schema.yml @@ -113,10 +113,21 @@ keys: Do not advertise reachability to a prefix until that prefix has been installed in hardware. This will eliminate any temporary black holes due to a BGP speaker advertising reachability to a prefix that may not yet be installed into the forwarding plane. Can be overridden by setting "bgp_update_wait_for_convergence" host/group_vars. - build_rss_profile: - type: bool - default: false - description: Build RSS interface profile for supported platforms. + platform_sfe_interface_profile: + type: dict + description: Support for Platform SFE Interface Profiles used for Receive Side Scaling (RSS). + keys: + supported: + type: bool + default: false + description: Capability flag for generation of RSS profiles. + max_rx_queues: + type: int + required: true + default: 6 + convert_types: + - str + description: Maximum rx_queue count supported on any interface. management_interface: type: str default: Management1 @@ -290,15 +301,28 @@ keys: non_mlag: 330 - platforms: - AWE-5310 + - AWE-7230R + feature_support: + bgp_update_wait_for_convergence: true + bgp_update_wait_install: false + interface_storm_control: false + queue_monitor_length_notify: false + platform_sfe_interface_profile: + supported: true + max_rx_queues: 6 + management_interface: Management1/1 + p2p_uplinks_mtu: 9194 + - platforms: - AWE-5510 - AWE-7250R - - AWE-7230R feature_support: bgp_update_wait_for_convergence: true bgp_update_wait_install: false interface_storm_control: false queue_monitor_length_notify: false - build_rss_profile: false + platform_sfe_interface_profile: + supported: true + max_rx_queues: 16 management_interface: Management1/1 p2p_uplinks_mtu: 9194 - platforms: diff --git a/python-avd/pyavd/_eos_designs/shared_utils/misc.py b/python-avd/pyavd/_eos_designs/shared_utils/misc.py index ca734990f30..698ccb3bd48 100644 --- a/python-avd/pyavd/_eos_designs/shared_utils/misc.py +++ b/python-avd/pyavd/_eos_designs/shared_utils/misc.py @@ -8,10 +8,9 @@ from pyavd._eos_designs.schema import EosDesigns from pyavd._errors import AristaAvdError, AristaAvdInvalidInputsError, AristaAvdMissingVariableError -from pyavd._utils import default, get +from pyavd._utils import append_if_not_duplicate, default, get, strip_empties_from_dict from pyavd.api.interface_descriptions import InterfaceDescriptionData -from pyavd.api.pool_manager import PoolManager -from pyavd.j2filters import range_expand +from pyavd.j2filters import list_compress, range_expand if TYPE_CHECKING: from pyavd._eos_designs.eos_designs_facts import EosDesignsFacts @@ -364,3 +363,107 @@ def l3_bgp_neighbors(self: SharedUtilsProtocol) -> list: l3_bgp_neighbors = self.get_l3_generic_interface_bgp_neighbors(self.l3_interfaces) l3_bgp_neighbors.extend(self.get_l3_generic_interface_bgp_neighbors(self.node_config.l3_port_channels)) return l3_bgp_neighbors + + @cached_property + def is_rss_profile_supported(self: SharedUtilsProtocol) -> bool: + """Returns bool indicating whether Receive Side Scaling (RSS) profile is supported for this platform.""" + return self.platform_settings.feature_support.platform_sfe_interface_profile.supported + + @cached_property + def max_rss_queues(self: SharedUtilsProtocol) -> int: + """ + Returns maximum value allowed for rx_queue count configured under L3 interface or L3 Port-Channel interface. + + This is used for building RSS profile. + """ + if not self.is_rss_profile_supported: + return 0 + return self.platform_settings.feature_support.platform_sfe_interface_profile.max_rx_queues + + @cached_property + def get_rss_profiles(self: SharedUtilsProtocol) -> dict: + """Returns a dictionary containing list of RSS profiles and profile chosen to apply.""" + rss_profiles = {} + rss_interfaces = self.get_rss_profile_member_interfaces() + if rss_interfaces is not None: + default_rss_profile_name = "Default_RSS_Profile" + # list of profiles contains a single profile which is the one to apply + rss_profiles["profiles"] = [ + { + "name": default_rss_profile_name, + "interfaces": rss_interfaces, + } + ] + rss_profiles["interface_profile"] = default_rss_profile_name + return rss_profiles + + def get_rss_profile_member_interfaces(self: SharedUtilsProtocol) -> list | None: + """Returns list of eligible interfaces with RSS related settings.""" + # Iterate thru all L3 interfaces checking for those with 'rx_queue' config + # Also iterate thru member interfaces of all L3 Port-Channels with 'rx_queue' config + rss_profile_member_interfaces = [] + if not self.is_rss_profile_supported: + return rss_profile_member_interfaces + # iterate thru each L3 interface + for interface in self.l3_interfaces: + intf_with_rss = self.build_interface_with_rx_queue_settings(interface) + if intf_with_rss: + append_if_not_duplicate( + list_of_dicts=rss_profile_member_interfaces, + primary_key="name", + new_dict=intf_with_rss, + context="Ethernet interface defined with RSS settings", + context_keys=["name"], + ignore_same_dict=False, + ) + # iterate thru member interfaces of each L3 Port-Channel + for interface in self.node_config.l3_port_channels: + for member_intf in interface.member_interfaces: + intf_with_rss = self.build_interface_with_rx_queue_settings(member_intf) + if intf_with_rss: + append_if_not_duplicate( + list_of_dicts=rss_profile_member_interfaces, + primary_key="name", + new_dict=intf_with_rss, + context="Port-Channel member interface defined with RSS settings", + context_keys=["name"], + ignore_same_dict=False, + ) + if rss_profile_member_interfaces: + return rss_profile_member_interfaces + return None + + def build_interface_with_rx_queue_settings( + self: SharedUtilsProtocol, + l3_member_interface: EosDesigns._DynamicKeys.DynamicNodeTypesItem.NodeTypes.NodesItem.L3InterfacesItem + | EosDesigns._DynamicKeys.DynamicNodeTypesItem.NodeTypes.NodesItem.L3PortChannelsItem.MemberInterfacesItem, + ) -> dict | None: + """Returns interface dictionary with RSS settings.""" + intf_with_rss_settings = {} + if l3_member_interface._get("rx_queue"): + # validate rx_queue 'count' when specified + if l3_member_interface.rx_queue._get("count") and l3_member_interface.rx_queue.count > self.max_rss_queues: + msg = f"'rx_queue' count for interface '{l3_member_interface.name}' exceeds maximum supported '{self.max_rss_queues}' for this platform." + raise AristaAvdInvalidInputsError(msg) + intf_with_rss_settings["name"] = l3_member_interface.name + rx_queue_worker_cum_set = set() + for _worker in l3_member_interface.rx_queue.worker: + for worker_id in range_expand(_worker): + if int(worker_id) >= self.max_rss_queues: + msg = ( + f"One or more worker ids within '{_worker}' under 'rx_queue' for interface '{l3_member_interface.name}' " + f"equal or exceed maximum supported '{self.max_rss_queues}' for this platform." + ) + raise AristaAvdInvalidInputsError(msg) + rx_queue_worker_cum_set.add(int(worker_id)) + rx_queue_worker_cum = list_compress(sorted(rx_queue_worker_cum_set)) + rx_queue = { + "count": l3_member_interface.rx_queue.count, + "worker": rx_queue_worker_cum, + "mode": l3_member_interface.rx_queue.mode if l3_member_interface.rx_queue._get("mode") else "", + } + intf_with_rss_settings["rx_queue"] = strip_empties_from_dict(rx_queue) + return strip_empties_from_dict(intf_with_rss_settings) + # Implies specified interface does not have explicit "rx_queue" key or sub-keys specified + # In such case, skip generating any dictionary for such interface. + return None diff --git a/python-avd/pyavd/_eos_designs/structured_config/base/__init__.py b/python-avd/pyavd/_eos_designs/structured_config/base/__init__.py index 3d042859679..dc55923e8eb 100644 --- a/python-avd/pyavd/_eos_designs/structured_config/base/__init__.py +++ b/python-avd/pyavd/_eos_designs/structured_config/base/__init__.py @@ -507,7 +507,9 @@ def platform(self) -> dict | None: # this value is required for the solution to work. msg = "For AutoVPN RRs and Pathfinders, 'data_plane_cpu_allocation_max' must be set" raise AristaAvdInvalidInputsError(msg) - + # populate RSS interface profile for SFE platform (if supported) + if self.shared_utils.is_rss_profile_supported and (sfe_rss_profiles := self.shared_utils.get_rss_profiles): + platform.setdefault("sfe", {})["interface"] = sfe_rss_profiles if platform: return platform return None