# 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"
	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 "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"
	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"
	help
	  Enables core network stack code part to output debug messages

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

config NET_DEBUG_TC
	bool "Debug network traffic class code"
	help
	  Enables network traffic class code part to output debug messages

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

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

config NET_DEBUG_NET_PKT
	bool "Debug network packet and buffer allocation"
	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"
	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"
	help
	  Enables connection debug messages

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

endif # NET_LOG
