# Kconfig.stats - Statistics Options

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

menuconfig NET_STATISTICS
	bool "Network statistics"
	help
	  Manage statistics accounting. This takes memory so say 'n' if unsure.

if NET_STATISTICS

module = NET_STATISTICS
module-dep = NET_LOG
module-str = Log level for network statistics
module-help = Enables statistics module to output debug messages.
source "subsys/net/Kconfig.template.log_config.net"

config NET_STATISTICS_PER_INTERFACE
	bool "Collect statistics per network interface"
	default y
	help
	  Collect statistics also for each network interface.

config NET_STATISTICS_USER_API
	bool "Expose statistics through NET MGMT API"
	select NET_MGMT
	help
	  Enable this if you need to grab relevant statistics in your code,
	  via calling net_mgmt() with relevant NET_REQUEST_STATS_GET_* command.

config NET_STATISTICS_PERIODIC_OUTPUT
	bool "Simple periodic output"
	depends on NET_LOG
	help
	  Print out all the statistics periodically through logging.
	  This is meant for testing mostly.

config NET_STATISTICS_IPV4
	bool "IPv4 statistics"
	depends on NET_IPV4
	default y
	help
	  Keep track of IPv4 related statistics

config NET_STATISTICS_IPV6
	bool "IPv6 statistics"
	depends on NET_IPV6
	default y
	help
	  Keep track of IPv6 related statistics

config NET_STATISTICS_IPV6_ND
	bool "IPv6 statistics"
	depends on NET_IPV6_ND
	default y
	help
	  Keep track of IPv6 Neighbor Discovery related statistics

config NET_STATISTICS_ICMP
	bool "ICMP statistics"
	depends on NET_IPV6 || NET_IPV4
	default y
	help
	  Keep track of ICMPv4/6 related statistics, depending whether IPv4
	  and/or IPv6 is/are enabled.

config NET_STATISTICS_UDP
	bool "UDP statistics"
	depends on NET_UDP
	default y
	help
	  Keep track of UDP related statistics

config NET_STATISTICS_TCP
	bool "TCP statistics"
	depends on NET_TCP
	default y
	help
	  Keep track of TCP related statistics

config NET_STATISTICS_MLD
	bool "Multicast Listener Discovery (MLD) statistics"
	depends on NET_IPV6_MLD
	default y
	help
	  Keep track of MLD related statistics

config NET_STATISTICS_ETHERNET
	bool "Ethernet statistics"
	depends on NET_L2_ETHERNET
	default y
	help
	  Keep track of Ethernet related statistics. Note that this
	  requires support from the ethernet driver. The driver needs
	  to collect the statistics.

config NET_STATISTICS_ETHERNET_VENDOR
	bool "Vendor specific Ethernet statistics"
	depends on NET_STATISTICS_ETHERNET
	help
	  Allows Ethernet drivers to provide statistics information
	  from vendor specific hardware registers in a form of
	  key-value pairs. Deciphering the information may require
	  vendor documentation.

endif # NET_STATISTICS
