On , PPP functionality is split up in two parts, a low-level HDLC driver located in the kernel, and the user space pppd daemon that handles the various control protocols. The current release of PPP for is linux-ppp-1.0.0, and contains the kernel PPP module, pppd, and a program named chat used to dial up the remote system.
The PPP kernel driver was written by Michael Callahan. pppd was derived from a free PPP implementation for Sun and 386BSD machines, which was written by Drew Perkins and others, and is maintained by Paul Mackerras. It was ported to by Al Longyear. chat was written by Karl Fox.
Just like SLIP, PPP is implemented by means of a special line discipline. To use some serial line as a PPP link, you first establish the connection over your modem as usual, and subsequently convert the line to PPP mode. In this mode, all incoming data is passed to the PPP driver, which checks the incoming HDLC frames for validity (each HDLC frame carries a 16 bit checksum), and unwraps and dispatches them. Currently, it is able to handle IP datagrams, optionally using Van Jacobson header compression. As soon as supports IPX, the PPP driver will be extended to handle IPX packets, too.
The kernel driver is aided by pppd, the PPP daemon, which performs the entire initialization and authentication phase that is necessary before actual network traffic can be sent across the link. pppd's behavior may be fine-tuned using a number of options. As PPP is rather complex, it is impossible to explain all of them in a single chapter. This book therefore cannot cover all aspects of pppd, but only give you an introduction. For more information, refer to the manual pages and READMEs in the pppd source distribution, which should help you sort out most questions this chapter fails to discuss. If your problems persist even after reading all documentation, you should turn to the newsgroup comp.protocols.ppp for help, which is the place where you will reach most of the people involved in the development of pppd.