# LIC: GPL

RP-PPPoE now supports kernel-mode PPPoE on Linux kernels 2.4 or newer.
However, the default "./go" build procedure does not make kernel-mode
support.

Here's what you need to do:

0) Make sure you are running kernel 2.4 or newer on the machine you
will build rp-pppoe on.  You must have the following kernel
configuration settings:

	CONFIG_PPP=m          or CONFIG_PPP=y
	CONFIG_PPP_ASYNC=m    or CONFIG_PPP_ASYNC=y
	CONFIG_PPP_SYNC_TTY=m or CONFIG_PPP_SYNC_TTY=y
	CONFIG_PPP_DEFLATE=m  or CONFIG_PPP_DEFLATE=y
	CONFIG_PPP_BSDCOMP=m  or CONFIG_PPP_BSDCOMP=y
	CONFIG_PPPOE=m        or CONFIG_PPPOE=y
	CONFIG_N_HDLC=m       or CONFIG_N_HDLC=y
	CONFIG_UNIX98_PTYS=y

You also need a /dev/ppp file:

	mknod --mode=664 /dev/ppp c 108 0

You might want to add these lines to /etc/modules.conf:

	alias char-major-108 ppp_generic
	alias tty-ldisc-3 ppp_async
	alias tty-ldisc-13 n_hdlc
	alias tty-ldisc-14 ppp_synctty
	alias net-pf-24 pppoe

1) If you are running pppd older than 2.4.0, check out the latest
version of the PPP software from the CVS repository at cvs.samba.org.
Here's how to do this:

	cvs -d :pserver:cvs@pserver.samba.org:/cvsroot login
	# When prompted for a password, type "cvs"

	# Change to the directory in which you want to store the PPP source
	# code.
	cd /path/to/checked/out/sources

	# Check out the source
	cvs -z5 -d :pserver:cvs@pserver.samba.org:/cvsroot co ppp

If you are running pppd 2.4.0 or newer, and have the pppd development
headers installed, you can skip steps 1 and 2.

2) The source gets checked out into a subdirectory called ppp.  If
the source ends up in /path/to/checked/out/sources/ppp, then call
that path $PPPDIR.

Build and install the checked-out ppp code according to its instructions.

3) Unpack rp-pppoe.

4) In the rp-pppoe directory, change to src/ and type:

	./configure --enable-plugin=$PPPDIR

where $PPPDIR, of course, refers to the checked-out "ppp" directory
from cvs.samba.org.

If you didn't check out the PPP software from cvs.samba.org, use:

	./configure --enable-plugin

This will work if the header pppd/pppd.h is located in /usr/include
or /usr/local/include.

4) Type make; make install

5) Edit /etc/ppp/pppoe.conf to include this line:

	LINUX_PLUGIN=/etc/ppp/plugins/rp-pppoe.so

After that, pppoe-start should use kernel-mode PPPoE.

The rp-pppoe.so plugin adds the following command-line options to pppd:

ethXXX                          -- Use interface ethXXX as Ethernet interface
brXXX                           -- Use interface brXXX as Ethernet interface
nic-XXXX                        -- Use interface XXXX as the Ethernet interface

rp_pppoe_service SERVICE_NAME   -- Specify desired service name
rp_pppoe_ac NAME                -- Specify desired access concentrator name
rp_pppoe_verbose 0|1            -- Print names of access concentrators

rp_pppoe_sess nnnn:aa:bb:cc:dd:ee:ff -- Attach to existing session 'nnnn'
                                on AC with Ethernet address aa:bb:cc:dd:ee:ff
                                This skips the discovery phase.

rp_pppoe_mac aa:bb:cc:dd:ee:ff -- only accept PADOs from specified MAC address

The kernel-mode PPPoE plugin permits an MTU of up to 1500 on the PPP
interface providing that the MTU on the underlying Ethernet interface
is at least 1508.  In /etc/ppp/pppoe.conf, set MTU=1500 and MRU=1500 to
enable the larger PPP MTU.  The larger PPP MTU is negotiated according
to RFC 4638.

--
David F. Skoll <dfs@roaringpenguin.com>

