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