Newsgroups: comp.os.linux.announce,comp.os.linux,news.answers,comp.answers
Path: gmd.de!xlink.net!howland.reston.ans.net!noc.near.net!uunet!pipex!
sunic!psinntp!psinntp!dg-rtp!usenet
From: m...@TC.Cornell.EDU (Matt Welsh)
Subject: Linux NET-2-FAQ
Summary: FAQ on configuration of TCP/IP networking and SLIP under Linux.
Sender: use...@dg-rtp.dg.com (Usenet Administration)
Message-ID: <1993Jul1.030259.28242@dg-rtp.dg.com>
Approved: linux-annou...@tc.cornell.edu (Matt Welsh)
Date: Thu, 1 Jul 93 03:02:59 GMT
Organization: Linux. It's not just for breakfast anymore.
Keywords: Linux, Networking, TCP/IP, NET-2, SLIP
Lines: 951
Archive-name: linux-faq/networking
Last-modified: 29 June 1993
It's here... the Linux NET-2-FAQ. This document explains how to
configure TCP/IP and SLIP with the new ``NET-2'' networking code
in Linux kernels 0.99.pl10 and above. Please mail me if you have
questions or comments. --mdw
This is the Linux NET-2-FAQ v1.0, 29 June 1993
By Matt Welsh <m...@tc.cornell.edu> and Terry Dawson <ter...@extro.ucc.su.oz.au>
*** FTP site maintainers: This document supercedes the previous Linux
*** NET-FAQ. Please name this file ``NET-2-FAQ'' on your site, possibly
*** aliasing it to ``NET-FAQ''. Thanks.
"Real Programmers don't write documentation." --Ancient Proverb
0. Introduction
This is the NET-2-FAQ, which is a rewrite of the earlier NET-FAQ for
the new NET-2 TCP/IP code in Linux kernels 0.99.pl10 and above.
The NET-2 code is the new kernel-based networking support for Linux,
written by Fred van Kempen <wal...@uwalt.nl.mugnet.org>. It is based
on the NET-1 code by Ross Biro <b...@leland.stanford.edu>, device
drivers by Donald Becker <bec...@super.org>, SLIP drivers by
Laurence Culhane <l...@holmes.demon.co.uk>, and the D-Link driver by
Bj0rn Ekwall <bj...@blox.se>. Many others too numerous to mention have
provided support, bug fixes, and help.
This NET-2-FAQ is by Matt Welsh and Terry Dawson. It covers setup and
configuration of TCP/IP under Linux using NET-2. It also hopefully
answers some of the many questions about the NET-2 code and common
problems that people have. It does not cover using TCP/IP (i.e.
using telnet, FTP, etc.) I'd like to keep this document as short as
possible... :)
0.1 Disclaimer
The NET-2 code is currently under development, which means that it may
not be as stable and easy to configure as you may like it to be. The
code is relatively new and bug fixes are being posted every day, so if
you run into a large number of problems just hang in there. The
software has stabilized greatly over the last few weeks (evidenced by
the fact that it's included in Linus' standard kernel).
NOTE: In this document, ``NET-2'' does not refer to the Berkeley
Software Distribution NET-2 release of BSD UNIX. Yes, the names
are conflicting. In this FAQ, ``NET-2'' refers only to the new
generation of TCP/IP code in the Linux kernel.
0.2 Questions already?
If you have questions about the NET-2 code, please READ this NET-2-FAQ
first and then join the NET channel of the Linux-activists mailing list
by sending mail to
linux-activists-requ...@niksula.hut.fi
with the line
X-Mn-Admin: join NET
at the top of the message body (not the subject). Note that the SLIP
channel of the mailing list has been disabled and the NET channel
should be used for SLIP discussions as well. Furthermore keep in mind
that the NET channel is for development discussions only. If you have
general configuration questions you can mail the authors of this FAQ
(m...@tc.cornell.edu and ter...@extro.ucc.su.oz.au) or post to the
newsgroup comp.os.linux. Please do NOT bug the NET-2 developers
directly unless you have a development-related issue (especially Fred:
he has to pay $$$ for his e-mail access). :)
0.3 Related documentation
There is a forthcoming book from the Linux Documentation Project
entitled ``Linux Network Administration Guide'' by Olaf Kirch. It
covers all aspects of setting up and using networking under Linux,
including TCP/IP, UUCP, mail, news, etc. Once this book is officially
released, it should supplement the NET-2-FAQ and cover all of the
other aspects of using TCP/IP. This guide simply covers setup of
NET-2, i.e., "How to put your machine on the net."
This NET-2-FAQ supercedes the earlier ``Linux NET-FAQ'' by Phil
Copeland and Matt Welsh. The NET-FAQ is for Linux kernels previous
to 0.99.pl10, running the older version of the TCP/IP code.
0.4 New versions of this document
New versions of this NET-2-FAQ can be retrieved via anonymous
FTP from sunsite.unc.edu:/pub/Linux/docs or directly from me
(m...@tc.cornell.edu). It will also be posted to the newsgroups
comp.os.linux.announce, comp.os.linux, and news.answers.
You can find news.answers FAQ postings, including this one, archived
on rtfm.mit.edu:/pub/usenet.
0.5 Feedback
Please send any comments, updates, suggestions, money, or small
household pets to m...@tc.cornell.edu. The sooner I get feedback
about this document, the sooner I can update and correct it. If you
find any problems with it, please mail me, instead of posting to
one of the newsgroups. I may miss your corrections. Thanks.
1. NET-2 Supported Functionality
The NET-2 code is a complete kernel implementation of TCP/IP for
Linux, including many features not found in the original networking
code. NET-2 supports many popular Ethernet cards, real IP routing,
and SLIP (Serial Line IP) for TCP/IP connections over the phone line
via modem.
1.1 Supported Ethernet cards
NET-2 supports the following Ethernet cards:
3com 3c503, 3c503/16
Novell NE1000, NE2000
Western Digital WD8003, WD8013
Hewlett Packard HP27245, HP27247, HP27250 (these drivers could
do with more testing)
The following clones are reported to work:
WD-80x3 clones: LANNET LEC-45
NE2000 clones: Alta Combo, Artisoft LANtastic AE-2, Asante Etherpak
2001/2003, D-Link Ethernet II, LTC E-NET/16 P/N 8300-200-002,
Network Solutions HE-203, SVEC 4 Dimension Ethernet, 4-Dimension
FD0490 EtherBoard 16.
As mentioned above NET-2 also supports SLIP in the kernel. Therefore
if you don't have an Ethernet connection you can do TCP/IP over the
phone line, provided you have a SLIP server nearby (many universities
and businesses provide SLIP access to employees/students) and a
compatible modem (usually 14.4 v.42bis, depending on your SLIP server).
Two possible modems are the US Robotics Sportster, or the Infotel
144DF Internal.
2. Getting the NET-2 Software
Before you can configure TCP/IP on your system you need to get the
appropriate software. This includes the current version of the Linux
kernel (0.99.pl10 or above), TCP/IP configuration programs and files
(e.g., /etc/ifconfig, /etc/hosts), and finally a set of network
application programs (such as telnet, ftp, rlogin, etc.).
The current kernel version is found in
nic.funet.fi:/pub/OS/Linux/PEOPLE/Linus/linux-0.99.10.tar.gz.
This is a gzipped tar file; .gz is the new extension used by gzip.
If you have the old version of gzip, "zcat foo.gz | tar xvf -" works.
The current libraries (libc-4.4.1), found in
sunsite.unc.edu:/pub/Linux/GCC/image-4.4.tar.z. (You'll probably want
to install the include files in inc-4.4.tar.z as well! See the
READMEs there for details.)
The current NET-2 configuration file distribution is in
tsx-11.mit.edu:/pub/linux/packages/net/net-2/sources/net/net-010.tar.z.
The TCP/IP application binaries and setup files are found in
tsx-11.mit.edu:/pub/linux/packages/net/net-2/binaries.
Get the three files in this directory: net-base.tar.z, net-std.tar.z,
and net-ext.tar.z.
2.1 Unpacking the software
First, unpack the kernel sources in /usr/src. This will put all
of the kernel sources under /usr/src/linux (the usual place).
# cd /usr/src
# zcat linux-0.99.10.tar.z | tar xvf -
Next, unpack the libraries.
# cd /
# zcat image-4.4.tar.z | tar xvf -
Now, make the links to the new libraries in /lib. BE VERY CAREFUL
that you do not delete the previous links. Do everything in
one step, as so:
# ln -sf /lib/libc.so.4.4 /lib/libc.so.4
# ln -sf /lib/libm.so.4.4 /lib/libm.so.4
Next, unpack the net-base package, which contains the basic
utils and configuration files in /etc. Note that net-base makes
symlinks in /etc for all of your TCP/IP configuration files to /conf.
Therefore, BE WARNED: Before you unpack the following tar files,
make a backup of your files in /etc. Unpacking net-base will overwrite
many of the files in /etc with symbolic links to other places.
For example, /etc/hosts is a symlink to /conf/net/hosts. Why is this
done? Because Fred's Linux/PRO distribution of Linux keeps all
machine-specific configuration files in /conf. And because this is
the way he does it, we may as well too. In general it makes things
easier to locate. If you want to keep all of your net files in
/etc, that's fine, but you'll have to put them there by hand.
Make a backup of everything in /etc before you unpack net-base.
Then unpack it from / (the root directory):
# cd /
# zcat net-base.tar.z | tar xvvofp -
Also, unpack net-std.tar.z, which contains the network clients and
daemons (e.g., telnet and telnetd). Unpack it from / as well:
# cd /
# zcat net-std.tar.z | tar xvvofp -
If you wish to use tin (a newsreader), or DIG (the DARPA Internet
Groper), unpack the net-ext package from /:
# cd /
# zcat net-ext.tar.z | tar xvvofp -
Finally, unpack the net-010 package, which contains the sources
for the TCP/IP setup programs (ifconfig, arp, route, etc.) and the
configuration files in /conf/net. This is unpacked into
/usr/src/net-010.
# mkdir /usr/src/net-010
# cd /usr/src/net-010
# zcat net-010.tar.z | tar xvvofp -
2.2 Putting things in the right place
Everything is now in the right place, but the configuration files
in /conf/net aren't there (only the symlinks to them in /etc).
The easiest way to get them is to copy them from the net-010
distribution:
# mkdir -p /conf/net
# chown -R root.root /conf; chmod -R 755 /conf
# cp /usr/src/net-010/etc/* /conf/net
You should make sure that all of the symlinks to /conf/net in /etc
can be resolved (that is, try to "more" or "cat" each file, make
sure you don't get any errors). Also note that some files will
be duplicated: for example, /etc/inetd.conf is a symlink to
/usr/etc/inetd.conf. However, from the cp command above you also
have a /conf/net/inetd.conf, which can be deleted (remember that
all of the programs still look in /etc, not /conf. So whatever is
in /etc is the file which is actually being used).
(Note: Fred tells me that in the next net-011 distribution the files
in /conf will be in the right place. But just in case I'll leave the
information above. :) --mdw)
2.3 Creating the device interfaces
You'll need to create several device special files in /dev for
use by NET-2. These are all created (as root) with the "mknod"
command. This command is given 4 arguments: the name of the
device interface (i.e. "/dev/net"), the type of device ("c" for
character, "b" for block, etc.), and the major and minor numbers
of the device driver (specified in the kernel).
For example, to create the device /dev/net, major 16, minor 0, use
the command
# mknod /dev/net c 16 0
NET-2 requires you to create several device driver interfaces in
/dev if you do not already have them. The commands below will
create these devices. You may not need all of them, but it can't
hurt to create them anyway.
# mknod /dev/net c 16 0
# mknod /dev/arp c 16 1
# mknod /dev/unix c 17 0
# mknod /dev/inet c 18 0
# mknod /dev/ip c 18 1
# mknod /dev/icmp c 18 2
# mknod /dev/tcp c 18 3
# mknod /dev/udp c 18 4
# mknod /dev/wd0 c 20 0
# mknod /dev/wd1 c 20 1
# mknod /dev/wd2 c 20 2
# mknod /dev/wd3 c 20 3
# mknod /dev/ec0 c 20 8
# mknod /dev/ec1 c 20 9
# mknod /dev/ec2 c 20 10
# mknod /dev/ec3 c 20 11
# mknod /dev/ne0 c 20 16
# mknod /dev/ne1 c 20 17
# mknod /dev/ne2 c 20 18
# mknod /dev/ne3 c 20 19
3. Building the Kernel
You're now ready to build the new 0.99.pl10 kernel with the NET-2
code enabled.
3.1 Configuring the NET-2 kernel code
First, you need to read and modify the file
/usr/src/linux/net/inet/CONFIG
which specifies the drivers used by the NET-2 code in the kernel.
Also see the various README files in /usr/src/linux/net/inet which
explain the format of these files.
One important line is the "CARDS=" definition, where you define
the drivers to compile into the kernel. For example, if you're
using the WD8003/WD8013 driver and the 3c503 driver, you'd set
the CARDS line to
CARDS = -DWD80x3 -DEL2
For SLIP, you'd set it to
CARDS = -DSLIP
You can also combine use of SLIP with some ethernet cards. With
creative use of routing, you could route packets between two networks
with a SLIP connection and an Ethernet card, or two Ethernet cards,
etc. Eventually this NET-2-FAQ will go into more detail about that.
You also need to set the "OPTS" and "WD_OPTS" lines to the
appropriate values. WD and SMC cards need to set EI8390 to your
base address (ex. -DEI8390=0x280) and EI8390_IRQ to your card's
IRQ (ex. -DEI8390_IRQ=15). One of the most common problems when using
network cards is an IRQ conflict. The IRQ and base address are
generally modifyable by jumpers on your card. Make sure that you're
not using an IRQ used by any other card in your machine.
Furthermore for WD and SMC cards you need to set WD_SHMEM to the
shared memory address. This is all very self-explanatory when you
look at the CONFIG file.
For all other cards, you can set EI8390 and EI8390_IRQ to 0, which
tells the driver to autoprobe for the IRQ and base address. If
this doesn't seem to work for you try defining them directly.
See the file CONFIG for a list of the other available options for
SLIP and other drivers. I don't want to go into too much detail
here since this tends to change from release to release. If you have
questions you can mail me (m...@tc.cornell.edu).
3.2 Building the kernel
After the /usr/src/linux/net/inet/CONFIG file is set up correctly,
you can build the kernel as you normally would (see the file
/usr/src/linux/README if you've never done this before). Essentially
this entails editing /usr/src/linux/Makefile to set root device and
default display mode. (*Note: keyboard is now handled by loadable
keymaps as of 0.99.pl10; grab the file keytable.tar.z from your
nearest Linux ftp site).
Next run make config. Make sure you answer "yes" to all three of
"TCP/IP Networking?", "NFS Support?" and "/proc filesystem support?".
Finally do 'make dep' and 'make'. You now have a new 0.99.10 kernel
with NET-2 set up. I wouldn't reboot it quite yet as we still have
to configure the NET-2 programs before it will work correctly.
4. Configuring NET-2 TCP/IP
The final step is to modify the various setup files to get NET-2
working. After this is ready you can boot your new kernel and
go happily netting (if all goes well).
In this section I'll describe each of the major TCP/IP setup files,
what they do, and what you need to do to configure them. Remember
that everything is *really* found in /conf/net but there are symlinks
in /etc. Therefore when I say "/etc/hosts" I'm also refering to
"/conf/net/hosts". They are the same file.
If you're using SLIP, see section 5.0 on configuring SLIP. The
discussion below is for Ethernet connections only. SLIP users
should FIRST read all of section 4.0 and then apply the changes
discussed in section 5.0.
4.1 Before you begin
Before you can configure NET-2 TCP/IP, you need to find out
the following information about your network setup. Your network
admins can tell you most of these things.
* IP address: this is the unique machine address in dotted-decimal
format. An example is 128.253.153.54. Your network admins will
provide you with this number.
If you're only configuring loopback mode (i.e. no SLIP, no ethernet
card, just TCP/IP connections to your own machine---called
"loopback") then your IP address is 127.0.0.1.
* Your network mask ('netmask'). Again, your network admins will
supply this. Most networks are class C subnetworks which use
255.255.255.0 as their netmask. Other Class B networks use
255.255.0.0. If one of these doesn't work, try the other. If this
doesn't work, ask your local net guru for help.
If you're only using loopback, you don't have a netmask.
* Your network address. This is your IP address masked with the netmask.
For example, if your netmask is 255.255.255.0, and your IP address
is 128.253.154.32, your network number (IP addr AND netmask) is
128.253.154.0. With a netmask of 255.255.0.0,
this would be 128.253.0.0.
If you're only using loopback, you don't have a net address.
* Your broadcast address. This is your IP address masked with the
netmask, and then possibly ANDed with 0.0.255.255 or 0.0.0.255
(depending on your network setup). For example, if your IP address
is 128.253.154.32, netmask 255.255.255.0, then your broadcast
address is probably either 128.253.154.0 (same as network address,
above) or 128.253.154.255. Your net admins will be able to tell
you if you need to use a broadcast address or not, and which one
to use.
If you're only using loopback, you don't have a broadcast address.
* Your gateway address. This is the address of the machine which
is your "gateway" to the outside world (i.e. machines not on your
subnet). In general the gateway machine has an IP address identical
to yours but with a ".1" in the last position; e.g. if your IP
address is 128.253.154.32, your gateway might be 128.253.154.1.
Your network admins will provide you with the IP address of your
gateway.
If you're only using loopback, you don't have a gateway address.
* Your nameserver address. Most machines on the net have a name
server which translates hostnames into IP addresses for them.
Your network admins will tell you the address of your name server.
You can in fact run a nameserver on your own machine by running
named, in which case the nameserver address is 127.0.0.1. However,
But it is not required that you run named at all; see section
4.2.2.1.
If you're only using loopback, you don't have a nameserver
address. (After all, you're only connecting to yourself.)
NET-2 supports full routing, with proxy ARP, multiple routes,
subnetworking, the whole nine yards. The above describes most basic
TCP/IP configurations. Yours may be quite differnent: when in doubt,
consult your local network gurus and check out the man pages for
"route" and "ifconfig" included with the net-010 package. Configuring
TCP/IP networks is very much beyond the scope of this FAQ; the above
should be enough to get most people started.
4.2 /etc/rc.d/rc.inet1 and /etc/rc.d/rc.inet2
For the non-UNIX wizard: "rc" files are run at bootup time by the
"init" program and start up all of the basic system programs, such
as sendmail, cron, etc. as well as the NET-2 daemons (such as inetd).
For NET-2 the rc files are found in /etc/rc.d. It doesn't really
matter where you keep them, as long as init can find them. (We'll
go into this later).
First things first. The file /etc/rc.d/rc.inet1 configures the basic
TCP/IP interface to your machine, using two programs: /etc/ifconfig
and /etc/route. These two programs tell the kernel how to route and
manage TCP/IP connections to your system, by setting things such as
the IP address, network mask, and so on.
Note that in the previous NET-1 code, the "config" program was
used. However, the "standard" for UNIX system TCP/IP configuration
is to use ifconfig and route, and this has been implemented with NET-2.
Below you're going to edit rc.inet1 to use the correct ifconfig and
route commands for your machine. But first, you need to know the
information about your network setup in section 4.1, above.
4.2.1 Editing rc.inet1
Edit the file /conf/net/rc.inet1. This file uses the "ifconfig" and
"route" commands to configure your network interface at boot time.
You may need to do some heavy surgery on this file to get it to look
right; it may be easier to delete it and start from scratch. Given
the information above, a possible rc.inet1 should look like:
#!/bin/sh
# rc.inet1: configure the network interface
HOSTNAME=`hostname`
# Attach the loopback device.
/etc/ifconfig lo 127.0.0.1
/etc/route add 127.0.0.1
# IF YOU HAVE AN ETHERNET CONNECTION, use these lines below to configure the
# eth0 interface. If you're only using loopback or SLIP, don't include the
# rest of the lines in this file.
# Edit for your setup.
IPADDR="128.253.154.32" # REPLACE with YOUR IP address!
NETMASK="255.255.255.0" # REPLACE with YOUR netmask!
NETWORK="128.253.154.0" # REPLACE with YOUR network address!
BROADCAST="128.253.154.255" # REPLACE with YOUR broadcast address, if you
# have one. If not, leave blank and edit below.
GATEWAY="128.253.154.1" # REPLACE with YOUR gateway address!
/etc/ifconfig eth0 ${IPADDR} netmask ${NETMASK} broadcast ${BROADCAST}
# If you don't have a broadcast address, change the above line to just:
# /etc/ifconfig eth0 ${IPADDR} netmask ${NETMASK}
/etc/route add ${IPADDR}
/etc/route add ${NETWORK}
/etc/route add default gw ${GATEWAY} metric 1
# End of rc.inet1
This is a basic rc.inet1 to run the ifconfig and route commands
needed to set up a basic TCP/IP connection. Edit this for your setup.
To ensure that this will be run at boot time, make sure that you
include the command
/bin/sh /etc/rc.d/rc.inet1
in your /etc/rc, or in your /etc/inittab (if you're running the
sysvinit package). In general, make sure that rc.inet1 is run
BEFORE rc.inet2 at boot time. You may wish to run rc.inet1 and
rc.inet2 from /etc/rc or /etc/rc.local. Or you can run them from
/etc/inittab. Either way is fine, but don't run one without the other.
4.2.2 Editing rc.inet2
The rc.inet2 script is also run at boot time, AFTER rc.inet1.
It starts up various TCP/IP daemons such as inetd, portmapper,
and so on.
You will probably want to comment out most of this file, especially
if you're not planning on using NFS (Network File System). You
MUST leave the stanza to run inetd and syslogd uncommented. Note
that if you DON'T uncomment everything but inetd and syslogd,
you may run into network problems at first. The best bet is to
comment all of these things out, get yourself on the network, and
then worry about configuring the rest of the clients in rc.inet2.
If you're not going to be using NFS, you can comment out the lines
to run: rpc.portmap, ugidd, mountd, routed, nfsd, pcnfsd, and bwnfsd.
You can comment out the stanza to run "umail" unless you have that
package. In general, most of the things found in rc.inet2 are "sold
separately". I would only start up inetd and syslog at first until you
get everything going.
4.2.2.1 "To named or not to named... that is the question."
Named is the nameserver daemon that runs under TCP/IP. It allows
your machine to serve the name lookup requests of other machines...
that is, if a machine wants to find the IP address for
"goober.norelco.com", and you have this machine's IP address in your
named database, then you can service the request and tell other
machines what goober's address is.
Under older implementations of Linux TCP/IP, to create aliases for
machine names (even for your own machine), you were required to run
named on your Linux box to store name->IP address translations. The
problem with this is that named is generally difficult to setup and
maintain. To solve this problem, a program called "hostcvt.build"
was made available on Linux systems to translate your /etc/hosts file
(see section 4.3) into named database files. However, even with
this problem out of the way, running named on your system will cause
some amount of CPU load and network traffic.
The bottom line is this: You DO NOT need to run named on your
Linux system. The SLS instructions will probably tell you to run
hostcvt.build to set up named. This is simply unnecessary, UNLESS
you want to make your Linux system a nameserver for some reason.
Now, instead of putting hostnames into the named database, you can
simply include them in the file /etc/hosts (section 4.3). When
looking up names, your Linux system will first look in /etc/hosts
and then ask the nameserver out on the net (if you have one).
The only reason you may want to run named would be if:
a) You're setting up a network of machines, and need a nameserver
for one of them (and don't have a nameserver out on the net
elsewhere);
b) Your network admins want you to run your Linux system as a
nameserver for some reason; or,
c) You have a slow SLIP connection, and want to run a small
cache-only nameserver on your Linux machine so that you don't
have to go out on the phone line every time a name lookup
occurs. (If you are only going to lookup a small number of
machine names, and you know what they are, you can put their
addresses in /etc/hosts instead.) Generally name lookup isn't
that slow, and should work fine over most SLIP connections.
d) You want to run a nameserver for fun and excitement.
In general, you DO NOT need to run named: this means that you
can comment it out from rc.inet2, and you don't have to run
hostcvt.build. If you want to alias machines, for example you want
to refer to "loomer.vpizza.com" just as "loomer", you can add an
alias in /etc/hosts instead. There is no reason to run named unless
you truly want a full nameserver on your machine. If you already
have a nameserver (most machines on the Internet do, and your net
admins will tell you its address), don't bother running named.
If you're only using loopback, you can run named and set your
nameserver address to 127.0.0.1, but that's pointless. (No pun
intended.) You don't need a nameserver at all if you use only
loopback; the only hostname you know is your own, and it's in
/etc/hosts (see section 4.3, below).
4.3 /etc/hosts
/etc/hosts contains a list of IP addresses and the hostnames they
map to. In this way, you can refer to other machines on the network
by name, as well as by IP address. Using a nameserver (see section 4.1)
also allows you to do the name->IP address translation automatically.
(Running named allows you to run your own nameserver on your Linux
box. See section 4.2.2.1 above.)
This file needs to contain at least an entry for 127.0.0.1 with
the name "localhost". If you're not only using loopback, you need
to contain an antry for your IP address, with your full hostname
(such as loomer.vpizza.com). You may also wish to include entries
for your gateway and network addresses.
For example, if "loomer.vpizza.com" has the IP address
"128.253.154.32", my /etc/hosts file would look like:
# /etc/hosts: List of hostnames and IP addresses
127.0.0.1 localhost
128.253.154.32 loomer.vpizza.com loomer
Once again, edit this for your own needs. If you're only using
loopback, the only line in /etc/hosts should be for 127.0.0.1, with
both "localhost" and your hostname after it.
Note that in the second line, above, there are two names for
128.253.154.32: "loomer.vpizza.com" and just "loomer". The first name
is the full hostname of the machine. The second is an alias---it
allows me to just use "rlogin loomer" without having to type in the
entire name.
4.3.1 Important note
The line "%%IP%% %%HOST%% %%ALIAS%%" needs to be deleted from
this file! This is a "tag" line used by Fred's experimental net
config scripts. I'm now writing a new set of scripts which don't
use these lines. In any of these files, you see curious lines with
entries such as "%%NAME%%", these lines can be deleted.
4.4 /etc/networks
The file /etc/networks contains known network addresses, much like
/etc/hosts contains known IP addresses. In general you only need
network addresses for loopback and your own local network (your
network address). For example, my network address is 128.253.154.0,
thus my /etc/networks looks like:
loopback 127.0.0.0
localnet 128.253.154.0
You don't need a localnet line if you're only using loopback.
4.5 /etc/host.conf
This file specifies how your system will lookup names.
It should contain the two lines:
order hosts,bind
multi
These two lines tell the resolve libraries to first check the
/etc/hosts file for any names to lookup, and then ask the nameserver
(if one is present). The "multi" entry allows you to have multiple
IP addresses for a given machine name in /etc/hosts.
This file comes from the implementation of the resolv+ bind
library for Linux. You can find further documentation in the
resolv+(8) man page (if you have the man page available).
4.6 /etc/resolv.conf
This file contains two types of entires: The addresses of your
nameservers (if any), and the name of your domain (if you have one).
If you're running your own nameserver (i.e., you're running named
on your Linux machine: see section 4.2.2.1), then the address of
your nameserver is just 127.0.0.1 (the loopback address).
Your domain name is your fully-qualified hostname (if you're a
registered machine on the Internet, for example), with the hostname
chopped off. That is, if your full hostname is loomer.vpizza.com,
your domain name is just "vpizza.com", without the hostname ("loomer").
For example, if your machine is goober.norelco.com, and has a
nameserver at the address 128.253.154.5, your /etc/resolv.conf would
look like:
domain norelco.com
nameserver 127.253.154.5
You can specify more than one nameserver (up to three?). Each one
must have a "nameserver" line of its own in resolv.conf.
If you're only using loopback, you don't have a nameserver.
4.7 /etc/HOSTNAME
This is a new file; it contains the full hostname of your machine
(with the domain name). For example, the machine above would have
the file /etc/HOSTNAME:
goober.norelco.com
That's all.
4.8 /etc/rc.local
Change the line in /etc/rc.local (or /etc/rc, depending on your
setup) which sets your system's hostname, to
/bin/hostname -S
(You have a new hostname in /bin.) This sets your hostname from
the name found in /etc/HOSTNAME. If you don't like this (personally
I don't), just do:
/bin/hostname -S <your-hostname>
For example,
/bin/hostname -S loomer.vpizza.com
It IS important that you give a full hostname (with domain name)
in /etc/HOSTNAME. This allows the hostname command to set the
host AND domainname in one shot.
IMPORTANT: The hostname found in /etc/HOSTNAME *must* be a valid
hostname. This means that it must be found in /etc/hosts (or that
your nameserver must be able to resolve it, but you should put it
in /etc/hosts in case your nameserver is down).
4.9 Other files
There are of course many other files in /etc which you may need to
dabble with later on. Instead of going into them here, I'm going to
provide the bare minimum to get you on the net. More information will
be provided in later versions of the NET-2-FAQ.
Once you have all of the files set up, and everything in the
right place, you should be able to reboot your new kernel and
net away to your heart's content. However, I strongly suggest
that you keep a bootable copy of your old kernel and even possibly
a "recovery disk" (say, the SLS a1 disk) in case you hosed your
/etc/rc files, for example, and can't login when you boot.
5. Configuring SLIP
SLIP (Serial Line Internet Protocol) allows you to use TCP/IP
over the phone line, with a modem (no need for an Ethernet card).
Of course, to use SLIP you'll need access to a dial-in SLIP server
in your area. Many universities and businesses provide SLIP access
all over the world.
Configuring SLIP is much like configuring an Ethernet interface
(please read section 4.0 above). However, there are a few key
differences.
First of all, dialing in and connecting to your SLIP server is
usually done at boot time, usually by a program called "dip"
(found in the "dip" subdir of the net-010 package). "Dip" not only
dials and logs you into the SLIP server, but it also initiates the
SLIP connection and runs the appropriate ifconfig and route commands
to initialize the device. Therefore, the only lines needed in
/etc/rc.d/rc.inet1 are the two commands to initilize the loopback
connection at the top (see section 4.2.1 above).
If you're not using DIP, you may indeed have to edit rc.inet1 for
your SLIP parameters.
Also, there are two types of SLIP servers: Dynamic IP address
servers and static IP address servers. Dynamic servers allocate
a new, different IP address to you every time you dialin and
initiate a connection. Static servers give you the same address
every time. Almost every SLIP server will also prompt you for
a username and password when dialing in: DIP can handle logging
you in automatically.
Essentially, configuring a SLIP connection is just like configuring
for loopback or ethernet. The main differences are discussed below.
Read section 4.0 above for information on configuring your TCP/IP
files, and apply the changes below.
5.1 Static SLIP server connections
If you have a static-allocation server (same IP address every time),
then you may want to put entries for your hostname and IP address
(since you know what your IP address is!) in /etc/hosts. You should
also configure the other files listed in section 4.0: rc.inet2,
host.conf, resolv.conf, /etc/HOSTNAME, and rc.local). Remember that
when configuring rc.inet1, you don't need to run the ifconfig and
route commands other than the two for the loopback interface (if
you're using DIP to dial your connection).
In general, your gateway is the IP address of your SLIP server.
Because DIP handles the configuration of the route, you probably
don't need to know this, but in some cases you might have to run the
appropriate ifconfig or route commands in /etc/rc.d/rc.inet1 to
get it to work correctly. Instead of using "eth0" as your interface
name, SLIP connections use "sl0". Keep in mind that you can't
ifconfig sl0 until you have dialed the connection and connected to
the SLIP server.
Also, you may need to use the "pointopoint" argument to ifconfig if
DIP does not do it correctly. For example, if your SLIP server's
address is 44.136.8.5, and your IP address is 128.253.154.32, you may
need to run the command
# /etc/ifconfig sl0 128.253.154.32 pointopoint 44.136.8.5
See the man pages for ifconfig in the net-010 package.
5.2 Dynamic SLIP server connections
If your SLIP server allocates a new IP address to you every time
you dialin, you don't know your IP address at all, so you can't
include an entry in /etc/hosts for your machine. (If you want, you
can place your hostname in /etc/hosts with the address 127.0.0.1).
Most dynamic SLIP servers tell you your IP address when you initiate
the connection. For example, it may print a string such as, "Your IP
address is 128.253.154.10. Server address is 128.253.154.1." DIP will
need to know these numbers when it configures the connection. See
section 5.3 below on using DIP.
If you use DIP, it does all of the work of configuring the
connection when you dialin, so rc.inet1 only needs the two lines
to configure the loopback address (see section 4.2.1 above).
Also, see section 5.1 above. You need to configure all of
the files listed in section 4.0. Your gateway address (should you
need to know it) will be the address of the SLIP server. Also,
you may need to run ifconfig on sl0 using the SLIP server's address
as the "pointopoint" argument (see section 5.1 above). However, if
you use DIP, it should be able to do all of the ifconfig and route
commands for you.
One good way to figure out how to configure SLIP on your machine is
to find someone else who uses the SLIP server (it can be on a PC,
Mac, UNIX box, whatever) and find out what numbers they use.
5.3 Using DIP
DIP can simplify the process of dialing into the SLIP server, logging
in, starting the connection, and configuring the sl0 device with
the appropriate ifconfig and route commands.
Essentially, to use DIP you'll write a "chat script" which is
basically a list of commands to send to DIP along with commands for
logging in, starting the connection, and so on. See "sample.dip"
in the net-010 package for an explanation. DIP is quite a powerful
program, with many options. Instead of going into all of them here
you should look at the READMEs and the sample files from tsx-11 and
the net-010 distribution.
You may notice that the sample.dip script assumes that you're using
a static SLIP server, so you know what your IP address is beforehand.
For dynamic SLIP servers, you'll probably need to use the command
"dip -t" and use the DIP "local" and "remote" commands by hand after
the SLIP server prints your IP address. For example,
loomer:~% dip -t
DIP>port cua0 (My modem is on /dev/cua0.)
DIP>speed 57600 (Set the baud rate.)
DIP>reset (Reset modem and terminal line.)
DIP>send att\r\n (Send modem init string...)
DIP>dial 2446000 (Dial SLIP server.)
DIP>term (Enter interactive mode.)
Welcome to Annex Server...
Annex login: mdw1
Annex password:
User mdw1 authenticated.
Annex> slip (From SLIP server prompt, give "slip" command to start
SLIP connection.)
SLIP inititated.
Your IP address is 128.254.254.10, server address is 128.254.254.1.
^] (Hit DIP break key to get back to DIP prompt.)
DIP> local 128.254.254.10 (Give local command to specify my IP address.)
DIP> remote 128.254.254.1 (Specify server's IP address.)
DIP> mtu 1500 (Set SLIP operating parameters... you may not need
to do this.)
DIP> mode SLIP (Start the SLIP mode from DIP.)
loomer:~%
Now we're running in SLIP mode, and everything should work. The command
# /etc/ifconfig sl0
will tell you the current interface parameters; you may need to set
some of these by hand if DIP didn't get the correctly. Also, some have
found that they need to use the route command to change their operating
parameters. DIP sets a route for the address of your SLIP server, but
you may need to delete this route and add it as your gateway instead.
For example, with a SLIP server address of 128.253.154.1, use the
commands:
# /etc/route del 128.253.154.1
# /etc/route add default gw 128.253.154.1
It should be simple to modify the code for DIP in the file attach.c
to run the route and ifconfig commands that work for you automatically.
Of course, typing all of those DIP commands may be time consuming. It
may be possible to write a DIP chat script to run all of the commands
up through dialing the connection and logging in, and then "exit" the
script to let you type the "local" and "remote" commands by hand.
Furthermore, there are patches for DIP by Paul Mossip
(mos...@vizlab.rutgers.edu) which modify the "get" command to grab
the IP address of your host and the server from the output of
the SLIP server. This should allow you to do all of the dialing and
configuration within a chat script just as you would with static
SLIP servers. This patch was recently posted to comp.os.linux.announce.
(Check the c.o.l.a archives on sunsite.unc.edu.)
Fred is planning to modify DIP for easier use by those with dynamic
SLIP servers (including the above patch) soon.
You'll have to play with various values for your routes and gateways
to get everything going correctly. If you have any information on how
you configured your SLIP interface, please drop me a note
(m...@tc.cornell.edu). Include info on your SLIP address, server address,
gateway, and so on, and what commands you used to set up SLIP. There
are various possible configurations for SLIP servers and I'd like to
update this NET-2-FAQ with as many hints as possible. :)
6. Are You Stuck?
Really? Then you should read the man pages for ifconfig and route,
included in the net-010 package, and understand their functions. These
commands have a lot of flexibility, and because everyone's network
setup is different, you may find a way to use ifconfig and route to
get your connection working. If you do, feel free to send me some mail
so I can include it in the next update of the NET-2-FAQ. Because of
my limited amount of experimental data, most of the discussion above
is about my own setup, and I'd like to generalize it as much as
possible.
I'm currently writing a set of scripts to simplify NET-2 configuration.
You can pick up the pre-alpha release from tc.cornell.edu, in the file
/pub/mdw/netconf-0.3.tar.z. These scripts maintain a small database of
network configuration info, and allow you to easily modify and
configure your network interface. The scripts are far from complete:
I've been waiting until the NET-2 interface itself stabilizes a bit
more before upgrading it further.
Another good place to look for help on setting up NET-2 is the
O'Reilly and Associated book ``TCP/IP Network Administration''...
the one with the crab on the cover. Keep in mind that NET-2 is now
a "standard" implementation of TCP/IP---this means that ifconfig
and route work the same under Linux as they do on other UNIX systems.
Also keep in mind that NET-2 _is_ developing very rapidly---it's
one of the newest additions to the Linux kernel. Thus, all of the
bugs haven't been worked out yet, so there may be some problems.
However, a good rule of thumb is that if you were able to get TCP/IP
working under kernels before 0.99.pl10, you should be able to get it
working under NET-2 as well. There are still some issues dealing with
performance to be fixed, but overall the system works. And, as with
everything in Linux development, time will cure what ails NET-2.
If it's absolutely unusable to you, go back to an earlier kernel
version, and wait until things develop further. The code is still
very new.
7. Miscellaneous
I'm sure that I've missed something. This NET-2-FAQ was thrown
together with the help of Terry Dawson and Jeff Uphoff. (A vain
attempt to spread the blame.) Hopefully it will help someone
out there get going with networking under Linux.
Future plans for the NET-2-FAQ include a section on setting up
your own Linux LAN (with SLIP and/or Ethernet), adventures in
routing, and the use of netstat and other network administration
under Linux. For now, the information here should be more than
enough. :)
If you have questions about setting up NET-2, feel free to mail me, or
if you have any corrections, additions, or errata for this NET-2-FAQ,
send me any and all changes (cdiffs are nice, but I'm flexible).
Of course, thanks to Fred, Linus, Ross, Phil, Paul, Don, and everyone
else who helped to develop the NET-2 code and work on previous
versions of TCP/IP for Linux and the NET-FAQ. (Sorry, Phil, I lost
your phone number.) Finally, Linux has a complete implementation of
TCP/IP. It may not be for everyone yet. But for those who want to
do some hacking---here it is.
Cheers,
Matt Welsh, m...@tc.cornell.edu
Matt Welsh, m...@tc.cornell.edu, wel...@dg-rtp.dg.com
Radioactive decay ain't what it used to be.
Path: gmd.de!xlink.net!howland.reston.ans.net!noc.near.net!uunet!think.com!
rpi!batcomputer!not-for-mail
From: m...@TC.Cornell.EDU (Matt Welsh)
Newsgroups: comp.os.linux
Subject: NET-2-FAQ draft release
Date: 26 Jun 1993 20:32:10 -0400
Organization: Linux. It's not just for breakfast anymore.
Lines: 747
Distribution: world
Message-ID: <20ipqa$1bs@theory.TC.Cornell.EDU>
NNTP-Posting-Host: theory.tc.cornell.edu
This is a DRAFT release of the NET-2-FAQ. Please MAIL comments, my USENET
access has been flaky at best. :)
I was planning to put off posting this until I received feedback from the
NET folks, but I'm afraid it can't wait. Even if this is incomplete, it
has to help somebody. :)
PLEASE---this is a draft release. I need to get feedback from other folks on
their own experiences installing NET-2; i.e. what things they did differently
from the instructions here, any gotchas or caveats that I forgot to mention,
any other hints, etc. At the very least, if you read this doc, please send me
a rating from 1 to 10 on how useful you think it is.
As soon as I have some feedback I will post an official version with
updates... hopefully in 2 or 3 days. Look for it in comp.os.linux.announce,
the NET channel, on the various Linux FTP sites... and, soon to be a major
motion picture! (``Jurassic Kernel'', of course.)
Please send any comments or suggestions ASAP. Thanks!
mdw
--
This is the Linux NET-2-FAQ v0.1, 26 June 1993
By Matt Welsh <m...@tc.cornell.edu> and Terry Dawson <ter...@extro.ucc.su.oz.au>
"Real Programmers don't write documentation." --Ancient Proverb
0. Introduction
This is the NET-2-FAQ, which is a rewrite of the earlier NET-FAQ for
the new NET-2 TCP/IP code in Linux kernels 0.99.pl10 and above.
The NET-2 code is the new kernel-based networking support for Linux,
written by Fred van Kempen <wal...@uwalt.nl.mugnet.org>. It is based
on the NET-1 code by Ross Biro <b...@leland.stanford.edu>, device
drivers by Donald Becker <bec...@super.org>, and SLIP drivers by
Laurence Culhane <l...@holmes.demon.co.uk>. Many others too numerous
to mention have provided support, bug fixes, and help.
This NET-2-FAQ is by Matt Welsh and Terry Dawson. It covers setup and
configuration of TCP/IP under Linux using NET-2. It also hopefully
answers some of the many questions about the NET-2 code and common
problems that people have. It does not cover using TCP/IP (i.e.
using telnet, FTP, etc.) I'd like to keep this document as short as
possible... :)
DISCLAIMER: The NET-2 code is currently under development, which means
that it may not be as stable and easy to configure as you may like it
to be. The code is relatively new and bug fixes are being posted every
day, so if you run into a large number of problems just hang in there.
The software has stabilized greatly over the last few weeks (evidenced
by the fact that it's included in Linus' standard kernel).
If you have questions about the NET-2 code, please READ this NET-2-FAQ
first and then join the NET channel of the Linux-activists mailing list
by sending mail to
linux-activists-requ...@niksula.hut.fi
with the line
X-Mn-Admin: join NET
at the top of the message body (not the subject). Note that the SLIP
channel of the mailing list has been disabled and the NET channel
should be used for SLIP discussions as well. Furthermore keep in mind
that the NET channel is for development discussions only. If you have
general configuration questions you can mail the authors of this FAQ
(m...@tc.cornell.edu and ter...@extro.ucc.su.oz.au) or post to the
newsgroup comp.os.linux. Please do NOT bug the NET-2 developers
directly unless you have a development-related issue (especially Fred:
he has to pay $$$ for his e-mail access). :)
There is a forthcoming book from the Linux Documentation Project
entitled ``Linux Network Administration Guide'' by Olaf Kirch. It
covers all aspects of setting up and using networking under Linux,
including TCP/IP, UUCP, mail, news, etc. Once this book is officially
released, it should suppliment the NET-2-FAQ and cover all of the
other aspects of using TCP/IP. This guide simply covers setup of
NET-2, i.e., "How to put your machine on the net."
New versions of this NET-2-FAQ and be retrieved via anonymous
FTP from sunsite.unc.edu:/pub/Linux/docs or directly from me
(m...@tc.cornell.edu). It will also be posted to the newsgroups
comp.os.linux.announce, comp.os.linux, and news.answers.
1. NET-2 Supported Functionality
The NET-2 code is a complete kernel implementation of TCP/IP for
Linux, including many features not found in the original networking
code. NET-2 supports many popular Ethernet cards, real IP routing,
and SLIP (Serial Line IP) for TCP/IP connections over the phone line
via modem.
1.1 Supported Ethernet cards
NET-2 supports the following Ethernet cards:
3com 3c503, 3c503/16
Novell NE1000, NE2000
Western Digital WD8003, WD8013
Hewlett Packard HP27245, HP27247, HP27250 (these drivers could
do with more testing)
The following clones are reported to work:
WD-80x3 clones: LANNET LEC-45
NE2000 clones: Alta Combo, Artisoft LANtastic AE-2, Asante Etherpak
2001/2003, D-Link Ethernet II, LTC E-NET/16 P/N 8300-200-002,
Network Solutions HE-203, SVEC 4 Dimension Ethernet, 4-Dimension
FD0490 EtherBoard 16.
As mentioned above NET-2 also supports SLIP in the kernel. Therefore
if you don't have an Ethernet connection you can do TCP/IP over the
phone line, provided you have a SLIP server nearby (many universities
and businesses provide SLIP access to employees/students) and a
compatible modem (usually 14.4 v.42bis, depending on your SLIP server).
I recommend the Infotel 144DF Internel v.32bis modem (about US$189) for
most SLIP servers.
2. Getting the NET-2 Software
Before you can configure TCP/IP on your system you need to get the
appropriate software. This includes the current version of the Linux
kernel (0.99.pl10 or above), TCP/IP configuration programs and files
(e.g., /etc/ifconfig, /etc/hosts), and finally a set of network
application programs (such as telnet, ftp, rlogin, etc.).
The current kernel version is found in
nic.funet.fi:/pub/os/linux/PEOPLE/Linus/linux-0.99.10.tar.z.
The current libraries (libc-4.4.1), found in
sunsite.unc.edu:/pub/Linux/GCC/image-4.4.tar.z. (You'll probably want
to install the include files in inc-4.4.tar.z as well! See the
READMEs there for details.)
The current NET-2 configuration file distribution is in
tsx-11.mit.edu:/pub/linux/packages/net/sources/net/net-010.tar.z.
The TCP/IP application binaries and setup files are found in
tsx-11.mit.edu:/pub/linux/packages/net/net-2. Get the three
files in this directory: net-base.tar.z, net-std.tar.z, and
net-ext.tar.z.
2.1 Unpacking the software
First, unpack the kernel sources in /usr/src. This will put all
of the kernel sources under /usr/src/linux (the usual place).
# cd /usr/src
# zcat linux-0.99.10.tar.z | tar xvf -
Next, unpack the libraries.
# cd /
# zcat image-4.4.tar.z | tar xvf -
Now, make the links to the new libraries in /lib. BE VERY CAREFUL
that you do not delete the previous links. Do everything in
one step, as so:
# ln -sf /lib/libc.so.4.4 /lib/libc.so.4
# ln -sf /lib/libm.so.4.4 /lib/libm.so.4
Next, unpack the net-base package, which contains the basic
utils and configuration files in /etc. Note that net-base makes
symlinks in /etc for all of your TCP/IP configuration files to /conf.
For example, /etc/hosts is a symlink to /conf/net/hosts. Why is this
done? Because Fred's Linux/PRO distribution of Linux keeps all
machine-specific configuration files in /conf. And because this is
the way he does it, we may as well too. In general it makes things
easier to locate. If you want to keep all of your net files in
/etc, that's fine, but you'll have to put them there by hand.
You may wish to make a backup of everything in /etc before you unpack
net-base. Just unpack it from / (the root directory):
# cd /
# zcat net-base.tar.z | tar xvvofp -
Also, unpack net-std.tar.z, which contains the network clients and
damons (e.g., telnet and telnetd). Unpack it from / as well:
# cd /
# zcat net-std.tar.z | tar xvvofp -
If you wish to use tin (a newsreader), unpack the net-ext package
from /:
# cd /
# zcat net-ext.tar.z | tar xvvofp -
Finally, unpack the net-010 package, which contains the sources
for the TCP/IP setup programs (ifconfig, arp, route, etc.) and the
configuration files in /conf/net. This is unpacked into
/usr/src/net-010.
# mkdir /usr/src/net-010
# cd /usr/src/net-010
# zcat net-010.tar.z | tar xvvofp -
2.2 Putting things in the right place
Everything is now in the right place, but the configuration files
in /conf/net aren't there (only the symlinks to them in /etc).
The easiest way to get them is to copy them from the net-010
distribution:
# mkdir -p /conf/net
# chown -R root.root /conf; chmod -R 755 /conf
# cp /usr/src/net-010/etc/* /conf/net
You should make sure that all of the symlinks to /conf/net in /etc
can be resolved (that is, try to "more" or "cat" each file, make
sure you don't get any errors). Also note that some files will
be duplicated: for example, /etc/inetd.conf is a symlink to
/usr/etc/inetd.conf. However, from the cp command above you also
have a /conf/net/inetd.conf, which can be deleted (remember that
all of the programs still look in /etc, not /conf. So whatever is
in /etc is the file which is actually being used).
(Note: Fred tells me that in the next net-011 distribution the files
in /conf are in the right place. But just in case I'll leave the
information above. :) --mdw)
3. Building the Kernel
You're now ready to build the new 0.99.pl10 kernel with the NET-2
code enabled.
3.1 Configuring the NET-2 kernel code
First, you need to read and modify the file
/usr/src/linux/net/inet/CONFIG
which specifies the drivers used by the NET-2 code in the kernel.
Also see the various README files in /usr/src/linux/net/inet which
explain the format of these files.
One important line is the "CARDS=" definition, where you define
the drivers to compile into the kernel. For example, if you're
using the WD8003/WD8013 driver and the 3c503 driver, you'd set
the CARDS line to
CARDS = -DWD80x3 -DEL2
For SLIP, you'd set it to
CARDS = -DSLIP
You also need to set the "OPTS" and "WD_OPTS" lines to the
appropriate values. WD and SMC cards need to set EI8390 to your
base address (ex. -DEI8390=0x280) and EI8390_IRQ to your card's
IRQ (ex. -DEI8390_IRQ=15). One of the most common problems when using
network cards is an IRQ conflict. The IRQ and base address are
generally modifyable by jumpers on your card. Make sure that you're
not using an IRQ used by any other card in your machine.
Furthermore for WD and SMC cards you need to set WD_SHMEM to the
shared memory address. This is all very self-explanatory when you
look at the CONFIG file.
For all other cards, you can set EI8390 and EI8390_IRQ to 0, which
tells the driver to autoprobe for the IRQ and base address. If
this doesn't seem to work for you try defining them directly.
See the file CONFIG for a list of the other available options for
SLIP and other drivers. I don't want to go into too much detail
here since this tends to change from release to release. If you have
questions you can mail me (m...@tc.cornell.edu).
3.2 Building the kernel
After the /usr/src/linux/net/inet/CONFIG file is set up correctly,
you can build the kernel as you normally would (see the file
/usr/src/linux/README if you've never done this before). Essentially
this entails editing /usr/src/linux/Makefile to set root device and
default display mode. (*Note: keyboard is now handled by loadable
keymaps as of 0.99.pl10; grab the file keytable.tar.z from your
nearest Linux ftp site).
Next run make config. Make sure you answer "yes" to all three of
"TCP/IP Networking?", "NFS Support?" and "/proc filesystem support?".
Finally do 'make dep' and 'make'. You now have a new 0.99.10 kernel
with NET-2 set up. I wouldn't reboot it quite yet as we still have
to configure the NET-2 programs before it will work correctly.
4. Configuring NET-2 TCP/IP
The final step is to modify the various setup files to get NET-2
working. After this is ready you can boot your new kernel and
go happily netting (if all goes well).
In this section I'll describe each of the major TCP/IP setup files,
what they do, and what you need to do to configure them. Remember
that everything is *really* found in /conf/net but there are symlinks
in /etc. Therefore when I say "/etc/hosts" I'm also refering to
"/conf/net/hosts". They are the same file.
If you're using SLIP, see section 5.0 on configuring SLIP. The
discussion below is for Ethernet connections only. So, SLIP users:
skip all of part 4.0 and go directly to part 5.0.
4.1 /etc/rc.d/rc.inet1 and /etc/rc.d/rc.inet2
For the non-UNIX wizard: "rc" files are run at bootup time by the
"init" program and start up all of the basic system programs, such
as sendmail, cron, etc. as well as the NET-2 daemons (such as inetd).
For NET-2 the rc files are found in /etc/rc.d. It doesn't really
matter where you keep them, as long as init can find them. (We'll
go into this later).
First things first. The file /etc/rc.d/rc.inet1 configures the basic
TCP/IP interface to your machine, using two programs: /etc/ifconfig
and /etc/route. These two programs tell the kernel how to route and
manage TCP/IP connections to your system, by setting things such as
the IP address, network mask, and so on.
Note that in the previous NET-1 code, the "config" program was
used. However, the "standard" for UNIX system TCP/IP configuration
is to use ifconfig and route, and this has been implemented with NET-2.
Below you're going to edit rc.inet1 to use the correct ifconfig and
route commands for your machine. But first, you need to know the
following information about your network setup:
* IP address: this is the unique machine address in dotted-decimal
format. An example is 128.253.153.54. Your network admins will
provide you with this number. If you're only configuring loopback
mode (i.e. no SLIP, no ethernet card, just TCP/IP connections
to your own machine---called "loopback") then your IP address is
127.0.0.1.
* Your network mask ('netmask'). Again, your network admins will
supply this. Most networks are class C subnetworks which use
255.255.255.0 as their netmask. Other Class B networks use
255.255.0.0. If one of these doesn't work, try the other. If this
doesn't work, ask your local net guru for help.
* Your network address. This is your IP address masked with the netmask.
For example, if your netmask is 255.255.255.0, and your IP address
is 128.253.154.32, your network number (IP addr AND netmask) is
128.253.154.0. With a netmask of 255.255.0.0, this would be 128.253.0.0.
* Your gateway address. This is the address of the machine which
is your "gateway" to the outside world (i.e. machines not on your
subnet). In general the gateway machine has an IP address identical
to yours but with a ".1" in the last position; e.g. if your IP
address is 128.253.154.32, your gateway might be 128.253.154.1.
Your network admins will provide you with the IP address of your
gateway.
NET-2 supports full routing, with proxy ARP, multiple routes, subnetworking,
the whole nine yards. The above describes most basic TCP/IP configurations.
Yours may be quite differnent: when in doubt, consult your local network
gurus and check out the man pages for "route" and "ifconfig" included with
the net-010 package. Configuring TCP/IP networks is very much beyond the
scope of this FAQ; the above should be enough to get most people started.
4.1.1 Editing rc.inet1
Edit the file /conf/net/rc.inet1. This file uses the "ifconfig" and
"route" commands to configure your network interface at boot time.
You may need to do some heavy surgery on this file to get it to look
right; it may be easier to delete it and start from scratch. Given
the information above, a possible rc.inet1 should look like:
#!/bin/sh
# rc.inet1: configure the network interface
HOSTNAME=`hostname`
# Attach the loopback device.
/etc/ifconfig lo 127.0.0.1
/etc/route add 127.0.0.1
# IF YOU HAVE AN ETHERNET CONNECTION, use these lines below to configure the
# eth0 interface. If you're only using loopback or SLIP, don't include these
# lines.
# Edit for your setup.
IPADDR="128.253.154.32" # REPLACE with YOUR IP address!
NETMASK="255.255.255.0" # REPLACE with YOUR netmask!
NETWORK="128.253.154.0" # REPLACE with YOUR network address!
GATEWAY="128.253.154.1" # REPLACE with YOUR gateway address!
/etc/ifconfig eth0 ${IPADDR} netmask ${NETMASK}
/etc/route add ${IPADDR}
/etc/route add ${NETWORK}
/etc/route add default gw ${GATEWAY} metric 1
# End of rc.inet1
This is a basic rc.inet1 to run the ifconfig and route commands
needed to set up a basic TCP/IP connection. Edit this for your setup.
To ensure that this will be run at boot time, make sure that you
include the command
/bin/sh /etc/rc.d/rc.inet1
in your /etc/rc, or in your /etc/inittab (if you're running the
sysvinit package).
4.1.2 Editing rc.inet2
The rc.inet2 script is also run at boot time, AFTER rc.inet1.
It starts up various TCP/IP daemons such as inetd, portmapper,
and so on.
You will probably want to comment out most of this file, especially
if you're not planning on using NFS (Network File System). You
MUST leave the stanza to run inetd and syslogd uncommented.
If you're not going to be using NFS, you can comment out the lines
to run: rpc.portmap, ugidd, mountd, routed, nfsd, pcnfsd, and bwnfsd.
Most of these aren't included with NET-2 anyway. You can comment
out the stanza to run "umail" unless you have that package. In general,
most of the things found in rc.inet2 are "sole separately". I would
only start up inetd and syslog at first until you get everything
going.
NOTE: You do NOT need to run named. Named allows your machine to act
as a name server. Most machines on the net have a nameserver
available to them (your network admins can tell you the address).
Because named uses some system resources and waste CPU and network
time if you already have a nameserver, I suggest that you don't run
named unless you don't have a nameserver or are on a local network
that's not connected to the outside world.
Therefore In most cases you can safely comment out the stanza to run
named in rc.inet2. There's no reason to run it unless you don't
have a nameserver out on the net. (Which you probably do.)
4.2 /etc/hosts
/etc/hosts contains a list of IP addresses and the hostnames they
map to. In this way, you can refer to other machines on the network
by name, as well as by IP address. Using a nameserver (see section 4.3)
also allows you to do the name->IP address translation automatically.
This file needs to contain at least an entry for "127.0.0.1" with
the name "loopback". You may also wish to include entries for
your gateway and network addresses.
If you have an Ethernet connection, you need to include an entry
for your own machine, with your full hostname (if you have one) and
the alias "localhost". For example, if "loomer.vpizza.com" has the
IP address "128.253.154.32", my /etc/hosts file would look like:
# /etc/hosts: List of hostnames and IP addresses
127.0.0.1 loopback
128.253.154.32 loomer loomer.vpizza.com localhost
Once again, edit this for your own needs.
The line "%%IP%% %%HOST%% %%ALIAS%%" can be deleted from
this file! This is a "tag" line used by Fred's experimental net
config scripts. I'm now writing a new set of scripts which don't
use these lines. In any of these files, you see curious lines with
entries such as "%%NAME%%", these lines can be deleted.
4.3 /etc/networks
The file /etc/networks contains known network addresses, much like
/etc/hosts contains known IP addresses. In general you only need
network addresses for loopback and your own local network (your
network address). For example, my network address is 128.253.154.0,
thus my /etc/networks looks like:
loopback 127.0.0.0
localnet 128.253.154.0
4.4 /etc/host.conf
This file specifies how your system will lookup names.
It should contain the two lines:
order hosts,bind
multi
These two lines tell the resolve libraries to first check the
/etc/hosts file for any names to lookup, and then ask the nameserver
(if one is present). The "multi" entry allows you to have multiple
names on one line in the /etc/hosts file, as above in section 4.2.
4.5 /etc/resolv.conf
This file contains two entries: The address of your nameserver
(if any), and the name of your domain (if you have one). If you
are running your own nameserver (i.e., you're running named on your
own machine), then the nameserver address is your own IP address
(or 127.0.0.1 for loopback machines).
Your domain name is your fully-qualified hostname (if you're a
registered machine on the Internet, for example), with the hostname
chopped off. That is, if your full hostname is loomer.vpizza.com,
your domain name is just "vpizza.com", without the hostname ("loomer").
For example, if your machine is goober.norelco.com, with a nameserver
address of 128.253.154.5, your /etc/resolv.conf would be:
nameserver 127.253.154.5
domain norelco.com
4.6 /etc/HOSTNAME
This is a new file; it contains the hostname of your machine (without
the domain name). For example, the machine above would have the
file /etc/HOSTNAME:
goober
That's all.
4.7 /etc/rc.local
Change the line in /etc/rc.local (or /etc/rc, depending on your
setup) which sets your system's hostname, to
/bin/hostname -S
(You have a new hostname in /bin.) This sets your hostname from
the name found in /etc/HOSTNAME. If you don't like this (personally
I don't), just do:
/bin/hostname -S <your-hostname>
For example,
/bin/hostname -S loomer
4.8 Other files
There are of course many other files in /etc which you may need to
dabble with later on. Instead of going into them here, I'm going to
provide the bare minimum to get you on the net. More information will
be provided in later versions of the NET-2-FAQ.
Once you have all of the files set up, and everything in the
right place, you should be able to reboot your new kernel and
net away to your heart's content. However, I strongly suggest
that you keep a bootable copy of your old kernel and even possibly
a "recovery disk" (say, the SLS a1 disk) in case you hosed your
/etc/rc files, for example, and can't login when you boot.
5. Configuring SLIP
SLIP (Serial Line Internet Protocol) allows you to use TCP/IP
over the phone line, with a modem (no need for an Ethernet card).
Of course, to use SLIP you'll need access to a dial-in SLIP server
in your area. Many universities and businesses provide SLIP access
all over the world.
Configuring SLIP is much like configuring an Ethernet interface
(please read section 4.0 above). However, there are a few key
differences.
First of all, dialing in and connecting to your SLIP server is
usually done at boot time, usually by a program called "dip"
(found in the "dip" subdir of the net-010 package). "Dip" not only
dials and logs you into the SLIP server, but it also initiates the
SLIP connection and runs the appropriate ifconfig and route commands
to initialize the device. Therefore, the only lines needed in
/etc/rc.d/rc.inet1 are the two commands to initilize the loopback
connection at the top (see section 4.1.1 above).
If you're not using DIP, you may indeed have to edit rc.inet1 for
your SLIP parameters.
Also, there are two types of SLIP servers: Dynamic IP address
servers and static IP address servers. Dynamic servers allocate
a new, different IP address to you every time you dialin and
initiate a connection. Static servers give you the same address
every time. Almost every SLIP server will also prompt you for
a username and password when dialing in: DIP can handle logging
you in automatically.
Essentially, configuring a SLIP connection is just like configuring
for loopback or ethernet. The main differences are discussed below.
Read section 4.0 above for information on configuring your TCP/IP
files, and apply the changes below.
5.1 Static SLIP server connections
If you have a static-allocation server (same IP address every time),
then you may want to put entries for your hostname and IP address
(since you know what your IP address is!) in /etc/hosts. You should
also configure the other files listed in section 4: rc.inet2,
host.conf, resolv.conf, /etc/HOSTNAME, and rc.local). Remember that
when configuring rc.inet1, you don't need to run the ifconfig and
route commands other than the two for the loopback interface (if
you're using DIP to dial your connection).
In general, your gateway is the IP address of your SLIP server.
Because DIP handles the configuration of the route, you probably
don't need to know this, but in some cases you might have to run the
appropriate ifconfig or route commands in /etc/rc.d/rc.inet1 to
get it to work correctly. Instead of using "eth0" as your interface
name, SLIP connections use "sl0". Keep in mind that you can't
ifconfig sl0 until you have dialed the connection and connected to
the SLIP server.
Also, you may need to use the "dstaddr" argument to ifconfig for
some SLIP servers. For example, if your SLIP server's address is
44.136.8.5, and your IP address is 128.253.154.32, you may need to
run the command
/etc/ifconfig sl0 128.253.154.32 dstaddr 44.136.8.5
See the man pages for ifconfig in the net-010 package.
5.2 Dynamic SLIP server connections
If your SLIP server allocates a new IP address to you every time
you dialin, you don't know your IP address at all, so you can't
include an entry in /etc/hosts for your machine. (If you want, you
can place your hostname in /etc/hosts with the loopback address
127.0.0.1).
Most dynamic SLIP servers tell you your IP address when you initiate
the connection. For example, it may print a string such as, "Your IP
address is 128.253.154.10. Server address is 128.253.154.1." DIP will
need to know these numbers when it configures the connection. See
section 5.3 below on using DIP.
If you use DIP, it does all of the work of configuring the
connection when you dialin, so rc.inet1 only needs the two lines
to configure the loopback address (see section 4.1.1 above).
Also, see section 5.1 above. You need to configure all of
the files listed in section 4.0. Your gateway address (should you
need to know it) will be the address of the SLIP server. Also,
you may need to run ifconfig on sl0 using the SLIP server's address
as the "dstaddr" argument (see section 5.1 above). However, if you
use DIP, it should be able to do all of the ifconfig and route
commands for you.
One good way to figure out how to configure SLIP on your machine is
to find someone else who uses the SLIP server (it can be on a PC,
Mac, UNIX box, whatever) and find out what numbers they use.
5.3 Using DIP
DIP can simplify the process of dialing into the SLIP server, logging
in, starting the connection, and configuring the sl0 device with
the appropriate ifconfig and route commands.
Essentially, to use DIP you'll write a "chat script" which is
basically a list of commands to send to DIP along with commands for
logging in, starting the connection, and so on. See "sample.dip"
in the net-010 package for an explanation. DIP is quite a powerful
program, with many options. Instead of going into all of them here
you should look at the READMEs and the sample files from tsx-11 and
the net-010 distribution.
You may notice that the sample.dip script assumes that you're using
a static SLIP server, so you know what your IP address is beforehand.
For dynamic SLIP servers, you'll probably need to use the command
"dip -t" and use the DIP "local" and "remote" commands by hand after
the SLIP server prints your IP address. For example,
loomer:~% dip -t
DIP>port cua0 (My modem is on /dev/cua0.)
DIP>speed 57600 (Set the baud rate.)
DIP>reset (Reset modem and terminal line.)
DIP>send att\r\n (Send modem init string...)
DIP>dial 2446000 (Dial SLIP server.)
DIP>term (Enter interactive mode.)
Welcome to Annex Server...
Annex login: mdw1
Annex password:
User mdw1 authenticated.
Annex> slip (From SLIP server prompt, give "slip" command to start
SLIP connection.)
SLIP inititated.
Your IP address is 128.254.254.10, server address is 128.254.254.1.
^] (Hit DIP break key to get back to DIP prompt.)
DIP> local 128.254.254.10 (Give local command to specify my IP address.)
DIP> remote 128.254.254.1 (Specify server's IP address.)
DIP> mtu 1500 (Set SLIP operating parameters... you may not need
to do this.)
DIP> mode SLIP (Start the SLIP mode from DIP.)
loomer:~%
Now we're running in SLIP mode, and everything should work. The command
# /etc/ifconfig sl0
will tell you the current interface parameters; you may need to set
some of these by hand if DIP didn't get the correctly. Also, some have
found that they need to use the route command to change their operating
parameters. DIP sets a route for the address of your SLIP server, but
you may need to delete this route and add it as your gateway instead.
For example, with a SLIP server address of 128.253.154.1, use the
commands:
# /etc/route del 128.253.154.1
# /etc/route add default gw 128.253.154.1
It should be simple to modify the code for DIP in the file attach.c
to run the route and ifconfig commands that work for you automatically.
Of course, typing all of those DIP commands may be time consuming. It
may be possible to write a DIP chat script to run all of the commands
up through dialing the connection and logging in, and then "exit" the
script to let you type the "local" and "remote" commands by hand.
Furthermore, there are patches for DIP by Paul Mossip
(mos...@vizlab.rutgers.edu) which modify the "get" command to grab
the IP address of your host and the server from the output of
the SLIP server. This should allow you to do all of the dialing and
configuration within a chat script just as you would with static
SLIP servers.
You'll have to play with various values for your routes and gateways
to get everything going correctly. If you have any information on how
you configured your SLIP interface, please drop me a note
(m...@tc.cornell.edu). Include info on your SLIP address, server address,
gateway, and so on, and what commands you used to set up SLIP. There
are various possible configurations for SLIP servers and I'd like to
update this NET-2-FAQ with as many hints as possible. :)
6. Are You Stuck?
Really? Then you should read the man pages for ifconfig and route,
included in the net-010 package, and understand their functions. These
commands have a lot of flexibility, and because everyone's network
setup is different, you may find a way to use ifconfig and route to
get your connection working. If you do, feel free to send me some mail
so I can include it in the next update of the NET-2-FAQ. Because of
my limited amount of experimental data, most of the discussion above
is about my own setup, and I'd like to generalize it as much as
possible.
I'm currently writing a set of scripts to simplify NET-2 configuration.
You can pick up the pre-alpha release from tc.cornell.edu, in the file
/pub/mdw/netconf-0.3.tar.z. These scripts maintain a small database of
network configuration info, and allow you to easily modify and
configure your network interface. The scripts are far from complete:
I've been waiting until the NET-2 interface itself stabilizes a bit
more before upgrading it further.
Another good place to look for help on setting up NET-2 is the
O'Reilly and Associated book ``TCP/IP Network Administration''...
the one with the crab on the cover. Keep in mind that NET-2 is now
a "standard" implementation of TCP/IP---this means that ifconfig
and route work the same under Linux as they do on other UNIX systems.
Also keep in mind that NET-2 _is_ developing very rapidly---it's
one of the newest additions to the Linux kernel. Thus, all of the
bugs haven't been worked out yet, so there may be some problems.
However, a good rule of thumb is that if you were able to get TCP/IP
working under kernels before 0.99.pl10, you should be able to get it
working under NET-2 as well. There are still some issues dealing with
performance to be fixed, but overall the system works. And, as with
everything in Linux development, time will cure what ails NET-2.
If it's absolutely unusable to you, go back to an earlier kernel
version, and wait until things develop further. The code is still
very new.
7. Miscellaneous
I'm sure that I've missed something. This NET-2-FAQ was thrown
together with the help of Terry Dawson and Jeff Uphoff. I know that
it is not complete. I am releasing this version of the NET-2-FAQ
in hopes that it will help some people, and that those who are
missing important information will get in touch with me, and tell
me where I'm wrong. :) If you have questions about setting up
NET-2, feel free to mail me, or if you have any corrections, additions,
or errata for this NET-2-FAQ, send me any and all changes (cdiffs
are nice, but I'm flexible).
Of course, thanks to Fred, Linus, Ross, Phil, Paul, Don, and everyone
else who helped to develop the NET-2 code and work on previous
versions of TCP/IP for Linux and the NET-FAQ. (Sorry, Phil, I lost your
phone number.) Finally, Linux has a complete implementation of
TCP/IP. It may not be for everyone yet. But for those who want to
do some hacking---here it is!
PLEASE send me any comments or questions about the NET-2-FAQ. The
sooner I get feedback, the sooner I can release a new version. Thanks.
Matt Welsh, m...@tc.cornell.edu
--
Matt Welsh, m...@tc.cornell.edu
Radioactive decay ain't what it used to be.
|