# 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 ...).

config NET_MGMT_EVENT
	bool "Add support for runtime network event notifications"
	depends on NET_MGMT
	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_QUEUE_SIZE
	int "Size of event queue"
	default 16 if NET_MGMT_EVENT_MONITOR
	default 5
	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_QUEUE_TIMEOUT
	int "Timeout for event queue"
	default 10
	range 1 10000
	help
	  Timeout in milliseconds for the event queue. This timeout is used to
	  wait for the queue to be available.

config NET_MGMT_EVENT_INFO
	bool "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.

config NET_MGMT_EVENT_MONITOR
	bool "Monitor network events from net shell"
	depends on NET_SHELL && NET_MGMT_EVENT_INFO
	help
	  Allow user to monitor network events from net shell using
	  "net events [on|off]" command. The monitoring is disabled by
	  default. Note that you should probably increase the value of
	  NET_MGMT_EVENT_QUEUE_SIZE from the default in order not to miss
	  any events.

config NET_MGMT_EVENT_MONITOR_AUTO_START
	bool "Start the event monitor automatically at boot"
	depends on NET_MGMT_EVENT_MONITOR && SHELL_BACKEND_SERIAL
	help
	  Allow user to start monitoring network events automatically
	  when the system starts. The auto start is disabled by default.
	  The default UART based shell is used to print data.

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 "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
