# Misc network drivers configuration options
# SPDX-License-Identifier: Apache-2.0

#
# PPP options
#
menuconfig NET_PPP
	bool "Point-to-point (PPP) UART based driver"
	depends on NET_L2_PPP
	depends on NET_NATIVE
	select RING_BUFFER
	select UART_MUX if GSM_MUX

if NET_PPP

config NET_PPP_UART_NAME
	string "UART device name the PPP is connected to"
	depends on !MODEM_GSM_PPP

config NET_PPP_DRV_NAME
	string "PPP Driver name"
	default "ppp"
	help
	  This option sets the driver name

config NET_PPP_MTU_MRU
	int "PPP MTU and MRU"
	default 1500
	help
	  This options sets MTU and MRU for PPP link.

config NET_PPP_UART_BUF_LEN
	int "Buffer length when reading from UART"
	default 8
	help
	  This options sets the size of the UART buffer where data
	  is being read to.

config NET_PPP_RINGBUF_SIZE
	int "PPP ring buffer size"
	default 256
	help
	  PPP ring buffer size when passing data from RX ISR to worker
	  thread that will pass the data to IP stack.

config NET_PPP_RX_STACK_SIZE
	int "Size of the stack allocated for receiving data from modem"
	default 768
	help
	  Sets the stack size which will be used by the PPP RX workqueue.

config NET_PPP_RX_PRIORITY
	int "RX workqueue thread priority"
	default 7
	help
	  Sets the priority of the RX workqueue thread.

config NET_PPP_VERIFY_FCS
	bool "Verify that received FCS is valid"
	default y
	help
	  If you have a reliable link, then it might make sense
	  to disable this as it takes some time to verify the received
	  packet.

config PPP_MAC_ADDR
	string "MAC address for the interface"
	help
	  Specify a MAC address for the PPP interface in the form of
	  six hex 8-bit chars separated by colons (e.g.:
	  aa:33:cc:22:e2:c0).  The default is an empty string, which
	  means the code will make 00:00:5E:00:53:XX, where XX will be
	  random.

config PPP_CLIENT_CLIENTSERVER
	bool "Reply to the request CLIENT with CLIENTSERVER"
	help
	  This is only necessary if a ppp connection should be
	  established with a Microsoft Windows PC.

module = NET_PPP
module-dep = LOG
module-str = Log level for ppp driver
module-help = Sets log level for ppp driver.
source "subsys/net/Kconfig.template.log_config.net"

endif # NET_PPP

#
# SLIP options
#
menuconfig SLIP
	bool "SLIP driver"
	depends on (!QEMU_TARGET || NET_QEMU_SLIP)
	depends on NET_NATIVE
	select UART_PIPE
	select UART_INTERRUPT_DRIVEN

if SLIP

config SLIP_DRV_NAME
	string "SLIP Driver name"
	default "slip"
	help
	  This option sets the driver name

module = SLIP
module-dep = LOG
module-str = Log level for slip driver
module-help = Sets log level for slip driver.
source "subsys/net/Kconfig.template.log_config.net"

config SLIP_STATISTICS
	bool "SLIP network connection statistics"
	help
	  This option enables statistics support for SLIP driver.

config SLIP_TAP
	bool "Use TAP interface to host"
	default y
	select NET_L2_ETHERNET
	help
	  In TAP the Ethernet frames are transferred over SLIP.

config SLIP_MAC_ADDR
	string "MAC address for the interface"
	help
	  Specify a MAC address for the SLIP interface in the form of
	  six hex 8-bit chars separated by colons (e.g.:
	  aa:33:cc:22:e2:c0).  The default is an empty string, which
	  means the code will make 00:00:5E:00:53:XX, where XX will be
	  random.

endif

#
# Net loopback options
#
menuconfig NET_LOOPBACK
	bool "Net loopback driver"
	select NET_L2_DUMMY

if NET_LOOPBACK

module = NET_LOOPBACK
module-dep = LOG
module-str = Log level for network loopback driver
module-help = Sets log level for network loopback driver.
source "subsys/net/Kconfig.template.log_config.net"

endif
