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