1		PPP for Linux
2		-------------
3
4		Paul Mackerras
5		8 March 2001
6
7		for ppp-2.4.2
8		Updated for ppp-2.4.5, Sep 08
9
101. Introduction
11---------------
12
13The Linux PPP implementation includes both kernel and user-level
14parts.  This package contains the user-level part, which consists of
15the PPP daemon (pppd) and associated utilities.  In the past this
16package has contained updated kernel drivers.  This is no longer
17necessary, as the current kernel sources contain up-to-date drivers
18(and have done since the 2.4.x kernel series).
19
20The Linux PPP implementation is capable of being used both for
21initiating PPP connections (as a `client') or for handling incoming
22PPP connections (as a `server').  Note that this is an operational
23distinction, based on how the connection is created, rather than a
24distinction that is made in the PPP protocols themselves.
25
26Mostly this package is used for PPP connections over modems connected
27via asynchronous serial ports, so this guide concentrates on this
28situation.
29
30The PPP protocol consists of two parts.  One is a scheme for framing
31and encoding packets, the other is a series of protocols called LCP,
32IPCP, PAP and CHAP, for negotiating link options and for
33authentication.  This package similarly consists of two parts: a
34kernel module which handles PPP's low-level framing protocol, and a
35user-level program called pppd which implements PPP's negotiation
36protocols.
37
38The kernel module assembles/disassembles PPP frames, handles error
39detection, and forwards packets between the serial port and either the
40kernel network code or the user-level program pppd.  IP packets go
41directly to the kernel network code.  So once pppd has negotiated the
42link, it in practice lies completely dormant until you want to take
43the link down, when it negotiates a graceful disconnect.
44
45
462. Installation
47---------------
48
492.1 Kernel driver
50
51Assuming you are running a recent 2.4 or 2.6 (or later) series kernel,
52the kernel source code will contain an up-to-date kernel PPP driver.
53If the PPP driver was included in your kernel configuration when your
54kernel was built, then you only need to install the user-level
55programs.  Otherwise you will need to get the source tree for your
56kernel version, configure it with PPP included, and recompile.  Most
57Linux distribution vendors ship kernels with PPP included in the
58configuration.
59
60The PPP driver can be either compiled into the kernel or compiled as a
61kernel module.  If it is compiled into the kernel, the PPP driver is
62included in the kernel image which is loaded at boot time.  If it is
63compiled as a module, the PPP driver is present in one or more files
64under /lib/modules and is loaded into the kernel when needed.
65
66The 2.2 series kernels contain an older version of the kernel PPP
67driver, one which doesn't support multilink.  If you want multilink,
68you need to run a 2.4 or 2.6 series kernel.  The kernel PPP driver
69was completely rewritten for the 2.4 series kernels to support
70multilink and to allow it to operate over diverse kinds of
71communication medium (the 2.2 driver only operates over serial ports
72and devices which look like serial ports, such as pseudo-ttys).
73
74Under the 2.2 kernels, if PPP is compiled as a module, the PPP driver
75modules should be present in the /lib/modules/`uname -r`/net directory
76(where `uname -r` represents the kernel version number).  The PPP
77driver module itself is called ppp.o, and there will usually be
78compression modules there, ppp_deflate.o and bsd_comp.o, as well as
79slhc.o, which handles TCP/IP header compression.  If the PPP driver is
80compiled into the kernel, the compression code will still be compiled
81as modules, for kernels before 2.2.17pre12.  For 2.2.17pre12 and later,
82if the PPP driver is compiled in, the compression code will also.
83
84Under the 2.4 kernels, there are two PPP modules, ppp_generic.o and
85ppp_async.o, plus the compression modules (ppp_deflate.o, bsd_comp.o
86and slhc.o).  If the PPP generic driver is compiled into the kernel,
87the other four can then be present either as modules or compiled into
88the kernel.  There is a sixth module, ppp_synctty.o, which is used for
89synchronous tty devices such as high-speed WAN adaptors.
90
91
922.2 User-level programs
93
94If you obtained this package in .rpm or .deb format, you simply follow
95the usual procedure for installing the package.
96
97If you are using the .tar.gz form of this package, then cd into the
98ppp-2.4.5 directory you obtained by unpacking the archive and issue
99the following commands:
100
101$ ./configure
102$ make
103# make install
104
105The `make install' has to be done as root.  This makes and installs
106four programs and their man pages: pppd, chat, pppstats and pppdump.
107If the /etc/ppp configuration directory doesn't exist, the `make
108install' step will create it and install some default configuration
109files.
110
111
1122.3 System setup for 2.4 kernels
113
114Under the 2.4 series kernels, pppd needs to be able to open /dev/ppp,
115character device (108,0).  If you are using udev (as most distributions
116do), the /dev/ppp node should be created by udevd.
117
118Otherwise you may need to create a /dev/ppp device node with the
119commands:
120
121# mknod /dev/ppp c 108 0
122# chmod 600 /dev/ppp
123
124
1252.4 System setup under 2.2 series kernels
126
127Under the 2.2 series kernels, you should add the following to your
128/etc/modules.conf or /etc/conf.modules:
129
130alias tty-ldisc-3	ppp
131alias ppp-compress-21	bsd_comp
132alias ppp-compress-24	ppp_deflate
133alias ppp-compress-26	ppp_deflate
134
135
1363. Getting help with problems
137-----------------------------
138
139If you have problems with your PPP setup, or you just want to ask some
140questions, or better yet if you can help others with their PPP
141questions, then you should join the linux-ppp mailing list.  Send an
142email to majordomo@vger.kernel.org with a line in the body saying
143
144subscribe linux-ppp
145
146To leave the mailing list, send an email to majordomo@vger.kernel.org
147with a line in the body saying
148
149unsubscribe linux-ppp
150
151To send a message to the list, email it to linux-ppp@vger.kernel.org.
152You don't have to be subscribed to send messages to the list.
153
154You can also email me (paulus@samba.org) but I am overloaded with
155email and I can't respond to most messages I get in a timely fashion.
156
157There are also several relevant news groups, such as comp.protocols.ppp,
158comp.os.linux.networking, or comp.os.linux.setup.
159
160
1614. Configuring your dial-out PPP connections
162--------------------------------------------
163
164Some Linux distribution makers include tools in their distributions
165for setting up PPP connections.  For example, for Red Hat Linux and
166derivatives, you should probably use linuxconf or netcfg to set up
167your PPP connections.
168
169The two main windowing environments for Linux, KDE and Gnome, both
170come with GUI utilities for configuring and controlling PPP dial-out
171connections.  They are convenient and relatively easy to configure.
172
173A third alternative is to use a PPP front-end package such as wvdial
174or ezppp.  These also will handle most of the details of talking to
175the modem and setting up the PPP connection for you.
176
177Assuming that you don't want to use any of these tools, you want to
178set up the configuration manually yourself, then read on.  This
179document gives a brief description and example.  More details can be
180found by reading the pppd and chat man pages and the PPP-HOWTO.
181
182We assume that you have a modem that uses the Hayes-compatible AT
183command set connected to an async serial port (e.g. /dev/ttyS0) and
184that you are dialling out to an ISP.  
185
186The trickiest and most variable part of setting up a dial-out PPP
187connection is the part which involves getting the modem to dial and
188then invoking PPP service at the far end.  Generally, once both ends
189are talking PPP the rest is relatively straightforward.
190
191Now in fact pppd doesn't know anything about how to get modems to dial
192or what you have to say to the system at the far end to get it to talk
193PPP.  That's handled by an external program such as chat, specified
194with the connect option to pppd.  Chat takes a series of strings to
195expect from the modem interleaved with a series of strings to send to
196the modem.  See the chat man page for more information.  Here is a
197simple example for connecting to an ISP, assuming that the ISP's
198system starts talking PPP as soon as it answers the phone:
199
200pppd connect 'chat -v "" AT OK ATDT5551212 ~' \
201	/dev/ttyS0 57600 crtscts debug defaultroute
202
203Going through pppd's options in order:
204    connect 'chat ...'  This gives a command to run to contact the
205    PPP server.  Here the supplied 'chat' program is used to dial a
206    remote computer.  The whole command is enclosed in single quotes
207    because pppd expects a one-word argument for the 'connect' option.
208    The options to 'chat' itself are:
209
210         -v            verbose mode; log what we do to syslog
211         ""            don't wait for any prompt, but instead...
212	 AT	       send the string "AT"
213	 OK	       expect the response "OK", then
214         ATDT5551212   dial the modem, then
215         ~             wait for a ~ character, indicating the start
216		       of a PPP frame from the server
217
218    /dev/ttyS0	       specifies which serial port the modem is connected to
219    57600	       specifies the baud rate to use
220    crtscts	       use hardware flow control using the RTS & CTS signals
221    debug	       log the PPP negotiation with syslog
222    defaultroute       add default network route via the PPP link
223
224Pppd will write error messages and debugging logs to the syslogd
225daemon using the facility name "daemon".  These messages may already
226be logged to the console or to a file like /var/log/messages; consult
227your /etc/syslog.conf file to see.  If you want to make all pppd
228messages go to a file such as /var/log/ppp-debug, add the line
229
230daemon.*					/var/log/ppp-debug
231        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
232           This is one or more tabs. Do not use spaces.
233
234to syslog.conf; make sure to put one or more TAB characters (not
235spaces!) between the two fields.  Then you need to create an empty
236/var/log/ppp-debug file with a command such as
237
238	touch /var/log/ppp-debug
239
240and then restart syslogd, usually by sending it a SIGHUP signal with a
241command like this:
242
243	killall -HUP syslogd
244
245
2464.1 Is the link up?
247
248The main way to tell if your PPP link is up and operational is the
249ifconfig ("interface configuration") command.  Type
250
251	/sbin/ifconfig
252
253at a shell prompt.  It should print a list of interfaces including one
254like this example:
255
256ppp0      Link encap Point-to-Point Protocol
257          inet addr 192.76.32.3  P-t-P 129.67.1.165  Mask 255.255.255.0
258          UP POINTOPOINT RUNNING  MTU 1500  Metric 1
259          RX packets 33 errors 0 dropped 0 overrun 0
260          TX packets 42 errors 0 dropped 0 overrun 0
261
262Assuming that ifconfig shows the ppp network interface, you can test
263the link using the ping command like this:
264
265	/sbin/ping -c 3 129.67.1.165
266
267where the address you give is the address shown as the P-t-P address
268in the ifconfig output.  If the link is operating correctly, you
269should see output like this:
270
271  PING 129.67.1.165 (129.67.1.165): 56 data bytes
272  64 bytes from 129.67.1.165: icmp_seq=0 ttl=255 time=268 ms
273  64 bytes from 129.67.1.165: icmp_seq=1 ttl=255 time=247 ms
274  64 bytes from 129.67.1.165: icmp_seq=2 ttl=255 time=266 ms
275  --- 129.67.1.165 ping statistics ---
276  3 packets transmitted, 3 packets received, 0% packet loss
277  round-trip min/avg/max = 247/260/268 ms
278
279