# OpenThread driver configuration options

# Copyright (c) 2018 Nordic Semiconductor ASA
# SPDX-License-Identifier: Apache-2.0
config OPENTHREAD_SECURITY_INTERNAL
	bool
	help
	  OpenThread setting to signal that OpenThread security settings, such
	  as the OPENTHREAD_MBEDTLS setting will be controlled through other
	  Kconfig dependencies and should not be user configurable.

menuconfig NET_L2_OPENTHREAD
	bool "OpenThread L2"
	depends on NETWORKING
	select NET_L2_PHY_IEEE802154

	imply FLASH
	imply FLASH_PAGE_LAYOUT
	imply FLASH_MAP
	imply MPU_ALLOW_FLASH_WRITE
	imply NVS

	select SETTINGS if FLASH
	select OPENTHREAD_SETTINGS_RAM if !FLASH
	select CPLUSPLUS
	select REBOOT
	select ENTROPY_GENERATOR

	imply NET_UDP
	imply NET_IPV6
	imply NET_CONFIG_NEED_IPV6

if NET_L2_OPENTHREAD

choice OPENTHREAD_IMPLEMENTATION
	prompt "OpenThread origin selection"
	help
	  Select OpenThread to use for build. Custom OpenThread implementations
	  can be added to the application Kconfig.

config OPENTHREAD_SOURCES
	bool "OpenThread from sources"
	help
	  Build Zephyr's OpenThread port from sources.

endchoice

config OPENTHREAD_MANUAL_START
	bool "Start OpenThread stack manually"
	help
	  If enabled, OpenThread stack will have to be configured and
	  started manually, with respective API calls or CLI/NCP commands.
	  Otherwise, OpenThread will configure the network parameters and try to
	  join the Thread network automatically during initialization (using
	  credentials stored in persistent storage, obtained during
	  commissioning or pre-commissioned with other Kconfig options,
	  depending on configuration used).

menu "OpenThread stack features"
source "subsys/net/l2/openthread/Kconfig.features"
endmenu

menu "Thread Network configuration"
source "subsys/net/l2/openthread/Kconfig.thread"
endmenu

menu "Logging"

menuconfig OPENTHREAD_DEBUG
	bool "OpenThread stack logging support"
	depends on NET_L2_OPENTHREAD
	help
	  This option enables logging support for OpenThread.

choice
	prompt "OpenThread stack log level"
	depends on OPENTHREAD_DEBUG
	help
	  This option selects log level for OpenThread stack.

config OPENTHREAD_LOG_LEVEL_CRIT
	bool "Critical"
config OPENTHREAD_LOG_LEVEL_WARN
	bool "Warning"
config OPENTHREAD_LOG_LEVEL_NOTE
	bool "Notice"
config OPENTHREAD_LOG_LEVEL_INFO
	bool "Informational"
config OPENTHREAD_LOG_LEVEL_DEBG
	bool "Debug"
endchoice

config OPENTHREAD_LOG_LEVEL
	int
	default 1 if OPENTHREAD_LOG_LEVEL_CRIT
	default 2 if OPENTHREAD_LOG_LEVEL_WARN
	default 3 if OPENTHREAD_LOG_LEVEL_NOTE
	default 4 if OPENTHREAD_LOG_LEVEL_INFO
	default 5 if OPENTHREAD_LOG_LEVEL_DEBG
	default 0

menuconfig OPENTHREAD_L2_DEBUG
	bool "OpenThread L2 log support"
	help
	  This option enables log support for OpenThread.

if OPENTHREAD_L2_DEBUG

config OPENTHREAD_L2_DEBUG_DUMP_15_4
	bool "Dump 802.15.4 packets"
	help
	  This option enables dumping of 802.15.4 packets.

config OPENTHREAD_L2_DEBUG_DUMP_IPV6
	bool "Dump IPv6 packets"
	help
	  This option enables dumping of IPv6 packets.

endif # OPENTHREAD_L2_DEBUG

module = OPENTHREAD_L2
module-dep = NET_LOG
module-str = Log level for OpenThread driver
module-help = Enables OpenThread driver to output debug messages.
source "subsys/net/Kconfig.template.log_config.net"

