Provided by: pppoe_3.12-1.2ubuntu3_amd64 bug


       pppoe - user-space PPPoE client.


       pppd pty 'pppoe [pppoe_options]' [pppd_options]

       pppoe -A [pppoe_options]


       pppoe  is  a user-space client for PPPoE (Point-to-Point Protocol over Ethernet) for Linux
       and other UNIX systems.  pppoe works in concert with the pppd PPP daemon to provide a  PPP
       connection over Ethernet, as is used by many DSL service providers.


       -I interface
              The  -I  option  specifies  the  Ethernet  interface  to  use.   Under Linux, it is
              typically eth0 or eth1.  The interface should be "up" before you start  pppoe,  but
              should not be configured to have an IP address.

       -T timeout
              The  -T  option  causes pppoe to exit if no session traffic is detected for timeout
              seconds.  I recommend that you use this option as an extra safety measure,  but  if
              you  do, you should make sure that PPP generates enough traffic so the timeout will
              normally not be triggered.  The best way to do this is to use the lcp-echo-interval
              option  to  pppd.   You should set the PPPoE timeout to be about four times the LCP
              echo interval.

       -D file_name
              The -D option causes every packet to be dumped to the specified file_name.  This is
              intended for debugging only; it produces huge amounts of output and greatly reduces

       -V     The -V option causes pppoe to print its version number and exit.

       -A     The -A option causes pppoe to send a PADI packet and then print the names of access
              concentrators  in  each  PADO  packet  it  receives.   Do  not  use  this option in
              conjunction with pppd; the -A option is meant to  be  used  interactively  to  give
              interesting information about the access concentrator.

       -S service_name
              Specifies  the desired service name.  pppoe will only initiate sessions with access
              concentrators which can provide the specified service.  In most cases,  you  should
              not  specify  this  option.  Use it only if you know that there are multiple access
              concentrators or know that you need a specific service name.

       -C ac_name
              Specifies the desired access concentrator name.  pppoe will only initiate  sessions
              with the specified access concentrator.  In most cases, you should not specify this
              option.  Use it only if you know that there are multiple access concentrators.   If
              both  the  -S  and  -C  options  are  specified,  they must both match for pppoe to
              initiate a session.

       -U     Causes pppoe to use the Host-Uniq tag in its discovery packets.  This lets you  run
              multiple  pppoe  daemons  without having their discovery packets interfere with one
              another.  You must supply this option to all pppoe daemons if  you  intend  to  run
              multiple  daemons  simultaneously.   The  specific  Host-Uniq  value  used  is  the
              hexadecimal representation of the pppoe process's PID.

       -W value
              Causes pppoe to use the Host-Uniq tag in its discovery packets, and furthermore  to
              set  the  value  of Host-Uniq to value.  Use with caution.  Note that -W and -U are

       -s     Causes pppoe to use synchronous PPP encapsulation.  If you use  this  option,  then
              you  must  use the sync option with pppd.  You are encouraged to use this option if
              it works, because it greatly reduces the CPU overhead of pppoe.  However, it MAY be
              unreliable  on slow machines -- there is a race condition between pppd writing data
              and pppoe reading it.  For this reason, the default setting  is  asynchronous.   If
              you  encounter bugs or crashes with Synchronous PPP, turn it off -- don't e-mail me
              for support!

       -m MSS Causes pppoe to clamp the TCP maximum segment size at the specified value.  Because
              of  PPPoE  overhead,  the maximum segment size for PPPoE is smaller than for normal
              Ethernet encapsulation.  This could cause problems for machines on a LAN  behind  a
              gateway  using PPPoE.  If you have a LAN behind a gateway, and the gateway connects
              to the Internet using PPPoE, you are strongly recommended to use a -m 1412  option.
              This avoids having to set the MTU on all the hosts on the LAN.

       -H MAC Causes  pppoe  to  use the indicated Ethernet MAC address as the source address for
              sending packets.  MAC must be specified in the AA:BB:CC:DD:EE:FF syntax.   If  this
              option is specified, pppoe puts the interface into promiscuous mode.

       -p file
              Causes  pppoe  to  write its process-ID to the specified file.  This can be used to
              locate and kill pppoe processes.

       -e sess:mac
              Causes pppoe to skip the discovery phase and move directly to  the  session  phase.
              The  session is given by sess and the MAC address of the peer by mac.  This mode is
              not meant for normal use; it is designed only for pppoe-server(8).

       -n     Causes pppoe not to open a discovery socket.  This mode is  not  meant  for  normal
              use; it is designed only for pppoe-server(8).

       -k     Causes  pppoe  to  terminate  an existing session by sending a PADT frame, and then
              exit.  You must use the -e option in conjunction with this option  to  specify  the
              session  to  kill.   This may be useful for killing sessions when a buggy peer does
              not realize the session has ended.

       -d     Causes pppoe to perform discovery and then exit, after printing session information
              to  standard  output.   The  session  information  is printed in exactly the format
              expected by the -e option.  This  option  lets  you  initiate  a  PPPoE  discovery,
              perform some other work, and then start the actual PPP session.  Be careful; if you
              use this option in a loop, you can create many sessions, which may annoy your peer.

       -f disc:sess
              The -f option sets the Ethernet frame types for PPPoE discovery and session frames.
              The  types  are  specified  as  hexadecimal numbers separated by a colon.  Standard
              PPPoE uses frame types 8863:8864.  You should not use this option  unless  you  are
              absolutely  sure  the  peer you are dealing with uses non-standard frame types.  If
              your ISP uses non-standard frame types, complain!

       -h     The -h option causes pppoe to print usage information and exit.


       PPPoE (Point-to-Point Protocol over Ethernet) is described in RFC 2516 and is  a  protocol
       which allows the session abstraction to be maintained over bridged Ethernet networks.

       PPPoE works by encapsulating PPP frames in Ethernet frames.  The protocol has two distinct
       stages:  The discovery and the session stage.

       In the discovery stage, the  host  broadcasts  a  special  PADI  (PPPoE  Active  Discovery
       Initiation)  frame  to  discover  any  access  concentrators.   The  access  concentrators
       (typically, only one access concentrator) reply with PADO (PPPoE Active  Discovery  Offer)
       packets, announcing their presence and the services they offer.  The host picks one of the
       access concentrators and transmits a PADR (PPPoE Active Discovery Request) packet,  asking
       for  a  session.   The  access  concentrator  replies  with a PADS (PPPoE Active Discovery
       Session-Confirmation) packet.  The protocol then moves to the session stage.

       In the session stage, the host and access concentrator exchange  PPP  frames  embedded  in
       Ethernet  frames.   The normal Ethernet MTU is 1500 bytes, but the PPPoE overhead plus two
       bytes of overhead for the encapsulated PPP frame mean that the MTU of the PPP interface is
       at most 1492 bytes.  This causes all kinds of problems if you are using a Linux machine as
       a firewall and interfaces behind the firewall have an MTU greater than 1492.  In fact,  to
       be safe, I recommend setting the MTU of machines behind the firewall to 1412, to allow for
       worst-case TCP and IP options in their respective headers.

       Normally, PPP uses the Link Control Protocol (LCP) to shut down a PPP link.  However,  the
       PPPoE  specification  allows  the  link  to be shut down with a special PADT (PPPoE Active
       Discovery Terminate) packet.  This  client  recognizes  this  packet  and  will  correctly
       terminate if a terminate request is received for the PPP session.


       My design goals for this PPPoE client were as follows, in descending order of importance:

       o      It must work.

       o      It must be a user-space program and not a kernel patch.

       o      The code must be easy to read and maintain.

       o      It must be fully compliant with RFC 2516, the proposed PPPoE standard.

       o      It  must  never hang up forever -- if the connection is broken, it must detect this
              and exit, allowing a wrapper script to restart the connection.

       o      It must be fairly efficient.

       I believe I have achieved all of these goals, but (of  course)  am  open  to  suggestions,
       patches   and  ideas.   See  my  home  page,,  for  contact


       For best results, you must give pppd an mtu option of 1492.  I have observed problems with
       excessively-large  frames  unless  I  set  this  option.   Also,  if pppoe is running on a
       firewall machine, all machines behind the firewall should have MTU's of 1412.

       If you have problems, check your system logs.  pppoe logs interesting  things  to  syslog.
       You may have to turn on logging of debug-level messages for complete diagnosis.


       pppoe  was written by Dianne Skoll <>, with much inspiration from an
       earlier version by Luke Stras.

       The pppoe home page is


       pppd(8),            pppoe-sniff(8),            pppoe-server(8),            pppoe-relay(8),