Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feat(eos_cli_config_gen): Add support for Receive Side Scaling (RSS) interface profile #4954

Merged
merged 7 commits into from
Feb 17, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -10700,6 +10700,27 @@ ipv6 address virtual source-nat vrf TEST_04 address 2001:db8:85a3::8a2e:370:7335
| Settings | Value |
| -------- | ----- |
| Maximum CPU Allocation | 42 |
| Interface profile | TestProfile1 |

#### Platform Software Forwarding Engine Interface Profiles

##### TestProfile1

| Interface | Rx-Queue Count | Rx-Queue Worker | Rx-Queue Mode |
| --------- | -------------- | --------------- | ------------- |
| Ethernet1/1 | 4 | 0-2,5 | - |
| Ethernet1/2 | 2 | - | shared |
| Ethernet1/4 | 1 | - | - |
| Ethernet1/5 | 2 | 3,4 | exclusive |

##### TestProfile2

| Interface | Rx-Queue Count | Rx-Queue Worker | Rx-Queue Mode |
| --------- | -------------- | --------------- | ------------- |
| Ethernet1 | 3 | 2 | - |
| Ethernet9 | - | - | - |

##### TestProfile3

### Platform Device Configuration

Expand All @@ -10716,6 +10737,35 @@ platform sand qos map traffic-class 2 to network-qos 15
platform sand multicast replication default ingress
platform sand mdb profile l3-xxl
platform sfe data-plane cpu allocation maximum 42
!
platform sfe interface
interface profile TestProfile1
!
profile TestProfile1
interface Ethernet1/1
rx-queue count 4
rx-queue worker 0-2,5
!
interface Ethernet1/2
rx-queue count 2
rx-queue mode shared
!
interface Ethernet1/4
rx-queue count 1
!
interface Ethernet1/5
rx-queue count 2
rx-queue worker 3,4
rx-queue mode exclusive
!
profile TestProfile2
interface Ethernet1
rx-queue count 3
rx-queue worker 2
!
interface Ethernet9
!
profile TestProfile3
```

## System L1
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -284,6 +284,35 @@ logging event congestion-drops interval 10
!
load-interval default 25
!
platform sfe interface
interface profile TestProfile1
!
profile TestProfile1
interface Ethernet1/1
rx-queue count 4
rx-queue worker 0-2,5
!
interface Ethernet1/2
rx-queue count 2
rx-queue mode shared
!
interface Ethernet1/4
rx-queue count 1
!
interface Ethernet1/5
rx-queue count 2
rx-queue worker 3,4
rx-queue mode exclusive
!
profile TestProfile2
interface Ethernet1
rx-queue count 3
rx-queue worker 2
!
interface Ethernet9
!
profile TestProfile3
!
interface defaults
mtu 9000
ethernet
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -71,3 +71,32 @@ platform:
mdb_profile: "l3-xxl"
sfe:
data_plane_cpu_allocation_max: 42
interface:
profiles:
- name: TestProfile1
interfaces:
- name: Ethernet1/1
rx_queue:
count: 4
worker: "0-2,5"
- name: Ethernet1/5
rx_queue:
count: 2
worker: "3,4"
mode: exclusive
- name: Ethernet1/2
rx_queue:
count: 2
mode: shared
- name: Ethernet1/4
rx_queue:
count: 1
- name: TestProfile2
interfaces:
- name: Ethernet1
rx_queue:
count: 3
worker: "2"
- name: Ethernet9
- name: TestProfile3
interface_profile: TestProfile1

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
Expand Up @@ -83,12 +83,38 @@
{% if platform.sfe.data_plane_cpu_allocation_max is arista.avd.defined %}
| Maximum CPU Allocation | {{ platform.sfe.data_plane_cpu_allocation_max }} |
{% endif %}
{## Platform Sfe Interface #}
{% if platform.sfe.interface is arista.avd.defined %}
{% if platform.sfe.interface.interface_profile is arista.avd.defined %}
| Interface profile | {{ platform.sfe.interface.interface_profile }} |
{% endif %}
{% if platform.sfe.interface.profiles is arista.avd.defined %}

#### Platform Software Forwarding Engine Interface Profiles
{% for profile_data in platform.sfe.interface.profiles | arista.avd.natural_sort('name') %}

##### {{ profile_data.name }}
{% if profile_data.interfaces is arista.avd.defined %}

| Interface | Rx-Queue Count | Rx-Queue Worker | Rx-Queue Mode |
| --------- | -------------- | --------------- | ------------- |
{% for interface_data in profile_data.interfaces | arista.avd.natural_sort('name') %}
{% set rx_queue_count = interface_data.rx_queue.count | arista.avd.default('-') %}
{% set rx_queue_worker = interface_data.rx_queue.worker | arista.avd.default('-') %}
{% set rx_queue_mode = interface_data.rx_queue.mode | arista.avd.default('-') %}
| {{ interface_data.name }} | {{ rx_queue_count }} | {{ rx_queue_worker }} | {{ rx_queue_mode }} |
{% endfor %}
{% endif %}
{% endfor %}
{% endif %}
{% endif %}
{% endif %}
{% endif %}

### Platform Device Configuration

```eos
{% include 'eos/platform.j2' %}
{% include 'eos/platform-sfe-interface.j2' %}
```
{% endif %}
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,8 @@
{% include 'eos/load-interval.j2' %}
{# transceiver qsfp default mode #}
{% include 'eos/transceiver-qsfp-default-mode.j2' %}
{# platform sfe interface #}
{% include 'eos/platform-sfe-interface.j2' %}
{# interface defaults #}
{% include 'eos/interface-defaults.j2' %}
{# service routing protocols model #}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
{#
Copyright (c) 2023-2025 Arista Networks, Inc.
Use of this source code is governed by the Apache License 2.0
that can be found in the LICENSE file.
#}
{# eos - platform sfe interface #}
{% if platform.sfe.interface is arista.avd.defined %}
!
platform sfe interface
{# interface profile to apply #}
{% if platform.sfe.interface.interface_profile is arista.avd.defined %}
interface profile {{ platform.sfe.interface.interface_profile }}
{% endif %}
{% for profile_data in platform.sfe.interface.profiles | arista.avd.natural_sort('name') %}
{# profiles available #}
!
profile {{ profile_data.name }}
{% for interface_data in profile_data.interfaces | arista.avd.natural_sort('name') %}
interface {{ interface_data.name }}
{% if interface_data.rx_queue.count is arista.avd.defined %}
rx-queue count {{ interface_data.rx_queue.count }}
{% endif %}
{% if interface_data.rx_queue.worker is arista.avd.defined %}
rx-queue worker {{ interface_data.rx_queue.worker }}
{% endif %}
{% if interface_data.rx_queue.mode is arista.avd.defined %}
rx-queue mode {{ interface_data.rx_queue.mode }}
{% endif %}
{% if not loop.last %}
!
{% endif %}
{% endfor %}
{% endfor %}
{% endif %}
Loading
Loading