# Copyright Runtime.io 2018. All rights reserved.
# Copyright Nordic Semiconductor ASA 2020-2022. All rights reserved.
# SPDX-License-Identifier: Apache-2.0

# The Kconfig file is dedicated to UDP transport of MCUmgr
# subsystem and provides Kconfig options to control aspects of
# the transport.
#
# Options defined in this file should be prefixed:
#  MCUMGR_TRANSPORT_UDP_

menuconfig MCUMGR_TRANSPORT_UDP
	bool "UDP mcumgr SMP transport"
	depends on NET_UDP
	depends on NET_SOCKETS
	select NET_CONNECTION_MANAGER
	select POSIX_API
	help
	  Enables handling of SMP commands received over UDP.
	  Will start a thread for listening on the configured UDP port.

if MCUMGR_TRANSPORT_UDP

config MCUMGR_TRANSPORT_UDP_IPV4
	bool "UDP SMP using IPv4"
	depends on NET_IPV4
	default y
	help
	  Enable SMP UDP using IPv4 addressing.
	  Can be enabled alongside IPv6 addressing.

config MCUMGR_TRANSPORT_UDP_IPV6
	bool "UDP SMP using IPv6"
	depends on NET_IPV6
	help
	  Enable SMP UDP using IPv6 addressing.
	  Can be enabled alongside IPv4 addressing.

config MCUMGR_TRANSPORT_UDP_PORT
	int "UDP SMP port"
	default 1337
	help
	  UDP port that SMP server will listen for SMP commands on.

config MCUMGR_TRANSPORT_UDP_STACK_SIZE
	int "UDP SMP stack size"
	default 512
	help
	  Stack size of the SMP UDP listening thread

config MCUMGR_TRANSPORT_UDP_THREAD_PRIO
	int "UDP SMP thread priority"
	default 0
	help
	  Scheduling priority of the SMP UDP listening thread.

config MCUMGR_TRANSPORT_UDP_MTU
	int "UDP SMP MTU"
	default 1500
	help
	  Maximum size of SMP frames sent and received over UDP, in bytes.
	  This value must satisfy the following relation:
	  MCUMGR_TRANSPORT_UDP_MTU <= MCUMGR_TRANSPORT_NETBUF_SIZE + SMP msg overhead - address size
	  where address size is determined by IPv4/IPv6 selection.

config MCUMGR_TRANSPORT_UDP_AUTOMATIC_INIT
	bool "UDP SMP autostart"
	default y
	help
	  Enable starting the UDP SMP transport at boot time without needing
	  any code in the application to do this, otherwise will need the user
	  application to manually start and stop the transport using
	  `smp_udp_open` and `smp_udp_close`.

endif # MCUMGR_TRANSPORT_UDP
