i40e —
Intel 710/722 Ethernet Device Driver
/dev/net/i40e*
The
i40e driver is a GLDv3, multi-threaded,
clonable, loadable device driver that supports the Data Link Provider
Interface,
dlpi(7P). The
i40e driver supports the Intel 710 and 722
Ethernet Controller families of networking interface cards which come in 1
GbE, 10 GbE, 25 GbE, and 40 GbE variants.
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(1M) and
dlpi(7P)
- IPv4 Checksum Offload
- TCP, UDP, and SCTP checksum 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.
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(7P). 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 guarnatee 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.
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(1M) utility.
dladm(1M) is the preferred interface for setting
all properties. While
driver.conf(4) based
configuration is possible,
dladm(1M) is
recommended. The
i40e driver may be joined
into an aggregation based on the link aggregation control protocol (LACP)
through
dladm(1M).
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(7P) consumer such as
snoop(1M) or an LLDP daemon is started.
Some properties may be tuned at runtime with the
dladm(1M) 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 proeprty
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_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
checksuming 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
checksuming 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_treshold
The rx_dma_treshold 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.
The
i40e driver is only supported on
x86 systems at this time.
-
-
- /dev/net/i40e*
- Per-instance character device.
-
-
- /kernel/drv/i40e
- 32-bit device driver (x86).
-
-
- /kernel/drv/amd64/i40e
- 64-bit device driver (x86).
-
-
- /kernel/drv/i40e.conf
- Driver configuration file.
dladm(1M),
snoop(1M),
driver.conf(4),
dlpi(7P)