freebsd-nq/sys/dev/ixgbe
Robert Watson eb956cd041 Use if_maddr_rlock()/if_maddr_runlock() rather than IF_ADDR_LOCK()/
IF_ADDR_UNLOCK() across network device drivers when accessing the
per-interface multicast address list, if_multiaddrs.  This will
allow us to change the locking strategy without affecting our driver
programming interface or binary interface.

For two wireless drivers, remove unnecessary locking, since they
don't actually access the multicast address list.

Approved by:	re (kib)
MFC after:	6 weeks
2009-06-26 11:45:06 +00:00
..
ixgbe_82598.c Update for the Intel 10G driver, this adds support for 2009-06-24 18:27:07 +00:00
ixgbe_82599.c Update for the Intel 10G driver, this adds support for 2009-06-24 18:27:07 +00:00
ixgbe_api.c Update for the Intel 10G driver, this adds support for 2009-06-24 18:27:07 +00:00
ixgbe_api.h Update for the Intel 10G driver, this adds support for 2009-06-24 18:27:07 +00:00
ixgbe_common.c Update for the Intel 10G driver, this adds support for 2009-06-24 18:27:07 +00:00
ixgbe_common.h Update the ixgbe driver to 1.7.4, this includes support 2009-04-10 00:22:48 +00:00
ixgbe_osdep.h Update for the Intel 10G driver, this adds support for 2009-06-24 18:27:07 +00:00
ixgbe_phy.c Update for the Intel 10G driver, this adds support for 2009-06-24 18:27:07 +00:00
ixgbe_phy.h Update for the Intel 10G driver, this adds support for 2009-06-24 18:27:07 +00:00
ixgbe_type.h Update for the Intel 10G driver, this adds support for 2009-06-24 18:27:07 +00:00
ixgbe.c Use if_maddr_rlock()/if_maddr_runlock() rather than IF_ADDR_LOCK()/ 2009-06-26 11:45:06 +00:00
ixgbe.h Update for the Intel 10G driver, this adds support for 2009-06-24 18:27:07 +00:00
LICENSE Update the ixgbe driver to 1.7.4, this includes support 2009-04-10 00:22:48 +00:00
README Update the ixgbe driver to 1.7.4, this includes support 2009-04-10 00:22:48 +00:00

FreeBSD Driver for 10 Gigabit PCI Express Server Adapters
=============================================
/*$FreeBSD$*/

May 14, 2008


Contents
========

- Overview
- Supported Adapters
- Building and Installation
- Additional Configurations
- Known Limitations


Overview
========

This file describes the FreeBSD* driver for the 10 Gigabit PCIE Family of 
Adapters.  Drivers has been developed for use with FreeBSD 7 or later.

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.


Supported Adapters
==================

The following Intel network adapters are compatible with the drivers in this 
release:

Controller  Adapter Name                      Physical Layer
----------  ------------                      --------------
82598EB     Intel(R) 10 Gigabit XF SR/AF      10G Base -LR (850 nm optical fiber) 
            Dual Port Server Adapter          10G Base -SR (1310 nm optical fiber) 
82598EB     Intel(R) 10 Gigabit XF SR/LR 
            Server Adapter
            Intel(R) 82598EB 10 Gigabit AF 
            Network Connection
            Intel(R) 82598EB 10 Gigabit AT 
            CX4 Network Connection
              

Building and Installation
=========================

NOTE: You must have kernel sources installed in order to compile the driver
      module.

      In the instructions below, x.x.x is the driver version as indicated in
      the name of the driver tar. 

1. Move the base driver tar file to the directory of your choice. For 
   example, use /home/username/ixgbe or /usr/local/src/ixgbe.

2. Untar/unzip the archive:
     tar xfz ixgbe-x.x.x.tar.gz

3. To install man page:
     cd ixgbe-x.x.x
     gzip -c ixgbe.4 > /usr/share/man/man4/ixgbee.4.gz

4. To load the driver onto a running system:
     cd ixgbe-x.x.x/src
     make load

