# OpenThread stack features selection

# Copyright (c) 2020 Nordic Semiconductor ASA
# SPDX-License-Identifier: Apache-2.0

choice OPENTHREAD_STACK_VERSION
	prompt "OpenThread stack version"
	default OPENTHREAD_THREAD_VERSION_1_1
	help
	  This option selects version of Thread stack

config OPENTHREAD_THREAD_VERSION_1_1
	bool "Version 1.1"
config OPENTHREAD_THREAD_VERSION_1_2
	bool "Version 1.2"
config OPENTHREAD_THREAD_VERSION_1_3
	bool "Version 1.3"
config OPENTHREAD_THREAD_VERSION_1_3_1
	bool "Version 1.3.1"
endchoice

config OPENTHREAD_THREAD_VERSION
	string
	default "1.1" if OPENTHREAD_THREAD_VERSION_1_1
	default "1.2" if OPENTHREAD_THREAD_VERSION_1_2
	default "1.3" if OPENTHREAD_THREAD_VERSION_1_3
	default "1.3.1" if OPENTHREAD_THREAD_VERSION_1_3_1
	default "unknown"

config OPENTHREAD_ANYCAST_LOCATOR
	bool "Anycast locator support"

config OPENTHREAD_BACKBONE_ROUTER
	bool "Backbone Router functionality"

config OPENTHREAD_BACKBONE_ROUTER_DUA_NDPROXYING
	bool "BBR DUA ND Proxy support"

config OPENTHREAD_BACKBONE_ROUTER_MULTICAST_ROUTING
	bool "BBR MR support"

config OPENTHREAD_BORDER_AGENT
	bool "Border Agent support"

config OPENTHREAD_BORDER_ROUTER
	bool "Border Router support"

config OPENTHREAD_BORDER_ROUTING
	bool "Border routing support"

config OPENTHREAD_BORDER_ROUTING_COUNTERS
	bool "Border routing counters support"

config OPENTHREAD_BORDER_ROUTING_DHCP6_PD
	bool "DHCPv6-PD support in border routing"

config OPENTHREAD_CHANNEL_MONITOR
	bool "Channel monitor support"

config OPENTHREAD_CHANNEL_MANAGER
	bool "Channel manager support"
	depends on OPENTHREAD_CHANNEL_MONITOR

config OPENTHREAD_COAP
	bool "OpenThread CoAP support"
	help
	  Enable CoAP API for the application with use of OpenThread stack

config OPENTHREAD_COAP_BLOCK
	bool "CoAP Block-wise option support"

config OPENTHREAD_COAP_OBSERVE
	bool "CoAP Observe option support"

config OPENTHREAD_COAPS
	bool "Secure CoAP API support"
	depends on OPENTHREAD_COAP

config OPENTHREAD_COMMISSIONER
	bool "Commissioner functions support"
	help
	  Enable commissioner capability in OpenThread stack. Note, that DTLS
	  handshake used in the commissioning procedure requires a larger
	  mbedTLS heap than the default value. A minimum recommended value of
	  CONFIG_MBEDTLS_HEAP_SIZE for the commissioning is 10KB.

config OPENTHREAD_CSL_DEBUG
	bool "CSL debugging"

config OPENTHREAD_CSL_RECEIVER
	bool "CSL Receiver support"
	help
	  Enable CSL Receiver support for Thread 1.2

config OPENTHREAD_DEVICE_PROP_LEADER_WEIGHT
	bool "Device props for leader weight"
	default n if (OPENTHREAD_THREAD_VERSION_1_1 || \
		      OPENTHREAD_THREAD_VERSION_1_2 || \
		      OPENTHREAD_THREAD_VERSION_1_3)
	default y
	help
	  Enable the device properties which are then used to determine and set
	  the Leader Weight.

config OPENTHREAD_DATASET_UPDATER
	bool "Dataset updater"

config OPENTHREAD_DHCP6_CLIENT
	bool "DHCPv6 client support"

config OPENTHREAD_DHCP6_SERVER
	bool "DHCPv6 server support"

config OPENTHREAD_DIAG
	bool "Diagnostic functions support"
	help
	  Enable OpenThread CLI diagnostic commands

config OPENTHREAD_DNS_CLIENT
	bool "DNS client support"

config OPENTHREAD_DNS_CLIENT_OVER_TCP
	bool "DNS query over tcp"

config OPENTHREAD_DNS_DSO
	bool "DNS Stateful Operations (DSO) support"

config OPENTHREAD_DNS_UPSTREAM_QUERY
	bool "Forwarding DNS queries to upstream"
	help
	  Enable forwarding DNS queries to platform DNS upstream API

config OPENTHREAD_DNSSD_SERVER
	bool "DNS-SD server support"

config OPENTHREAD_DUA
	bool "Domain Unicast Address support"
	help
	  Enable Domain Unicast Address feature for Thread 1.2

config OPENTHREAD_ECDSA
	bool "ECDSA support"

config OPENTHREAD_ENABLE_SERVICE
	bool "Service support"
	help
	  Enable Thread Services capability in OpenThread stack

config OPENTHREAD_EXTERNAL_HEAP
	bool "External heap support"

config OPENTHREAD_FIREWALL
	bool "Firewall support"

config OPENTHREAD_FULL_LOGS
	bool "OpenThread full logs"

config OPENTHREAD_IP6_FRAGM
	bool "IPv6 fragmentation support"

config OPENTHREAD_JAM_DETECTION
	bool "Jam detection support"