endmenu # "Logging"

menu "Zephyr optimizations"

config OPENTHREAD_THREAD_PREEMPTIVE
	bool "Set Openthread thread to be preemptive"

config OPENTHREAD_THREAD_PRIORITY
	int "OpenThread thread priority"
	default 0 if OPENTHREAD_THREAD_PREEMPTIVE
	default 8

config OPENTHREAD_THREAD_STACK_SIZE
	int "OpenThread thread stack size"
	default 6144 if OPENTHREAD_COMMISSIONER || OPENTHREAD_JOINER
	default 6240 if (OPENTHREAD_COMMISSIONER || OPENTHREAD_JOINER) && MPU_STACK_GUARD && FPU_SHARING && CPU_CORTEX_M
	default 3168 if MPU_STACK_GUARD && FPU_SHARING && CPU_CORTEX_M
	default 3072


config OPENTHREAD_PKT_LIST_SIZE
	int "List size for IPv6 packet buffering"
	default 10

config OPENTHREAD_RADIO_WORKQUEUE_STACK_SIZE
	int "OpenThread radio transmit workqueue stack size"
	default 608 if MPU_STACK_GUARD && FPU_SHARING && CPU_CORTEX_M
	default 512

endmenu # "Zephyr optimizations"

config OPENTHREAD_SHELL
	bool "OpenThread shell"
	depends on SHELL
	default y

config MBEDTLS_PROMPTLESS
	bool
	default y if !CUSTOM_OPENTHREAD_SECURITY

choice OPENTHREAD_SECURITY
	prompt "OpenThread security"
	default OPENTHREAD_MBEDTLS_CHOICE
	depends on !OPENTHREAD_SECURITY_INTERNAL

config CUSTOM_OPENTHREAD_SECURITY
	bool "Custom"
	help
	  Security settings will be controlled directly by the user.
	  Enabling this setting will give access to full control of mbed TLS
	  configuration.

config OPENTHREAD_MBEDTLS_CHOICE
	bool "mbed TLS built-in"
	select OPENTHREAD_MBEDTLS
	help
	  Use the OpenThread mbed TLS configuration pre-defined security scheme.

endchoice

config OPENTHREAD_MBEDTLS
	bool
	select MBEDTLS
	select MBEDTLS_ENABLE_HEAP
	select MBEDTLS_CIPHER_AES_ENABLED
	select MBEDTLS_CIPHER_CCM_ENABLED
	select MBEDTLS_MAC_SHA256_ENABLED
	select MBEDTLS_ENTROPY_ENABLED
	select MBEDTLS_MAC_CMAC_ENABLED
	select MBEDTLS_CIPHER
	select MBEDTLS_MD
	select MBEDTLS_TLS_VERSION_1_2 if OPENTHREAD_COMMISSIONER || OPENTHREAD_JOINER
	select MBEDTLS_DTLS if OPENTHREAD_COMMISSIONER || OPENTHREAD_JOINER
	select MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED if OPENTHREAD_COMMISSIONER || OPENTHREAD_JOINER
	select MBEDTLS_ECP_DP_SECP256R1_ENABLED if OPENTHREAD_COMMISSIONER || OPENTHREAD_JOINER
	select MBEDTLS_ECP_NIST_OPTIM if OPENTHREAD_COMMISSIONER || OPENTHREAD_JOINER
	select MBEDTLS_SSL_EXPORT_KEYS if OPENTHREAD_COMMISSIONER || OPENTHREAD_JOINER
	select MBEDTLS_CTR_DRBG_ENABLED if OPENTHREAD_COMMISSIONER || OPENTHREAD_JOINER
	select MBEDTLS_HMAC_DRBG_ENABLED if OPENTHREAD_COMMISSIONER || OPENTHREAD_JOINER
	select MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED if OPENTHREAD_ECDSA
	select MBEDTLS_ECDSA_DETERMINISTIC if OPENTHREAD_ECDSA
	select MBEDTLS_PK_WRITE_C if OPENTHREAD_ECDSA

config OPENTHREAD_MBEDTLS_LIB_NAME
	string "mbedtls lib name"
	default "mbedTLS"
	help
	  This option allows to specify one or more mbedtls library files to be
	  linked with OpenThread. Separate multiple values with space " ".

