446 lines
16 KiB
Plaintext
446 lines
16 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"
|
|
select ZVFS
|
|
select ZVFS_POLL
|
|
select ZVFS_SELECT
|
|
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 "[DEPRECATED] POSIX names for Sockets API (without full POSIX API)"
|
|
depends on !POSIX_API
|
|
select DEPRECATED
|
|
help
|
|
This option is marked as deprecated in favor of using normal
|
|
POSIX socket API includes found under the include/zephyr/posix
|
|
directory. If you want to use BSD socket API calls, you need
|
|
to select POSIX_API and use the socket headers in POSIX subsystem.
|
|
|
|
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 [DEPRECATED]"
|
|
default 0
|
|
help
|
|
This option is deprecated.
|
|
Please use CONFIG_ZVFS_POLL_MAX instead.
|
|
|
|
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. If the value is higher than
|
|
CONFIG_NET_SOCKETS_DNS_BACKOFF_INTERVAL, then we try multiple
|
|
times with exponential backoff until the timeout is reached.
|
|
|
|
config NET_SOCKETS_DNS_BACKOFF_INTERVAL
|
|
int "Backoff interval for the DNS timeout"
|
|
default 5000
|
|
range 1000 300000
|
|
depends on DNS_RESOLVER
|
|
help
|
|
This variable is related to the DNS timeout. If the DNS timeout is
|
|
smaller than this value, then this value is ignored. If the timeout
|
|
is larger, then this variable specifies time in milliseconds after
|
|
which DNS query is re-tried. If there is no reply, the backoff
|
|
interval is doubled and query is retried.
|
|
Example:
|
|
The CONFIG_NET_SOCKETS_DNS_TIMEOUT is set to 17000 (17 secs).
|
|
This value is 5000 (5 sec). If there is no reply from DNS server
|
|
within 5 secs, a 2nd query is done with timeout set to 10 sec (5 * 2).
|
|
If no reply is received, a 3rd query is done after 15 sec (5 + 5 * 2),
|
|
and the timeout is set to 2 sec so that the total timeout is 17 seconds.
|
|
|
|
config NET_SOCKET_MAX_SEND_WAIT
|
|
int "Max time in milliseconds waiting for a send command"
|
|
default 10000
|
|
help
|
|
The maximum time a socket is waiting for a blocked connection before
|
|
returning an ENOBUFS error.
|
|
|
|
config NET_SOCKETS_SERVICE
|
|
bool "Socket service support [EXPERIMENTAL]"
|
|
select EXPERIMENTAL
|
|
select EVENTFD
|
|
help
|
|
The socket service can monitor multiple sockets and save memory
|
|
by only having one thread listening socket data. If data is received
|
|
in the monitored socket, a user supplied work is called.
|
|
Note that you need to set CONFIG_ZVFS_POLL_MAX high enough
|
|
so that enough sockets entries can be serviced. This depends on
|
|
system needs as multiple services can be activated at the same time
|
|
depending on network configuration.
|
|
|
|
config NET_SOCKETS_SERVICE_THREAD_PRIO
|
|
int "Priority of the socket service dispatcher thread"
|
|
default NUM_PREEMPT_PRIORITIES
|
|
depends on NET_SOCKETS_SERVICE
|
|
help
|
|
Set the priority of the socket service dispatcher thread. This handler
|
|
polls the sockets and either places the triggered socket to work queue
|
|
for asynchronous handlers, or calls the user supplied callback directly
|
|
for synchronous handlers.
|
|
The value should be selected carefully because if this thread priority
|
|
is too high, the work queue handlers might not be able to run if using
|
|
asynchronous handlers that are called via a work queue.
|
|
|
|
Note that >= 0 value means preemptive thread priority, the lowest
|
|
value is NUM_PREEMPT_PRIORITIES.
|
|
Highest preemptive thread priority is 0.
|
|
Lowest cooperative thread priority is -1.
|
|
Highest cooperative thread priority is -NUM_COOP_PRIORITIES.
|
|
Make sure the priority is lower than workqueue priority so that
|
|
we never block the workqueue handler.
|
|
|
|
config NET_SOCKETS_SERVICE_STACK_SIZE
|
|
int "Stack size for the thread handling socket services"
|
|
default 2400 if NET_DHCPV4_SERVER
|
|
default 1400 if MDNS_RESPONDER
|
|
default 1200
|
|
depends on NET_SOCKETS_SERVICE
|
|
help
|
|
Set the internal stack size for the thread that polls sockets.
|
|
|
|
config NET_SOCKETS_SOCKOPT_TLS
|
|
bool "TCP TLS socket option support"
|
|
imply TLS_CREDENTIALS
|
|
select MBEDTLS if NET_NATIVE
|
|
imply MBEDTLS_TLS_VERSION_1_2 if !NET_L2_OPENTHREAD
|
|
imply MBEDTLS_KEY_EXCHANGE_RSA_ENABLED if !NET_L2_OPENTHREAD
|
|
imply MBEDTLS_CIPHER_AES_ENABLED if !NET_L2_OPENTHREAD
|
|
imply PSA_WANT_KEY_TYPE_AES if !NET_L2_OPENTHREAD && PSA_CRYPTO_CLIENT
|
|
imply PSA_WANT_ALG_CBC_NO_PADDING if !NET_L2_OPENTHREAD && PSA_CRYPTO_CLIENT
|
|
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). With DTLS, MFL value may be further
|
|
limited with NET_SOCKETS_DTLS_MAX_FRAGMENT_LENGTH.
|
|
|
|
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"
|
|
depends on NET_SOCKETS_SOCKOPT_TLS
|
|
select MBEDTLS_DTLS if NET_NATIVE
|
|
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_DTLS_MAX_FRAGMENT_LENGTH
|
|
int "Maximum DTLS fragment size in bytes"
|
|
default 1024
|
|
range 512 4096
|
|
depends on NET_SOCKETS_ENABLE_DTLS
|
|
depends on NET_SOCKETS_TLS_SET_MAX_FRAGMENT_LENGTH
|
|
help
|
|
This variable specifies the Maximum Fragment Length (MFL) value to
|
|
be used with DTLS connection when MBEDTLS_SSL_OUT_CONTENT_LEN and
|
|
MBEDTLS_SSL_IN_CONTENT_LEN are set to larger values (for TLS).
|
|
|
|
With DTLS the MFL should be kept under the network MTU, to avoid
|
|
IP fragmentation.
|
|
|
|
config NET_SOCKETS_DTLS_SENDMSG_BUF_SIZE
|
|
int "Intermediate buffer size for DTLS sendmsg()"
|
|
depends on NET_SOCKETS_ENABLE_DTLS
|
|
range 0 $(UINT16_MAX)
|
|
default 0
|
|
help
|
|
Size of the intermediate buffer for DTLS sendmsg() function. The
|
|
intermediate buffer is needed, as sendmsg() for DGRAM is expected to
|
|
send all of the data in a single datagram, therefore all data provided
|
|
in msghdr structure need to be linearized before passing to mbed TLS.
|
|
The buffer size can be set to 0, in that case data linearizing for
|
|
DTLS sockets is disabled. In result, sendmsg() will only accept msghdr
|
|
with a single non-empty iov buffer.
|
|
|
|
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/DTLS 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 socketpair"
|
|
select PIPES
|
|
help
|
|
Communicate over a pair of connected, unnamed UNIX domain sockets.
|
|
|
|
if NET_SOCKETPAIR
|
|
|
|
config NET_SOCKETPAIR_BUFFER_SIZE
|
|
int "Size of the intermediate buffer, in bytes"
|
|
default 4096 if WIFI_NM_WPA_SUPPLICANT
|
|
default 64
|
|
range 1 4096
|
|
help
|
|
Buffer size for socketpair(2)
|
|
|
|
choice
|
|
prompt "Memory management for socketpair"
|
|
default NET_SOCKETPAIR_HEAP if HEAP_MEM_POOL_SIZE != 0
|
|
|
|
config NET_SOCKETPAIR_STATIC
|
|
bool "Pre-allocate memory statically"
|
|
|
|
config NET_SOCKETPAIR_HEAP
|
|
bool "Use heap for allocating socketpairs"
|
|
|
|
endchoice
|
|
|
|
if NET_SOCKETPAIR_STATIC
|
|
|
|
config NET_SOCKETPAIR_MAX
|
|
int "How many socketpairs to pre-allocate"
|
|
default 6 if WIFI_NM_WPA_SUPPLICANT
|
|
default 1
|
|
|
|
endif # NET_SOCKETPAIR_STATIC
|
|
|
|
if NET_SOCKETPAIR_HEAP
|
|
|
|
config HEAP_MEM_POOL_ADD_SIZE_SOCKETPAIR
|
|
int
|
|
default 32000 if WIFI_NM_WPA_SUPPLICANT
|
|
default 256
|
|
|
|
endif # NET_SOCKETPAIR_HEAP
|
|
|
|
endif # NET_SOCKETPAIR
|
|
|
|
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.
|
|
Note, that the thread using net_mgmt sockets should have at least
|
|
the same priority as the thread processing network events (see
|
|
CONFIG_NET_MGMT_EVENT_WORKER), otherwise in case of event bursts some
|
|
events may be lost.
|
|
|
|
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"
|
|
|
|
config NET_SOCKETS_OBJ_CORE
|
|
bool "Object core socket support [EXPERIMENTAL]"
|
|
depends on OBJ_CORE
|
|
select OBJ_CORE_STATS
|
|
select EXPERIMENTAL
|
|
help
|
|
Select this if you want to use object core with socket API to get
|
|
network socket information and statistics via object core.
|
|
The net-shell "net sockets" command will use this functionality
|
|
to show the socket information.
|
|
|
|
endif # NET_SOCKETS
|