Guia Intel E810 Drivers Linux
Guia Intel E810 Drivers Linux
Rev. 2.8
February 2023
No license (express or implied, by estoppel or otherwise) to any intellectual property rights is granted by this document.
This document (and any related software) is Intel copyrighted material, and your use is governed by the express license under which it is provided to
you. Unless the license provides otherwise, you may not use, modify, copy, publish, distribute, disclose or transmit this document (and related
materials) without Intel's prior written permission. This document (and related materials) is provided as is, with no express or implied warranties, other
than those that are expressly stated in the license.
Intel disclaims all express and implied warranties, including without limitation, the implied warranties of merchantability, fitness for a particular
purpose, and non-infringement, as well as any warranty arising from course of performance, course of dealing, or usage in trade.
This document contains information on products, services and/or processes in development. All information provided here is subject to change without
notice. Contact your Intel representative to obtain the latest forecast, schedule, specifications and roadmaps.
The products and services described may contain defects or errors which may cause deviations from published specifications.
Intel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries.
Other names and brands may be claimed as the property of others.
Copyright © 2020–2023, Intel Corporation. All rights reserved.
Contents
Revision History..................................................................................................................4
1.0 Introduction................................................................................................................. 5
Revision History
Revision Date Comments
1.0 Introduction
Intel® Ethernet 800 Series (800 Series) is the next generation of Intel® Ethernet
Controllers and Network Adapters. The Intel® Ethernet 800 Series is designed with an
enhanced programmable pipeline, allowing deeper and more diverse protocol header
processing. This on-chip capability is called Dynamic Device Personalization (DDP).
Unlike the optional DDP solution in the Intel® Ethernet 700 Series (700 Series), the
DDP implementation in the 800 Series is integral to the primary functions of the
network packet processing pipeline. Similar to the 700 Series, enhanced DDP profiles
can be loaded per device for specific capabilities. In the 800 Series, a DDP profile is
loaded dynamically on driver load per device.
A general purpose DDP package is automatically installed with all supported 800
Series drivers on Windows, ESX, FreeBSD, and Linux operating systems, including
those provided by the Data Plane Development Kit (DPDK). This general purpose DDP
package is known as the OS-Default package. Additional DDP packages will be
available to address packet processing needs for specific market segments. For
example, a telecommunications (Comms) DDP package has been developed to support
GTP and PPPoE protocols in addition to the protocols in the OS-Default package. The
Comms DDP package is available with DPDK 19.11 and will also be supported by the
800 Series ice driver on Linux operating systems.
This document describes how the DDP packages are loaded or selected in various
operating systems, the benefits of DDP features, and supported packet types in the
OS-Default DDP package. Also included are examples of DDP in use, including filters
to direct packets to hardware queues.
DDP packages primarily contain static configuration information applied during device
initialization. Furthermore, only one package can be active per device at a time. The
device has a default Non-Volatile Memory (NVM) configuration that provides limited
functionality for the system in pre-boot (before OS boot). During the OS boot process,
the device driver loads the runtime DDP package that provides the more advanced
capabilities of the packet processing pipeline.
The following figure shows the benefits of DDP protocol support by an example of
processing a GTP Ethernet packet with and without the DDP package support for GTP
protocols. With the OS-Default package, which does not have GTP protocol support,
the packet parser can only identify up to the first UDP header information. The result
of identifying a packet as MAC_IPVx_UDP_PAY limits filtering for workload
acceleration.
With GTP protocol support in the enhanced DDP Comms package, the GTP packet is
fully identified (i.e., MAC_IPV4_GTPU_IPVx_TCP/UDP_PAY), enabling hardware
filtering, accelerators, and RSS.
The following table shows key enhancements from the 700 Series to the 800 Series.
Maximum packet header processing 256 bytes Up to 504 bytes with up to 16 protocols
depth deep
Custom DDP package loading DPDK or i40e driver using ethtool DPDK or 800 Series driver on startup
OS-Default package loading Default configuration is included as part of DPDK or 800 Series driver on startup
device NVM
After OS boot, OS-default DDP, market-specific, or custom DDP package can be loaded
by either the 800 Series driver or DPDK Configuration Tools.
Figure 3. Intel® Ethernet 800 Series with Programmable Pipeline via DDP Profiles
The device can also be configured in safe mode if the DDP package fails to load due to
a software incompatibility or other issue. If an OS driver loads and cannot load a DDP
package, a message is printed in the system log that the device is now in safe mode.
In this safe mode, the driver disables support for the following features:
• Multi-queue
• Virtualization (SR-IOV/VMQ)
• Stateless workload acceleration for tunnel overlays (VxLAN/Geneve)
• RDMA (iWARP/RoCE)
• RSC
• RSS
• DCB /DCBx
• Intel® Ethernet Flow Director
• QinQ
• XDP / AF-XDP
• ADQ
The following table outlines the limited set of protocols supported in safe mode.
MAC MAC_PAY
ETYPE MAC_LLDP
VLAN MAC_ARP
IPv4 MAC_IPV4FRAG
IPv6 MAC_IPV4_PAY
TCP MAC_IPV4_UDP_PAY
UDP MAC_IPV4_TCP
SCTP MAC_IPV4_SCTP
ICMP MAC_IPV4_ICMP
ICMPv6 MAC_IPV6FRAG
LLDP MAC_IPV6_PAY
ARP MAC_IPV6_UDP_PAY
MAC_IPV6_TCP
MAC_IPV6_SCTP
MAC_IPV6_ICMPv6
For VMware, the DDP package is compiled into the base driver and requires no
additional installation or configuration for use.
The vmkernel.log file in /var/log/vmware/ shows the status of DDP package loading.
For Windows operating systems, the DDP package is compiled into the base driver and
requires no additional installation or configuration for use.
The status of package loading can be found under the System Logs.
Using the Event Viewer application, the status can be found under:
The following is an example of a Windows system event log shows successful loading
of an OS-Default package:
For the out-of-tree (OOT) driver, the driver installation process automatically installs
ice-x.x.x.x.pkg to the /lib/firmware/updates/intel/ice/ddp directory and creates a
symbolic link to ice.pkg.
Upstream ice drivers are supported on kernel.org v5.4 mainline kernel or higher. The
required DDP package (and symbolic link) must be installed separately through
downloading and installing version 20191022 or higher of the linux-firmware package
from the following git repository:
https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git
In either case (out-of-tree or upstream drivers), the ice driver looks for ice.pkg under
the appropriate directory (depending on whether it is upstream or out of tree) and
loads it during driver initialization.
The kernel message log (e.g., dmesg) indicates the status of package loading in the
system. If the driver successfully finds and loads the DDP package, dmesg indicates
that the DDP package is successfully loaded.
# sysctl dev.ice.0.ddp_version
dev.ice.0.ddp_version: ICE OS Default Package version 1.3.30.0
If the DDP package has not been installed and loaded by the ice driver, DPDK requires
a manual DDP package installation.
The user can download the DDP package from the Intel download center and extract
the zip file to obtain the package (.pkg) file.
Similar to the Linux base driver, the DPDK driver looks for intel/ice/ddp/ice.pkg in the
kernel default firmware search path /lib/firmware/updates or /lib/firmware/.
When the DPDK driver loads, it looks for ice.pkg to load in /lib/firmware/intel/ice/ddp/
or /lib/firmware/updates/intel/ice/ddp/. If the file exists and it has not already been
loaded, the driver downloads it into the device.
The kernel message log (e.g., dmesg) indicates the status of package loading in the
system. If the driver successfully finds and loads the DDP package, dmesg indicates
that the DDP package is successfully loaded.
DPDK's testpmd application also indicates the status and version of the loaded DDP
package.
The example shows the testpmd output of a successful Comms package loading.
The 800 Series Linux base driver and DPDK driver can both load a specific DDP
package to a selected adapter based on the device's serial number. The driver does
this by looking for a specific symbolic link package filename containing the selected
device's serial number.
The following example illustrates how a user can load a specific package (e.g.,
ice-1.3.40.0.pkg) on the device of Bus 6.
1. Find device serial number.
To view bus, device, and function of all 800 Series Network Adapters in the
system:
Use the lspci command to obtain the selected device serial number:
2. Rename the package file with the device serial number in the name.
Copy the specific package over to /lib/firmware/updates/intel/ice/ddp (or /lib/
firmware/intel/ice/ddp) and create a symbolic link with the serial number linking
to the package, as shown. The specific symbolic link filename starts with “ice-”
followed by the device serial in lower case without dash ('-').
# ln -s /lib/firmware/updates/intel/ice/ddp/ice-1.3.40.0.pkg /lib/firmware/
updates/intel/ice/ddp/ice-3511a0ffffca0568.pkg
Or:
Check softlink:
ll ice.pkg
lrwxrwxrwx. 1 root root 58 Sep 10 01:24 ice.pkg -> /lib/firmware/updates/
intel/ice/ddp/ice_comms-1.3.40.0.pkg
3. If using Linux kernel driver (ice), reload the base driver (not required if using only
DPDK driver).
# rmmod ice
# modprobe ice
The driver loads the specific package to the selected device and the OS-Default
package to the remaining 800 Series devices in the system.
4. Verify.
For kernel driver:
Following is an example of successful loading of the specific DDP package on the
selected device of Bus 6 and OS-Default package on the other device of Bus 82:
If DPDK is used:
Verify using DPDK's testpmd application to indicate the status and version of the
loaded DDP package.
1 MAC_PAY 46 MAC_IPV4_TUN_IPV4_UDP_PAY
2 MAC_PTP 48 MAC_IPV4_TUN_IPV4_TCP
11 MAC_ARP 49 MAC_IPV4_TUN_IPV4_SCTP
88 MAC_IPV6_FRAG 51 MAC_IPV4_TUN_IPV6_FRAG
89 MAC_IPV6_PAY 52 MAC_IPV4_TUN_IPV6_PAY
90 MAC_IPV6_UDP_PAY 53 MAC_IPV4_TUN_IPV6_UDP_PAY
92 MAC_IPV6_TCP 55 MAC_IPV4_TUN_IPV6_TCP
93 MAC_IPV6_SCTP 56 MAC_IPV4_TUN_IPV6_SCTP
94 MAC_IPV6_ICMPV6 57 MAC_IPV4_TUN_IPV6_ICMPV6
95 MAC_IPV6_IPV4_FRAG 59 MAC_IPV4_TUN_MAC_IPV4_FRAG
96 MAC_IPV6_IPV4_PAY 60 MAC_IPV4_TUN_MAC_IPV4_PAY
97 MAC_IPV6_IPV4_UDP_PA 61 MAC_IPV4_TUN_MAC_IPV4_UDP_PAY
99 MAC_IPV6_IPV4_TCP 63 MAC_IPV4_TUN_MAC_IPV4_TCP
NOTE
An included script (set_irq_affinity) automates setting the IRQ to CPU affinity.
1 4 Tuple src-ip, dst-ip, src-port, dst-port tcp4, udp4, sctp4, tcp6, udp6, sctp6
2 3 Tuple src-ip, dst-ip, src-port tcp4, udp4, sctp4, tcp6, udp6, sctp6
6 2 Tuple src-ip, dst-ip tcp4, udp4, sctp4, tcp6, udp6, sctp6, ip4, ip6
12 1 Tuple src-ip tcp4, udp4, sctp4, tcp6, udp6, sctp6, ip4, ip6
NOTES
• This driver allows you to filter traffic based on a user-defined flexible 2-byte
pattern and offset by using the ethtool user-def and mask fields. Only L3 and L4
flow types are supported for user-defined flexible filters. For a given flow type, you
must clear all Intel® Ethernet Flow Director filters before changing the input set
(for that flow type).
• Intel® Ethernet Flow Director filters impact only LAN traffic. RDMA filtering occurs
before Intel® Ethernet Flow Director, so Intel® Ethernet Flow Director filters do not
impact RDMA.
The following table summarizes supported Intel® Ethernet Flow Director features
across Intel® Ethernet controller families.
Configurable Input Set Configured per port Configured globally Configured per port
Flex Bye Filter Starts at beginning of packet Starts at beginning of payload Starts at beginning of packet
Tunneled Packets Filter matches outer header Filter matches inner header Filter matches inner header
Where:
<ethX> = The Ethernet device to program.
NOTE
When ntuple filters are disabled, all the user-programmed filters are flushed from
the driver cache and hardware. All needed filters must be re-added when ntuple is
re-enabled.
# ethtool -u <ethX>
Where:
<ethX> = The Ethernet device to program.
Where:
<ethX> = The Ethernet device to program.
<type> = Can be ip4, tcp4, udp4, sctp4, ip6, tcp6, udp6, or sctp6.
<ip_mask> = The IPv4 address to mask on. (Note: These filters use inverted masks.)
<port_mask> = The 16-bit integer for masking. (Note: These filters use inverted masks.)
<queue> = The queue to direct traffic toward. (-1 discards the matched traffic.)
• To delete a filter:
Where:
<ethX> = The Ethernet device to program.
<N> = The Filter ID displayed when printing all the active filters, and might also have been
specified using “loc <N>” when adding the filter.
EXAMPLES
• To add a filter that directs packet to queue 2:
Where the value of the user-def field contains the offset (4 bytes) and the pattern
(0xffff).
• To match TCP traffic sent from 192.168.0.1, port 5300, directed to 192.168.0.5,
port 80, and then send it to queue 7:
NOTE
For each flow-type, the programmed filters must all have the same matching input
set. For example, issuing the following two commands is acceptable:
Issuing the next two commands, however, is not acceptable, since the first
specifies src-ip and the second specifies dst-ip:
The second command will fail with an error. You may program multiple filters with
the same fields, using different values. However, on one device, you may not
program two tcp4 filters with different matching fields.
The ice driver does not support matching on a sub-portion of a field, thus partial
mask fields are not supported.
Table 7. Patterns and Input Sets for iavf Intel® Ethernet Flow Director
DDP
eth ethertype
DDP
DDP
eth / ipv4 / gtpu / eh(1) / ipv6 / inner: src_ip | dst_ip | src_port Drop
udp | dst_port To Queue
To Queue
eth / ipv4 / gtpu / eh(1) / ipv6 / inner: src_ip | dst_ip | src_port Group
tcp | dst_port
Flow
Mark
eth / ipv4 / gre / ipv4 / udp / inner: src_ip | dst_ip
gtpu / ipv4
DDP
DDP
DDP
Note: 1. Action on eCPRI packets based on the message type field and specifically for message type zero packets based
on the ecpriPcid field.
flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 / end
actions
queue index 1 / mark / end
4.5.3 RSS
Packets are sent to different cores for interrupt processing, and then subsequently
forwarded to cores where the consuming process is running.
RSS aims to spread incoming packets across cores while directing packets from
common flows to the same core.
Where:
<ethX> = The Ethernet device to program.
• To enable RSS Hashing on Source address, Destination address, Source ports and
Destination ports:
• Verify that the rule was created and is correct. For unsupported flow-type, the rule
should fail to create.
ethtool -n <ethX>
DDP
Pattern Input Set
OS GTP over
Comms Wireless
Default GRE
eth / ipv4 / udp / gtpu / ipv4 / udp teid | inner: src_ip | dst_ip |
src_port | dst_port
eth / ipv4 / udp / gtpu / ipv4 / tcp teid | inner: src_ip | dst_ip |
src_port | dst_port
eth / ipv6 / udp / gtpu / ipv4 / udp teid | inner: src_ip | dst_ip |
src_port | dst_port
eth / ipv6 / udp / gtpu / ipv4 / tcp teid | inner: src_ip | dst_ip |
src_port | dst_port
eth / ipv4 / udp / gtpu / ipv6 / udp teid | inner: src_ip | dst_ip |
src_port | dst_port
continued...
DDP
Pattern Input Set
OS GTP over
Comms Wireless
Default GRE
eth / ipv4 / udp / gtpu / ipv6 / tcp teid | inner: src_ip | dst_ip |
src_port | dst_port
eth / ipv6 / udp / gtpu / ipv6 / udp teid | inner: src_ip | dst_ip |
src_port | dst_port
eth / ipv6 / udp / gtpu / ipv6 / tcp teid | inner: src_ip | dst_ip |
src_port | dst_port
eth / ipv4 / gre / ipv4 / udp / gtpu / teid | inner: src_ip | dst_ip
ipv4
eth / ipv4 / gre / ipv4 / udp / gtpu / teid | inner: src_ip | dst_ip |
ipv4 / udp src_port | dst_port
continued...
DDP
Pattern Input Set
OS GTP over
Comms Wireless
Default GRE
eth / ipv4 / gre / ipv4 / udp / gtpu / teid | inner: src_ip | dst_ip |
ipv4 / tcp src_port | dst_port
eth / ipv4 / gre / ipv4 / udp / gtpu / teid | inner: src_ip | dst_ip
gtp_psc / ipv4
eth / ipv4 / gre / ipv4 / udp / gtpu / teid | inner: src_ip | dst_ip |
gtp_psc / ipv4 / udp src_port | dst_port
eth / ipv4 / gre / ipv4 / udp / gtpu / teid | inner: src_ip | dst_ip |
gtp_psc / ipv4 / tcp src_port | dst_port
eth / ipv4 / gre / ipv6 / udp / gtpu / teid | inner: src_ip | dst_ip
ipv4
eth / ipv4 / gre / ipv6 / udp / gtpu / teid | inner: src_ip | dst_ip |
ipv4 / udp src_port | dst_port
eth / ipv4 / gre / ipv6 / udp / gtpu / teid | inner: src_ip | dst_ip |
ipv4 / tcp src_port | dst_port
eth / ipv4 / gre / ipv6 / udp / gtpu / teid | inner: src_ip | dst_ip
gtp_psc / ipv4
eth / ipv4 / gre / ipv6 / udp / gtpu / teid | inner: src_ip | dst_ip |
gtp_psc / ipv4 / udp src_port | dst_port
eth / ipv4 / gre / ipv6 / udp / gtpu / teid | inner: src_ip | dst_ip |
gtp_psc / ipv4 / tcp src_port | dst_port
eth / ipv4 / gre / ipv4 / udp / gtpu / teid | inner: src_ip | dst_ip
ipv4
eth / ipv6 / gre / ipv4 / udp / gtpu / teid | inner: src_ip | dst_ip |
ipv4 / udp src_port | dst_port
eth / ipv6 / gre / ipv4 / udp / gtpu / teid | inner: src_ip | dst_ip |
ipv4 / tcp src_port | dst_port
eth / ipv6 / gre / ipv4 / udp / gtpu / teid | inner: src_ip | dst_ip
gtp_psc / ipv4
eth / ipv6 / gre / ipv4 / udp / gtpu / teid | inner: src_ip | dst_ip |
gtp_psc / ipv4 / udp src_port | dst_port
eth / ipv6 / gre / ipv4 / udp / gtpu / teid | inner: src_ip | dst_ip |
gtp_psc / ipv4 / tcp src_port | dst_port
eth / ipv6 / gre / ipv6 / udp / gtpu / teid | inner: src_ip | dst_ip
ipv4
eth / ipv6 / gre / ipv6 / udp / gtpu / teid | inner: src_ip | dst_ip |
ipv4 / udp src_port | dst_port
eth / ipv6 / gre / ipv6 / udp / gtpu / teid | inner: src_ip | dst_ip |
ipv4 / tcp src_port | dst_port
eth / ipv6 / gre / ipv6 / udp / gtpu / teid | inner: src_ip | dst_ip
gtp_psc / ipv4
eth / ipv6 / gre / ipv6 / udp / gtpu / teid | inner: src_ip | dst_ip |
gtp_psc / ipv4 / udp src_port | dst_port
eth / ipv6 / gre / ipv6 / udp / gtpu / teid | inner: src_ip | dst_ip |
gtp_psc / ipv4 / tcp src_port | dst_port
continued...
DDP
Pattern Input Set
OS GTP over
Comms Wireless
Default GRE
eth / ipv4 / gre / ipv4 / udp / gtpu / teid | inner: src_ip | dst_ip
ipv6
eth / ipv4 / gre / ipv4 / udp / gtpu / teid | inner: src_ip | dst_ip |
ipv6 / udp src_port | dst_port
eth / ipv4 / gre / ipv4 / udp / gtpu / teid | inner: src_ip | dst_ip |
ipv6 / tcp src_port | dst_port
eth / ipv4 / gre / ipv4 / udp / gtpu / teid | inner: src_ip | dst_ip
gtp_psc / ipv6
eth / ipv4 / gre / ipv4 / udp / gtpu / teid | inner: src_ip | dst_ip |
gtp_psc / ipv6 / udp src_port | dst_port
eth / ipv4 / gre / ipv4 / udp / gtpu / teid | inner: src_ip | dst_ip |
gtp_psc / ipv6 / tcp src_port | dst_port
eth / ipv4 / gre / ipv6 / udp / gtpu / teid | inner: src_ip | dst_ip
ipv6
eth / ipv4 / gre / ipv6 / udp / gtpu / teid | inner: src_ip | dst_ip |
ipv6 / udp src_port | dst_port
eth / ipv4 / gre / ipv6 / udp / gtpu / teid | inner: src_ip | dst_ip |
ipv6 / tcp src_port | dst_port
eth / ipv4 / gre / ipv6 / udp / gtpu / teid | inner: src_ip | dst_ip
gtp_psc / ipv6
eth / ipv4 / gre / ipv6 / udp / gtpu / teid | inner: src_ip | dst_ip |
gtp_psc / ipv6 / udp src_port | dst_port
eth / ipv4 / gre / ipv6 / udp / gtpu / teid | inner: src_ip | dst_ip |
gtp_psc / ipv6 / tcp src_port | dst_port
eth / ipv4 / gre / ipv4 / udp / gtpu / teid | inner: src_ip | dst_ip
ipv6
eth / ipv6 / gre / ipv4 / udp / gtpu / teid | inner: src_ip | dst_ip |
ipv6 / udp src_port | dst_port
eth / ipv6 / gre / ipv4 / udp / gtpu / teid | inner: src_ip | dst_ip |
ipv6 / tcp src_port | dst_port
eth / ipv6 / gre / ipv4 / udp / gtpu / teid | inner: src_ip | dst_ip
gtp_psc / ipv6
eth / ipv6 / gre / ipv4 / udp / gtpu / teid | inner: src_ip | dst_ip |
gtp_psc / ipv6 / udp src_port | dst_port
eth / ipv6 / gre / ipv4 / udp / gtpu / teid | inner: src_ip | dst_ip |
gtp_psc / ipv6 / tcp src_port | dst_port
eth / ipv6 / gre / ipv6 / udp / gtpu / teid | inner: src_ip | dst_ip
ipv6
eth / ipv6 / gre / ipv6 / udp / gtpu / teid | inner: src_ip | dst_ip |
ipv6 / udp src_port | dst_port
eth / ipv6 / gre / ipv6 / udp / gtpu / teid | inner: src_ip | dst_ip |
ipv6 / tcp src_port | dst_port
eth / ipv6 / gre / ipv6 / udp / gtpu / teid | inner: src_ip | dst_ip
gtp_psc / ipv6
continued...
DDP
Pattern Input Set
OS GTP over
Comms Wireless
Default GRE
eth / ipv6 / gre / ipv6 / udp / gtpu / teid | inner: src_ip | dst_ip |
gtp_psc / ipv6 / udp src_port | dst_port
eth / ipv6 / gre / ipv6 / udp / gtpu / teid | inner: src_ip | dst_ip |
gtp_psc / ipv6 / tcp src_port | dst_port
Note: 1. eCPRI header to be used for calculating the RSS hash based on the the message type field and specifically for
message type zero packets based on the ecpriPcid field.
4.5.4 DPDK
Create a rule for the RSS type GTPU and hash l3 src and dst keywords:
testpmd>flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc / ipv4 /
udp
/ end actions rss types ipv4 end key_len 0 queues end / end
DPDK Version
Feature 19.11 20.05 20.08 20.11 21.02 21.05 21.08 21.11
1 2 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3
Speed Capabilities Y Y Y Y N Y Y N Y Y N Y Y N Y Y N Y Y N Y Y N
Link Status Y Y Y Y N Y Y N Y Y N Y Y N Y Y N Y Y N Y Y N
Link Status Event Y N Y N N Y N N Y N N Y N N Y N N Y N N Y N N
Rx Interrupt Y Y Y Y N Y Y N Y Y N Y Y N Y Y N Y Y N Y Y N
Fast mbuf Free Y N P N N P N N P N N P N N P N N P N N P N N
Queue Start/Stop Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y
Burst Mode Info Y N Y N N Y N N Y N N Y N N Y N N Y N N Y N N
MTU Update Y Y Y Y N Y Y N Y Y N Y Y N Y Y N Y Y N Y Y N
Jumbo Frame Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y
Scattered Rx Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y
TSO Y Y Y Y N Y Y N Y Y N Y Y N Y Y N Y Y N Y Y N
Promiscuous Mode Y Y Y Y N Y Y N Y Y N Y Y N Y Y N Y Y N Y Y N
Allmulticast Mode Y Y Y Y N Y Y N Y Y N Y Y N Y Y N Y Y N Y Y N
Static RSS Hash Y N Y N N Y N N Y N N Y N N Y N N Y N N Y N N
Unicast MAC Filter Y Y Y Y N Y Y N Y Y N Y Y N Y Y N Y Y N Y Y N
RSS Hash Y Y Y Y N Y Y N Y Y N Y Y N Y Y N Y Y N Y Y N
RSS Key Update Y Y Y Y N Y Y N Y Y N Y Y N Y Y N Y Y N Y Y N
RSS reta Update Y Y Y Y N Y Y N Y Y N Y Y N Y Y N Y Y N Y Y N
VLAN Filter Y Y Y Y N Y Y N Y Y N Y Y N Y Y N Y Y N Y Y N
CRC Offload Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y
VLAN Offload Y Y Y Y N Y Y N Y Y N Y Y N Y Y N Y Y N Y Y N
QinQ Offload Y N P N N P N N P N N P Y N P Y N P Y N P Y N
L3 Checksum Offload Y Y P P P P P P P P P P P P P P P P P P P P P
L4 Checksum Offload Y Y P P P P P P P P P P P P P P P P P P P P P
Inner L3 Checksum N N P N N P N N P N N P N N P N N P N N P N N
Inner L4 Checksum N N P N N P N N P N N P N N P N N P N N P N N
Packet Type Parsing Y Y Y Y N Y Y N Y Y N Y Y N Y Y N Y Y N Y Y N
Timesync N N N N N N N N N N N N N N N N N N N N Y N N
Timestamp Offload N N N N N N N N N N N N N N N N N N N N Y N N
Rx Descriptor Status Y Y Y Y N Y Y N Y Y N Y Y N Y Y N Y Y N Y Y N
Tx Descriptor Status Y Y Y Y N Y Y N Y Y N Y Y N Y Y N Y Y N Y Y N
Basic Stats Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y
Extended Stats Y N Y N N Y N N Y N N Y N N Y N N Y N N Y N N
Firmware Version Y N Y N N Y N N Y N N Y N N Y N N Y N N Y N N
Module EEPROM Dump Y N Y N N Y N N Y N N Y N N Y N N Y N N Y N N
Multi-Process Aware N Y Y Y N Y Y N Y Y N Y Y N Y Y N Y Y N Y Y N
BSD nic_uio Y Y Y Y N Y Y N Y Y N Y Y N Y Y N Y Y N Y Y N
Linux UIO Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y
Linux VFIO Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y
x86-32 Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y
x86-64 Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y
DPDK iavf support in Windows N N N N N N N N N N N N N N N N N N N N N Y N
DPDK Version
Feature 19.11 20.05 20.08 20.11 21.02 21.05 21.08 21.11
1 2 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3
RTE-FLOW API Y N Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y
Raw Packet RSS N N N N N N N N N N N N N N N N N N N N Y N N
Raw Packet FDIR N N N N N N N N N N N N N N N N N N N N Y N N
Flow Priority Y N Y N N Y N N Y N N Y N N Y N Y Y N Y Y N Y
VxLAN/GRE Y N Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y
GTPU (EH) Y N Y Y N Y Y N Y Y N Y Y N Y Y N Y Y N Y Y N
PPPOE Y N Y N Y Y N Y Y N Y Y N Y Y N Y Y N Y Y N Y
PFCP N N N Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y
ESP/AH N N N Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y
L2TPv3 N N N Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y
MPLS N N N N N Y N N Y Y N Y Y N Y Y N Y Y N Y Y N
eCPRI N N N N N N N N N N N N Y N N Y N N Y N N Y N
QinQ Filter N N N N N N N N N N N Y N Y Y N Y Y N Y Y N Y
GTPU (5 Tuple Hash) N N N N N Y Y N Y Y N Y Y N Y Y N Y Y N Y Y N
GTPU (w/o EH) N N N N N Y Y N Y Y N Y Y N Y Y N Y Y N Y Y N
GTPU TEID Filter N N N Y N N Y N N Y N N Y N N Y N N Y N N Y N
Symmetric Hash N N N N N Y Y N Y Y N Y Y N Y Y N Y Y N Y Y N
Separate Configure for Outer
N N N N N N N N Y Y N Y Y N Y Y N Y Y N Y Y N
IPv4/IPv6 GTPU
IPv6 Prefix Hash N N N N N Y N N Y Y N Y Y N Y Y N Y Y N Y Y N
Flexible Protocol Extraction to
Y N Y N N Y N N Y Y N Y Y N Y Y N Y Y N Y Y N
mbuf
GRE inner filter N N N N N N N N N N N N N N N N N N Y N N Y N
GTP over GRE inner Filter N N N N N N N N N N N N N N N N N N Y N N Y N
L3/L4 Checksum RSS N N N N N N N N N N N N N N N N N N N N Y Y N
PPPoL2TPv2oUDP inner RSS N N N N N N N N N N N N N N N N N N N N Y N N
ETS Based HQoS N N N N N N N N N N N N N N N N N N Y Y N Y Y
1PPS N N N N N N N N N N N N N N N N N N N N Y N N
AVX 512 Basic N N N N N N N N Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y
AVX 512 Offload N N N N N N N N N N N N N N Y Y Y Y Y Y Y Y Y
Time sync API (Scalar Path
only) and
N N N N N N N N N N N N N N N N N N N N Y N N
“DEV_RX_OFFLOAD_TIMEST
AMP”
DCF Reset API N N N N N N N N N N N N N N N N N N N N Y N N
Queue Numbers 64 16 64 16 N 64 16 16 64 256 16 64 256 16 64 256 16 64 256 16 64 256 16
20.08 25.3 1.1.4 4.0.1 2.10 / 2.12 1.5.1.5/1.5 1.3.16.0 1.3.20.0 N/A
25.4 2.15 / 2.14 .1.9
20.08 / 20.111 25.5 1.21 4.0.1 2.20 / 2.22 1.5.2.8 1.3.18.0 1.3.22.0 N/A
20.111 / 21.02 25.6 1.3.2 4.0.2 2.30 / 2.32 1.5.3.7 1.3.20.0 1.3.24.0 N/A
21.021 / 21.05 26.3 1.5.8 4.1.1 2.50 / 2.52 1.5.5.6 1.3.26.0 1.3.30.0 1.3.6.0
21.05 / 21.081 / 26.4 1.6.4 / 4.2.7 3.00 / 3.02 1.6.0.6 1.3.26.0 1.3.30.0 1.3.6.0
21.111 1.6.7
21.11 26.8 1.7.16 4.3.19 3.10 / 3.12 1.6.1.9 1.3.27.0 1.3.31.0 1.3.7.0
21.111 / 22.03 27.1 1.8.3 4.4.2 3.20 / 3.22 1.6.2.9 1.3.28.0 1.3.35.0 1.3.8.0
22.03 / 22.071 27.5 1.9.11 4.5.3 4.00 / 4.02 1.7.0.7 1.3.30.0 1.3.37.0 1.3.10.0
22.071 27.7 1.10.1.2 4.6.1 4.10 / 4.12 1.7.1.7 1.3.30.0 1.3.37.0 1.3.10.0
22.07 / 22.11 28.0 1.11.14 4.8.2 4.20/4.22 1.7.2.4 1.3.30.0 1.3.40.0 1.3.10.0