config OPENTHREAD_COPROCESSOR
	bool "OpenThread Co-Processor"
	select OPENTHREAD_MANUAL_START
	select RING_BUFFER
	select UART_INTERRUPT_DRIVEN
	help
	  Enable Co-Processor in OpenThread stack.

if OPENTHREAD_COPROCESSOR

choice
	prompt "OpenThread Co-Processor type"
	help
	  This option selects Thread network co-processor type

config OPENTHREAD_COPROCESSOR_NCP
	bool "NCP - Network Co-Processor"
config OPENTHREAD_COPROCESSOR_RCP
	bool "RCP - Radio Co-Processor"
endchoice

config OPENTHREAD_COPROCESSOR_UART_RING_BUFFER_SIZE
	int "Set Co-Processor UART ring buffer size"
	default 4096
	help
	  TX buffer size for the OpenThread Co-Processor UART.

config OPENTHREAD_COPROCESSOR_VENDOR_HOOK_SOURCE
	string "Path to vendor hook source file"
	help
	  Provides path to compile vendor hook file.

endif # OPENTHREAD_COPROCESSOR

config OPENTHREAD_PLATFORM_INFO
	string "Platform information for OpenThread"
	default "ZEPHYR"
	help
	  Platform information for OpenThread

config OPENTHREAD_CUSTOM_PARAMETERS
	string "Custom Parameters to pass to OpenThread build system"
	default ""
	help
	  This option is intended for advanced users only.
	  Pass additional parameters that do not have corresponding Kconfig
	  options to the OpenThread build system. Separate multiple values with
	  space " ", for example:
	  "OPENTHREAD_CONFIG_JOINER_ENABLE=1 OPENTHREAD_CONFIG_JOINER_MAX_CANDIDATES=3"

config OPENTHREAD_NUM_MESSAGE_BUFFERS
	int "The number of message buffers in the buffer pool"
	default 128
	help
	  "The number of message buffers in the buffer pool."

config OPENTHREAD_MAX_STATECHANGE_HANDLERS
	int "The maximum number of state-changed callback handlers"
	default 2
	help
	  The maximum number of state-changed callback handlers
	  set using otSetStateChangedCallback.

config OPENTHREAD_TMF_ADDRESS_CACHE_ENTRIES
	int "The number of EID-to-RLOC cache entries"
	default 20
	help
	  The number of EID-to-RLOC cache entries.

config OPENTHREAD_LOG_PREPEND_LEVEL_ENABLE
	bool "Prepending the log level to all OpenThread log messages"
	help
	  When enabled the OpenThread logs will be prepended with the appropriate
	  log level prefix i.e. [CRIT], [WARN], [NOTE], [INFO], [DEBG].

config OPENTHREAD_MAC_SOFTWARE_ACK_TIMEOUT_ENABLE
	bool "Software ACK timeout logic"
	default y
	help
	  Set y if the radio supports AckTime event

config OPENTHREAD_MAC_SOFTWARE_RETRANSMIT_ENABLE
	bool "Software retransmission logic"
	default y
	help
	  Set y if the radio supports tx retry logic with collision avoidance (CSMA)

config OPENTHREAD_MAC_SOFTWARE_CSMA_BACKOFF_ENABLE
	bool "Software CSMA backoff logic"
	default y
	help
	  Set y to enable software CSMA backoff. The option can be disabled if
	  the radio has hardware support for this feature (IEEE802154_HW_CSMA).

config OPENTHREAD_CRYPTO_PSA
	bool "ARM PSA crypto API"
	depends on BUILD_WITH_TFM
	select OPENTHREAD_PLATFORM_KEY_REFERENCES_ENABLE
	help
	  Enable crypto backend library implementation based on ARM PSA crypto
	  API instead of the default, using mbedTLS.

config OPENTHREAD_PLATFORM_KEY_REFERENCES_ENABLE
	bool "Cryptographic key reference support"
	help
	  Enable usage of cryptographic key references instead of literal keys
	  This requires a crypto backend library that supports key references.

endif # NET_L2_OPENTHREAD
