prol2tpd.conf(5)                ProL2TP Manual                prol2tpd.conf(5)



NAME
       prol2tpd.conf - prol2tpd configuration file

SYNOPSIS
       This document describes the configuration file syntax of prol2tpd.

DESCRIPTION
       prol2tpd  is  configured  using  a  configuration  file which is parsed
       during initial start up, and again on receipt of a SIGHUP signal.

       The configuration file provides configuration  parameters  for  tunnels
       and  sessions.   It  can be used to define tunnel and session instances
       for prol2tpd to initiate as a client.  It can also be  used  to  define
       mappings  to allow prol2tpd to associate incoming network requests with
       configuration when running as a server.

FILE SYNTAX
       Configuration parameters are organised  into  named  blocks  which  are
       delimited by braces { }:

              block-type "name" {
                  param1 value
                  param2 value
              }

       Parameters  are  identified  within the block by a field name, and call
       out one or more values.  Each parameter is delimited by a newline.

       Parameter values may be one of  a  range  of  types.   Some  parameters
       accept  more  than  one value type, or even lists of values.  The basic
       value types are as follows:

       * boolean: either `true' or `false'

       * number: an unsigned integer

       * string: a free-form string

       * ip: an IPv4 or IPv6 address.  IP addresses may include a port as  per
         RFC          3986,         for         example         10.5.0.1:9000,
         [2001:db8:1f70::999:de8:7648:6e8]:9000.  IP  addresses  may  also  be
         specified as a string, in which case prol2tpd will resolve them to an
         IP using DNS lookup.

       * mac: a MAC address written as a colon-delimited  set  of  hex  bytes,
         e.g. 11:22:ef:01:a3:b9

       * hex: an arbitrary hexadecimal buffer prefixed with `hex:'

       The  hash  character  #  is used to comment lines in the configuration.
       Anything following the # character is ignored by prol2tpd.

BLOCK TYPES AND PARAMETERS
       The prol2tpd syntax supports the following block types:

       * system: system-wide configuration

       * peer profile: maps tunnel creation  requests  from  peers  to  tunnel
         configuration to use for connections when acting as a server

       * tunnel profile:

         * defines  tunnel  configuration  for  use  with  a peer profile when
           acting as a server

         * provides an inheritance mechanism for sharing common  configuration
           between tunnel instances created by prol2tpd

       * session profile:

         * maps  session creation requests from peers to session configuration
           when acting as a server

         * provides an inheritance mechanism for sharing common  configuration
           between session instances created by prol2tpd

       * pseudowire profile: defines pseudowire parameters to be used

       * tunnel: defines a tunnel instance for prol2tpd to create as a client

       * session:  defines  a  session  instance  for  prol2tpd to create as a
         client

   SYSTEM
              system {
                  # Configuration parameters
              }

       The system block configures system-wide parameters.  There is  at  most
       one instance of this block, and naming it is therefore optional.

       The system block accepts the following parameters:

       log_level [error|warning|notice|info|debug]
              Specifies  the  system-wide  logging  level  for  prol2tpd.   It
              controls  the  verbosity  of  prol2tpd's  logging.   The  system
              log_level  parameter  is  inherited  by  all  tunnel and session
              instances, unless they  override  the  setting  with  their  own
              configuration.  Default value: notice.

       max_tunnels
              Specifies the maximum number of tunnels that prol2tpd will allow
              to concurrently exist.  Default value: 0 (unlimited).

       max_sessions
              Specifies the maximum number  of  sessions  that  prol2tpd  will
              allow to concurrently exist.  Default value: 0 (unlimited).

       hostname
              Specifies  the  string  that  prol2tpd  will  use for the system
              hostname as advertised to peers in the Host Name AVP.  If  unset
              prol2tpd  will  derive  a  value  from  the running system using
              gethostname(2).  Individual tunnel instances  may  override  the
              system-wide hostname setting.

       router_id
              Specifies the 32-bit value that prol2tpd will use for the system
              router ID as advertised to peers in the L2TPv3  Router  ID  AVP.
              If  unset  prol2tpd  will derive a value from the running system
              using the first valid public IPv4 address.  Systems with no IPv4
              address  using  L2TPv3  should  set this configuration parameter
              explicitly.

       listen Specifies one or more addresses for prol2tpd to  listen  on  for
              connection  requests  from  peers.   If  a given address doesn't
              specify a port, prol2tpd will listen on the default L2TP port as
              defined  by  getservbyname(3).   If no listen addresses are set,
              prol2tpd does not listen for incoming tunnel setup  requests  so
              works only as an L2TP client.

   PEER PROFILE
              peer profile "hostname" {
                  # Configuration parameters
              }

       The  peer  profile  block  defines  tunnel  configuration to use for an
       incoming tunnel create request from a peer.  If no  peer  profiles  are
       defined, incoming tunnel setup requests will be rejected.

       The peer profile block accepts the following parameters:

       peer_ipaddr
              Specifies  the  peer  IP  address,  which is used when mapping a
              create request to tunnel configuration.  If not  set,  the  peer
              profile  may  only  be  matched  by  the  hostname  or router id
              parameters from the peer's tunnel setup request.

       netmask
              Specifies the peer  IP  address  netmask,  which  is  used  when
              mapping a create request to a tunnel configuration.  The netmask
              defines the mask of bits in the IP address that prol2tpd  should
              consider when comparing IP addresses.

       router_id
              Specifies  the  peer  router  ID  (as per the RFC 3931 Router ID
              AVP), which is used when mapping  a  create  request  to  tunnel
              configuration.

       tunnel_profile_name
              Specifies  the  tunnel  configuration  to  use for tunnel create
              requests matching this peer profile.

   TUNNEL PROFILE
              tunnel profile "name" {
                  # Configuration parameters
              }

       The tunnel profile block defines a named set  of  tunnel  configuration
       which  can  be  referenced  when  creating  tunnel  instances, and when
       handling incoming tunnel  creation  requests  from  a  peer.   Multiple
       tunnel  profiles  may  be  used in the configuration file.  Each tunnel
       profile block must have a unique name.

       The tunnel profile block accepts the following parameters:

       local_ipaddr
              Specifies the local IP address for the tunnel instance  to  bind
              to  during  initialisation.   By  default  the  tunnel will bind
              automatically when connecting  to  the  peer:  the  local_ipaddr
              setting  allows  this  to  be  overridden  if necessary.  The IP
              address may be specified as an IPv4 or IPv6 address and port; or
              as a string to be resolved using DNS lookup.

       proto_version [0|2|3]
              Specifies the L2TP protocol version to be used for the tunnel: 2
              for L2TPv2 as per RFC 2661, 3 for L2TPv3 as per RFC 3931,  or  0
              for  L2TPv3  in  fallback  mode  as  per RFC 3931 sectino 4.7.3.
              Default value: 0.

       dscp   Specifies the Differentiated Services  field  in  the  IPv4/IPv6
              packet  header  of  all packets associated with the tunnel.  The
              parameter value is an integer which is written into the DSCP+ECN
              field  of  IPv4  headers  or  TCLASS field of IPv6 headers.  The
              integer value must be a valid for the  protocol  or  the  tunnel
              will fail to establish.  Default value: 0 (no DSCP set).

       encap_type [udp|ip]
              Specifies  the  tunnel  transport  encapsulation type for L2TPv3
              tunnels as per RFC 3931 section 4.1 (UDP  or  IP).   For  L2TPv2
              tunnels  this  parameter  is  ignored  since L2TPv2 is UDP only.
              Default value: udp.

       use_tiebreaker
              Enable use of a tiebreaker when setting up a tunnel as  per  RFC
              2661   section   4.4.3   (Tie   Breaker  AVP),  to  enforce  the
              establishment of one tunnel between two peers.  It is  typically
              used  to  resolve  races where a tunnel may be initiated by both
              the LAC and LNS.  Default value: false.

       framing_cap [sync|async|any]
              Specifies the value to use in the Framing  Capabilities  AVP  in
              order  to  advertise  the capabilities of the network beyond the
              L2TP tunnel.  Default value: any.

       bearer_cap [digital|analog|any]
              Specifies the value to use in the  Bearer  Capabilities  AVP  in
              order  to  advertise  the capabilities of the network beyond the
              L2TP tunnel.  Default value: any.

       host_name
              Specifies  the  value  to  use  in  the  Host  Name   AVP   when
              establishing the tunnel.  By default prol2tpd will use the value
              from the system configuration block, or derive a value from  the
              running   system   if   no   host   name  is  specified  in  the
              configuration.

       secret Shared secret for use in tunnel authentication as per  RFC  2661
              section  5.1.1  and  RFC 3931 section 4.3; and for AVP hiding as
              per RFC 2661 section 4.3 and RFC 3931 5.3.  When AVP  hiding  is
              enabled  for a tunnel this parameter must be set.  Default value
              none (no shared secret).

       auth_mode [none|challenge|authenticated]
              Specifies the tunnel authentication mode.  The L2TPv2 and L2TPv3
              protocols specify two similar authentication mechanisms:

              * challenge:  enables  use  of  Challenge and Challenge Response
                AVPs as per RFC 2661 section 5.1.1

              * authenticated: enables Control Message Authentication  as  per
                RFC 3931 section 4.3 (Control Message Authentication Nonce and
                Message Digest AVPs).

              Default value: none (no authentication).

       message_digest [none|md5|sha1]
              Specifies the digest calculation algorithm  to  use  for  L2TPv3
              tunnels: this controls the generation of the Message Digest AVP.
              If this parameter is specified without auth_mode and  secret,  a
              message  digest  is  added  to control messages as an additional
              data integrity check.  If auth_mode and secret are set, then the
              message  digest is used as an authentication mechanism.  Default
              value md5 if auth_mode and secret are set, none otherwise.

       hide_avps
              Enable AVP hiding as per RFC  2661  section  4.3  and  RFC  3931
              section 5.3.  If this parameter is enabled, the tunnel must have
              a shared secret set using the secret parameter.  Default  value:
              false.

       disable_hidden_avp_padding
              If  AVP hiding is enabled, this parameter may be used to disable
              padding of the hidden values.   RFC  2661  and  3931  allow  for
              hidden AVP values to be padded in order to obscure the length of
              the original value.  By default prol2tpd does  so  for  improved
              security,  but  not  all L2TP peers support padded values.  This
              parameter may be used to disable  padding  for  interoperability
              with such peers.  Default value: false.

       pseudowire_caps
              For L2TPv3, this parameter specifies the set of pseudowire types
              to include in the Pseudowire Capabilities  List  AVP.   This  is
              specified  as  a  list  of numbers as per RFC 3931 section 10.6.
              This parameter is ignored for L2TPv2 tunnels since  L2TPv2  only
              supports  PPP  pseudowires.   By  default  prol2tpd  derives the
              supported pseudowire types automatically at runtime based on the
              installed plugins.

       log_level [error|warning|notice|info|debug]
              Specifies  the  log  level  to  use for the tunnel instance.  It
              controls the verbosity of the tunnel's logging,  overriding  the
              value set in the system configuration block.

       use_udp_checksums
              Enable  UDP  checksum use for data frames when UDP encapsulation
              is used in a tunnel.  Default value: false.

       hello_timeout
              Specify timeout in seconds to use for periodic keepalive (hello)
              control  messages  as  per  RFC  2661  section  5.5 and RFC 3931
              section 4.4.  If set to 0, transmission of keepalive messages is
              disabled.  Default value: 60 seconds.

       max_retries
              Specifies  the  maximum  number  of  times  the tunnel transport
              should retransmit an unacknowledged control packet before giving
              up and flagging the transport as being down.  Default value: 5.

       rx_window_size
              Specifies  the  value to offer to the peer in the Receive Window
              Size AVP as per RFC 2661 section  4.4.3  and  RFC  3931  section
              3931.   This controls how many control packets the peer may send
              before it must wait for an acknowledgment.  Default value: 10.

       tx_window_size
              Specifies the number of control packets the tunnel may  send  to
              the  peer  before it must wait for an acknowledgment.  The value
              specified here may be  overridden  by  the  peer  during  tunnel
              establishment.  Default value: 10.

       retry_timeout
              Specifies the timeout in seconds to use before sending the first
              retry of an unacknowledged control packet.   Subsequent  retries
              use an exponential backoff.  Default value: 1 second.

       idle_timeout
              Specifies  the  timeout  in  seconds  for  the  tunnel to remain
              established after its last session has been torn down.  Set to 0
              to  allow  the  tunnel  to  persist  forever  with  no sessions.
              Default value: 0 seconds.

       stopccn_retransmit_period
              Specifies the timeout in seconds for  the  tunnel  to  wait  for
              STOPCCN  retransmit  during shutdown as per RFC 2661 section 5.7
              and RFC 3931 section 3.3.2.   If  set  to  0,  the  tunnel  will
              default  to  using  a 31s timeout as per the RFC recommendation.
              Default value: 0 (wait for 31s).

       mtu    Specifies the default MTU value to use for all sessions  in  the
              tunnel:  individual sessions may override the tunnel value.  May
              be specified either as a number value, or as the special  string
              `kernel'  which is used to allow the data plane to decide on the
              MTU based on packet header overhead calculation.  Default value:
              kernel (allow the dataplane to calculate the MTU).

       session_profile_name
              For  incoming  session  creation  requests  from  the peer, this
              specifies the session profile to  use  for  configuration.   For
              L2TPv3   tunnels,  session  profiles  may  also  be  matched  by
              remote_end_id.    A    match    by    remote_end_id    overrides
              session_profile_name.   If session_profile_name is not set and a
              session profile cannot be matched by remote_end_id,  the  tunnel
              will  not  allow  the  incoming  session  request.  For outgoing
              session creation requests, this setting sets the session profile
              to use for the session's parameters.

       establish_timeout
              Specifies  the  timeout in seconds that the tunnel will wait for
              the peer to complete the tunnel setup  message  exchange.   This
              protects  against  cases where a buggy or slow peer acknowledges
              control packets but does not complete the tunnel setup  exchange
              in a timely manner.  Default value: 120 seconds.

       disable_session_tiebreaker
              Set to disable the L2TPv3 tie breaker algorithm as referenced in
              RFC 3931 section 5.4.4 (Remote End ID).  Per  the  RFC,  if  two
              sessions using the same remote end ID try to establish, only one
              can win, and the winner is chosen using the Session Tie  Breaker
              AVP.   For  interoperability with peers not fully supporting the
              RFC, this parameter skips the detection of remote end ID clashes
              during  session  establishment  in  the  tunnel.  Default value:
              false (session remote end ID clashes are detected and  prevented
              as per the RFC).

       avp_extensions
              Specifies  the  AVP  extensions  to  enable  in the tunnel, as a
              space-separated list of extension names  (e.g. l2tp_avp_cisco.so
              l2tp_avp_add_protover.so).  See the EXTENSIONS section below for
              more details.  By default no AVP extensions are used.

   SESSION PROFILE
              session profile "name" {
                  # Configuration parameters
              }

       The session profile block defines a named set of session  configuration
       which  can  be  referenced  when  creating  session instances, and when
       handling incoming session creation  requests  from  a  peer.   Multiple
       session  profiles  may be used in the configuration file.  Each session
       profile block must have a unique name.

       The session profile block accepts the following parameters:

       pseudowire_profile_name
              Specifies the pseudowire profile to use for  the  session.   The
              pseudowire  profile  defines  configuration  for the pseudowire,
              which varies by pseudowire type.

       log_level [error|warning|notice|info|debug]
              Specifies the log level to use for  the  session  instance.   It
              controls  the verbosity of the session's logging, overriding the
              value set in the system configuration block.

       use_sequence_numbers
              Enable use of sequence numbers  in  data  packets  if  the  peer
              supports them.  Note that L2TP sequence numbers are used only to
              detect and optionally reorder packets that are delivered out  of
              sequence.   Sequence  numbers do not provide a reliable delivery
              mechanism.  Default value: false.

       reorder_timeout
              Specifies the  timeout  in  milliseconds  to  wait  for  out-of-
              sequence  data  packets before discarding them.  If set to 0, do
              not reorder out-of-sequence packets and  instead  discard  them.
              This  parameter  is  ignored if use_sequence_numbers is not set.
              Default value: 0 (discard out-of-sequence packets).

       priv_group_id
              Specifies the value to be sent in the Private Group ID AVP, used
              to separate the session into a named administrative group.

       interface_name
              Specifies the name to be used for the session network interface.
              By default sessions are automatically assigned unique  interface
              names.

       framing_type [sync|async|any]
              Specifies  the framing type use in the Framing Type AVP in order
              to advertise the capabilities of the  network  beyond  the  L2TP
              session.  Default value: any.

       bearer_type [digital|analog|any]
              Specifies the bearer type use in the Bearer Type AVP in order to
              advertise the  capabilities  of  the  network  beyond  the  L2TP
              session.  Default value: any.

       tx_connect_speed
              Specifies  the  value  to  use  in  the  TX  Connect  Speed  AVP
              indicating the speed in bits per second.  Default value: 0.

       rx_connect_speed
              Specifies  the  value  to  use  in  the  RX  Connect  Speed  AVP
              indicating the speed in bits per second.  Default value: 0.

       establish_timeout
              Specifies  the timeout in seconds that the session will wait for
              the peer to complete the session setup message  exchange.   This
              protects  against  cases where a buggy or slow peer acknowledges
              control packets but does not complete the session setup exchange
              in  a  timely  manner.   If set to 0 no timeout is set.  Default
              value: 0.

       cookie_len [0|4|8]
              Specifies the length of cookie to send in  the  L2TPv3  Assigned
              Cookie  AVP,  which  is  randomly generated and may be of 4 or 8
              bytes in length.  If set to 0, the session  cookie  is  disabled
              and  the Assigned Cookie AVP is not included in control packets.
              Default value: 0 (AVP disabled).

       remote_end_id
              Specifies the value to send in the L2TPv3  Remote  End  ID  AVP.
              The  value  may  be  specified  as  a  string  or  a  hex buffer
              (e.g. hex:12e6b0a1).

       use_tiebreaker
              Enable use of a tiebreaker when setting up an L2TPv3 session  as
              per  RFC  3931  section  5.4.4  (L2TPv2 does not specify session
              tiebreakers).  Default value: true.

       l2spec_type
              Specifies the value to send in the L2TPv3  L2-Specific  Sublayer
              AVP.  The value may be specified as:

              * "none"  (or integer value 0): there is no L2-Specific sublayer
                present.

              * "default"  (or  integer  value  1):  the  default  L2-Specific
                sublayer is used.

              * "donotcare":  prol2tpd  will  set  the L2-Specific sublayer to
                whatever the peer sends.

              Default value: donotcare (use whatever the peer  specifies)  for
              network requests; default for local instances.

       physical_channel_id
              Specifies  the  value  to  send  in the Physical Channel ID AVP,
              which encodes a vendor-specific channel number used for a  call;
              intended  for logging purposes only.  The ID is a numeric value.
              If it is set to 0 the AVP is not included  in  control  packets.
              Default value: 0 (AVP disabled).

       user_data
              Arbitrary  string  which  is  included in some prol2tpd session-
              related IPC events, and which is passed to the prol2tpd  session
              scripts for integration purposes.

   PSEUDOWIRE PROFILE
              pseudowire profile "name" {
                  # Configuration parameters
              }

       The pseudowire profile block defines a named set of pseudowire-specific
       configuration which forms  part  of  the  session  configuration.   The
       pseudowire  profile  contents  are defined differently depending on the
       pseudowire type (PPP, Ethernet, or VLAN).  The type is specified  using
       the pseudowire_type parameter:

       pseudowire_type [ppp|eth|vlan|ip]
              Specifies the pseudowire type.  This parameter must be set.

       The  following  common  parameters  are accepted for for all pseudowire
       types:

       local_ipaddr
              Specifies the local IP  address  to  assign  to  the  pseudowire
              network interface.

       peer_ipaddr
              Specifies  the  peer  IP  address  to  assign  to the pseudowire
              network interface.

       mtu    Specifies the MTU to use for the pseudowire  network  interface.
              If  unset,  prol2tpd  defaults  to  the  value  specified in the
              session configuration.

       The following parameters apply to PPP pseudowires:

       user_name
              Specifies the user name to use for connection authentication.

       user_password
              Specifies   the   user   password   to   use   for    connection
              authentication.

       extra_options
              Specifies an arbitrary string of options to pass to propppd when
              initialising  the  pseudowire.   These  options  are  parsed  by
              propppd   in  the  same  way  that  command  line  arguments  to
              propppctl(1) would be.

       The following parameters apply to Ethernet pseudowires:

       bridge_name
              Specifies the name of a bridge  interface  to  add  the  network
              interface to.  The handling of creating the bridge interface (if
              required) and adding the interface to the bridge is deferred  to
              the  prol2tpd  session scripts and isn't directly implemented by
              prol2tpd itself.

       mac_addr
              Specifies the MAC address to  use  for  the  pseudowire  network
              interface.

       The following parameters apply to VLAN pseudowires:

       vlan_id
              Specifies  the  VLAN  ID  to  apply  to  the session as per IEEE
              802.1Q.

   TUNNEL
              tunnel "name" {
                  # Configuration parameters
              }

       The tunnel block defines a tunnel  instance  for  prol2tpd  to  create.
       Tunnel  instances  named  in  the configuration file are persistent: if
       they fail for any reason prol2tpd will recreate them.

       The tunnel block accepts all the configuration parameters  defined  for
       the  tunnel  profile  block,  and  additionally  accepts  the following
       parameters:

       tunnel_profile_name
              Specifies a tunnel profile to inherit from.  The tunnel instance
              may  optionally  override  any  parameter specified in the named
              profile.

       peer_ipaddr
              Specifies the IP address of the tunnel peer.

   SESSION
              session "name" {
                  # Configuration parameters
              }

       The session block defines a session instance for  prol2tpd  to  create.
       It  must  be contained within a parent tunnel block.  Session instances
       named in the configuration file are persistent: if they  fail  prol2tpd
       will recreate them when their parent tunnel is recreated.

       The  session block accepts all the configuration parameters defined for
       the session profile  block,  and  additionally  accepts  the  following
       parameters:

       session_profile_name
              Specifies  a  session  profile  to  inherit  from.   The session
              instance may optionally override any parameter specified in  the
              named profile.