config OPENTHREAD_JOINER
	bool "Joiner functions support"
	help
	  Enable joiner capability in OpenThread stack. Note, that DTLS
	  handshake used in the commissioning procedure requires a larger
	  mbedTLS heap than the default value. A minimum recommended value of
	  CONFIG_MBEDTLS_HEAP_SIZE for the commissioning is 10KB.

config OPENTHREAD_LEGACY
	bool "Legacy network support"

config OPENTHREAD_LINK_METRICS_INITIATOR
	bool "Link Metrics initiator"

config OPENTHREAD_LINK_METRICS_MANAGER
	bool "Link Metrics manager"

config OPENTHREAD_LINK_METRICS_SUBJECT
	bool "Link Metrics subject"

config OPENTHREAD_LOG_LEVEL_DYNAMIC
	bool "Dynamic log level control"

config OPENTHREAD_MAC_FILTER
	bool "MAC filter support"

config OPENTHREAD_MESH_DIAG
	bool "Mesh Diagnostics"
	depends on OPENTHREAD_FTD
	help
	  Enable Mesh Diagnostics

config OPENTHREAD_MESSAGE_USE_HEAP
	bool "Heap allocator for message buffers"

config OPENTHREAD_MLE_LONG_ROUTES
	bool "MLE long routes extension (experimental)"
	select EXPERIMENTAL
	help
	  Enable MLE long routes extension (experimental, breaks Thread conformance)

config OPENTHREAD_MLR
	bool "Multicast Listener Registration support"
	help
	  Enable Multicast Listener Registration support for Thread 1.2

config OPENTHREAD_MULTIPLE_INSTANCE
	bool "OpenThread multiple instances"

config OPENTHREAD_NAT64_BORDER_ROUTING
	bool "Border routing NAT64 support"

config OPENTHREAD_NAT64_TRANSLATOR
	bool "NAT64 translator support"

config OPENTHREAD_NETDIAG_CLIENT
	bool "TMF network diagnostics on client"

config OPENTHREAD_NEIGHBOR_DISCOVERY_AGENT
	bool "Neighbor discovery agent support"

config OPENTHREAD_NETDATA_PUBLISHER
	bool "Thread Network Data publisher"

config OPENTHREAD_OPERATIONAL_DATASET_AUTO_INIT
	bool "Operational dataset auto init"
	default y

config OPENTHREAD_OTNS
	bool "OTNS support"

config OPENTHREAD_PING_SENDER
	bool "Ping sender support"

config OPENTHREAD_PLATFORM_NETIF
	bool "Platform netif support"

config OPENTHREAD_PLATFORM_UDP
	bool "Platform UDP support"

choice OPENTHREAD_POWER_SUPPLY_CHOICE
	prompt "Power supply configuration"
	default OPENTHREAD_POWER_SUPPLY_EXTERNAL

config OPENTHREAD_POWER_SUPPLY_BATTERY
	bool "OT_POWER_SUPPLY_BATTERY"

config OPENTHREAD_POWER_SUPPLY_EXTERNAL
	bool "OT_POWER_SUPPLY_EXTERNAL"

config OPENTHREAD_POWER_SUPPLY_EXTERNAL_STABLE
	bool "OT_POWER_SUPPLY_EXTERNAL_STABLE"

config OPENTHREAD_POWER_SUPPLY_EXTERNAL_UNSTABLE
	bool "OT_POWER_SUPPLY_EXTERNAL_UNSTABLE"
endchoice

config OPENTHREAD_POWER_SUPPLY
	string
	prompt "Power supply configuration"
	default "BATTERY" if OPENTHREAD_POWER_SUPPLY_BATTERY
	default "EXTERNAL" if OPENTHREAD_POWER_SUPPLY_EXTERNAL
	default "EXTERNAL_STABLE" if OPENTHREAD_POWER_SUPPLY_EXTERNAL_STABLE
	default "EXTERNAL_UNSTABLE" if OPENTHREAD_POWER_SUPPLY_EXTERNAL_UNSTABLE
	default ""

config OPENTHREAD_RADIO_STATS
	bool "Support for Radio Statistics"

config OPENTHREAD_RAW
	bool "Raw Link support"

config OPENTHREAD_REFERENCE_DEVICE
	bool "Reference Device support"
	help
	  Enable Thread Certification reference device support in OpenThread stack

config OPENTHREAD_SETTINGS_RAM
	bool "Volatile-only storage of settings"

config OPENTHREAD_SLAAC
	bool "SLAAC support"

config OPENTHREAD_SNTP_CLIENT
	bool "SNTP Client support"

config OPENTHREAD_SRP_CLIENT
	bool "SRP Client support"
	select OPENTHREAD_ECDSA

config OPENTHREAD_SRP_SERVER
	bool "SRP Server support"
	select OPENTHREAD_NETDATA_PUBLISHER
	select OPENTHREAD_ECDSA

config OPENTHREAD_TIME_SYNC
	bool "The time synchronization service feature"

config OPENTHREAD_TREL
	bool "TREL radio link for Thread over Infrastructure feature"

config OPENTHREAD_TX_BEACON_PAYLOAD
	bool "TX beacon payload support"

config OPENTHREAD_TX_QUEUE_STATISTICS
	bool "TX queue statistics support"

config OPENTHREAD_UDP_FORWARD
	bool "UDP forward support"

config OPENTHREAD_UPTIME
	bool "Openthread uptime counter"
	default y if OPENTHREAD_FTD
