		PPP for Linux
		-------------

		Paul Mackerras
		8 March 2001

		for ppp-2.4.2

1. Introduction
---------------

The Linux PPP implementation includes both kernel and user-level
parts.  This package contains the user-level part, which consists of
the PPP daemon (pppd) and associated utilities.  In the past this
package has contained updated kernel drivers.  This is no longer
necessary, as the current 2.2 and 2.4 kernel sources contain
up-to-date drivers.

The Linux PPP implementation is capable of being used both for
initiating PPP connections (as a `client') or for handling incoming
PPP connections (as a `server').  Note that this is an operational
distinction, based on how the connection is created, rather than a
distinction that is made in the PPP protocols themselves.

Mostly this package is used for PPP connections over modems connected
via asynchronous serial ports, so this guide concentrates on this
situation.

The PPP protocol consists of two parts.  One is a scheme for framing
and encoding packets, the other is a series of protocols called LCP,
IPCP, PAP and CHAP, for negotiating link options and for
authentication.  This package similarly consists of two parts: a
kernel module which handles PPP's low-level framing protocol, and a
user-level program called pppd which implements PPP's negotiation
protocols.

The kernel module assembles/disassembles PPP frames, handles error
detection, and forwards packets between the serial port and either the
kernel network code or the user-level program pppd.  IP packets go
directly to the kernel network code.  So once pppd has negotiated the
link, it in practice lies completely dormant until you want to take
the link down, when it negotiates a graceful disconnect.


2. Installation
---------------

2.1 Kernel driver

Assuming you are running a recent 2.2 or 2.4 (or later) series kernel,
the kernel source code will contain an up-to-date kernel PPP driver.
If the PPP driver was included in your kernel configuration when your
kernel was built, then you only need to install the user-level
programs.  Otherwise you will need to get the source tree for your
kernel version, configure it with PPP included, and recompile.  Most
Linux distribution vendors ship kernels with PPP included in the
configuration.

The PPP driver can be either compiled into the kernel or compiled as a
kernel module.  If it is compiled into the kernel, the PPP driver is
included in the kernel image which is loaded at boot time.  If it is
compiled as a module, the PPP driver is present in one or more files
under /lib/modules and is loaded into the kernel when needed.

The 2.2 series kernels contain an older version of the kernel PPP
driver, one which doesn't support multilink.  If you want multilink,
you need to run the latest 2.4 series kernel.  The kernel PPP driver
was completely rewritten for the 2.4 series kernels to support
multilink and to allow it to operate over diverse kinds of
communication medium (the 2.2 driver only operates over serial ports
and devices which look like serial ports, such as pseudo-ttys).

Under the 2.2 kernels, if PPP is compiled as a module, the PPP driver
modules should be present in the /lib/modules/`uname -r`/net directory
(where `uname -r` represents the kernel version number).  The PPP
driver module itself is called ppp.o, and there will usually be
compression modules there, ppp_deflate.o and bsd_comp.o, as well as
slhc.o, which handles TCP/IP header compression.  If the PPP driver is
compiled into the kernel, the compression code will still be compiled
as modules, for kernels before 2.2.17pre12.  For 2.2.17pre12 and later,
if the PPP driver is compiled in, the compression code will also.

Under the 2.4 kernels, there are two PPP modules, ppp_generic.o and
ppp_async.o, plus the compression modules (ppp_deflate.o, bsd_comp.o
and slhc.o).  If the PPP generic driver is compiled into the kernel,
the other four can then be present either as modules or compiled into
the kernel.  There is a sixth module, ppp_synctty.o, which is used for
synchronous tty devices such as high-speed WAN adaptors.


2.2 User-level programs

If you obtained this package in .rpm or .deb format, you simply follow
the usual procedure for installing the package.

If you are using the .tar.gz form of this package, then cd into the
ppp-2.4.1b1 directory you obtained by unpacking the archive and issue
the following commands:

$ ./configure
$ make
# make install

The `make install' has to be done as root.  This makes and installs
four programs and their man pages: pppd, chat, pppstats and pppdump.
If the /etc/ppp configuration directory doesn't exist, the `make
install' step will create it and install some default configuration
files.


2.3 System setup for 2.4 kernels

Under the 2.4 series kernels, pppd needs to be able to open /dev/ppp,
character device (108,0).  If you are using devfs (the device
filesystem), the /dev/ppp node will automagically appear when the
ppp_generic module is loaded, or at startup if ppp_generic is compiled
in.

If you have ppp_generic as a module, and you are using devfsd (the
devfs daemon), you will need to add a line like this to your
/etc/devfsd.conf:

LOOKUP		ppp		MODLOAD

Otherwise you will need to create a /dev/ppp device node with the
commands:

# mknod /dev/ppp c 108 0
# chmod 600 /dev/ppp

If you use module autoloading and have PPP as a module, you will need
to add the following to your /etc/modules.conf or /etc/conf.modules:

alias /dev/ppp		ppp_generic
alias char-major-108	ppp_generic
alias tty-ldisc-3	ppp_async
alias tty-ldisc-14	ppp_synctty
alias ppp-compress-21	bsd_comp
alias ppp-compress-24	ppp_deflate
alias ppp-compress-26	ppp_deflate


2.4 System setup under 2.2 series kernels

Under the 2.2 series kernels, you should add the following to your
/etc/modules.conf or /etc/conf.modules:

alias tty-ldisc-3	ppp
alias ppp-compress-21	bsd_comp
alias ppp-compress-24	ppp_deflate
alias ppp-compress-26	ppp_deflate


3. Getting help with problems
-----------------------------

If you have problems with your PPP setup, or you just want to ask some
questions, or better yet if you can help others with their PPP
questions, then you should join the linux-ppp mailing list.  Send an
email to majordomo@vger.kernel.org with a line in the body saying

subscribe linux-ppp

To leave the mailing list, send an email to majordomo@vger.kernel.org
with a line in the body saying

unsubscribe linux-ppp

To send a message to the list, email it to linux-ppp@vger.kernel.org.
You don't have to be subscribed to send messages to the list.

You can also email me (paulus@samba.org) but I am overloaded with
email and I can't respond to most messages I get in a timely fashion.

There are also several relevant news groups, such as comp.protocols.ppp,
comp.os.linux.networking, or comp.os.linux.setup.


4. Configuring your dial-out PPP connections
--------------------------------------------

Some Linux distribution makers include tools in their distributions
for setting up PPP connections.  For example, for Red Hat Linux and
derivatives, you should probably use linuxconf or netcfg to set up
your PPP connections.

The two main windowing environments for Linux, KDE and Gnome, both
come with GUI utilities for configuring and controlling PPP dial-out
connections.  They are convenient and relatively easy to configure.

A third alternative is to use a PPP front-end package such as wvdial
or ezppp.  These also will handle most of the details of talking to
the modem and setting up the PPP connection for you.

Assuming that you don't want to use any of these tools, you want to
set up the configuration manually yourself, then read on.  This
document gives a brief description and example.  More details can be
found by reading the pppd and chat man pages and the PPP-HOWTO.

We assume that you have a modem that uses the Hayes-compatible AT
command set connected to an async serial port (e.g. /dev/ttyS0) and
that you are dialling out to an ISP.  

The trickiest and most variable part of setting up a dial-out PPP
connection is the part which involves getting the modem to dial and
then invoking PPP service at the far end.  Generally, once both ends
are talking PPP the rest is relatively straightforward.

Now in fact pppd doesn't know anything about how to get modems to dial
or what you have to say to the system at the far end to get it to talk
PPP.  That's handled by an external program such as chat, specified
with the connect option to pppd.  Chat takes a series of strings to
expect from the modem interleaved with a series of strings to send to
the modem.  See the chat man page for more information.  Here is a
simple example for connecting to an ISP, assuming that the ISP's
system starts talking PPP as soon as it answers the phone:

pppd connect 'chat -v "" AT OK ATDT5551212 ~' \
	/dev/ttyS0 57600 crtscts debug defaultroute

Going through pppd's options in order:
    connect 'chat ...'  This gives a command to run to contact the
    PPP server.  Here the supplied 'chat' program is used to dial a
    remote computer.  The whole command is enclosed in single quotes
    because pppd expects a one-word argument for the 'connect' option.
    The options to 'chat' itself are:

         -v            verbose mode; log what we do to syslog
         ""            don't wait for any prompt, but instead...
	 AT	       send the string "AT"
	 OK	       expect the response "OK", then
         ATDT5551212   dial the modem, then
         ~             wait for a ~ character, indicating the start
		       of a PPP frame from the server

    /dev/ttyS0	       specifies which serial port the modem is connected to
    57600	       specifies the baud rate to use
    crtscts	       use hardware flow control using the RTS & CTS signals
    debug	       log the PPP negotiation with syslog
    defaultroute       add default network route via the PPP link

Pppd will write error messages and debugging logs to the syslogd
daemon using the facility name "daemon".  These messages may already
be logged to the console or to a file like /var/log/messages; consult
your /etc/syslog.conf file to see.  If you want to make all pppd
messages go to a file such as /var/log/ppp-debug, add the line

daemon.*					/var/log/ppp-debug
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
           This is one or more tabs. Do not use spaces.

to syslog.conf; make sure to put one or more TAB characters (not
spaces!) between the two fields.  Then you need to create an empty
/var/log/ppp-debug file with a command such as

	touch /var/log/ppp-debug

and then restart syslogd, usually by sending it a SIGHUP signal with a
command like this:

	killall -HUP syslogd


4.1 Is the link up?

The main way to tell if your PPP link is up and operational is the
ifconfig ("interface configuration") command.  Type

	/sbin/ifconfig

at a shell prompt.  It should print a list of interfaces including one
like this example:

ppp0      Link encap Point-to-Point Protocol
          inet addr 192.76.32.3  P-t-P 129.67.1.165  Mask 255.255.255.0
          UP POINTOPOINT RUNNING  MTU 1500  Metric 1
          RX packets 33 errors 0 dropped 0 overrun 0
          TX packets 42 errors 0 dropped 0 overrun 0

Assuming that ifconfig shows the ppp network interface, you can test
the link using the ping command like this:

	/sbin/ping -c 3 129.67.1.165

where the address you give is the address shown as the P-t-P address
in the ifconfig output.  If the link is operating correctly, you
should see output like this:

  PING 129.67.1.165 (129.67.1.165): 56 data bytes
  64 bytes from 129.67.1.165: icmp_seq=0 ttl=255 time=268 ms
  64 bytes from 129.67.1.165: icmp_seq=1 ttl=255 time=247 ms
  64 bytes from 129.67.1.165: icmp_seq=2 ttl=255 time=266 ms
  --- 129.67.1.165 ping statistics ---
  3 packets transmitted, 3 packets received, 0% packet loss
  round-trip min/avg/max = 247/260/268 ms

