NAME
ix – Intel 10Gb Ethernet driver
SYNOPSIS
device iflib device ix
In loader.conf(5): hw.ix.max_interrupt_rate hw.ix.flow_control hw.ix.advertise_speed hw.ix.enable_msix hw.ix.allow_unsupported_sfp hw.ix.enable_fdir hw.ix.enable_rss hw.ix.enable_aim if_ix_load="YES"
In loader.conf(5) or sysctl.conf(5): dev.ix.?.debug.dump.clusters dev.ix.?.debug.dump.dump dev.ix.?.debug.fw_log.severity.⟨module⟩ dev.ix.?.debug.fw_log.register dev.ix.?.debug.fw_log.on_load dev.ix.?.eee_state dev.ix.?.eee.tx_lpi_count dev.ix.?.eee.rx_lpi_count
DESCRIPTION
The ix driver provides support for Intel(R) 10Gb Ethernet PCIe adapters. The driver supports Jumbo Frames, MSIX, TSO, and RSS.
The identification LED for each port is controlled through its /dev/led/ix* device node.
On adapters and ports that expose PCI power-management wake, the driver supports the wol_magic, wol_ucast, and wol_mcast capabilities shown by ifconfig(8). The NVM APME setting selects whether magic-packet wake is enabled by default without hiding wake modes that the hardware and board support. Waking the system from an ACPI sleep state also requires enabling the corresponding device wake source when it is exposed, for example:
sysctl dev.ix.0.wake=1
The interface wake capabilities select the controller packet filters; they do not enable the ACPI wake source.
For questions related to hardware requirements, refer to the documentation supplied with your Intel 10GbE adapter. All hardware requirements listed apply to use with FreeBSD.
Support for Jumbo Frames is provided via the interface MTU setting. Selecting an MTU larger than 1500 bytes with the ifconfig(8) utility configures the adapter to receive and transmit Jumbo Frames. The maximum MTU size for Jumbo Frames is 9710.
This driver version supports VLANs. For information on enabling VLANs, see ifconfig(8).
SR-IOV
The driver-specific vlan parameter in iovctl.conf(5) accepts a VLAN identifier from 1 through 4095 or the keyword “trunk”, which is the default. A numeric VLAN configures an access VF: the PF inserts the VLAN tag on transmit and strips it on receive. The stripped administrative tag is not presented to the VF network stack as M_VLANTAG, so received packets are delivered directly through the VF interface. With “trunk”, the VF may add and remove individual VLAN memberships; tags for VLANs registered by the VF are presented normally to its network stack.
VLAN filtering remains enabled in the hardware while SR-IOV is active so that the PF can enforce VLAN ownership for each VF pool, including when hardware VLAN filtering has been disabled on the PF interface.
Secondary unicast addresses requested by a VF are accepted only when the VF is permitted to change its MAC address and mac-anti-spoof is disabled in its iovctl.conf(5) configuration. The hardware MAC anti-spoofing control can validate only the VF's primary source address, so the driver does not silently weaken an enabled policy to install secondary addresses.
Ethertype anti-spoofing and malicious-driver detection and recovery are available only on X550-family devices, including X552 and X553, and on E610. The driver cannot enable those hardware protections on earlier devices such as 82599. After a malicious-driver event, the PF keeps the offending VF's transmit and receive paths disabled until the VF completes a new reset handshake.
On 82599 and X540 devices, the driver instead watches for transmit stalls caused by an invalid VF DMA target and resets the VF identified by its PCIe error status. After five such events from the same VF, the driver quarantines that VF and keeps its transmit, receive, and mailbox clear-to-send state disabled. Quarantine persists across PF reinitialization and is cleared when the SR-IOV configuration is destroyed and recreated. The read-only dev.ix.N.iov_quarantined_vfs sysctl reports quarantined VF pools as a bitmap.
E610 PFs provide physical link state and speed to VFs that negotiate mailbox API 1.6.
HARDWARE
The ix driver supports Intel 10Gb Ethernet PCIe adapters, including:
-
Intel(R) Ethernet E610
-
Intel(R) Ethernet X553
-
Intel(R) Ethernet X552
-
Intel(R) Ethernet X550
-
Intel(R) Ethernet X540 Bypass
-
Intel(R) Ethernet X540
-
Intel(R) Ethernet X520 Bypass (82599)
-
Intel(R) Ethernet X520 (82599)
-
Intel(R) 10 Gigabit Server Adapter (82598EB)
LOADER TUNABLES
The ix driver supports the following loader tunables:
- hw.ix.max_interrupt_rate
-
Maximum interrupts per second.
- hw.ix.flow_control
-
Default flow control used for all adapters.
- hw.ix.advertise_speed
-
Default advertised speed for all adapters.
- hw.ix.enable_msix
-
Enable Message Signalled Interrupts (MSI-X).
- hw.ix.allow_unsupported_sfp
-
Allow unsupported small form-factor pluggable (SFP) modules. Use at your own risk.
- hw.ix.enable_fdir
-
Enable Flow Director. Flow Director directs Ethernet packets to the core where the packet consuming process, application, container, or microservice is running. SR-IOV configuration is rejected when Flow Director is enabled.
- hw.ix.enable_rss
-
Enable Receive-Side Scaling (RSS). When RSS is enabled, all of the receive data processing for a particular TCP connection is shared across multiple processors or processor cores. Without RSS, all of the processing is performed by a single processor, resulting in inefficient system cache utilization. This has no effect if your system has only one processing unit.
- hw.ix.enable_aim
-
Enable Adaptive Interrupt Moderation (AIM). Vary the interrupt rate over time based on the traffic for that interrupt vector.
SYSCTL VARIABLES
The ix driver supports the following sysctl(8) variables:
- dev.ix.?.debug.dump.clusters
-
Specify a bitmask to select firmware event clusters to be included in the debug dump. Possible values include:
- 0
-
All clusters excluding Manageability Transactions
- 0x1
-
Link cluster
- 0x2
-
Full CSR Space excluding RCW registers
This feature is only supported on E610 devices.
- dev.ix.?.debug.dump.dump
-
Specify 1 to generate a per-device debugging snapshot. Output must be redirected to a file and decoded by Intel Customer Support.
This feature is only supported on E610.
- dev.ix.?.debug.fw_log.severity.⟨module⟩
-
Specify firmware logging verbosity level for the specified module. Available levels include:
- 0
-
none
- 1
-
error
- 2
-
warning
- 3
-
normal
- 4
-
verbose
Supported modules: general, ctrl, link, link_topo, dnl, i2c, sdp, mdio, adminq, hdma, lldp, dcbx, dcb, xlr, nvm, auth, vpd, iosf, parser, sw, scheduler, txq, acl, post, watchdog, task_dispatch, mng, synce, health, tsdrv, pfreg, mdlver.
This feature is only supported on E610 devices.
- dev.ix.?.debug.fw_log.register
-
Specify 1 to apply per-device firmware logging configuration.
This feature is only supported on E610 devices.
- dev.ix.?.debug.fw_log.on_load
-
Enable firmware logging during driver initialization when set via kenv(1).
This feature is only supported on E610 devices.
- dev.ix.?.eee_state
-
Enable or disable Energy Efficient Ethernet on supported devices.
- dev.ix.?.eee.tx_lpi_count
-
Count transmit Low Power Idle events.
- dev.ix.?.eee.rx_lpi_count
-
Count receive Low Power Idle events.
DIAGNOSTICS
- ix%d: Unable to allocate bus resource: memory
-
A fatal initialization error has occurred.
- ix%d: Unable to allocate bus resource: interrupt
-
A fatal initialization error has occurred.
- ix%d: watchdog timeout -- resetting
-
The device has stopped responding to the network, or there is a problem with the network connection (cable).
SUPPORT
For general information and support, go to the Intel support website at: https://support.intel.com.
If an issue is identified with the released source code on the supported kernel with a supported adapter, email the specific information related to the issue to ⟨[email protected]⟩.
SEE ALSO
altq(4), arp(4), iflib(4), led(4), netintro(4), ng_ether(4), polling(4), vlan(4), iovctl.conf(5), ifconfig(8), sysctl(8)
HISTORY
The ix device driver first appeared in FreeBSD 7.0.
AUTHORS
The ix driver was written by Intel Corporation ⟨[email protected]⟩.
CAVEATS
Intel (R) Flow director support is not fully implemented in FreeBSD at this time and additional work is required before those features can be supported.
Enabling flow director may route traffic to the wrong RX queue of the NIC, resulting in sub-optimal performance on the receive side.