FreeBSD* Driver for Intel(R) Ethernet ===================================== April 2, 2021 Contents ======== - Overview - Identifying Your Adapter - Building and Installation - Additional Features and Configurations - Known Issues/Troubleshooting - Support - License Overview ======== This file describes the FreeBSD* driver for Intel(R) Ethernet. This driver has been developed for use with all community-supported versions of FreeBSD. For questions related to hardware requirements, refer to the documentation supplied with your Intel Ethernet Adapter. All hardware requirements listed apply to use with FreeBSD. Identifying Your Adapter ======================== This release includes the gigabit FreeBSD base driver for Intel(R) Ethernet. - The igb driver supports all 82575 and 82576-based gigabit network connections. - Gigabit devices based on the Intel(R) Ethernet Controller X722 are supported by the ixl driver. For information on how to identify your adapter, and for the latest Intel network drivers, refer to the Intel Support website: http://www.intel.com/support Building and Installation ========================= NOTE: This driver package is to be used only as a standalone archive and the user should not attempt to incorporate it into the kernel source tree. In the instructions below, x.x.x is the driver version as indicated in the name of the driver tar file. 1. Move the base driver tar file to the directory of your choice. For example, use /home/username/igb or /usr/local/src/igb. 2. Untar/unzip the archive: # tar xzf igb-x.x.x.tar.gz This will create the igb-x.x.x directory. 3. To install man page: # cd igb-x.x.x # gzip -c igb.4 > /usr/share/man/man4/igb.4.gz 4. To load the driver onto a running system: # cd igb-x.x.x/src # make # kldload ./if_igb.ko 5. To assign an IP address to the interface, enter the following, where X is the interface number for the device: # ifconfig igbX 6. Verify that the interface works. Enter the following, where is the IP address for another machine on the same subnet as the interface that is being tested: # ping 7. If you want the driver to load automatically when the system is booted: # cd igb-x.x.x/src # make # make install Edit /boot/loader.conf, and add the following line: if_igb_load="YES" Edit /etc/rc.conf, and create the appropriate ifconfig_igbX entry: ifconfig_igbX="" Example usage: ifconfig_igb0="inet 192.168.10.1 netmask 255.255.255.0" NOTE: For assistance, see the ifconfig man page. Additional Features and Configurations ====================================== Speed and Duplex Configuration ------------------------------ In addressing speed and duplex configuration issues, you need to distinguish between copper-based adapters and fiber-based adapters. In the default mode, an Intel(R) Ethernet Network Adapter using copper connections will attempt to auto-negotiate with its link partner to determine the best setting. If the adapter cannot establish link with the link partner using auto-negotiation, you may need to manually configure the adapter and link partner to identical settings to establish link and pass packets. This should only be needed when attempting to link with an older switch that does not support auto-negotiation or one that has been forced to a specific speed or duplex mode. Your link partner must match the setting you choose. 1 Gbps speeds and higher cannot be forced. Use the autonegotiation advertising setting to manually set devices for 1 Gbps and higher. Caution: Only experienced network administrators should force speed and duplex or change autonegotiation advertising manually. The settings at the switch must always match the adapter settings. Adapter performance may suffer or your adapter may not operate if you configure the adapter differently from your switch. An Intel(R) Ethernet Network Adapter using fiber-based connections, however, will not attempt to auto-negotiate with its link partner since those adapters operate only in full duplex and only at their native speed. By default, the adapter auto-negotiates the speed and duplex of the connection. If there is a specific need, the ifconfig utility can be used to configure the speed and duplex settings on the adapter. Example usage: # ifconfig igbX media 100baseTX mediaopt full-duplex NOTE: Only use mediaopt to set the driver to full-duplex. If mediaopt is not specified and you are not running at gigabit speed, the driver defaults to half-duplex. If the interface is currently forced to 100 full duplex, you must use this command to change to half duplex: # ifconfig igbX media 100baseTX -mediaopt full-duplex This driver supports the following media type options: Media Type Description ---------- ----------- autoselect Enables auto-negotiation for speed and duplex. 10baseT/UTP Sets speed to 10 Mbps. Use the ifconfig mediaopt option to select full-duplex mode. 100baseTX Sets speed to 100 Mbps. Use the ifconfig mediaopt option to select full-duplex mode. 1000baseTX Sets speed to 1000 Mbps. In this case, the driver supports only full-duplex mode. 1000baseSX Sets speed to 1000 Mbps. In this case, the driver supports only full-duplex mode. For more information on the ifconfig utility, refer to the ifconfig man page. Jumbo Frames ------------ Jumbo Frames support is enabled by changing the Maximum Transmission Unit (MTU) to a value larger than the default value of 1500. Use the ifconfig command to increase the MTU size. For example, enter the following where X is the interface number: # ifconfig igbX mtu 9000 To confirm an interface's MTU value, use the ifconfig command. To confirm the MTU used between two specific devices, use: # route get NOTE: The maximum MTU setting for jumbo frames is 9216. This corresponds to the maximum jumbo frame size of 9238 bytes. NOTE: Using jumbo frames at 10 or 100 Mbps is not supported and may result in poor performance or loss of link. NOTE: Packet loss may have a greater impact on throughput when you use jumbo frames. If you observe a drop in performance after enabling jumbo frames, enabling flow control may mitigate the issue. VLANS ----- To create a new VLAN interface: # ifconfig create To associate the VLAN interface with a physical interface and assign a VLAN ID, IP address, and netmask: # ifconfig netmask vlan vlandev Example: # ifconfig vlan10 10.0.0.1 netmask 255.255.255.0 vlan 10 vlandev igb0 In this example, all packets will be marked on egress with 802.1Q VLAN tags, specifying a VLAN ID of 10. To remove a VLAN interface: # ifconfig destroy Polling ------- NOTES: - Device Polling is only valid for non-SMP kernels. - The driver has to be built into the kernel for Device Polling to be enabled in the driver. To enable polling in the driver, add the following options to the kernel configuration, and then recompile the kernel: options DEVICE_POLLING options HZ=1000 At runtime use: # ifconfig igbX polling (to turn polling on) and: # ifconfig igbX -polling (to turn it off) Checksum Offload ---------------- Checksum offloading is not supported on 82542 Gigabit adapters. Checksum offloading supports both TCP and UDP packets and is supported for both transmit and receive. Checksum offloading can be enabled or disabled using ifconfig. Both transmit and receive offloading will be either enabled or disabled together. You cannot enable/disable one without the other. To enable checksum offloading: # ifconfig igbX rxcsum To disable checksum offloading: # ifconfig igbX -rxcsum To confirm the current setting: # ifconfig igbX Look for the presence or absence of the following line: options=3 See the ifconfig man page for further information. TSO --- TSO (TCP Segmentation Offload) supports both IPv4 and IPv6. TSO can be disabled and enabled using the ifconfig utility or sysctl. NOTE: TSO requires Tx checksum, if Tx checksum is disabled, TSO will also be disabled. NOTE: By default only PCI-Express adapters are ENABLED to do TSO. Others can be enabled by the user at their own risk. TSO is not supported on 82547 or 82544-based adapters, as well as older adapters. To enable/disable TSO in the stack: # sysctl net.inet.tcp.tso=0 (or 1 to enable it) Doing this disables/enables TSO in the stack and affects all installed adapters. To disable BOTH TSO IPv4 and IPv6, where X is the number of the interface in use: # ifconfig igbX -tso To enable BOTH TSO IPv4 and IPv6: # ifconfig igbX tso You can also enable/disable IPv4 TSO or IPv6 TSO individually. Simply replace tso|-tso in the above command with tso4 or tso6. For example, to disable TSO IPv4: # ifconfig igbX -tso4 To disable TSO IPv6: # ifconfig igbX -tso6 MSI-X ----- MSI or MSI-X can be turned off by an entry in /etc/sysctl.conf hw.em.enable_msi=0 Unload and reload the driver. LRO --- LRO (Large Receive Offload) may provide Rx performance improvement. However, it is incompatible with packet-forwarding workloads. You should carefully evaluate the environment and enable LRO when possible. To enable: # ifconfig igbX lro It can be disabled by using: # ifconfig igbX -lro EEE (Energy Efficient Ethernet) ------------------------------- Valid Range: 0-1 0 = Disables EEE 1 = Enables EEE A link between two EEE-compliant devices will result in periodic bursts of data followed by periods where the link is in an idle state. This Low Power Idle (LPI) state is supported at 1 Gbps and 100 Mbps link speeds. NOTES: - EEE support requires auto-negotiation. - Both link partners must support EEE. - EEE is not supported on all Intel(R) Ethernet Network devices or at all link speeds. Example: # sysctl dev.igb.#.eee.enable=[0|1] DMAC ---- Valid Range: 0, 1, 250, 500, 1000, 2000, 3000, 4000, 5000, 6000, 7000, 8000, 9000, 10000 This parameter enables or disables DMA Coalescing feature. Values are in microseconds and set the internal DMA Coalescing internal timer. DMA (Direct Memory Access) allows the network device to move packet data directly to the system's memory, reducing CPU utilization. However, the frequency and random intervals at which packets arrive do not allow the system to enter a lower power state. DMA Coalescing allows the adapter to collect packets before it initiates a DMA event. This may increase network latency but also increases the chances that the system will enter a lower power state. Turning on DMA Coalescing may save energy. DMA Coalescing must be enabled across all active ports in order to save platform power. Known Issues/Troubleshooting ============================ Detected Tx Unit Hang in Quad Port Adapters ------------------------------------------- In some cases, ports 3 and 4 don't pass traffic and report "Detected Tx Unit Hang" followed by "NETDEV WATCHDOG: igbX: transmit timed out" errors. Ports 1 and 2 do not show any errors and will pass traffic. This issue may be resolved by updating to the latest kernel and BIOS. You should use an OS that fully supports Message Signaled Interrupts (MSI) and make sure that MSI is enabled in your system's BIOS. There are known performance issues with this driver when running UDP traffic with Jumbo Frames. ---------------------------------------------------------------------------- Support ======= For general information, go to the Intel support website at: http://www.intel.com/support/ If an issue is identified with the released source code on a supported kernel with a supported adapter, email the specific information related to the issue to freebsd@intel.com Copyright(c) 1999-2021 Intel Corporation. Trademarks ========== Intel is a trademark or registered trademark of Intel Corporation or its subsidiaries in the United States and/or other countries. * Other names and brands may be claimed as the property of others.