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

menuconfig NET_MGMT
	bool "Network Management API"
	help
	  Add support for NM API that enables managing different aspects
	  of the network stack as well as receiving notification on network
	  events (ip address change, iface up and running ...).

if NET_MGMT

config NET_MGMT_EVENT
	bool "Add support for runtime network event notifications"
	help
	  This adds support for the stack to notify events towards any
	  relevant listener. This can be necessary when application
	  (or else) needs to be notified on a specific network event
	  (ip address change for instance) to trigger some related work.

if NET_MGMT_EVENT

config NET_MGMT_EVENT_STACK_SIZE
	int "Stack size for the inner thread handling event callbacks"
	default 2048 if COVERAGE_GCOV
	default 768
	help
	  Set the internal stack size for NM to run registered callbacks
	  on events.

config NET_MGMT_EVENT_THREAD_PRIO
	int "Inner thread priority (use with care)"
	default 7
	help
	  Set the network management event core's inner thread priority.
	  Do not change this unless you know what you are doing.

config NET_MGMT_EVENT_QUEUE_SIZE
	int "Size of event queue"
	default 2
	range 1 1024
	help
	  Numbers of events which can be queued at same time. Note that if a
	  3rd event comes in, the first will be removed without generating any
	  notification. Thus the size of this queue has to be tweaked depending
	  on the load of the system, planned for the usage.

config NET_MGMT_EVENT_INFO
	bool "Enable passing information along with an event"
	help
	  Event notifier will be able to provide information to an event,
	  and listeners will then be able to get it. Such information depends
	  on the type of event.

module = NET_MGMT_EVENT
module-dep = NET_LOG
module-str = Log level for network management event core
module-help = Enable debug messages output for network management events.
source "subsys/net/Kconfig.template.log_config.net"

config NET_DEBUG_MGMT_EVENT_STACK
	bool "Enable stack analysis output on Net MGMT event core"
	select INIT_STACKS
	help
	  Add debug messages output on how much Net MGMT event stack is used.

endif # NET_MGMT_EVENT
endif # NET_MGMT
