9ab4dfce8f
Currently if an e1000 interface is set to a fixed media configuration, for gigabit, it will participate in auto-negotiation as required by IEEE 802.3-2018 Clause 37. However, if set to fixed media configuration for 100 or 10, it does NOT participate in auto-negotiation. By my reading of Clauses 28 and 37, while auto-negotiation is optional for 100 and 10, it is not prohibited and is, in fact, "highly recommended". This patch enables auto-negotiation for fixed 100 and 10 media configuration, in a similar manner to that already performed for 1000. I.e., the patch enables advertising of just the manually configured settings with the goal of allowing the remote end to match the manually configured settings if it has them available. To be clear, this patch does NOT allow an em(4) interface that has been manually configured with specific media settings to respond to auto-negotiation by then configuring different parameters to those that were manually configured. The intent of this patch is to fully comply with the requirements of Clause 37, but for 100 and 10. The need for this has arisen on an em(4) link where the other end is under a different administrative control and is set to full auto-negotiation. Due to the cable length GigE is not working well. It is desired to set the em(4) end to "media 100baseTX mediatype full-duplex" which does work when both ends are configured that way. Currently, because em(4) does not participate in autoneg for this setting, the remote defaults to half-duplex - i.e., there's a duplex mismatch and things don't work. With this patch, em(4) would inform the remote that it has only 100baseTX full, the remote would match that and it will work. Approved by: erj MFC after: 2 weeks Differential Revision: https://reviews.freebsd.org/D34449 |
||
---|---|---|
.. | ||
e1000_80003es2lan.c | ||
e1000_80003es2lan.h | ||
e1000_82540.c | ||
e1000_82541.c | ||
e1000_82541.h | ||
e1000_82542.c | ||
e1000_82543.c | ||
e1000_82543.h | ||
e1000_82571.c | ||
e1000_82571.h | ||
e1000_82575.c | ||
e1000_82575.h | ||
e1000_api.c | ||
e1000_api.h | ||
e1000_base.c | ||
e1000_base.h | ||
e1000_defines.h | ||
e1000_hw.h | ||
e1000_i210.c | ||
e1000_i210.h | ||
e1000_ich8lan.c | ||
e1000_ich8lan.h | ||
e1000_mac.c | ||
e1000_mac.h | ||
e1000_manage.c | ||
e1000_manage.h | ||
e1000_mbx.c | ||
e1000_mbx.h | ||
e1000_nvm.c | ||
e1000_nvm.h | ||
e1000_osdep.c | ||
e1000_osdep.h | ||
e1000_phy.c | ||
e1000_phy.h | ||
e1000_regs.h | ||
e1000_vf.c | ||
e1000_vf.h | ||
em_txrx.c | ||
if_em.c | ||
if_em.h | ||
igb_txrx.c | ||
LICENSE | ||
README |
$FreeBSD$ FreeBSD* Driver for Intel(R) Ethernet ===================================== August 7, 2019 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 two gigabit FreeBSD base Drivers for Intel(R) Ethernet. These drivers are em and igb. - The igb driver supports all 82575 and 82576-based gigabit network connections. - The em driver supports all other gigabit network connections. - Gigabit devices base on the Intel(R) Ethernet Controller X722 are supported by the ixl driver. NOTE: The Intel(R) 82562v 10/100 Network Connection only provides 10/100 support. 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/em or /usr/local/src/em. 2. Untar/unzip the archive: # tar xzf em-x.x.x.tar.gz This will create the em-x.x.x directory. 3. To install man page: # cd em-x.x.x # gzip -c em.4 > /usr/share/man/man4/em.4.gz 4. To load the driver onto a running system: # cd em-x.x.x/src # make # kldload ./if_em.ko 5. To assign an IP address to the interface, enter the following: # ifconfig em<interface_num> <IP_address> 6. Verify that the interface works. Enter the following, where <IP_address> is the IP address for another machine on the same subnet as the interface that is being tested: # ping <IP_address> 7. If you want the driver to load automatically when the system is booted: # cd em-x.x.x/src # make # make install Edit /boot/loader.conf, and add the following line: if_em_load="YES" Edit /etc/rc.conf, and create the appropriate ifconfig_em<interface_num> entry: ifconfig_em<interface_num>="<ifconfig_settings>" Example usage: ifconfig_em0="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 emX <IP_address> 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 emX <IP_address> 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, see 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 emX 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 <destination_IP_address> NOTE: The maximum MTU setting for Jumbo Frames is 16110. This value coincides with the maximum Jumbo Frames size of 16132 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. NOTE: Some Intel gigabit adapters that support Jumbo Frames have a frame size limit of 9238 bytes, with a corresponding MTU size limit of 9216 bytes. The adapters with this limitation are based on the Intel(R) 82571EB, 82572EI, 82573L, 82566, 82562, and 80003ES2LAN controller. These correspond to the following product names: Intel(R) PRO/1000 PT Server Adapter Intel(R) PRO/1000 PT Desktop Adapter Intel(R) PRO/1000 PT Network Connection Intel(R) PRO/1000 PT Dual Port Server Adapter Intel(R) PRO/1000 PT Dual Port Network Connection Intel(R) PRO/1000 PT Quad Port Server Adapter Intel(R) PRO/1000 PF Quad Port Server Adapter Intel(R) PRO/1000 PF Server Adapter Intel(R) PRO/1000 PF Network Connection Intel(R) PRO/1000 PF Dual Port Server Adapter Intel(R) PRO/1000 PB Server Connection Intel(R) PRO/1000 PL Network Connection Intel(R) PRO/1000 EB Network Connection with I/O Acceleration Intel(R) PRO/1000 EB Backplane Connection with I/O Acceleration Intel(R) 82566DM-2 Gigabit Network Connection Intel(R) 82574L Gigabit Network Connection Intel(R) Gigabit CT Desktop Adapter Intel(R) 82567LM-4 Gigabit Network Connection Intel(R) 82567LM-3 Gigabit Network Connection Intel(R) 82567LF-3 Gigabit Network Connection NOTE: The following adapters limit Jumbo Frames sized packets to a maximum of 4088 bytes: - Intel(R) 82578DM Gigabit Network Connection - Intel(R) 82577LM Gigabit Network Connection - The following adapters do not support Jumbo Frames: - Intel(R) PRO/1000 Gigabit Server Adapter - Intel(R) PRO/1000 PM Network Connection - Intel(R) 82562G 10/100 Network Connection - Intel(R) 82562G-2 10/100 Network Connection - Intel(R) 82562GT 10/100 Network Connection - Intel(R) 82562GT-2 10/100 Network Connection - Intel(R) 82562V 10/100 Network Connection - Intel(R) 82562V-2 10/100 Network Connection - Intel(R) 82566DC Gigabit Network Connection - Intel(R) 82566DC-2 Gigabit Network Connection - Intel(R) 82566DM Gigabit Network Connection - Intel(R) 82566MC Gigabit Network Connection - Intel(R) 82566MM Gigabit Network Connection - Intel(R) 82567V-3 Gigabit Network Connection - Intel(R) 82577LC Gigabit Network Connection - Intel(R) 82578DC Gigabit Network Connection - Jumbo Frames cannot be configured on an 82579-based Network device if MACSec is enabled on the system. VLANS ----- To create a new VLAN interface: # ifconfig <vlan_name> create To associate the VLAN interface with a physical interface and assign a VLAN ID, IP address, and netmask: # ifconfig <vlan_name> <ip_address> netmask <subnet_mask> vlan <vlan_id> vlandev <physical_interface> Example: # ifconfig vlan10 10.0.0.1 netmask 255.255.255.0 vlan 10 vlandev em0 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 <vlan_name> 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 emX polling (to turn polling on) and: ifconfig emX -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 emX rxcsum To disable checksum offloading: # ifconfig emX -rxcsum To confirm the current setting: # ifconfig emX Look for the presence or absence of the following line: options=3 <RXCSUM,TXCSUM> 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: # ifconfig em<interface_num> -tso To enable BOTH TSO IPv4 and IPv6: # ifconfig em<interface_num> 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 em<interface_num> -tso4 To disable TSO IPv6: # ifconfig em<interface_num> -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. 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: emX: 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. ---------------------------------------------------------------------------- 82541/82547 can't link or is slow to link with some link partners ----------------------------------------------------------------- There is a known compatibility issue where time to link is slow or link is not established between 82541/82547 controllers and some switches. Known switches include: Planex FXG-08TE I-O Data ETG-SH8 The driver can be compiled with the following changes: Edit ./em.x.x.x/src/if_em.h to change the #define EM_MASTER_SLAVE For example, change from: #define EM_MASTER_SLAVE e1000_ms_hw_default to: #define EM_MASTER_SLAVE 2 Use one of the following options: 1 = Master mode 2 = Slave mode 3 = Auto master/slave Setting 2 is recommended. Recompile the module: a. To compile the module cd em-x.x.x make clean make b. To install the compiled module in system directory: make install 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-2019 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.