5. To assign an IP address to the interface, enter the following:
     ifconfig ix<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 ixgbe-x.x.x/src
     make
     make install
        
    Edit /boot/loader.conf, and add the following line:
     ixgbe_load="YES"

     OR

     compile the driver into the kernel (see item 8).


   Edit /etc/rc.conf, and create the appropriate ifconfig_ixgbe<interface_num> 
   entry:

     ifconfig_ix<interface_num>="<ifconfig_settings>"

     Example usage:

     ifconfig_ix0="inet 192.168.10.1 netmask 255.255.255.0"

     NOTE: For assistance, see the ifconfig man page.

8. If you want to compile the driver into the kernel, enter:

     FreeBSD 7 or later:

     cd ixgbe-x.x.x/src

     cp *.[ch] /usr/src/sys/dev/ixgbe
   
     cp Makefile.kernel /usr/src/sys/modules/ixgbe/Makefile

     Edit the kernel configuration file (i.e., GENERIC or MYKERNEL) in 
     /usr/src/sys/i386/conf (replace "i386" with the appropriate system 
     architecture if necessary), and ensure the following line is present:

    device ixgbe

   Compile and install the kernel.  The system must be reboot for the kernel 
   updates to take affect.  For additional information on compiling the kernel, 
   consult the FreeBSD operating system documentation.


Configuration and Tuning
=========================

The driver supports Transmit/Receive Checksum Offload and Jumbo Frames on
all 10 Gigabit adapters. 

  Jumbo Frames
  ------------
  To enable Jumbo Frames, use the ifconfig utility to increase the MTU
  beyond 1500 bytes.

  NOTES:

       - The Jumbo Frames setting on the switch must be set to at least
         22 bytes larger than that of the adapter.

       - There are known performance issues with this driver when running 
         UDP traffic with Jumbo Frames. 

  The Jumbo Frames MTU range for Intel Adapters is 1500 to 16114. The default
  MTU range is 1500. To modify the setting, enter the following:

        ifconfig ix <interface_num> <hostname or IP address> 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>

  VLANs
  -----
  To create a new VLAN pseudo-interface:

        ifconfig <vlan_name> create

  To associate the VLAN pseudo-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 ixgbe0

  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 pseudo-interface:

        ifconfig <vlan_name> destroy


  Checksum Offload
  ----------------
  
  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 <interface_num> rxcsum 

  To disable checksum offloading:

         ifconfig <interface_num> -rxcsum 

  To confirm the current setting:

         ifconfig <interface_num>

  
  TSO
  ---

  To disable:

         ifconfig <interface_num> -tso 

  To re-enable:

         ifconfig <interface_num> tso

  LRO
  ___
  
   Large Receive Offload is available in version 1.4.4, it is on
   by default. It can be toggled off and on by using:
	sysctl dev.ix.X.enable_lro=[0,1]

   NOTE: when changing this feature you MUST be sure the interface
   is reinitialized, it is easy to do this with ifconfig down/up.
   The LRO code will ultimately move into the kernel stack code,
   but for this first release it was included with the driver.

  Important system configuration changes:
  ---------------------------------------

  When there is a choice run on a 64bit OS rather than 32, it makes
  a significant difference in improvement.

  The default scheduler SCHED_4BSD is not smart about SMP locality issues. 
  Significant improvement can be achieved by switching to the ULE scheduler.

  This is done by changing the entry in the config file from SCHED_4BSD to 
  SCHED_ULE. Note that this is only advisable on FreeBSD 7, on 6.X there have
  been stability problems with ULE.

  Change the file /etc/sysctl.conf, add the line:  
 
         hw.intr_storm_threshold: 8000 (the default is 1000)

  Best throughput results are seen with a large MTU; use 9000 if possible. 

  The default number of descriptors is 256, increasing this to 1024 or even 
  2048 may improve performance.


Known Limitations
=================
  Under small packets UDP stress test with 10GbE driver, the FreeBSD system 
  will drop UDP packets due to the fullness of socket buffers. You may want 
  to change the driver's Flow Control variables to the minimum value for 
  controlling packet reception.


Support
=======

For general information and support, go to the Intel support website at:

        http://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 freebsd@intel.com.



License
=======

This software program is released under the terms of a license agreement 
between you ('Licensee') and Intel. Do not use or load this software or any 
associated materials (collectively, the 'Software') until you have carefully 
read the full terms and conditions of the LICENSE located in this software 
package. By loading or using the Software, you agree to the terms of this 
Agreement. If you do not agree with the terms of this Agreement, do not 
install or use the Software.

* Other names and brands may be claimed as the property of others.