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-2 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
This present revision covers distribution kernels up to and including 2.0.33. Some information pertaining to development kernels up to version 2.1.82 is also included.
The Ethernet-Howto is by:
The primary source of information for the initial ASCII-only version of the Ethernet-Howto was:
Donald J. Becker,
who we should thank for writing the vast majority of ethernet card drivers that are presently available for Linux. He also is the original author of the NFS server too. Thanks Donald!
Net-surfers may wish to check out the following URL:
Please see the Disclaimer and Copying information at the end of this document for information about redistribution of this document and the usual `we are not responsible for what you do...' legal type mumblings.
New versions of this document can be retrieved via anonymous FTP from:
Sunsite HOWTO Archive
and various Linux 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, it is either out of date, or it means that I have been lazy and haven't updated it.
If you have sent me an update and it is not included in the next release, it probably means I've lost it amongst the ton of junk e-mail I get. Please re-send it (along with an abusive message) and I will try and make sure it gets included in the next release.
This document was produced by using the SGML system that was specifically set up for the Linux Howto project, and there are various output formats available, including, postscript, dvi, ascii, html, and soon TeXinfo.
I would recommend viewing it in the html (via a WWW browser) or the Postscript/dvi format. Both of these contain cross-references that are lost in the ascii translation.
If you want to get the official copy off sunsite, here is URL.
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.
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 your card does have a linux driver, you now need to go back to the CD-ROM or whatever you installed from, and find the list of pre-built kernels that comes with it. The kernel is the core operating system that is first loaded at boot, and contains drivers for various pieces of hardware, among other things. Just because linux has a driver for your card does not mean that it is built into every kernel. Depending on who made the CD-ROM, 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. Hopefully there will also be a text file with them that lists what drivers are included into which kernels. Try and find a kernel that is listed as having the driver you need as built into it, or try and find a module with the name of the driver you need.
If you found a pre-built kernel that has your driver in it, you will want to boot that kernel instead of the one you are presently using. Most linux systems use LILO to boot, and will have installed the LILO documentation on your system. Follow the instructions in that for booting another kernel, as they are beyond the scope of this document.
If you instead found a small module that contains the driver, 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
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. If you don't see a 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
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) that stops the card from working properly. This typically
can be observed in one of three 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
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
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
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.