The Ethernet-Howto covers what cards you should and shouldn't buy; how to set them up, how to run more than one, and other common problems and questions. It contains detailed information on the current level of support for all of the most common ethernet cards available.
It does not cover the software end of things, as that
is covered in the NET-3 Howto. Also note that general non-Linux
specific questions about Ethernet are not (or at least they should
not be) answered here. For those types of questions, see the
excellent amount of information in the comp.dcom.lans.ethernet
FAQ. You can FTP it from rtfm.mit.edu
just like all the other
newsgroup FAQs.
This present revision covers distribution kernels up to and including 2.2.7.
The Ethernet-Howto is by:
Paul Gortmaker, p_gortmaker@yahoo.com
The primary source of information for the initial ASCII-only version of the Ethernet-Howto was:
Donald J. Becker, becker@cesdis.gsfc.nasa.gov
who we should thank for writing the vast majority of ethernet card drivers that are presently available for Linux. He also is the author of the original NFS server too. Thanks Donald!
This document is Copyright (c) 1993-1999 by Paul Gortmaker. Please see the Disclaimer and Copying information at the end of this document ( copyright) for information about redistribution of this document and the usual `we are not responsible for what you manage to break...' type legal stuff.
New versions of this document can be retrieved from:
or for those wishing to use FTP and/or get non-HTML formats:
This is the `official' location - it can also be found on various Linux WWW/ftp mirror sites. Updates will be made as new information and/or drivers becomes available. If this copy that you are reading is more than 6 months old, then you should check to see if an updated copy is available.
This document is available in various formats (postscript, dvi, ASCII, HTML, etc.). I would recommend viewing it in HTML (via a WWW browser) or the Postscript/dvi format. Both of these contain cross-references that are not included in the plain text ASCII format.
As this guide is getting bigger and bigger, you probably don't want to spend the rest of your afternoon reading the whole thing. And the good news is that you don't have to read it all. The HTML and Postscript/dvi versions have a table of contents which will really help you find what you need a lot faster.
Chances are you are reading this document beacuse you can't get things to work and you don't know what to do or check. The next section ( HELP - It doesn't work!) is aimed at newcomers to linux and will point you in the right direction.
Typically the same problems and questions are asked over and over again by different people. Chances are your specific problem or question is one of these Frequently Asked Questions, and is answered in the FAQ portion of this document . ( The FAQ section). Everybody should have a look through this section before posting for help.
If you haven't got an ethernet card, then you will want to start with deciding on a card. ( What card should I buy...)
If you have already got an ethernet card, but are not sure if you can use it with Linux, then you will want to read the section which contains specific information on each manufacturer, and their cards. ( Vendor Specific...)
If you are interested in some of the technical aspects of the Linux device drivers, then you can have a browse of the section with this type of information. ( Technical Information)
Okay, don't panic. This will lead you through the process of getting things working, even if you have no prior background in linux or ethernet hardware.
First thing you need to do is figure out what model your card is so you can determine if Linux has a driver for that particular card. Different cards typically have different ways of being controlled by the host computer, and the linux driver (if there is one) contains this control information in a format that allows linux to use the card. If you don't have any manuals or anything of the sort that tell you anything about the card model, then you can try the section on helping with mystery cards (reference section: Identifying an Unknown Card).
Now that you know what type of card you have, read through the details of your particular card in the card specific section (reference section: Vendor Specific...) which lists in alphabetical order, card manufacturers, individual model numbers and whether it has a linux driver or not. If it lists it as `Not Supported' you can pretty much give up here. If you can't find your card in that list, then check to see if your card manual lists it as being `compatible' with another known card type. For example there are hundreds, if not thousands of different cards made to be compatible with the original Novell NE2000 design.
Assuming you have found out that a linux driver exists for your card, you now have to find it and make use of it. Just because linux has a driver for your card does not mean that it is built into every kernel. (The kernel is the core operating system that is first loaded at boot, and contains drivers for various pieces of hardware, among other things.) Depending on who made the particular linux distribution you are using, there may be only a few pre-built kernels, and a whole bunch of drivers as smaller separate modules, or there may be a whole lot of kernels, covering a vast combination of built-in driver combinations.
Most linux distributions now ship with a bunch of small modules that are the various drivers. The required modules are typically loaded late in the boot process, or on-demand as a driver is needed to access a particualr device. You will need to attach this module to the kernel after it has booted up. See the information that came with your distribution on installing and using modules, along with the module section in this document. ( Using the Ethernet Drivers as Modules)
If you didn't find either a pre-built kernel with your driver, or a module form of the driver, chances are you have a typically uncommon card, and you will have to build your own kernel with that driver included. Once you have linux installed, building a custom kernel is not difficult at all. You essentially answer yes or no to what you want the kernel to contain, and then tell it to build it. There is a Kernel-HowTo that will help you along.
At this point you should have somehow managed to be booting a kernel with your driver built in, or be loading it as a module. About half of the problems people have are related to not having driver loaded one way or another, so you may find things work now.
If it still doesn't work, then you need to verify that the
kernel is indeed detecting the card. To do this, you need
to type dmesg | more
when logged in after the
system has booted and all modules have been loaded.
This will allow you to review the boot messages that the
kernel scrolled up the screen during the boot process.
If the card has been detected, you should see somewhere in
that list a message from your card's driver that starts with
eth0
, mentions the driver name and the hardware parameters
(interrupt setting, input/output port address, etc) that
the card is set for. (Note: At boot, linux lists
all the PCI cards installed in the system, regardless of
what drivers are available - do not mistake this for the
driver detection which comes later!)
If you don't see a driver indentification message like this, then the driver didn't detect your card, and that is why things aren't working. See the FAQ ( The FAQ Section) for what to do if your card is not detected. If you have a NE2000 compatible, there is also some NE2000 specific tips on getting a card detected in the FAQ section as well.
If the card is detected, but the detection message reports some sort of error, like a resource conflict, then the driver probably won't have initialized properly and the card still wont be useable. Most common error messages of this sort are also listed in the FAQ section, along with a solution.
If the detection message seems okay, then double check the card resources reported by the driver against those that the card is physically set for (either by little black jumpers on the card, or by a software utility supplied by the card manufacturer.) These must match exactly. For example, if you have the card jumpered or configured to IRQ 15 and the driver reports IRQ 10 in the boot messages, things will not work. The FAQ section discusses the most common cases of drivers incorrectly detecting the configuration information of various cards.
At this point, you have managed to get you card detected with
all the correct parameters, and hopefully everything is working.
If not, then you either have a software configuration error,
or a hardware configuration error. A software configuration
error is not setting up the right network addresses for the
ifconfig
and route
commands, and details of how
to do that are fully described in the Network HowTo and the
`Network Administrator's Guide' which both probably came on
the CD-ROM you installed from.
A hardware configuration error is when some sort of resource
conflict or mis-configuration (that the driver didn't detect
at boot) stops the card from working properly. This typically
can be observed in several different ways. (1) You get
an error message when ifconfig
tries to open the device
for use, such as ``SIOCSFFLAGS: Try again''. (2) The driver
reports eth0
error messages (viewed by dmesg | more
)
or strange inconsistencies for each time it tries to send or
receive data. (3) Typing cat /proc/net/dev
shows
non-zero numbers in one of the errs, drop, fifo, frame or
carrier columns for eth0
. (4) Typing
cat /proc/interrupts
shows a zero interrupt count
for the card.
Most of the typical hardware configuration errors are also
discussed in the FAQ section.
Well, if you have got to this point and things still
aren't working, read the FAQ section
of this document, read the vendor specific section detailing
your particular card, and if it still doesn't work then
you may have to resort to posting to an appropriate
newsgroup for help. If you do post, please detail all
relevant information in that post, such as the card brand,
the kernel version, the driver boot messages, the output
from cat /proc/net/dev
, a clear description of
the problem, and of course what you
have already tried to do in an effort to get things to work.
You would be surprised at how many people post useless things like ``Can someone help me? My ethernet doesn't work.'' and nothing else. Readers of the newsgroups tend to ignore such silly posts, whereas a detailed and informational problem description may allow a `linux-guru' to spot your problem right away.