Man Linux: Main Page and Category List


       pppoe - user-space PPPoE client.


       pppd ptypppoe [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 performance.

       -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.

       -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

       -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,

       -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

       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 information.


       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 David F. 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),