# Net stack configuration options

# Copyright (c) 2015 Intel Corporation
# SPDX-License-Identifier: Apache-2.0

menu "Networking"

config NET_BUF
	bool "Network buffer support"
	help
	  This option enables support for generic network protocol
	  buffers.

if NET_BUF

config NET_BUF_USER_DATA_SIZE
	int "Size of user_data available in every network buffer"
	default 24 if MCUMGR_SMP_UDP && MCUMGR_SMP_UDP_IPV6
	default 8 if MCUMGR_SMP_UDP && MCUMGR_SMP_UDP_IPV4
	default 8 if ((BT || NET_TCP2) && 64BIT) || BT_CONN || BT_ISO
	default 4
	range 4 65535 if BT || NET_TCP2
	range 0 65535
	help
	  Amount of memory reserved in each network buffer for user data. In
	  most cases this can be left as the default value.

config NET_BUF_LOG
	bool "Network buffer logging"
	select LOG
	help
	  Enable logs and checks for the generic network buffers.

module = NET_BUF
module-str = net_buf
source "subsys/logging/Kconfig.template.log_config"

if NET_BUF_LOG

config NET_BUF_WARN_ALLOC_INTERVAL
	int "Interval of Network buffer allocation warnings"
	default 1
	range 0 60
	help
	  Interval in seconds of Network buffer allocation warnings which are
	  generated when a buffer cannot immediately be allocated with K_FOREVER
	  which may lead to deadlocks. Setting it to 0 makes warnings to be
	  printed only once per allocation.

config NET_BUF_SIMPLE_LOG
	bool "Network buffer memory debugging"
	select LOG
	help
	  Enable extra debug logs and checks for the generic network buffers.

endif # NET_BUF_LOG

config NET_BUF_POOL_USAGE
	bool "Network buffer pool usage tracking"
	help
	  Enable network buffer pool tracking. This means that:
	  * amount of free buffers in the pool is remembered
	  * total size of the pool is calculated
	  * pool name is stored and can be shown in debugging prints

endif # NET_BUF

config NETWORKING
	bool "Link layer and IP networking support"
	select NET_BUF
	select POLL
	select ENTROPY_GENERATOR
	help
	  This option enabled generic link layer and IP networking support.

if NETWORKING

# Such option should not be configured manually but by device drivers
# which supports PM properly.
config NET_POWER_MANAGEMENT
	bool
	default n
	depends on PM_DEVICE

source "subsys/net/Kconfig.hostname"

source "subsys/net/l2/Kconfig"

source "subsys/net/ip/Kconfig"

source "subsys/net/lib/Kconfig"

endif

endmenu
