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

menuconfig NET_DRIVERS
	bool "Network drivers"

if NET_DRIVERS

#
# 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 CRC

if NET_PPP

config NET_PPP_ASYNC_UART
	bool "Asynchronous UART API is used"
	depends on UART_ASYNC_API

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 NET_PPP_CAPTURE
	bool "Capture received PPP packets"
	depends on NET_CAPTURE_COOKED_MODE
	help
	  This enables PPP packet capture. One needs to configure the
	  packet capturing in core network stack to send the captured packets
	  to outside system. This requires a non-PPP network connection
	  where the captured packets are sent for processing. Note that you
	  cannot use the PPP connection to sending packets as that would
	  lead recursion.

config NET_PPP_CAPTURE_BUF_SIZE
	int "Capture buffer for storing full PPP packets"
	depends on NET_PPP_CAPTURE
	default 1500
	help
	  The captured PPP frames are temporarily stored into this buffer.

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.

config PPP_NET_IF_NO_AUTO_START
	bool "Disable PPP interface auto-start"
	help
	  This option allows user to disable autostarting of the PPP interface
	  immediately after initialization.

if NET_PPP_ASYNC_UART

config NET_PPP_ASYNC_UART_TX_BUF_LEN
	int "Length of the UART TX buffer to which data is written."
	default 2048

config NET_PPP_ASYNC_UART_TX_TIMEOUT
	int "The timeout for UART transfers in milliseconds, or 0 for no timeout."
	default 0

config NET_PPP_ASYNC_UART_RX_RECOVERY_TIMEOUT
	int "UART RX recovery timeout in milliseconds"
	default 200
	help
	  The time that UART RX is in disabled state in case
	  when we cannot receive more data from UART.

config NET_PPP_ASYNC_UART_RX_ENABLE_TIMEOUT
	int "A timeout for uart_rx_enable() in milliseconds"
	default 100

endif # NET_PPP_ASYNC_UART

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" if !QEMU_TARGET
	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
	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

config NET_LOOPBACK_SIMULATE_PACKET_DROP
	bool "Controllable packet drop"
	help
	  Enable interface to have a controllable packet drop rate, only for
	  testing, should not be enabled for normal applications

config NET_LOOPBACK_MTU
	int "MTU for loopback interface"
	default 576
	help
	  This option sets the MTU for loopback interface.

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

#
# CAN bus network driver options
#
menuconfig NET_CANBUS
	bool "Controller Area Network (CAN) bus network driver"
	help
	  Enable the CAN bus network driver. This driver provides a network interface on top of the
	  CAN controller driver API.

if NET_CANBUS

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

config NET_CANBUS_INIT_PRIORITY
	int "CAN bus network device init priority"
	default 81
	help
	  CAN bus network device initialization priority.

	  The priority needs to be lower than the network stack and higher than the CAN controller
	  driver.

endif # NET_CAN

#
# Native simulator offloaded sockets
#

menuconfig NET_NATIVE_OFFLOADED_SOCKETS
	bool "Native Simulator offloaded sockets"
	depends on ARCH_POSIX
	depends on NET_SOCKETS_OFFLOAD
	select NATIVE_USE_NSI_ERRNO
	help
	  Offloaded sockets for Native Simulator utilize host BSD sockets API (like socket(),
	  connect(), send(), recvfrom(), etc.) in order to provide networking capability.

	  This driver main advantage is that it is possible to use this driver without any
	  additional setup on the host side, unlike with the native TAP Ethernet driver.

if NET_NATIVE_OFFLOADED_SOCKETS

config NET_NATIVE_OFFLOADED_SOCKETS_EPOLL_WAIT_INTERVAL
	int "Interval between epoll_wait() calls (in simulated microseconds)"
	default 1000
	help
	  Number of simulated microseconds before next epoll_wait() call, when there were no pending
	  events detected.

	  Decrease that value when lower network traffic latency is expected, at the expense of more
	  CPU processing overhead.

config NET_NATIVE_OFFLOADED_SOCKETS_CONNECTIVITY_SIM
	bool "Support for the network connectivity API"
	help
	  Simulate an interface that transitions through the dormant state based on calls
	  to the network connectivity API, after some delay.

config NET_NATIVE_OFFLOADED_SOCKETS_CONNECTIVITY_SIM_AUTO_CONNECT
	bool "Automatically connect"
	depends on NET_NATIVE_OFFLOADED_SOCKETS_CONNECTIVITY_SIM
	help
	  If this option is set the Connection Manager will automatically call connect after the
	  network interface has been brought up. This option sets the default value, the option has
	  a corresponding flag that can be set at run time by calling conn_mgr_if_set_flag().

endif # NET_NATIVE_OFFLOADED_SOCKETS

endif # NET_DRIVERS