CONFIGURATION LOOKUP
       When handling incoming L2TP tunnel and session setup requests, prol2tpd
       uses parameters in the L2TP requests to lookup configuration to use for
       the  new  tunnel  or  session.   The  mechanism  uses  L2TP  parameters
       contained in received L2TP control messages to find locally  configured
       peer, tunnel, session and pseusowire profiles.

   TUNNEL
       If an L2TP SCCRQ message is received, it indicates that a peer wants to
       open a tunnel with the local system.  The SCCRQ is matched  to  a  peer
       profile.   If  a  peer  profile cannot be found, the SCCRQ is rejected.
       Thus prol2tpd will accept  tunnel  setup  requests  only  from  allowed
       peers.

       One  or  more  parameters  of  the  SCCRQ  are  used to lookup the peer
       profile:

       * router_id AVP in the SCCRQ (L2TPv3 only)

       * hostname AVP in the SCCRQ

       * source IP address of the SCCRQ

       A router_id AVP is matched by  the  router_id  parameter  of  the  peer
       profile.

       A hostname is matched by the peer profile name.

       IP  addresses are matched by peer_ipaddr and netmask parameters of peer
       profiles.  These two parameters in combination can match  a  single  IP
       address  or  a range of IP addresses.  A peer_ipaddr 0.0.0.0 or :: will
       match any IPv4 or IPv6 address respectively.

       Lookups are always done in  the  order  router_id,  hostname,  peer  IP
       address  and  the  lookup completes on first match.  For example, if an
       SCCRQ  has  router_id=42  and  hostname=`bob',  a  peer  profile   with
       router_id=42  set will be matched in preference to another peer profile
       named `bob'

       The  peer  profile  defines  a  tunnel  profile   and   prol2tpd   uses
       configuration  defined  in  that  tunnel  profile  for  the  new tunnel
       instance.

   SESSION
       Once a tunnel is established, a peer may  request  that  a  session  is
       estabished by sending an L2TP ICRQ message.  Parameters for the session
       are set in session and pseudowire profiles.

       For L2TPv2 tunnels, all sessions created by an ICRQ from the peer  will
       use the session profile called out by the tunnel profile.

       For  L2TPv3 tunnels, the ICRQ contains a remote_end_id AVP which can be
       used to lookup a session profile.  If a session profile is defined with
       a  matching remote_end_id value, it is used in preference to the tunnel
       profile's session_profile_name.  remote_end_id values  must  be  unique
       for  each  session.  Configuration of remote_end_id is set at each peer
       and is used as an identifier  for  the  session  such  that  each  peer
       configures its side of the session pseudowire interface independently.

       The  session  profile  references  a  pseudowire profile to use for the
       session by its pseudowire_profile_name parameter.

