# Copyright (c) 2019 Intel Corporation.
# SPDX-License-Identifier: Apache-2.0

menuconfig NET_L2_PPP
	bool "Point-to-point (PPP) support [EXPERIMENTAL]"
	select EXPERIMENTAL
	help
	  Add support for PPP.

if NET_L2_PPP

config NET_L2_PPP_DELAY_STARTUP_MS
	int "PPP delay startup ms"
	default 0
	help
	  If the PPP starts too fast, it is possible to delay it
	  a bit. This is mostly useful in debugging if you want the
	  device be fully up before PPP handshake is started.
	  Wait amount of milliseconds before starting PPP. Value 0 disables
	  the wait.

config NET_L2_PPP_TIMEOUT
	int "Maximum timeout in ms for Configure-Req"
	default 3000
	range 1 4294967295
	help
	  How long to wait Configure-Req.

config NET_L2_PPP_MAX_CONFIGURE_REQ_RETRANSMITS
	int "Maximum number of Configure-Req retransmits"
	default 10
	range 0 4294967295
	help
	  How many times to resend Configure-Req messages before deciding the
	  link is not working properly.

config NET_L2_PPP_MAX_TERMINATE_REQ_RETRANSMITS
	int "Maximum number of Terminate-Req retransmits"
	default 2
	range 0 4294967295
	help
	  How many times to resend Terminate-Req messages before terminating
	  the link.

config NET_L2_PPP_MAX_NACK_LOOPS
	int "Maximum number of NACK loops accepted"
	default 5
	range 0 4294967295
	help
	  How many times to accept NACK loops.

config NET_L2_PPP_OPTION_DNS_USE
	bool "Use negotiated DNS servers"
	depends on DNS_RESOLVER
	help
	  Use the DNS servers negotiated in the IPCP configuration.

config NET_L2_PPP_AUTH_SUPPORT
	bool

config NET_L2_PPP_PAP
	bool "PAP authentication protocol"
	select NET_L2_PPP_AUTH_SUPPORT
	help
	  Enable support for PAP authentication protocol.

config NET_L2_PPP_OPTION_MRU
	bool "LCP MRU option support"
	help
	  Enable support for LCP MRU option.

config NET_L2_PPP_OPTION_SERVE_IP
	bool "Serve IP address to peer"
	help
	  Enable support for serving IP address to PPP peer.

config NET_L2_PPP_OPTION_SERVE_DNS
	bool "Serve DNS addresses to peer"
	help
	  Enable support for serving DNS addresses to PPP peer.

module = NET_L2_PPP
module-dep = NET_LOG
module-str = Log level for ppp L2 layer
module-help = Enables ppp L2 to output debug messages.
source "subsys/net/Kconfig.template.log_config.net"

config NET_L2_PPP_MGMT
	bool "Ppp network management interface"
	select NET_MGMT
	select NET_MGMT_EVENT
	help
	  Enable support net_mgmt ppp interface which can be used to
	  configure at run-time ppp drivers and L2 settings.

config NET_L2_PPP_TX_STACK_SIZE
	int "Stack size for TX handler"
	default 2048 if COVERAGE_GCOV
	default 1024
	help
	  Set the TX handler stack size.

endif # NET_L2_PPP
