# Kconfig.debug - IP stack debugging configuration options

#
# Copyright (c) 2016 Intel Corporation.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

menuconfig NETWORKING_WITH_LOGGING
	bool "Enable network stack logging"
	select STDOUT_CONSOLE
	default n
	help
	  Enable logging in various parts of the network stack.

if NETWORKING_WITH_LOGGING

choice
prompt "General debug level"
help
	Set the level of debugging you want. This will be generalized,
	whatever the part you will be debugging.
default NETWORK_IP_STACK_DEBUG_PRINT
config NETWORK_IP_STACK_DEBUG_PRINT
	bool "Print only debug messages"
config NETWORK_IP_STACK_DEBUG_ANNOTATE
	bool "Print only annotations"
config NETWORK_IP_STACK_DEBUG_FULL
	bool "Print both messages and annotations"
endchoice

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

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

config NETWORK_IP_STACK_DEBUG_RECV_SEND
	bool "Debug network generic receive and send functions"
	default n
	help
	  Enables generic debug printing when receiving and sending data.

config NETWORK_IP_STACK_DEBUG_TCP_PSOCK
	bool "Debug network TCP protosockets"
	depends on NETWORKING_WITH_TCP
	default n
	help
	  Enables debugging the protosockets used in TCP engine.

config NETWORK_IP_STACK_DEBUG_IPV6
	bool "Debug core IPv6"
	depends on NETWORKING_WITH_IPV6
	default n
	help
	  Enables core IPv6 code part to output debug messages

config NETWORK_IP_STACK_DEBUG_SIMPLE_UDP
	bool "Debug simple udp"
	default n
	help
	  Enables network simple udp debug messages

config NETWORK_IP_STACK_DEBUG_UDP_PACKET
	bool "Debug uip udp packet"
	default n
	help
	  Enables network uip udp packet debug messages

config NETWORK_IP_STACK_DEBUG_IPV6_DS
	bool "Debug IPv6 Data Structures"
	depends on NETWORKING_WITH_IPV6
	default n
	help
	  Enables IPv6 Data Structures code part to output debug messages

config NETWORK_IP_STACK_DEBUG_IPV6_ICMPV6
	bool "Debug ICMPv6"
	depends on NETWORKING_WITH_IPV6
	default n
	help
	  Enables ICMPv6 code part to output debug messages

config NETWORK_IP_STACK_DEBUG_IPV6_ND
	bool "Debug IPv6 Neighbour Discovery"
	depends on NETWORKING_WITH_IPV6
	default n
	help
	  Enables IPv6 Neighbour Discovery code part to output debug messages

config NETWORK_IP_STACK_DEBUG_IPV6_NBR_CACHE
	bool "Debug IPv6 neighbour cache"
	depends on NETWORKING_WITH_IPV6
	default n
	help
	  Enables Neighbour Cache code part to output debug messages

config NETWORK_IP_STACK_DEBUG_IPV6_ROUTE
	bool "Debug IPv6 route"
	depends on NETWORKING_WITH_IPV6
	default n
	help
	  Enables IPv6 route code part to output debug messages

config NETWORK_IP_STACK_DEBUG_15_4_NET_DRIVER
	bool "Debug 802.15.4 network driver"
	depends on NETWORKING_WITH_15_4
	default n
	help
	  Enables 802.15.4 network driver output debug messages

config NETWORK_IP_STACK_DEBUG_15_4_MAC
	bool "Debug 802.15.4 MAC layer"
	depends on NETWORKING_WITH_15_4
	default n
	help
	  Enables 802.15.4 MAC layer to output debug messages

config NETWORK_IP_STACK_DEBUG_15_4_FRAMING
	bool "Debug 802.15.4 packet framing"
	depends on NETWORKING_WITH_15_4
	default n
	help
	  Enables 802.15.4 packet framing to output debug messages

config NETWORK_IP_STACK_DEBUG_15_4_6LOWPAN_FRAG
	bool "Debug 802.15.4 6LoWPAN fragmentation"
	depends on NETWORKING_WITH_15_4
	default n
	help
	  Enables 802.15.4 6LoWPAN fragmentation to output debug messages

config NETWORK_IP_STACK_DEBUG_6LOWPAN_COMPRESSION
	bool "Debug generic 6LoWPAN compression"
	depends on NETWORKING_WITH_IPV6
	default n
	help
	  Enables generic (802.15.4 or Bluetooth) 6LoWPAN compression
	  to output debug messages

config NETWORK_IP_STACK_DEBUG_PACKET_QUEUE
	bool "Debug uip packet queue"
	depends on NETWORKING_WITH_IPV6
	default n
	help
	  Enables uip packet queue output debug messages

config NETWORK_IP_STACK_DEBUG_RPL
	bool "Debug RPL messages"
	depends on NETWORKING_WITH_RPL
	default n
	help
	  Enables RPL debug messages

config NETWORK_IP_STACK_DEBUG_RPL_ICMPV6
	bool "Debug RPL ICMPv6 messages"
	depends on NETWORKING_WITH_RPL
	default n
	help
	  Enables RPL ICMPv6 debug messages

config NETWORK_IP_STACK_DEBUG_RPL_OF
	bool "Debug RPL objective function messages"
	depends on NETWORKING_WITH_RPL
	default n
	help
	  Enables RPL Objective Function related debug messages

config NETWORK_IP_STACK_DEBUG_RPL_TIMERS
	bool "Debug RPL timer functionality"
	depends on NETWORKING_WITH_RPL
	default n
	help
	  Enables RPL timers related debug messages

config NETWORK_IP_STACK_DEBUG_IPV4
	bool "Debug core IPv4"
	depends on NETWORKING_WITH_IPV4
	default n
	help
	  Enables core IPv4 code part to output debug messages

config NETWORK_IP_STACK_DEBUG_IPV4_ARP
	bool "Debug IPv4 ARP"
	depends on NETWORKING_WITH_IPV4
	default n
	help
	  Enables core ARP code part to output debug messages

config NETWORK_IP_STACK_DEBUG_COAP_CONTEXT
	bool "Debug CoAP context"
	depends on ER_COAP
	default n
	help
	  Enables CoAP context output debug messages

config NETWORK_IP_STACK_DEBUG_COAP_ENGINE
	bool "Debug CoAP engine"
	depends on ER_COAP
	default n
	help
	  Enables CoAP engine output debug messages

config NETWORK_IP_STACK_DEBUG_COAP_TRANSACTION
	bool "Debug CoAP transaction"
	depends on ER_COAP
	default n
	help
	  Enables CoAP transaction output debug messages

config NETWORK_IP_STACK_DEBUG_COAP_INTERNAL
	bool "Debug CoAP internals"
	depends on ER_COAP
	default n
	help
	  Enables CoAP internals output debug messages

config NETWORK_IP_STACK_DEBUG_COAP_OBSERVE
	bool "Debug CoAP observe"
	depends on ER_COAP
	default n
	help
	  Enables CoAP observe output debug messages

config NETWORK_IP_STACK_DEBUG_COAP_WELL_KNOWN
	bool "Debug CoAP well known core"
	depends on ER_COAP
	default n
	help
	  Enables CoAP resource well known core ouput debug messages

config NETWORK_IP_STACK_DEBUG_REST_ENGINE
	bool "Debug REST engine"
	depends on ER_COAP
	default n
	help
	  Enables REST engine output debug messages

endif
