| # Kconfig - IP stack config |
| |
| # |
| # Copyright (c) 2016 Intel Corporation. |
| # |
| # SPDX-License-Identifier: Apache-2.0 |
| # |
| |
| menu "IP stack" |
| |
| config NET_NATIVE |
| bool "Enable native IP stack" |
| default y |
| help |
| Enables Zephyr native IP stack. If you disable this, then |
| you need to enable the offloading support if you want to |
| have IP connectivity. |
| |
| # Hidden options for enabling native IPv6/IPv4. Using these options |
| # avoids having "defined(CONFIG_NET_IPV6) && defined(CONFIG_NET_NATIVE)" |
| # in the code as we can have "defined(CONFIG_NET_NATIVE_IPV6)" instead. |
| config NET_NATIVE_IPV6 |
| bool |
| depends on NET_NATIVE |
| default y if NET_IPV6 |
| |
| config NET_NATIVE_IPV4 |
| bool |
| depends on NET_NATIVE |
| default y if NET_IPV4 |
| |
| config NET_NATIVE_TCP |
| bool |
| depends on NET_NATIVE |
| default y if NET_TCP |
| |
| config NET_NATIVE_UDP |
| bool |
| depends on NET_NATIVE |
| default y if NET_UDP |
| |
| config NET_OFFLOAD |
| bool "Offload IP stack [EXPERIMENTAL]" |
| help |
| Enables TCP/IP stack to be offload to a co-processor. |
| |
| if NET_OFFLOAD |
| module = NET_OFFLOAD |
| module-dep = NET_LOG |
| module-str = Log level for offload layer |
| module-help = Enables offload layer to output debug messages. |
| source "subsys/net/Kconfig.template.log_config.net" |
| endif # NET_OFFLOAD |
| |
| # Hidden option |
| config NET_RAW_MODE |
| bool |
| help |
| This is a very specific option used to built only the very minimal |
| part of the net stack in order to get network drivers working without |
| any net stack above: core, L2 etc... Basically this will build only |
| net_pkt part. It is currently used only by IEEE 802.15.4 drivers, |
| though any type of net drivers could use it. |
| |
| if !NET_RAW_MODE |
| |
| choice |
| prompt "Qemu networking" |
| default NET_QEMU_PPP if NET_PPP |
| default NET_QEMU_SLIP |
| depends on QEMU_TARGET |
| help |
| Can be used to select how the network connectivity is established |
| from inside qemu to host system. This can be done either via |
| serial connection (SLIP) or via Qemu ethernet driver. |
| |
| config NET_QEMU_SLIP |
| bool "SLIP" |
| help |
| Connect to host or to another Qemu via SLIP. |
| |
| config NET_QEMU_PPP |
| bool "PPP" |
| help |
| Connect to host via PPP. |
| |
| config NET_QEMU_ETHERNET |
| bool "Ethernet" |
| help |
| Connect to host system via Qemu ethernet driver support. One such |
| driver that Zephyr supports is Intel e1000 ethernet driver. |
| |
| endchoice |
| |
| 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.ipv6" |
| |
| source "subsys/net/ip/Kconfig.ipv4" |
| |
| config NET_SHELL |
| bool "Enable network shell utilities" |
| select SHELL |
| help |
| Activate shell module that provides network commands like |
| ping to the console. |
| |
| config NET_SHELL_DYN_CMD_COMPLETION |
| bool "Enable network shell dynamic command completion" |
| depends on NET_SHELL |
| default y |
| help |
| Enable various net-shell command to support dynamic command |
| completion. This means that for example the nbr command can |
| automatically complete the neighboring IPv6 address and user |
| does not need to type it manually. |
| Please note that this uses more memory in order to save the |
| dynamic command strings. For example for nbr command the |
| increase is 320 bytes (8 neighbors * 40 bytes for IPv6 address |
| length) by default. Other dynamic completion commands in |
| net-shell require also some smaller amount of memory. |
| |
| config NET_TC_TX_COUNT |
| int "How many Tx traffic classes to have for each network device" |
| default 1 |
| range 1 8 |
| help |
| Define how many Tx traffic classes (queues) the system should have |
| when sending a network packet. The network packet priority can then |
| be mapped to this traffic class so that higher prioritized packets |
| can be processed before lower prioritized ones. Each queue is handled |
| by a separate thread which will need RAM for stack space. |
| Only increase the value from 1 if you really need this feature. |
| The default value is 1 which means that all the network traffic is |
| handled equally. In this implementation, the higher traffic class |
| value corresponds to lower thread priority. |
| |
| config NET_TC_RX_COUNT |
| int "How many Rx traffic classes to have for each network device" |
| default 1 |
| range 1 8 |
| help |
| Define how many Rx traffic classes (queues) the system should have |
| when receiving a network packet. The network packet priority can then |
| be mapped to this traffic class so that higher prioritized packets |
| can be processed before lower prioritized ones. Each queue is handled |
| by a separate thread which will need RAM for stack space. |
| Only increase the value from 1 if you really need this feature. |
| The default value is 1 which means that all the network traffic is |
| handled equally. In this implementation, the higher traffic class |
| value corresponds to lower thread priority. |
| |
| choice |
| prompt "Priority to traffic class mapping" |
| help |
| Select mapping to use to map network packet priorities to traffic |
| classes. |
| |
| config NET_TC_MAPPING_STRICT |
| bool "Strict priority mapping" |
| help |
| This is the recommended default priority to traffic class mapping. |
| Use it for implementations that do not support the credit-based |
| shaper transmission selection algorithm. |
| See 802.1Q, chapter 8.6.6 for more information. |
| |
| config NET_TC_MAPPING_SR_CLASS_A_AND_B |
| bool "SR class A and class B mapping" |
| depends on NET_TC_TX_COUNT >= 2 |
| depends on NET_TC_RX_COUNT >= 2 |
| help |
| This is the recommended priority to traffic class mapping for a |
| system that supports SR (Stream Reservation) class A and SR class B. |
| See 802.1Q, chapter 34.5 for more information. |
| |
| config NET_TC_MAPPING_SR_CLASS_B_ONLY |
| bool "SR class B only mapping" |
| depends on NET_TC_TX_COUNT >= 2 |
| depends on NET_TC_RX_COUNT >= 2 |
| help |
| This is the recommended priority to traffic class mapping for a |
| system that supports SR (Stream Reservation) class B only. |
| See 802.1Q, chapter 34.5 for more information. |
| endchoice |
| |
| config NET_TX_DEFAULT_PRIORITY |
| int "Default network packet priority if none have been set" |
| default 1 |
| range 0 7 |
| help |
| What is the default network packet priority if user has not specified |
| one. The value 0 means lowest priority and 7 is the highest. |
| |
| 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 y if NET_IPV6_NBR_CACHE |
| |
| # Temporarily hide the routing option as we do not have RPL in the system |
| # that used to populate the routing table. |
| config NET_ROUTING |
| bool |
| depends on NET_ROUTE |
| help |
| Allow IPv6 routing between different network interfaces and |
| technologies. Currently this has limited use as some entity |
| would need to populate the routing table. RPL used to do that |
| earlier but currently there is no RPL support in Zephyr. |
| |
| 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 |
| |
| 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" |
| 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. |
| |
| if NET_TCP |
| module = NET_TCP |
| module-dep = NET_LOG |
| module-str = Log level for TCP |
| module-help = Enables TCP handler output debug messages |
| source "subsys/net/Kconfig.template.log_config.net" |
| endif # NET_TCP |
| |
| 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_DELAY |
| int "How long to wait in TIME_WAIT state (in milliseconds)" |
| depends on NET_TCP |
| default 250 |
| help |
| To avoid a (low-probability) issue when delayed packets from |
| previous connection get delivered to next connection reusing |
| the same local/remote ports, RFC 793 (TCP) suggests to keep |
| an old, closed connection in a special "TIME_WAIT" state for |
| the duration of 2*MSL (Maximum Segment Lifetime). The RFC |
| suggests to use MSL of 2 minutes, but notes "This is an |
| engineering choice, and may be changed if experience indicates |
| it is desirable to do so." For low-resource systems, having |
| large MSL may lead to quick resource exhaustion (and related |
| DoS attacks). At the same time, the issue of packet misdelivery |
| is largely alleviated in the modern TCP stacks by using random, |
| non-repeating port numbers and initial sequence numbers. Due |
| to this, Zephyr uses much lower value of 250ms by default. |
| Value of 0 disables TIME_WAIT state completely. |
| |
| 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_INIT_RETRANSMISSION_TIMEOUT |
| int "Initial value of Retransmission Timeout (RTO) (in milliseconds)" |
| depends on NET_TCP |
| default 200 |
| range 100 60000 |
| help |
| This value affects the timeout between initial retransmission |
| of TCP data packets. The value is in milliseconds. |
| |
| 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 |
| Sum((1<<n) * NET_TCP_INIT_RETRANSMISSION_TIMEOUT) |
| 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_UDP_MISSING_CHECKSUM |
| bool "Accept missing checksum (IPv4 only)" |
| depends on NET_UDP && NET_IPV4 |
| help |
| RFC 768 states the possibility to have a missing checksum, for |
| debugging purposes for instance. That feature is however valid only |
| for IPv4 and on reception only, since Zephyr will always compute the |
| UDP checksum in transmission path. |
| |
| if NET_UDP |
| module = NET_UDP |
| module-dep = NET_LOG |
| module-str = Log level for UDP |
| module-help = Enables UDP handler output debug messages |
| source "subsys/net/Kconfig.template.log_config.net" |
| endif # NET_UDP |
| |
| config NET_MAX_CONN |
| int "How many network connections are supported" |
| depends on NET_UDP || NET_TCP || NET_SOCKETS_PACKET || NET_SOCKETS_CAN |
| default 8 if NET_IPV6 && NET_IPV4 |
| default 4 |
| help |
| The value depends on your network needs. The value |
| should include both 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 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. |
| |
| config NET_CONTEXT_PRIORITY |
| bool "Add priority support to net_context" |
| help |
| It is possible to prioritize network traffic. This requires |
| also traffic class support to work as expected. |
| |
| config NET_CONTEXT_TIMESTAMP |
| bool "Add timestamp support to net_context" |
| select NET_PKT_TIMESTAMP |
| help |
| It is possible to timestamp outgoing packets and get information |
| about these timestamps. |
| |
| config NET_CONTEXT_TXTIME |
| bool "Add TXTIME support to net_context" |
| select NET_PKT_TXTIME |
| help |
| It is possible to add information when the outgoing network packet |
| should be sent. The TX time information should be placed into |
| ancillary data field in sendmsg call. |
| |
| config NET_TEST |
| bool "Network Testing" |
| help |
| Used for self-contained networking tests that do not require a |
| network device. |
| |
| config NET_SLIP_TAP |
| bool "TAP SLIP driver" |
| depends on NET_QEMU_SLIP |
| depends on NET_NATIVE |
| select SLIP |
| select UART_PIPE |
| select UART_INTERRUPT_DRIVEN |
| select SLIP_TAP |
| default y if (QEMU_TARGET && !NET_TEST && !NET_L2_BT) |
| help |
| SLIP TAP support is necessary when testing with QEMU. The host |
| needs to have tunslip6 with TAP support running in order to |
| communicate via the SLIP driver. See net-tools project at |
| https://github.com/zephyrproject-rtos/net-tools for more details. |
| |
| config NET_TRICKLE |
| bool "Enable Trickle library" |
| help |
| Normally this is enabled automatically if needed, |
| so say 'n' if unsure. |
| |
| if NET_TRICKLE |
| module = NET_TRICKLE |
| module-dep = NET_LOG |
| module-str = Log level for Trickle algorithm |
| module-help = Enables Trickle library output debug messages |
| source "subsys/net/Kconfig.template.log_config.net" |
| endif # NET_TRICKLE |
| |
| endif # NET_RAW_MODE |
| |
| config NET_PKT_RX_COUNT |
| int "How many packet receives can be pending at the same time" |
| default 14 if NET_L2_ETHERNET |
| 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 14 if NET_L2_ETHERNET |
| default 4 |
| 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 36 if NET_L2_ETHERNET |
| 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 36 if NET_L2_ETHERNET |
| default 16 |
| help |
| Each data buffer will occupy CONFIG_NET_BUF_DATA_SIZE + smallish |
| header (sizeof(struct net_buf)) amount of data. |
| |
| choice |
| prompt "Network packet data allocator type" |
| default NET_BUF_FIXED_DATA_SIZE |
| help |
| Select the memory allocator for the network buffers that hold the |
| packet data. |
| |
| config NET_BUF_FIXED_DATA_SIZE |
| bool "Fixed data size buffer" |
| help |
| Each buffer comes with a built time configured size. If runtime |
| requested is bigger than that, it will allocate as many net_buf |
| as necessary to reach that request. |
| |
| config NET_BUF_VARIABLE_DATA_SIZE |
| bool "Variable data size buffer [EXPERIMENTAL]" |
| help |
| The buffer is dynamically allocated from runtime requested size. |
| |
| endchoice |
| |
| config NET_BUF_DATA_SIZE |
| int "Size of each network data fragment" |
| default 128 |
| depends on NET_BUF_FIXED_DATA_SIZE |
| help |
| This value tells what is the fixed size of each network buffer. |
| |
| config NET_BUF_DATA_POOL_SIZE |
| int "Size of the memory pool where buffers are allocated from" |
| default 4096 if NET_L2_ETHERNET |
| default 2048 |
| depends on NET_BUF_VARIABLE_DATA_SIZE |
| help |
| This value tell what is the size of the memory pool where each |
| network buffer is allocated from. |
| |
| config NET_HEADERS_ALWAYS_CONTIGUOUS |
| bool |
| help |
| This a hidden option, which one should use with a lot of care. |
| NO bug reports will be accepted if that option is enabled! |
| You are warned. |
| If you are 100% sure the headers memory space is always in a |
| contiguous space, this will save stack usage and ROM in net core. |
| This is a possible case when using IPv4 only, with |
| NET_BUF_FIXED_DATA_SIZE enabled and NET_BUF_DATA_SIZE of 128 for |
| instance. |
| |
| config NET_IF_USERSPACE_ACCESS |
| bool "Allow userspace app to manipulate network interface" |
| depends on USERSPACE |
| help |
| Only enable this if you want a userspace application to manipulate |
| network interface. Currently this is limited to add or remove |
| IP addresses. By default this is not allowed. |
| |
| choice |
| prompt "Default Network Interface" |
| default NET_DEFAULT_IF_FIRST |
| help |
| If system has multiple interfaces enabled, then user shall be able |
| to choose default interface. Otherwise first interface will be the |
| default interface. |
| |
| config NET_DEFAULT_IF_FIRST |
| bool "First available interface" |
| |
| config NET_DEFAULT_IF_ETHERNET |
| bool "Ethernet" |
| depends on NET_L2_ETHERNET |
| |
| config NET_DEFAULT_IF_BLUETOOTH |
| bool "Bluetooth" |
| depends on NET_L2_BT |
| |
| config NET_DEFAULT_IF_IEEE802154 |
| bool "IEEE 802.15.4" |
| depends on NET_L2_IEEE802154 |
| |
| config NET_DEFAULT_IF_OFFLOAD |
| bool "Offloaded interface" |
| depends on NET_OFFLOAD |
| |
| config NET_DEFAULT_IF_DUMMY |
| bool "Dummy testing interface" |
| depends on NET_L2_DUMMY |
| |
| config NET_DEFAULT_IF_CANBUS |
| bool "6LoCAN (IPv6 over CAN) interface" |
| depends on NET_L2_CANBUS |
| |
| config NET_DEFAULT_IF_CANBUS_RAW |
| bool "Socket CAN interface" |
| depends on NET_L2_CANBUS_RAW |
| |
| |
| endchoice |
| |
| config NET_PKT_TIMESTAMP |
| bool "Enable network packet timestamp support" |
| help |
| Enable network packet timestamp support. This is needed for |
| example in gPTP which needs to know how long it takes to send |
| a network packet. |
| |
| config NET_PKT_TIMESTAMP_THREAD |
| bool "Create TX timestamp thread" |
| default y if NET_GPTP |
| depends on NET_PKT_TIMESTAMP |
| help |
| Create a TX timestamp thread that will pass the timestamped network |
| packets to some other module like gPTP for further processing. |
| If you just want to timestamp network packets and get information |
| how long the network packets flow in the system, you can disable |
| the thread support. |
| |
| config NET_PKT_TIMESTAMP_STACK_SIZE |
| int "Timestamp thread stack size" |
| default 1024 |
| depends on NET_PKT_TIMESTAMP_THREAD |
| help |
| Set the timestamp thread stack size in bytes. The timestamp |
| thread waits for timestamped TX frames and calls registered |
| callbacks. |
| |
| config NET_PKT_TXTIME |
| bool "Enable network packet TX time support" |
| help |
| Enable network packet TX time support. This is needed for |
| when the application wants to set the exact time when the network |
| packet should be sent. |
| |
| config NET_PROMISCUOUS_MODE |
| bool "Enable promiscuous mode support [EXPERIMENTAL]" |
| select NET_MGMT |
| select NET_MGMT_EVENT |
| select NET_L2_ETHERNET_MGMT if NET_L2_ETHERNET |
| help |
| Enable promiscuous mode support. This only works if the network |
| device driver supports promiscuous mode. The user application |
| also needs to read the promiscuous mode data. |
| |
| if NET_PROMISCUOUS_MODE |
| module = NET_PROMISC |
| module-dep = NET_LOG |
| module-str = Log level for promiscuous mode |
| module-help = Enables promiscuous mode to output debug messages. |
| source "subsys/net/Kconfig.template.log_config.net" |
| endif # NET_PROMISCUOUS_MODE |
| |
| source "subsys/net/ip/Kconfig.stack" |
| |
| source "subsys/net/ip/Kconfig.mgmt" |
| |
| source "subsys/net/ip/Kconfig.stats" |
| |
| source "subsys/net/ip/Kconfig.debug" |
| |
| endmenu |