# 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
	depends on SYS_LOG
	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_TC
	bool "Debug network traffic class code"
	default n
	help
	  Enables network traffic class 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 collection of network packet and buffer allocations and frees.

config NET_DEBUG_NET_PKT_ALL
	bool "Debug network packet and buffer individual allocation"
	default n
	depends on NET_DEBUG_NET_PKT
	help
	  Enables printing of network packet and buffer allocations and frees for
	  each allocation. This can produce lot of output so it is disabled by
	  default.

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
