Introducing additional socket implementations is rather involved right now due to some more or less convoluted code that had grown over time. This change introduces an additional configuration variable in preparation for additional socket API drivers. The idea is to reduce redundant code and make existing code more readable by better exposing its actual intent. Signed-off-by: Florian Grandel <jerico.dev@gmail.com>
289 lines
10 KiB
Plaintext
289 lines
10 KiB
Plaintext
# 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_PRIORITY_DEFAULT
|
|
int "Default processing priority for sockets"
|
|
default 50
|
|
help
|
|
Default processing priority for socket implementations. This defines
|
|
the order of processing of particular socket implementations when
|
|
creating a new socket, lower value indicate earlier processing. This
|
|
allows to for instance prioritize offloaded socket processing during
|
|
socket creation over the native one, or vice versa.
|
|
|
|
config NET_SOCKETS_POSIX_NAMES
|
|
bool "POSIX names for Sockets API (without full POSIX API)"
|
|
default y if !POSIX_API
|
|
depends on !POSIX_API
|
|
help
|
|
With this option, Socket API functions are available under the
|
|
standard POSIX names like socket(), recv(), and close(), etc.,
|
|
even if full POSIX API (CONFIG_POSIX_API) is not enabled. (Note
|
|
that close() may require a special attention, as in POSIX it
|
|
closes any file descriptor, while with this option enabled, it
|
|
will apply only to sockets.)
|
|
|
|
Various networking libraries require either
|
|
CONFIG_NET_SOCKETS_POSIX_NAMES or CONFIG_POSIX_API to be set.
|
|
If both are disabled, Zephyr's socket functions will be
|
|
available (only) with ``zsock_`` prefix, (e.g. `zsock_socket`).
|
|
This is useful only in peculiar cases, e.g. when integrating
|
|
with 3rd-party socket libraries.
|
|
|
|
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_CONNECT_TIMEOUT
|
|
int "Timeout value in milliseconds to CONNECT"
|
|
default 3000
|
|
range 0 60000
|
|
help
|
|
This variable specifies time in milliseconds after connect()
|
|
API call will timeout if we have not received SYN-ACK from
|
|
peer.
|
|
|
|
config NET_SOCKETS_DNS_TIMEOUT
|
|
int "Timeout value in milliseconds for DNS queries"
|
|
default 2000
|
|
range 1000 300000
|
|
depends on DNS_RESOLVER
|
|
help
|
|
This variable specifies time in milliseconds after which DNS
|
|
query is considered timeout. Minimum timeout is 1 second and
|
|
maximum timeout is 5 min.
|
|
|
|
config NET_SOCKETS_SOCKOPT_TLS
|
|
bool "TCP TLS socket option support [EXPERIMENTAL]"
|
|
imply TLS_CREDENTIALS
|
|
select MBEDTLS if NET_NATIVE
|
|
select EXPERIMENTAL
|
|
help
|
|
Enable TLS socket option support which automatically establishes
|
|
a TLS connection to the remote host.
|
|
|
|
config NET_SOCKETS_TLS_PRIORITY
|
|
int "Default processing priority for TLS sockets"
|
|
default 45
|
|
help
|
|
Processing priority for TLS sockets. Should be lower than
|
|
NET_SOCKETS_PRIORITY_DEFAULT in order to be processed correctly.
|
|
|
|
config NET_SOCKETS_TLS_SET_MAX_FRAGMENT_LENGTH
|
|
bool "Set Maximum Fragment Length (MFL)"
|
|
default y
|
|
help
|
|
Call mbedtls_ssl_conf_max_frag_len() on created TLS context
|
|
configuration, so that Maximum Fragment Length (MFL) will be sent to
|
|
peer using RFC 6066 max_fragment_length extension.
|
|
|
|
Maximum Fragment Length (MFL) value is automatically chosen based on
|
|
MBEDTLS_SSL_OUT_CONTENT_LEN and MBEDTLS_SSL_IN_CONTENT_LEN mbed TLS
|
|
macros (which are configured by CONFIG_MBEDTLS_SSL_MAX_CONTENT_LEN in
|
|
case of default mbed TLS config).
|
|
|
|
This is mostly useful for TLS client side to tell TLS server what is
|
|
the maximum supported receive record length.
|
|
|
|
config NET_SOCKETS_ENABLE_DTLS
|
|
bool "DTLS socket support [EXPERIMENTAL]"
|
|
depends on NET_SOCKETS_SOCKOPT_TLS
|
|
select MBEDTLS_DTLS if NET_NATIVE
|
|
select EXPERIMENTAL
|
|
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_TLS_MAX_APP_PROTOCOLS
|
|
int "Maximum number of supported application layer protocols"
|
|
default 2
|
|
depends on NET_SOCKETS_SOCKOPT_TLS && MBEDTLS_SSL_ALPN
|
|
help
|
|
This variable sets maximum number of supported application layer
|
|
protocols over TLS/DTL that can be set explicitly by a socket option.
|
|
By default, no supported application layer protocol is set.
|
|
|
|
config NET_SOCKETS_TLS_MAX_CLIENT_SESSION_COUNT
|
|
int "Maximum number of stored client TLS/DTLS sessions"
|
|
default 1
|
|
depends on NET_SOCKETS_SOCKOPT_TLS
|
|
help
|
|
This variable specifies maximum number of stored TLS/DTLS sessions,
|
|
used for TLS/DTLS session resumption.
|
|
|
|
config NET_SOCKETS_OFFLOAD
|
|
bool "Offload Socket APIs"
|
|
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_OFFLOAD_PRIORITY
|
|
int "Default processing priority for offloaded sockets"
|
|
default 40
|
|
help
|
|
Processing priority for offloaded sockets.
|
|
|
|
If native TLS is enabled, lower value than NET_SOCKETS_TLS_PRIORITY
|
|
means that TLS will be offloaded as well (if supported by offloaded
|
|
socket implementation). Higher value than NET_SOCKETS_TLS_PRIORITY
|
|
means that native TLS will be used.
|
|
|
|
config NET_SOCKETS_OFFLOAD_DISPATCHER
|
|
bool "Intermediate socket offloading layer"
|
|
depends on NET_SOCKETS_OFFLOAD
|
|
help
|
|
If enabled, an intermediate socket offloading layer is included
|
|
(called socket dispatcher), allowing to select an offloaded network
|
|
interface and thus socket implementation with SO_BINDTODEVICE socket
|
|
option. This can be useful, when multiple offloaded sockets
|
|
implementations are available in the system, allowing to easily bind
|
|
a socket to a particular implementation.
|
|
|
|
config NET_SOCKETS_OFFLOAD_DISPATCHER_CONTEXT_MAX
|
|
int "Maximum number of dispatcher sockets created"
|
|
default 4
|
|
depends on NET_SOCKETS_OFFLOAD_DISPATCHER
|
|
help
|
|
Maximum number of dispatcher sockets created at a time. Note, that
|
|
only sockets that has not been dispatched yet count into the limit.
|
|
After a proper socket has been created for a given file descriptor,
|
|
the dispatcher context is released and can be reused.
|
|
|
|
config NET_SOCKETS_PACKET
|
|
bool "Packet socket support"
|
|
select NET_CONNECTION_SOCKETS
|
|
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 fed to sockets unchanged as provided by the driver.
|
|
|
|
config NET_SOCKETS_PACKET_DGRAM
|
|
bool "Packet socket SOCK_DGRAM support"
|
|
depends on NET_SOCKETS_PACKET
|
|
default y
|
|
help
|
|
For AF_PACKET sockets with SOCK_DGRAM type, the L2 header
|
|
is removed before the packet is passed to the user. Packets sent
|
|
through a SOCK_DGRAM packet socket get a suitable L2 header based
|
|
on the information in the sockaddr_ll destination address before
|
|
they are queued.
|
|
|
|
config NET_SOCKETS_CAN
|
|
bool "Socket CAN support [EXPERIMENTAL]"
|
|
select NET_L2_CANBUS_RAW
|
|
select NET_CONNECTION_SOCKETS
|
|
select EXPERIMENTAL
|
|
help
|
|
The value depends on your network needs.
|
|
|
|
config NET_SOCKETS_CAN_RECEIVERS
|
|
int "How many simultaneous SocketCAN receivers are allowed"
|
|
default 1
|
|
depends on NET_SOCKETS_CAN
|
|
help
|
|
The value tells how many sockets can receive data from same
|
|
Socket-CAN interface.
|
|
|
|
config NET_SOCKETPAIR
|
|
bool "Support for the socketpair syscall [EXPERIMENTAL]"
|
|
select EXPERIMENTAL
|
|
select PIPES
|
|
depends on HEAP_MEM_POOL_SIZE != 0
|
|
help
|
|
Choose y here if you would like to use the socketpair(2)
|
|
system call.
|
|
|
|
config NET_SOCKETPAIR_BUFFER_SIZE
|
|
int "Size of the intermediate buffer, in bytes"
|
|
default 64
|
|
range 1 4096
|
|
depends on NET_SOCKETPAIR
|
|
help
|
|
Buffer size for socketpair(2)
|
|
|
|
config NET_SOCKETS_NET_MGMT
|
|
bool "Network management socket support [EXPERIMENTAL]"
|
|
depends on NET_MGMT_EVENT
|
|
select NET_MGMT_EVENT_INFO
|
|
select EXPERIMENTAL
|
|
help
|
|
Select this if you want to use socket API to get network
|
|
managements events to your application.
|
|
|
|
config NET_SOCKETS_NET_MGMT_MAX_LISTENERS
|
|
int "Max number of sockets to listen"
|
|
default 1
|
|
depends on NET_SOCKETS_NET_MGMT
|
|
help
|
|
This sets the maximum number of net_mgmt sockets that can
|
|
be set by the socket interface. So if you have two separate
|
|
sockets that are used for listening events, you need to set
|
|
this to two.
|
|
|
|
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
|