#
# Layer Two Tunneling Protocol (L2TP)
#

menuconfig L2TP
	tristate "Layer Two Tunneling Protocol (L2TP)"
	depends on (IPV6 || IPV6=n)
	depends on INET
	---help---
	  Layer Two Tunneling Protocol

	  From RFC 2661 <http://www.ietf.org/rfc/rfc2661.txt>.

	  L2TP facilitates the tunneling of packets across an
	  intervening network in a way that is as transparent as
	  possible to both end-users and applications.

	  L2TP is often used to tunnel PPP traffic over IP
	  tunnels. One IP tunnel may carry thousands of individual PPP
	  connections. L2TP is also used as a VPN protocol, popular
	  with home workers to connect to their offices.

	  L2TPv3 allows other protocols as well as PPP to be carried
	  over L2TP tunnels. L2TPv3 is defined in RFC 3931
	  <http://www.ietf.org/rfc/rfc3931.txt>.

	  The kernel component handles only L2TP data packets: a
	  userland daemon handles L2TP the control protocol (tunnel
	  and session setup). One such daemon is OpenL2TP
	  (http://openl2tp.org/).

	  If you don't need L2TP, say N. To compile all L2TP code as
	  modules, choose M here.

config L2TP_DEBUGFS
	tristate "L2TP debugfs support"
	depends on L2TP && DEBUG_FS
	help
	  Support for l2tp directory in debugfs filesystem. This may be
	  used to dump internal state of the l2tp drivers for problem
	  analysis.

	  If unsure, say 'Y'.

	  To compile this driver as a module, choose M here. The module
	  will be called l2tp_debugfs.

config L2TP_V3
	bool "L2TPv3 support (EXPERIMENTAL)"
	depends on EXPERIMENTAL && L2TP
	help
	  Layer Two Tunneling Protocol Version 3

	  From RFC 3931 <http://www.ietf.org/rfc/rfc3931.txt>.

	  The Layer Two Tunneling Protocol (L2TP) provides a dynamic
	  mechanism for tunneling Layer 2 (L2) "circuits" across a
	  packet-oriented data network (e.g., over IP).  L2TP, as
	  originally defined in RFC 2661, is a standard method for
	  tunneling Point-to-Point Protocol (PPP) [RFC1661] sessions.
	  L2TP has since been adopted for tunneling a number of other
	  L2 protocols, including ATM, Frame Relay, HDLC and even raw
	  ethernet frames.

	  If you are connecting to L2TPv3 equipment, or you want to
	  tunnel raw ethernet frames using L2TP, say Y here. If
	  unsure, say N.

config L2TP_IP
	tristate "L2TP IP encapsulation for L2TPv3"
	depends on L2TP_V3
	help
	  Support for L2TP-over-IP socket family.

	  The L2TPv3 protocol defines two possible encapsulations for
	  L2TP frames, namely UDP and plain IP (without UDP). This
	  driver provides a new L2TPIP socket family with which
	  userspace L2TPv3 daemons may create L2TP/IP tunnel sockets
	  when UDP encapsulation is not required. When L2TP is carried
	  in IP packets, it used IP protocol number 115, so this port
	  must be enabled in firewalls.

	  To compile this driver as a module, choose M here. The module
	  will be called l2tp_ip.

config L2TP_ETH
	tristate "L2TP ethernet pseudowire support for L2TPv3"
	depends on L2TP_V3
	help
	  Support for carrying raw ethernet frames over L2TPv3.

	  From RFC 4719 <http://www.ietf.org/rfc/rfc4719.txt>.

	  The Layer 2 Tunneling Protocol, Version 3 (L2TPv3) can be
	  used as a control protocol and for data encapsulation to set
	  up Pseudowires for transporting layer 2 Packet Data Units
	  across an IP network [RFC3931].

	  This driver provides an ethernet virtual interface for each
	  L2TP ethernet pseudowire instance. Standard Linux tools may
	  be used to assign an IP address to the local virtual
	  interface, or add the interface to a bridge.

	  If you are using L2TPv3, you will almost certainly want to
	  enable this option.

	  To compile this driver as a module, choose M here. The module
	  will be called l2tp_eth.
