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