# Kconfig.debug - Debug Options

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

menuconfig NET_LOG
	bool "Enable network stack logging and debugging"
	default n
	select SYS_LOG
	help
	Enable logging in various parts of the network stack.
	Specific debugging options to other sub-menus will be unlocked
	as well (IPv6, IPv4, ...).

if NET_LOG

config SYS_LOG_NET_LEVEL
	int
	prompt "Network Stack Logging level"
	default 1
	range 0 4
	help
	  Sets log level for the network stack.
	  Levels are:
	  0 OFF, do not write
	  1 ERROR, only write SYS_LOG_ERR
	  2 WARNING, write SYS_LOG_WRN in addition to previous level
	  3 INFO, write SYS_LOG_INF in addition to previous levels
	  4 DEBUG, write SYS_LOG_DBG in addition to previous levels

config NET_LOG_GLOBAL
	bool "Enable global network stack logging"
	default n
	select NET_DEBUG_CORE
	select NET_DEBUG_IF
	select NET_DEBUG_UTILS
	select NET_DEBUG_CONTEXT
	select NET_DEBUG_NET_PKT
	select NET_DEBUG_CONN
	select NET_DEBUG_ROUTE if NET_ROUTE
	select NET_DEBUG_IPV6 if NET_IPV6
	select NET_DEBUG_ICMPV6 if NET_IPV6
	select NET_DEBUG_IPV6_NBR_CACHE if NET_IPV6
	select NET_DEBUG_6LO if NET_6LO
	select NET_DEBUG_IPV4 if NET_IPV4
	select NET_DEBUG_ICMPV4 if NET_IPV4
	select NET_DEBUG_DHCPV4 if NET_DHCPV4
	select NET_DEBUG_UDP if NET_UDP
	select NET_DEBUG_TCP if NET_TCP
	select NET_DEBUG_RPL if NET_RPL
	select NET_DEBUG_TRICKLE if NET_TRICKLE
	select NET_DEBUG_MGMT_EVENT if NET_MGMT
	select NET_DEBUG_MGMT_EVENT_STACK if NET_MGMT_EVENT
	help
	By default, logging will apply only on enabled CONFIG_NET_DEBUG_*
	options, on which CONFIG_SYS_LOG_NET_LEVEL would be applied.
	However, if you want all the network stack logging enabled at once,
	use this option. Beware logging takes a lot of ROM/RAM and kills
	execution timing so it can affect your use case.

config NET_DEBUG_CORE
	bool "Debug core IP stack"
	default n
	help
	Enables core network stack code part to output debug messages

config NET_DEBUG_IF
	bool "Debug network interface code"
	default n
	help
	Enables network interface code part to output debug messages

config NET_DEBUG_UTILS
	bool "Debug utility functions in IP stack"
	default n
	help
	Enables utility functions to output debug messages

config NET_DEBUG_CONTEXT
	bool "Debug network context allocation"
	default n
	help
	Enables printing of network context allocations and frees.

config NET_DEBUG_NET_PKT
	bool "Debug network packet and buffer allocation"
	default n
	select NET_BUF_POOL_USAGE
	help
	Enables printing of network packet and buffer allocations and frees.

config NET_DEBUG_NET_PKT_EXTERNALS
	int "How many external network packet allocations"
	default 0
	depends on NET_DEBUG_NET_PKT
	help
	How many external net_pkt objects are there in user specific pools.
	This value is used when allocating space for tracking the
	memory allocations.

config NET_DEBUG_CONN
	bool "Debug connection handling"
	default n
	help
	Enables connection debug messages

config NET_DEBUG_ROUTE
	bool "Debug route management"
	depends on NET_ROUTE
	default n
	help
	Enables routing engine debug messages

endif # NET_LOG
