Dialup IP servers frequently offer SLIP service through special user
accounts. After logging in to such an account, you are not dropped into
the common shell; instead, a program or shell script is executed that
enables the server's SLIP driver for the serial line and configures the
appropriate network interface. Then you have to do the same at your end
of the link.
On some operating systems, the SLIP driver is a user-space program;
under Linux, it is part of the kernel, which makes it a lot faster.
This speed requires, however, that the serial line be converted to the
SLIP mode explicitly. This conversion is done by means of a special
tty line discipline, SLIPDISC. While the tty is in normal line
discipline (DISC0), it exchanges data only with user processes, using
the normal read(2) and
write(2) calls, and the SLIP driver is unable to
write to or read from the tty. In SLIPDISC, the roles are reversed:
now any user-space processes are blocked from writing to or reading
from the tty, while all data coming in on the serial port is passed
directly to the SLIP driver.
The SLIP driver itself
understands a number of variations on the SLIP protocol. Apart from
ordinary SLIP, it also understands CSLIP, which performs the so-called
Van Jacobson header compression (described in RFC-1144) on outgoing IP
packets. This compression improves throughput for interactive sessions
noticeably. There are also six-bit versions for each of these
A simple way to convert a serial line to SLIP mode is by using the
slattach tool. Assume you have your modem on
/dev/ttyS3 and have logged in to the SLIP server
successfully. You will then execute:
This tool switches the line discipline of ttyS3 to
SLIPDISC and attaches it to one of the SLIP network
interfaces. If this is your first active SLIP link, the line will be attached
to sl0 ; the second will be attached to
sl1, and so on. The current kernels support a default
maximum of 256 simultaneous SLIP links.
The default line discipline chosen by slattach is CSLIP.
You may choose any other discipline using the –p switch.
To use normal SLIP (no compression), you use:
# slattach -p slip /dev/ttyS3 &
The disciplines available are listed in Table 7-1. A special pseudo-discipline
is available called adaptive, which causes the
kernel to automatically detect which type of SLIP encapsulation is
being used by the remote end.
Table 7-1. Linux Slip-Line Disciplines
Traditional SLIP encapsulation.
SLIP encapsulation with Van Jacobsen header compression.
SLIP encapsulation with six-bit encoding. The encoding method is
similar to that used by the uuencode command, and causes
the SLIP datagram to be converted into printable ASCII characters. This conversion is
useful when you do not have a serial link that is eight bit clean.
SLIP encapsulation with Van Jacobsen header compression and six-bit
This is not a real line discipline; instead, it causes the kernel to
attempt to identify the line discipline being used by the remote machine and
to match it.
Note that you must use the same encapsulation as your peer. For
example, if cowslip uses
CSLIP, you also have to do so. If your SLIP connection doesn't work,
the first thing you should do is ensure that both ends of the link
agree on whether to use header compression or not. If you are unsure
what the remote end is using, try configuring your host for adaptive
slip. The kernel might figure out the right type for you.
slattach lets you enable not only SLIP, but other
protocols that use the serial line, like PPP or KISS (another
protocol used by ham radio people). Doing this is not common, though, and there are
better tools available to support these protocols. For details, please refer
to the slattach(8) manual page.
After turning over the line to the SLIP driver, you must configure the
network interface. Again, you do this using the standard
ifconfig and route
commands. Assume that we have dialed up a server named cowslip from vlager. On vlager you would execute:
# ifconfig sl0 vlager-slip pointopoint cowslip
# route add cowslip
# route add default gw cowslip
The first command configures the interface as a point-to-point link to
cowslip, while the second and third
add the route to cowslip and the
default route, using cowslip as a
Two things are worth noting about the ifconfig
invocation: The pointopoint
option that specifies the address of the remote end of a
point-to-point link and our use of vlager-slip as the address of the local
We have mentioned that you can use the same address you assigned to
vlager's Ethernet interface
for your SLIP link, as well. In this case, vlager-slip might just be another alias
for address 172.16.1.1.
However, it is also possible that you have to use an entirely
different address for your SLIP link. One such case is when your
network uses an unregistered IP network address, as the Brewery
does. We will return to this scenario in greater detail in the next
For the remainder of this chapter we will always use
vlager-slip to refer to the address
of the local SLIP interface.
When taking down the SLIP link, you should first remove all routes
through cowslip using
route with the del option, then
take the interface down, and send slattach the
hangup signal. The you must hang up the modem using your
terminal program again:
# route del default
# route del cowslip
# ifconfig sl0 down
# kill -HUP 516
Note that the 516
should be replaced with the
process id (as shown in the output of
) of the slattach
command controlling the slip device you wish to take down.