# 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 UART_PIPE
	select UART_INTERRUPT_DRIVEN

if NET_PPP

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

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

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.

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
