I40E(4D) 4D I40E(4D)

NAME


i40e - Intel 710/722 Ethernet Device Driver

SYNOPSIS


/dev/net/i40e*

DESCRIPTION


The i40e driver is a GLDv3, multi-threaded, clonable, loadable device
driver that supports the Data Link Provider Interface, dlpi(4P). The i40e
driver supports the Intel 710 and 722 Ethernet Controller families of
networking interface cards which support speeds of 1 GbE, 2.5 GbE, 5 GbE,
10 GbE, 25 GbE, and 40 GbE.

In addition to basic device initialization and the sending and receiving of
frames, it supports the following features:

- Jumbo frames up to 9710 bytes.

- Promiscuous access via snoop(8) and dlpi(4P)

- IPv4 Checksum Offload

- TCP, UDP, and SCTP checksum offload

- IPv4 and IPv6 TCP Segmentation offload

At this time, the i40e driver does not enable the use of energy efficient
Ethernet (EEE) or support the use of flow control through hardware pause
frames.

APPLICATION PROGRAMMING INTERFACE


For each device supported by the i40e installed in the system, a character-
special file will be created. This file supports the Data Link Provider
Interface (DLPI) which is documented in dlpi(4P). For most consumers, the
use of libdlpi(3LIB), is recommended.

Each instance is assigned a unique ascending integer identifier. A device
which has multiple ports may appear to the system as separate instances.
The system does not provide a guarantee on how these will be presented.
Using this instance identifier, one can determine the exact character-
special file to open. For example, the first instance enumerated in the
system, with id 0, would be named i40e0. It exists in the file system at
/dev/net/i40e0.

CONFIGURATION


The i40e driver always performs auto-negotiation and depending on the model
may negotiate to 40 Gbps, 25 Gbps, 10 Gbps, or 1 Gbps. At this time, the
driver requires the use of auto-negotiation.

The i40e driver is managed by the dladm(8) utility. dladm(8) is the
preferred interface for setting all properties. While driver.conf(5) based
configuration is possible, dladm(8) is recommended. The i40e driver may be
joined into an aggregation based on the link aggregation control protocol
(LACP) through dladm(8).

PROPERTIES


The device supports the following properties which may be tuned through its
driver.conf file, /kernel/drv/i40e.conf. Most of these properties cannot
be changed after the device has been started. The device is started in
response to a DLPI consumer opening the device and binding to it. This
happens when an IP interfaces is plumbed or another dlpi(4P) consumer such
as snoop(8) or an LLDP daemon is started.

Some properties may be tuned at runtime with the dladm(8) utility.
Properties that can be will have the name of the dladm property called out
explicitly.

These properties are not considered stable at this time. They may change
and should not be relied on. They are considered Volatile. It is not
expected that administrators of the system will have to tune these values.

default_mtu
Minimum: 1500 | Maximum: 9710 | Runtime Property: mtu

The default_mtu property determines the starting MTU of the various
device instances. Note that the device's MTU also determines the
upper bound of the MTU of all VNICs created over the device. The
default MTU is 1500.

mr_enable
Minimum: 0 | Maximum: 1

The mr_enable property determines whether or not support for
multiple rings is enabled for the device. The default is always to
enable them. It is not recommended to to disable them.

rx_num_groups
Minimum: 1 | Maximum: 32

The rx_num_groups property determines the number of receive mac
groups provided by the driver. Each group can handle all unicast
traffic for a single MAC address, more groups means more unicast
traffic that can be steered by hardware. However, more groups also
means more demand for kernel memory. If you are not making heavy
use of VNICs, or do not need the efficiency gains of hardware
steering, then reducing this number can reduce kernel memory taken
by i40e.

rx_ring_size
Minimum: 64 | Maximum: 4096

The rx_ring_size property determines the number of descriptors that
will be used in each receive ring on the card. Administrators
should not normally need to tune this value. Hardware requires
that the ring size be a multiple of 32. The system will round up
the set value to the nearest multiple of 32.

tx_ring_size
Minimum: 64 | Maximum: 4096

The tx_ring_size property determines the number of descriptors that
will be used in each transmit ring on the card. Administrators
should not normally need to tune this value. Hardware requires
that the ring size be a multiple of 32. The system will round up
the set value to the nearest multiple of 32.

tx_resched_threshold
Minimum: 8 | Maximum: Variable

The tx_resched_threshold property determines the number of
descriptors that must be available for a frame to be transmitted.
The maximum is variable. It is dependent on the value of the
tx_ring_size property. At least eight descriptors must be
available for the device to function correctly.

rx_limit_per_intr
Minimum: 16 | Maximum: 4096

The rx_limit_per_intr property determines the maximum number of
packets that will be processed on a given ring during a single
interrupt. This is done to try and guarantee some amount of
liveness in the system. It is not expected that administrators
will have to tune this value.

tx_hcksum_enable
Minimum: 0 | Maximum: 1

The tx_hcksum_enable property controls whether or not the device
enables support for hardware checksumming of outgoing packets. The
default is to always enable support for this. Turning it off will
increase latency and decrease throughput when transmitting packets,
but should be done if a hardware bug is suspected.

rx_hcksum_enable
Minimum: 0 | Maximum: 1

The rx_hcksum_enable property controls whether or not the device
enables support for hardware checksumming of incoming packets. The
default is to always enable support for this. Turning it off will
increase latency and decrease throughput when receiving packets,
but should be done if a hardware bug is suspected.

rx_dma_threshold
Minimum: 0 | Maximum: INT32_MAX | Runtime Property:
_rx_dma_threshold

The rx_dma_threshold indicates the size in bytes of a received
frame, including all of its headers, at which the driver should not
copy the frame but instead bind DMA memory. By setting this
property to its minimum, all frames will be processed with DMA
binding. By setting this property to its maximum, all frames will
be processed by copying the frame.

tx_lso_enable
Minimum: 0 | Maximum: 1

The tx_lso_enable property controls whether or not the device
enables support for Large Segment Offloand (LSO) when transmitting
packets. The default is to always enable support for this.
Turning it off will decrease throughput when transmitting packets,
but should be done if a hardware bug is suspected.

ARCHITECTURE


The i40e driver is only supported on x86 systems at this time.

FILES


/dev/net/i40e* Per-instance character device.

/kernel/drv/amd64/i40e Device driver (x86)

/kernel/drv/i40e.conf Driver configuration file

SEE ALSO


dlpi(4P), driver.conf(5), dladm(8), snoop(8)

OmniOS January 18, 2021 OmniOS