# Kconfig template file for setting networking log level for
# various network related components. This template variant
# allows user to specify the default log level.

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

choice
	prompt "$(module-str)"
	default $(module)_$(module-def)
	depends on $(module-dep)
# If we ever get help text macro expansion, then just uncomment
# the following lines.
#	help
#	  $(module-help)

config $(module)_LOG_LEVEL_OFF
	bool "Off"
	help
	  Do not write to log.

config $(module)_LOG_LEVEL_ERR
	bool "Error"
	help
	  Only write to log when NET_ERR or LOG_ERR is used.

config $(module)_LOG_LEVEL_WRN
	bool "Warning"
	help
	  Write to log with NET_WARN or LOG_WRN in addition to previous level.

config $(module)_LOG_LEVEL_INF
	bool "Info"
	help
	  Write to log with NET_INFO or LOG_INF in addition to previous levels.

config $(module)_LOG_LEVEL_DBG
	bool "Debug"
	help
	  Write to log with NET_DBG or LOG_DBG in addition to previous levels.

endchoice

config $(module)_LOG_LEVEL
	int
	default 0 if $(module)_LOG_LEVEL_OFF || !$(module-dep)
	default 1 if $(module)_LOG_LEVEL_ERR
	default 2 if $(module)_LOG_LEVEL_WRN
	default 3 if $(module)_LOG_LEVEL_INF
	default 4 if $(module)_LOG_LEVEL_DBG
