# Kconfig - net stack configuration options

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

menu "Networking"

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

config NET_BUF_LOG
	bool "Network buffer logging"
	depends on NET_BUF
	select STDOUT_CONSOLE
	select SYS_LOG
	default n
	help
	Enable logs and checks for the generic network buffers.

config SYS_LOG_NET_BUF_LEVEL
	int
	prompt "Network buffer Logging level"
	depends on NET_BUF_LOG
	default 1
	range 0 4
	help
	  Sets log level for network buffers.
	  Levels are:
	  0 OFF, do not write
	  1 ERROR, only write SYS_LOG_ERR
	  2 WARNING, write SYS_LOG_WRN in adition to previous level
	  3 INFO, write SYS_LOG_INF in adition to previous levels
	  4 DEBUG, write SYS_LOG_DBG in adition to previous levels

config NET_BUF_SIMPLE_LOG
	bool "Network buffer memory debugging"
	depends on NET_BUF_LOG
	select STDOUT_CONSOLE
	select SYS_LOG
	default n
	help
	  Enable extra debug logs and checks for the generic network buffers.

config NET_BUF_POOL_USAGE
	bool "Network buffer pool usage tracking"
	depends on NET_BUF
	default n
	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

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

if NETWORKING

source "subsys/net/ip/Kconfig"

source "subsys/net/lib/Kconfig"

endif

endmenu
