# Kconfig - BSD Sockets compatible API

#
# Copyright (c) 2017 Linaro Limited.
#
# SPDX-License-Identifier: Apache-2.0
#

menuconfig NET_SOCKETS
	bool "BSD Sockets compatible API"
	help
	  Provide BSD Sockets like API on top of native Zephyr networking API.

if NET_SOCKETS

config NET_SOCKETS_POSIX_NAMES
	bool "Standard POSIX names for Sockets API"
	help
	  By default, Sockets API function are prefixed with ``zsock_`` to avoid
	  namespacing issues. If this option is enabled, they will be provided
	  with standard POSIX names like socket(), recv(), and close(), to help
	  with porting existing code. Note that close() may require a special
	  attention, as in POSIX it closes any file descriptor, while with this
	  option enabled, it will still apply only to sockets.

config NET_SOCKETS_POLL_MAX
	int "Max number of supported poll() entries"
	default 3
	help
	  Maximum number of entries supported for poll() call.

config NET_SOCKETS_SOCKOPT_TLS
	bool "Enable TCP TLS socket option support [EXPERIMENTAL]"
	select TLS_CREDENTIALS
	help
	  Enable TLS socket option support which automatically establishes
	  a TLS connection to the remote host.

config NET_SOCKETS_ENABLE_DTLS
	bool "Enable DTLS socket support [EXPERIMENTAL]"
	depends on NET_SOCKETS_SOCKOPT_TLS
	select MBEDTLS_DTLS
	help
	  Enable DTLS socket support. By default only TLS over TCP is supported.

config NET_SOCKETS_DTLS_TIMEOUT
	int "Timeout value in milliseconds for DTLS connection"
	default 5000
	depends on NET_SOCKETS_ENABLE_DTLS
	help
	  This variable specifies time in milliseconds after which DTLS
	  connection is considered dead by TLS server and DTLS resources are
	  freed. This is needed to prevent situation when DTLS client shuts down
	  without closing connection gracefully, which can prevent other peers
	  from connecting. Value of 0 indicates no timeout - resources will be
	  freed only when connection is gracefully closed by peer sending TLS
	  notification or socket is closed.

config NET_SOCKETS_TLS_MAX_CONTEXTS
	int "Maximum number of TLS/DTLS contexts"
	default 1
	depends on NET_SOCKETS_SOCKOPT_TLS
	help
	  "This variable specifies maximum number of TLS/DTLS contexts that can
	   be allocated at the same time."

config NET_SOCKETS_TLS_MAX_CREDENTIALS
	int "Maximum number of TLS/DTLS credentials per socket"
	default 4
	depends on NET_SOCKETS_SOCKOPT_TLS
	help
	  This variable sets maximum number of TLS/DTLS credentials that can be
	  used with a specific socket.

config NET_SOCKETS_TLS_MAX_CIPHERSUITES
	int "Maximum number of TLS/DTLS ciphersuites per socket"
	default 4
	depends on NET_SOCKETS_SOCKOPT_TLS
	help
	  This variable sets maximum number of TLS/DTLS ciphersuites that can
	  be used with specific socket, if set explicitly by socket option.
	  By default, all ciphersuites that are available in the system are
	  available to the socket.

config NET_SOCKETS_OFFLOAD
	bool "Offload Socket APIs [EXPERIMENTAL]"
	select NET_SOCKETS_POSIX_NAMES
	help
	  Enables direct offloading of socket operations to dedicated TCP/IP
	  hardware.
	  This feature is intended to save resources by bypassing the Zephyr
	  TCP/IP stack in the case where there is only one network interface
	  required in the system, providing full BSD socket offload capability.
	  As a result, it bypasses any potential IP routing that Zephyr might
	  provide between multiple network interfaces.
	  See NET_OFFLOAD for a more deeply integrated approach which offloads
	  from the net_context() API within the Zephyr IP stack.

config NET_SOCKETS_PACKET
	bool "Enable packet socket support"
	depends on NET_L2_ETHERNET
	help
	  This is an initial version of packet socket support (special type
	  raw socket). Packets are passed to and from the device driver
	  without any changes in the packet headers. It's API caller
	  responsibility to provide all the headers (e.g L2, L3 and so on)
	  while sending. While receiving, packets (including all the headers)
	  will be feed to sockets as it as from the driver.

config NET_SOCKETS_CAN
	bool "Enable socket CAN support [EXPERIMENTAL]"
	select NET_L2_CANBUS
	help
	  The value depends on your network needs.

module = NET_SOCKETS
module-dep = NET_LOG
module-str = Log level for BSD sockets compatible API calls
module-help = Enables logging for sockets code.
source "subsys/net/Kconfig.template.log_config.net"

endif # NET_SOCKETS
