# SPDX-License-Identifier: GPL-2.0-only
#
# Layer Two Tunneling Protocol (L2TP)
#

menuconfig L2TP
	tristate "Layer Two Tunneling Protocol (L2TP)"
	depends on (IPV6 || IPV6=n)
	depends on INET
	select NET_UDP_TUNNEL
	---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"
	depends on 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.
