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. Ethtool 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.  Ethtool
  version 1.6 or later is required for this functionality.

  The latest release of ethtool can be found from
  http://sourceforge.net/projects/gkernel.

  NOTE: Ethtool 1.6 only supports a limited set of ethtool options. Support
  for a more complete ethtool feature set can be enabled by upgrading
  ethtool to ethtool-1.8.1.


  Enabling Wake on LAN* (WoL)
  ---------------------------
  WoL is provided through the Ethtool* utility. Ethtool is included with Red
  Hat* 8.0. For other Linux distributions, download and install Ethtool from
  the following website: http://sourceforge.net/projects/gkernel.

  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.