EXTENSIONS
       The L2TP protocol RFCs set rules about what an implementation  must  do
       if  it  receives  an  unrecognised  message or AVP and ProL2TP is fully
       compliant with these rules.  However, some  L2TP  implementations  have
       quirks  or  bugs  that  require prol2tpd to modify its protocol message
       handling to work with those implementations.   This  is  done  using  a
       number of AVP extensions (implemented as shared libraries) which may be
       enabled per tunnel using the avp_extensions parameter in the tunnel.

       ProL2TP is distributed with a number of AVP extensions:

       l2tp_avp_add_circuitstatus.so
              Some L2TPv3 messages must contain a CircuitStatus AVP  but  some
              L2TP  implementations  don't  include one.  This extension tells
              prol2tpd to add this AVP into the received message on behalf  of
              the  sender  such  that  the  message  passes  internal  message
              verification checks.

       l2tp_avp_add_protover.so
              Insert a  ProtocolVersion  AVP  into  transmitted  L2TPv3  SCCRQ
              messages.   Some  L2TPv3  implementations  require  this.   This
              extension is only  needed  if  a  peer  is  not  compliant  with
              RFC3931.

       l2tp_avp_add_pwtype.so
              Insert a PseudowireType AVP in transmitted L2TPv3 ICRP messages.
              Some L2TPv3 implementations require  this.   This  extension  is
              only needed if a peer is not compliant with RFC3931.

       l2tp_avp_cisco.so
              Include  Cisco vendor AVPs in L2TPv3 messages and handle them in
              received messages.  This is required to connect with most  Cisco
              L2TPv3  systems  since Cisco define their L2TPv3 extensions such
              that connections to a peer are refused if the peer doesn't  look
              like a Cisco.

       l2tp_avp_prefer_zlb.so
              Convert  outbound L2TPv3 ACK messages into ZLBs.  This extension
              is only needed if an L2TPv3 peer is not compliant  with  RFC3931
              and does not support the L2TPv3 ACK message.

       l2tp_avp_protover_mandatory.so
              Some    implementations    incorrectly    require    that    the
              ProtocolVersion AVP is marked mandatory by having the M bit set.
              This  extension tells prol2tpd to set the M bit in this AVP when
              it is included in transmitted messages.

       l2tp_avp_unhide_sccrq.so
              If AVP hiding is enabled, prol2tpd will hide some  AVPs  in  its
              transmitted    SCCRQ    messages    by   default.    Some   L2TP
              implementations cannot handle this, including some  Cisco.   Use
              this  extension  to  force  that  all AVPs in SCCRQ messages are
              transmitted unhidden.

       l2tp_avp_no_random_vector_in_ack.so
              By default prol2tpd includes the Random  Vector  AVP  in  L2TPv3
              Explicit  Ack  messages  if  AVP  hiding  is enabled.  Some L2TP
              implementations do not support this.  This extension removes the
              Random   Vector   AVP   from   ACK   messages  on  transmit  for
              interoperability with such implementations.

AUTHORS
       Katalix Systems, Ltd.



ProL2TP 2.6.4                    October 2024                 prol2tpd.conf(5)