		PPPoE Support
		-------------

		Michal Ostrowski
		8 August 2001

		for ppp-2.4.2
		Updated for ppp-2.4.5 by Paul Mackerras, Sep 08

1. Introduction
---------------

This document describes the support for PPP over Ethernet (PPPoE)
included with this package.  It is assumed that the reader is
familiar with Linux PPP (as it pertains to tty/modem-based
connections).  In particular, users of PPP in the Linux 2.2 series
kernels should ensure they are familiar with the changes to the PPP
implementation in the 2.4 series kernels before attempting to use
PPPoE features.

If you are not familiar with PPP, I recommend looking at other
packages which include end-user configuration tools, such as Roaring
Penguin (http://www.roaringpenguin.com/pppoe).

PPPoE is a protocol typically used by *DSL providers to manage IP
addresses and authenticate users.  Essentially, PPPoE provides for a
PPP connection to be established not over a physical serial-line or
modem, but over a logical connection between two unique MAC-addresses
on an ethernet network.  Once the PPPoE layer discovers the end-points
to be used in the link and negotiates it, frames may be sent to and
received from the PPPoE layer just as if the link was a serial line
(or that is how it's supposed to be).

With this in mind, the goal of the implementation of PPPoE support in
Linux is to allow users to simply specify that the device they intend
to use for the PPP connection is an ethernet device (e.g. "eth0") and
the rest of the system should function as usual.

2. Using PPPoE
--------------

This section is a quick guide for getting PPPoE working, to allow one
to connect to their ISP who is providing PPPoE based services.

1.  Enable "Prompt for development and/or incomplete code/drivers" and
    "PPP over Ethernet" in your kernel configuration.  Most distributions
    will include the kernel PPPoE module by default.

2.  Compile and install your kernel.

3.  Install the ppp package.

4.  Add the following line to /etc/ppp/options:

    plugin pppoe.so

    The effect of this line is simply to make "eth0", "eth1",
    ....,"ethx" all valid device names for pppd (just like ttyS0,
    ttyS1).

5.  Add the necessary authentication options to your pppd
    configuration (i.e. PAP/CHAP information).  If you wish to
    maintain seperate configurations for different devices you may
    place configuration options in device-specific configuration
    files: /etc/ppp/options.devname (devname=ttyS0, ttyS1, eth0, eth1
    or any other valid device name).

6.  Invoke pppd with the appropriate device name: e.g. "pppd eth0"


Do not include any compression or flow control options in your PPPoE
configuration.  They will be ignored.

Again, here it is assumed that the reader is familiar with the general
process of configuring PPP.  The steps outlined here refer only to the
steps and configuration options which are PPPoE specific, and it is
assumed that the reader will also configure other aspects of the system
(e.g. PAP authentication parameters).

3.  Advanced Functionality
--------------------------

For more advanced functionality (such as providing PPPoE services) and
user configuration tools, look to the Roaring Penguin PPPoE software
package (http://www.roaringpenguin.com/pppoe).

4.  Credits
-----------

The PPPoE plugin included in this package is a component of the
Roaring Penguin PPPoE package, included in this package courtesy of
Roaring Penguin Software. (http://www.roaringpenguin.com).

