Penguin

PPPoA is an Acronym for PPP over ATM, a protocol which is commonly used for ADSLModems such as World-Net's AccessRunner and D-Link AHL110.

PPPoA is supported out of the box on Debian Sarge (pppd 2.4.3), so this page is largely unnecessary now. As of 2.4.1 howver, the default PPP distribution for linux did not come with PPPoA support, and neither did the Debian package in Woody. However there are patches floating around to add this functionality. The patches provided below are originally from the current SUSE version of ppp which ships with PPPoA support. I have extracted these patches and verified that they work with both the standard ppp-2.4.1 distribution and the debian woody ppp-2.4.1 source package.

Before we start with all the configuration you should be aware of the fact that you need to connect your ADSL modem directly to your Linux box (eg via USB or as internal PCI card) - it is not possible to have it connected via Ethernet.

Kernel Options

You'll need a kernel that has ATM support compiled in. Make sure the following options are enabled:

 -Code maturity level options
  [*] Prompt for development and/or incomplete code/drivers
 -Networking options
  [*] Asynchronous Transfer Mode (ATM) (EXPERIMENTAL)
  [*]   Classical IP over ATM (NEW)
  <*>   LAN Emulation (LANE) support (NEW)
  <*>   RFC1483/2684 Bridged protocols (NEW)

You'll also need standard PPP support in your kernel, for obvious reasons:

 -Network Device Support
  <M> PPP (point-to-point protocol) support
  [*]   PPP multilink support (EXPERIMENTAL)
  [*]   PPP filtering
  <M>   PPP support for async serial ports
  <M>   PPP support for sync tty ports
  <M>   PPP Deflate compression
  <M>   PPP BSD-Compress compression
  <M>   PPP over Ethernet (EXPERIMENTAL)
  <M>   PPP over ATM (EXPERIMENTAL) (NEW)

And recompile your kernel. Note - at least one person had trouble with pppoa not working which was apparently solved by compiling atm and ppp over atm support into the kernel instead of as modules . - The problem with using modules for pppoa is that if you use too many you get a large dependency tree, this is the problem mentioned above. It is entirely possible to run pppoa (and other ppp related code) as modules provided that you are aware of the dependencies and ensure that the modules are loaded in the correct order.
modprobe should surely handle this itself, as it understands module dependencies. Can you elaborate on the correct module load order? --DanielLawson
I've not yet seen modprobe do it correctly (i've never spent the time trying), i am not sure what the correct order is and it is dependent on what parts you have as modules and what parts are built in, specifically I think that pppoa requires pppoe to add some hooks but as they are not strictly dependent on each other the information that modprobe requires is not present. --MattBrown
There are problems with Kernel Oops when you try doing all this with Kernel version 2.4.22 - this is supposed to be fixed in the 'pre' patches for 2.4.23, but 2.4.21 works fine. --WarrenBoyd?
There are problems with Kernel Errors leading to stalled pppd with latest 2.4.X and 2.6.0 when using ipv6 on ppp with ipv6 ipsec enabled. Deactivate ipv6 privacy extensions in your kernel for pppd to reconnect correctly. dmesg error is unregister_netdevice: waiting for ppp0 to become free. Usage count = 1. --TheMadHatter

Precompiled .deb

If you are impatient and just want to get PPPoA up and running on your system without compiling from source the following debs may work for you. Grab whichever one is appropriate for your version of debian. If you dont run debian woody or sarge, you have to compile from source.

Woody
http://www.wlug.org.nz/archive/LinuxPPPoA/ppp_2.4.1.uus-4pppoa_i386.deb

Skip ahead to the Configuring PPPoA section.

Compiling from Source

  1. You will need the following 3 patches

  2. You will also need to have the atm-tools and atm-dev packages installed

Compiling from the Standard ppp distribution

  1. Obtain ppp-2.4.1
  2. Download the 3 patches from above
  3. Extract ppp-2.4.1 and change into the directory
  4. patch -p1 < 028_pppoe.diff
  5. patch -p1 < 029_pwfd.diff
  6. patch -p1 < 030_pppoatm.diff
  7. ./configure
  8. make
  9. make install

Compiling from the Debian Source

  1. apt-get install atm-dev (its needed, but not listed in the builddepends for the .deb)
  2. apt-get source ppp
  3. copy the 3 patch files to ppp-2.4.1.uus/debian/patches
  4. cd ppp-2.4.1.uus/
  5. debian/rules unpatch
  6. debian/rules patch
  7. dpkg-buildpackage
  8. cd ..
  9. dpkg -i ppp_2.4.1.uus-4_i386.deb

Notes on compiling from Debian source

  • I found it necessary to edit pppd/plugins/Makefile and to add -lresolv to the link options for pppoatm.so.
  • The above procedure does not work for ppp_2.4.1.uus-5, which has been changed sufficiently that the patches do not apply. - olly@lfix.co.uk

Configuring PPPoA

This step is much the same as it would be for compiling PPP normally, if you are unfamiliar with PPP it might be an idea to read a HOWTO or something. I have ppp configured so that it is easy to switch between my normal dsl provider (World-Net) and JSGames. I will show you how to set this up.

Create configuration files in /etc/ppp/peers for your dsl provider and JSGames. The most important line to have in each file is

plugin /usr/lib/pppd/2.4.1/pppoatm.so 0.100

This tells pppd to load the PPPoA plugin. Download my sample configs to see the full set of options

http://www.wlug.org.nz/archive/LinuxPPPoA/ppp-provider http://www.wlug.org.nz/archive/LinuxPPPoA/ppp-jsgames

Also make sure you have 'noauth' in there somewhere, else the RAN will try and authenticate against you, and fail miserably.

My configuration is setup to use PAP authentication, make sure you have a line such as

username@provider * yourpassword

in your /etc/ppp/pap-secrets file. Download my sample pap-secrets file

http://www.wlug.org.nz/archive/LinuxPPPoA/pap-secrets

Finally setup ppp to start on boot

  • mv /etc/ppp/no_ppp_on_boot /etc/ppp/ppp_on_boot
  • chmod +x /etc/ppp/ppp_on_boot
  • Edit /etc/ppp/ppp_on_boot so that it calls your adsl provider on startup ie for the example provider you download above we would have the line

    • $PPPD call ppp-provider
  • Download my example http://www.wlug.org.nz/archive/LinuxPPPoA/ppp_on_boot

That's it. You should be done!!

Traverse Technologies Pulsar PCI ADSL modem using Linux

Conexant Access Runner PCI ADSL modem using Linux

See AccessRunnerADSLModem for details on configuration of this modem.