mirror of
https://github.com/zephyrproject-rtos/zephyr
synced 2025-09-01 20:39:30 +00:00
Add an array of configurable size that holds TCP backlog entries. The array is shared between all incoming TCP connections in order to make it possible to get away with less memory consumed than with a connection based approach. The backlog entries are created when a SYN is received for a listening TCP socket and removed once the corresponding ACK is seen. With an incoming RST the corresponding backlog entry is cleared, if any. The size of the global backlog array is defined with the CONFIG_NET_TCP_BACKLOG_SIZE Kconfig variable. Signed-off-by: Patrik Flykt <patrik.flykt@intel.com>
357 lines
9.6 KiB
Plaintext
357 lines
9.6 KiB
Plaintext
# Kconfig - IP stack config
|
|
|
|
#
|
|
# Copyright (c) 2016 Intel Corporation.
|
|
#
|
|
# SPDX-License-Identifier: Apache-2.0
|
|
#
|
|
|
|
menu "IP stack"
|
|
depends on NETWORKING
|
|
|
|
# Hidden option
|
|
config NET_L2_RAW_CHANNEL
|
|
bool
|
|
default n
|
|
|
|
if !NET_L2_RAW_CHANNEL
|
|
|
|
config NET_INIT_PRIO
|
|
int
|
|
default 90
|
|
help
|
|
Network initialization priority level. This number tells how
|
|
early in the boot the network stack is initialized.
|
|
|
|
source "subsys/net/ip/Kconfig.debug"
|
|
|
|
source "subsys/net/ip/Kconfig.ipv6"
|
|
|
|
source "subsys/net/ip/Kconfig.ipv4"
|
|
|
|
config NET_SHELL
|
|
bool "Enable network shell utilities"
|
|
default n
|
|
select CONSOLE_SHELL
|
|
help
|
|
Activate shell module that provides network commands like
|
|
ping to the console.
|
|
|
|
config NET_IP_ADDR_CHECK
|
|
bool "Check IP address validity before sending IP packet"
|
|
default y
|
|
help
|
|
Check that either the source or destination address is
|
|
correct before sending either IPv4 or IPv6 network packet.
|
|
|
|
config NET_MAX_ROUTERS
|
|
int "How many routers are supported"
|
|
default 2 if NET_IPV4 && NET_IPV6
|
|
default 1 if NET_IPV4 && !NET_IPV6
|
|
default 1 if !NET_IPV4 && NET_IPV6
|
|
range 1 254
|
|
help
|
|
The value depends on your network needs.
|
|
|
|
# Normally the route support is enabled by RPL or similar technology
|
|
# that needs to use the routing infrastructure.
|
|
config NET_ROUTE
|
|
bool
|
|
depends on NET_IPV6_NBR_CACHE
|
|
default n
|
|
default y if NET_IPV6_NBR_CACHE
|
|
|
|
config NET_MAX_ROUTES
|
|
int "Max number of routing entries stored."
|
|
default NET_IPV6_MAX_NEIGHBORS
|
|
depends on NET_ROUTE
|
|
help
|
|
This determines how many entries can be stored in routing table.
|
|
|
|
config NET_MAX_NEXTHOPS
|
|
int "Max number of next hop entries stored."
|
|
default NET_MAX_ROUTES
|
|
depends on NET_ROUTE
|
|
help
|
|
This determines how many entries can be stored in nexthop table.
|
|
|
|
config NET_ROUTE_MCAST
|
|
bool
|
|
depends on NET_ROUTE
|
|
default n
|
|
|
|
config NET_MAX_MCAST_ROUTES
|
|
int "Max number of multicast routing entries stored."
|
|
default 1
|
|
depends on NET_ROUTE_MCAST
|
|
help
|
|
This determines how many entries can be stored in multicast
|
|
routing table.
|
|
|
|
config NET_TCP
|
|
bool "Enable TCP"
|
|
default n
|
|
help
|
|
The value depends on your network needs.
|
|
|
|
config NET_TCP_CHECKSUM
|
|
bool "Check TCP checksum"
|
|
default y
|
|
depends on NET_TCP
|
|
help
|
|
Enables TCP handler to check TCP checksum. If the checksum is invalid,
|
|
then the packet is discarded.
|
|
|
|
config NET_DEBUG_TCP
|
|
bool "Debug TCP"
|
|
default n
|
|
depends on NET_TCP && NET_LOG
|
|
help
|
|
Enables TCP handler output debug messages
|
|
|
|
config NET_TCP_BACKLOG_SIZE
|
|
int "Number of simultaneous incoming TCP connections"
|
|
depends on NET_TCP
|
|
default 1
|
|
range 1 128
|
|
help
|
|
The number of simultaneous TCP connection attempts, i.e. outstanding
|
|
TCP connections waiting for initial ACK.
|
|
|
|
config NET_TCP_TIME_WAIT
|
|
bool "Enable TCP TIME_WAIT timeouts"
|
|
depends on NET_TCP
|
|
default n
|
|
help
|
|
Officially, the TCP standard requires a 4 minute timeout on
|
|
connection close before that particular port pair can be used
|
|
again. This requires that the net_context and net_tcp structs
|
|
persist for the full duration, so has non-trivial memory costs
|
|
and is optional. Modern systems with well-randomized sequence
|
|
numbers don't need this, but it is present for specification
|
|
compliance where needed.
|
|
|
|
config NET_TCP_2MSL_TIME
|
|
int "How long to wait in TIME_WAIT (in seconds)"
|
|
depends on NET_TCP_TIME_WAIT
|
|
default 240
|
|
help
|
|
The value is in seconds.
|
|
|
|
config NET_TCP_ACK_TIMEOUT
|
|
int "How long to wait for ACK (in milliseconds)"
|
|
depends on NET_TCP
|
|
default 1000
|
|
range 1 2147483647
|
|
help
|
|
This value affects the timeout when waiting ACK to arrive in
|
|
various TCP states. The value is in milliseconds. Note that
|
|
having a very low value here could prevent connectivity.
|
|
|
|
config NET_TCP_RETRY_COUNT
|
|
int "Maximum number of TCP segment retransmissions"
|
|
depends on NET_TCP
|
|
default 9
|
|
help
|
|
The following formula can be used to determine the time (in ms)
|
|
that a segment will be be buffered awaiting retransmission:
|
|
n=NET_TCP_RETRY_COUNT
|
|
∑((1<<n) * 200)
|
|
n=0
|
|
With the default value of 9, the IP stack will try to
|
|
retransmit for up to 1:42 minutes. This is as close as possible
|
|
to the minimum value recommended by RFC1122 (1:40 minutes).
|
|
Only 5 bits are dedicated for the retransmission count, so accepted
|
|
values are in the 0-31 range. It's highly recommended to not go
|
|
below 9, though.
|
|
Should a retransmission timeout occur, the receive callback is
|
|
called with -ECONNRESET error code and the context is dereferenced.
|
|
|
|
config NET_UDP
|
|
bool "Enable UDP"
|
|
default y
|
|
help
|
|
The value depends on your network needs.
|
|
|
|
config NET_UDP_CHECKSUM
|
|
bool "Check UDP checksum"
|
|
default y
|
|
depends on NET_UDP
|
|
help
|
|
Enables UDP handler to check UDP checksum. If the checksum is invalid,
|
|
then the packet is discarded.
|
|
|
|
config NET_DEBUG_UDP
|
|
bool "Debug UDP"
|
|
default n
|
|
depends on NET_UDP && NET_LOG
|
|
help
|
|
Enables UDP handler output debug messages
|
|
|
|
config NET_MAX_CONN
|
|
int "How many network connections are supported"
|
|
depends on NET_UDP || NET_TCP
|
|
default 4
|
|
default 8 if NET_IPV6 && NET_IPV4
|
|
help
|
|
The value depends on your network needs. The value
|
|
should include both UDP and TCP connections.
|
|
|
|
config NET_CONN_CACHE
|
|
bool "Cache network connections"
|
|
depends on NET_UDP || NET_TCP
|
|
default n
|
|
help
|
|
Caching takes slight more memory but will speedup connection
|
|
handling of UDP and TCP connections.
|
|
|
|
config NET_MAX_CONTEXTS
|
|
int "Number of network contexts to allocate"
|
|
default 6
|
|
help
|
|
Each network context is used to describe a network 5-tuple that
|
|
is used when listening or sending network traffic. This is very
|
|
similar as one could call a network socket in some other systems.
|
|
|
|
config NET_CONTEXT_NET_PKT_POOL
|
|
bool "Enable net_buf TX pool / context"
|
|
default n
|
|
default y if NET_TCP && NET_6LO
|
|
help
|
|
If enabled, then it is possible to fine-tune network packet pool
|
|
for each context when sending network data. If this setting is
|
|
enabled, then you should define the context pools in your application
|
|
using NET_PKT_TX_POOL_DEFINE() and NET_PKT_DATA_POOL_DEFINE()
|
|
macros and tie these pools to desired context using the
|
|
net_context_setup_pools() function.
|
|
|
|
config NET_CONTEXT_SYNC_RECV
|
|
bool "Support synchronous functionality in net_context_recv() API"
|
|
default y
|
|
help
|
|
You can disable sync support to save some memory if you are calling
|
|
net_context_recv() in async way only when timeout is set to 0.
|
|
|
|
config NET_CONTEXT_CHECK
|
|
bool "Check options when calling various net_context functions"
|
|
default y
|
|
help
|
|
If you know that the options passed to net_context...() functions
|
|
are ok, then you can disable the checks to save some memory.
|
|
|
|
choice
|
|
prompt "Use SLIP connectivity with QEMU"
|
|
optional
|
|
default NET_SLIP_TUN
|
|
help
|
|
The SLIP support is only used when the application is run inside QEMU
|
|
and the network peer is run in your host. The host needs to have
|
|
tunslip running in order to receive and send network packets via the
|
|
SLIP driver. The SLIP driver Kconfig options can be tweaked in drivers
|
|
section.
|
|
|
|
Options are provided to communicate with QEMU via a TUN driver, the
|
|
default, as it requires less configuration in the host side, or via a
|
|
TAP driver.
|
|
|
|
config NET_SLIP_TUN
|
|
bool "TUN SLIP driver"
|
|
select SLIP
|
|
select UART_PIPE
|
|
select UART_INTERRUPT_DRIVEN
|
|
select NET_L2_DUMMY
|
|
help
|
|
The host needs to have tunslip running in order
|
|
to receive and send network packets via the SLIP driver.
|
|
Choose this if unsure.
|
|
|
|
config NET_SLIP_TAP
|
|
bool "TAP SLIP driver"
|
|
select SLIP
|
|
select UART_PIPE
|
|
select UART_INTERRUPT_DRIVEN
|
|
select SLIP_TAP
|
|
help
|
|
SLIP TAP support is necessary when testing IPv4/ARP. The host
|
|
needs to have tunslip with TAP support running in order to
|
|
communicate via the SLIP driver.
|
|
endchoice
|
|
|
|
config NET_TRICKLE
|
|
bool "Enable Trickle library"
|
|
default n
|
|
help
|
|
Normally this is enabled automatically if needed,
|
|
so say 'n' if unsure.
|
|
|
|
config NET_DEBUG_TRICKLE
|
|
bool "Debug Trickle algorithm"
|
|
default n
|
|
depends on NET_TRICKLE && NET_LOG
|
|
help
|
|
Enables Trickle library output debug messages
|
|
|
|
endif # NET_L2_RAW_CHANNEL
|
|
|
|
config NET_PKT_RX_COUNT
|
|
int "How many packet receives can be pending at the same time"
|
|
default 4
|
|
help
|
|
Each RX buffer will occupy smallish amount of memory.
|
|
See include/net/net_pkt.h and the sizeof(struct net_pkt)
|
|
|
|
config NET_PKT_TX_COUNT
|
|
int "How many packet sends can be pending at the same time"
|
|
default 2
|
|
help
|
|
Each TX buffer will occupy smallish amount of memory.
|
|
See include/net/net_pkt.h and the sizeof(struct net_pkt)
|
|
|
|
config NET_BUF_RX_COUNT
|
|
int "How many network buffers are allocated for receiving data"
|
|
default 16
|
|
help
|
|
Each data buffer will occupy CONFIG_NET_BUF_DATA_SIZE + smallish
|
|
header (sizeof(struct net_buf)) amount of data.
|
|
|
|
config NET_BUF_TX_COUNT
|
|
int "How many network buffers are allocated for sending data"
|
|
default 16
|
|
help
|
|
Each data buffer will occupy CONFIG_NET_BUF_DATA_SIZE + smallish
|
|
header (sizeof(struct net_buf)) amount of data.
|
|
|
|
config NET_BUF_DATA_SIZE
|
|
int "Size of each network data fragment"
|
|
default 128
|
|
default 125 if NET_L2_IEEE802154
|
|
help
|
|
This value tells what is the size of the data fragment that is
|
|
received from the network.
|
|
Example: For IEEE 802.15.4, the network packet is 127 bytes long,
|
|
which leaves in worst case 81 bytes for user data (MTU).
|
|
In order to be able to receive at least full IPv6 packet which
|
|
has a size of 1280 bytes, the one should allocate 16 fragments here.
|
|
|
|
config NET_BUF_USER_DATA_SIZE
|
|
int "Size of user_data reserved"
|
|
default 0
|
|
default 4 if NET_L2_BLUETOOTH
|
|
help
|
|
This is for drivers to set how much user_data shall be included in
|
|
each network data fragment.
|
|
Example: For Bluetooth, the user_data shall be at least 4 bytes as
|
|
that is used for identifying the type of data they are carrying.
|
|
|
|
source "subsys/net/ip/Kconfig.stack"
|
|
|
|
source "subsys/net/ip/l2/Kconfig"
|
|
|
|
source "subsys/net/ip/Kconfig.mgmt"
|
|
|
|
source "subsys/net/ip/Kconfig.rpl"
|
|
|
|
source "subsys/net/ip/Kconfig.stats"
|
|
|
|
endmenu
|