Linux* Base Driver for the Intel(R) PRO/100 Family of Adapters
==============================================================

November 15, 2005

Contents
========

- In This Release
- Identifying Your Adapter
- Building and Installation
- Driver Configuration Parameters
- Additional Configurations
- Known Issues
- Support


In This Release
===============

This file describes the Linux* Base Driver for the Intel(R) PRO/100 Family of
Adapters. This driver includes support for Itanium(R)2-based systems.

For questions related to hardware requirements, refer to the documentation
supplied with your Intel PRO/100 adapter.

The following features are now available in supported kernels:
 - Native VLANs
 - Channel Bonding (teaming)
 - SNMP

Channel Bonding documentation can be found in the Linux kernel source:
/Documentation/networking/bonding.txt


Identifying Your Adapter
========================

For more information on how to identify your adapter, go to the Adapter &
Driver ID Guide at:

  http://support.intel.com/support/network/adapter/pro100/21397.htm

For the latest Intel network drivers for Linux, refer to the following
website. In the search field, enter your adapter name or type, or use the
networking link on the left to search for your adapter:

  http://downloadfinder.intel.com/scripts-df/support_intel.asp

Driver Configuration Parameters
===============================

The default value for each parameter is generally the recommended setting,
unless otherwise noted.

Rx Descriptors: Number of receive descriptors. A receive descriptor is a data
   structure that describes a receive buffer and its attributes to the network
   controller. The data in the descriptor is used by the controller to write
   data from the controller to host memory. In the 3.x.x driver the valid range
   for this parameter is 64-256. The default value is 64. This parameter can be
   changed using the command:

   ethtool -G eth? rx n, where n is the number of desired rx descriptors.

Tx Descriptors: Number of transmit descriptors. A transmit descriptor is a data
   structure that describes a transmit buffer and its attributes to the network
   controller. The data in the descriptor is used by the controller to read
   data from the host memory to the controller. In the 3.x.x driver the valid
   range for this parameter is 64-256. The default value is 64. This parameter
   can be changed using the command:

   ethtool -G eth? tx n, where n is the number of desired tx descriptors.

Speed/Duplex: The driver auto-negotiates the link speed and duplex settings by
   default. The ethtool utility can be used as follows to force speed/duplex.

   ethtool -s eth?  autoneg off speed {10|100} duplex {full|half}

   NOTE: setting the speed/duplex to incorrect values will cause the link to
   fail.

Event Log Message Level:  The driver uses the message level flag to log events
   to syslog. The message level can be set at driver load time. It can also be
   set using the command:

   ethtool -s eth? msglvl n


Additional Configurations
=========================

  Configuring the Driver on Different Distributions
  -------------------------------------------------

  Configuring a network driver to load properly when the system is started is
  distribution dependent. Typically, the configuration process involves adding
  an alias line to /etc/modules.conf or /etc/modprobe.conf as well as editing
  other system startup scripts and/or configuration files.  Many popular Linux
  distributions ship with tools to make these changes for you. To learn the
  proper way to configure a network device for your system, refer to your
  distribution documentation.  If during this process you are asked for the
  driver or module name, the name for the Linux Base Driver for the Intel
  PRO/100 Family of Adapters is e100.

  As an example, if you install the e100 driver for two PRO/100 adapters
  (eth0 and eth1), add the following to modules.conf or modprobe.conf:

       alias eth0 e100
       alias eth1 e100

  Viewing Link Messages
  ---------------------
  In order to see link messages and other Intel driver information on your
  console, you must set the dmesg level up to six. This can be done by
  entering the following on the command line before loading the e100 driver:

       dmesg -n 8

  If you wish to see all messages issued by the driver, including debug
  messages, set the dmesg level to eight.

  NOTE: This setting is not saved across reboots.


  Ethtool
  -------

  The driver utilizes the ethtool interface for driver configuration and
  diagnostics, as well as displaying statistical information.  The ethtool
  version 1.6 or later is required for this functionality.

  The latest release of ethtool can be found from
  http://ftp.kernel.org/pub/software/network/ethtool/

  Enabling Wake on LAN* (WoL)
  ---------------------------
  WoL is provided through the ethtool* utility.  For instructions on enabling
  WoL with ethtool, refer to the ethtool man page.

  WoL will be enabled on the system during the next shut down or reboot. For
  this driver version, in order to enable WoL, the e100 driver must be
  loaded when shutting down or rebooting the system.

  NAPI
  ----

  NAPI (Rx polling mode) is supported in the e100 driver.

  See www.cyberus.ca/~hadi/usenix-paper.tgz for more information on NAPI.

  Multiple Interfaces on Same Ethernet Broadcast Network
  ------------------------------------------------------

  Due to the default ARP behavior on Linux, it is not possible to have
  one system on two IP networks in the same Ethernet broadcast domain
  (non-partitioned switch) behave as expected. All Ethernet interfaces
  will respond to IP traffic for any IP address assigned to the system.
  This results in unbalanced receive traffic.

  If you have multiple interfaces in a server, either turn on ARP
  filtering by

  (1) entering: echo 1 > /proc/sys/net/ipv4/conf/all/arp_filter
      (this only works if your kernel's version is higher than 2.4.5), or

  (2) installing the interfaces in separate broadcast domains (either
      in different switches or in a switch partitioned to VLANs).


Support
=======

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

    http://support.intel.com

    or the Intel Wired Networking project hosted by Sourceforge at:

    http://sourceforge.net/projects/e1000

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 e1000-devel@lists.sourceforge.net.


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 file COPYING 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.
