.. SPDX-License-Identifier: GPL-2.0+

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

June 1, 2018

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 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

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 256. 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 128. 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/modprobe.d/*.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 a configuration file in
/etc/modprobe.d/::

       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 6

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
https://www.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 https://wiki.linuxfoundation.org/networking/napi 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://www.intel.com/support/

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 a supported kernel
with a supported adapter, email the specific information related to the issue
to e1000-devel@lists.sf.net.
