1# OpenThread driver configuration options
2
3# Copyright (c) 2018 Nordic Semiconductor ASA
4# SPDX-License-Identifier: Apache-2.0
5menuconfig NET_L2_OPENTHREAD
6	bool "OpenThread L2"
7	depends on NETWORKING
8
9choice NET_L2_OPENTHREAD_IMPLEMENTATION
10	prompt "OpenThread L2 implementation"
11	depends on NET_L2_OPENTHREAD
12
13config NET_L2_OPENTHREAD_IMPLEMENTATION_ZEPHYR
14	bool "Zephyr's OpenThread L2 implementation"
15	select NET_L2_PHY_IEEE802154
16	select OPENTHREAD
17
18	imply FLASH
19	imply FLASH_MAP
20	imply MPU_ALLOW_FLASH_WRITE
21
22	select SETTINGS if FLASH
23	select OPENTHREAD_SETTINGS_RAM if !FLASH
24	select CPP
25	select REBOOT
26	select ENTROPY_GENERATOR
27
28	imply NET_UDP
29	imply NET_IPV6
30	imply NET_CONFIG_NEED_IPV6
31	help
32	  Use Zephyr's implementation of the OpenThread L2.
33
34endchoice # NET_L2_OPENTHREAD_IMPLEMENTATION
35
36if NET_L2_OPENTHREAD_IMPLEMENTATION_ZEPHYR
37
38choice OPENTHREAD_IMPLEMENTATION
39	prompt "OpenThread origin selection"
40	help
41	  Select OpenThread stack to use for build. Custom OpenThread implementations
42	  can be added to the application Kconfig.
43
44config OPENTHREAD_SOURCES
45	bool "OpenThread from sources"
46	help
47	  Build Zephyr's OpenThread port from sources.
48
49endchoice
50
51config OPENTHREAD_MANUAL_START
52	bool "Start OpenThread stack manually"
53	help
54	  If enabled, OpenThread stack will have to be configured and
55	  started manually, with respective API calls or CLI/NCP commands.
56	  Otherwise, OpenThread will configure the network parameters and try to
57	  join the Thread network automatically during initialization (using
58	  credentials stored in persistent storage, obtained during
59	  commissioning or pre-commissioned with other Kconfig options,
60	  depending on configuration used).
61
62menu "Logging"
63
64menuconfig OPENTHREAD_DEBUG
65	bool "OpenThread stack logging support"
66	depends on NET_L2_OPENTHREAD
67	help
68	  This option enables logging support for OpenThread.
69
70choice OPENTHREAD_LOG_LEVEL_CHOICE
71	prompt "OpenThread stack log level"
72	depends on OPENTHREAD_DEBUG
73	help
74	  This option selects log level for OpenThread stack.
75
76config OPENTHREAD_LOG_LEVEL_CRIT
77	bool "Critical"
78config OPENTHREAD_LOG_LEVEL_WARN
79	bool "Warning"
80config OPENTHREAD_LOG_LEVEL_NOTE
81	bool "Notice"
82config OPENTHREAD_LOG_LEVEL_INFO
83	bool "Informational"
84config OPENTHREAD_LOG_LEVEL_DEBG
85	bool "Debug"
86endchoice # OPENTHREAD_LOG_LEVEL_CHOICE
87
88config OPENTHREAD_LOG_LEVEL
89	int
90	default 1 if OPENTHREAD_LOG_LEVEL_CRIT
91	default 2 if OPENTHREAD_LOG_LEVEL_WARN
92	default 3 if OPENTHREAD_LOG_LEVEL_NOTE
93	default 4 if OPENTHREAD_LOG_LEVEL_INFO
94	default 5 if OPENTHREAD_LOG_LEVEL_DEBG
95	default 0
96	help
97	  Log level for OpenThread stack.
98
99config OPENTHREAD_PLATFORM_LOG_LEVEL
100	int
101	default 1 if OPENTHREAD_LOG_LEVEL_CRIT
102	default 2 if OPENTHREAD_LOG_LEVEL_WARN
103	default 3 if OPENTHREAD_LOG_LEVEL_NOTE || OPENTHREAD_LOG_LEVEL_INFO
104	default 4 if OPENTHREAD_LOG_LEVEL_DEBG
105	default 0
106	help
107	  Log level for OpenThread Zephyr platform.
108
109menuconfig OPENTHREAD_L2_DEBUG
110	bool "OpenThread L2 log support"
111	help
112	  This option enables log support for OpenThread.
113
114if OPENTHREAD_L2_DEBUG
115
116config OPENTHREAD_L2_DEBUG_DUMP_15_4
117	bool "Dump 802.15.4 packets"
118	help
119	  This option enables dumping of 802.15.4 packets.
120
121config OPENTHREAD_L2_DEBUG_DUMP_IPV6
122	bool "Dump IPv6 packets"
123	help
124	  This option enables dumping of IPv6 packets.
125
126endif # OPENTHREAD_L2_DEBUG
127
128module = OPENTHREAD_L2
129module-dep = NET_LOG
130module-str = Log level for OpenThread driver
131module-help = Enables OpenThread driver to output debug messages.
132source "subsys/net/Kconfig.template.log_config.net"
133
134endmenu # "Logging"
135
136menu "Zephyr optimizations"
137
138config OPENTHREAD_THREAD_PREEMPTIVE
139	bool "Set Openthread thread to be preemptive"
140
141config OPENTHREAD_THREAD_PRIORITY
142	int "OpenThread thread priority"
143	default 0 if OPENTHREAD_THREAD_PREEMPTIVE
144	default 8
145
146config OPENTHREAD_THREAD_STACK_SIZE
147	int "OpenThread thread stack size"
148	default 6144 if OPENTHREAD_COMMISSIONER || OPENTHREAD_JOINER
149	default 6240 if (OPENTHREAD_COMMISSIONER || OPENTHREAD_JOINER) && MPU_STACK_GUARD && FPU_SHARING && CPU_CORTEX_M
150	default 3168 if MPU_STACK_GUARD && FPU_SHARING && CPU_CORTEX_M
151	default 3072
152
153
154config OPENTHREAD_PKT_LIST_SIZE
155	int "List size for IPv6 packet buffering"
156	default 10
157
158config OPENTHREAD_RADIO_WORKQUEUE_STACK_SIZE
159	int "OpenThread radio transmit workqueue stack size"
160	default 608 if MPU_STACK_GUARD && FPU_SHARING && CPU_CORTEX_M
161	default 512
162
163endmenu # "Zephyr optimizations"
164
165config OPENTHREAD_SHELL
166	bool "OpenThread shell"
167	depends on SHELL
168
169config MBEDTLS_PROMPTLESS
170	bool
171	default y if !CUSTOM_OPENTHREAD_SECURITY
172
173choice OPENTHREAD_SECURITY
174	prompt "OpenThread security"
175	default OPENTHREAD_MBEDTLS_CHOICE
176
177config CUSTOM_OPENTHREAD_SECURITY
178	bool "Custom"
179	help
180	  Security settings will be controlled directly by the user.
181	  Enabling this setting will give access to full control of mbed TLS
182	  configuration.
183
184config OPENTHREAD_MBEDTLS_CHOICE
185	bool "mbed TLS built-in"
186	select OPENTHREAD_MBEDTLS
187	help
188	  Use the OpenThread mbed TLS configuration pre-defined security scheme.
189
190endchoice
191
192config OPENTHREAD_MBEDTLS
193	bool
194	select MBEDTLS
195	select MBEDTLS_ENABLE_HEAP
196	select MBEDTLS_CIPHER_AES_ENABLED
197	select MBEDTLS_CIPHER_CCM_ENABLED
198	select MBEDTLS_SHA256
199	select MBEDTLS_ENTROPY_C
200	select MBEDTLS_CMAC
201	select MBEDTLS_CIPHER
202	select MBEDTLS_MD
203	select MBEDTLS_TLS_VERSION_1_2 if OPENTHREAD_COMMISSIONER || OPENTHREAD_JOINER
204	select MBEDTLS_DTLS if OPENTHREAD_COMMISSIONER || OPENTHREAD_JOINER
205	select MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED if OPENTHREAD_COMMISSIONER || OPENTHREAD_JOINER
206	select MBEDTLS_ECJPAKE_C if OPENTHREAD_COMMISSIONER || OPENTHREAD_JOINER
207	select MBEDTLS_ECP_DP_SECP256R1_ENABLED if OPENTHREAD_COMMISSIONER || OPENTHREAD_JOINER || \
208	    OPENTHREAD_SRP_CLIENT || OPENTHREAD_SRP_SERVER
209	select MBEDTLS_ECP_NIST_OPTIM if OPENTHREAD_COMMISSIONER || OPENTHREAD_JOINER
210	select MBEDTLS_CTR_DRBG_ENABLED if OPENTHREAD_COMMISSIONER || OPENTHREAD_JOINER
211	select MBEDTLS_HMAC_DRBG_ENABLED if OPENTHREAD_COMMISSIONER || OPENTHREAD_JOINER || \
212	    OPENTHREAD_SRP_CLIENT || OPENTHREAD_SRP_SERVER
213	select MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED if OPENTHREAD_ECDSA
214	select MBEDTLS_ECDH_C if OPENTHREAD_ECDSA
215	select MBEDTLS_ECDSA_C if OPENTHREAD_ECDSA
216	select MBEDTLS_ECDSA_DETERMINISTIC if OPENTHREAD_ECDSA
217	select MBEDTLS_PK_WRITE_C if OPENTHREAD_ECDSA
218	select MBEDTLS_ECP_C if OPENTHREAD_COMMISSIONER || OPENTHREAD_JOINER || OPENTHREAD_ECDSA
219
220
221config OPENTHREAD_MBEDTLS_LIB_NAME
222	string "mbedtls lib name"
223	default "mbedTLS"
224	help
225	  This option allows to specify one or more mbedtls library files to be
226	  linked with OpenThread. Separate multiple values with space " ".
227
228config OPENTHREAD_COPROCESSOR
229	bool "OpenThread Co-Processor"
230	select OPENTHREAD_MANUAL_START
231	select RING_BUFFER
232	select UART_INTERRUPT_DRIVEN
233	help
234	  Enable Co-Processor in OpenThread stack.
235
236if OPENTHREAD_COPROCESSOR
237
238choice OPENTHREAD_COPROCESSOR_CHOICE
239	prompt "OpenThread Co-Processor type"
240	help
241	  This option selects Thread network co-processor type
242
243config OPENTHREAD_COPROCESSOR_NCP
244	bool "NCP - Network Co-Processor"
245config OPENTHREAD_COPROCESSOR_RCP
246	bool "RCP - Radio Co-Processor"
247endchoice # OPENTHREAD_COPROCESSOR_CHOICE
248
249config OPENTHREAD_COPROCESSOR_UART_RING_BUFFER_SIZE
250	int "Set Co-Processor UART ring buffer size"
251	default 4096
252	help
253	  TX buffer size for the OpenThread Co-Processor UART.
254
255config OPENTHREAD_COPROCESSOR_VENDOR_HOOK_SOURCE
256	string "Path to vendor hook source file"
257	help
258	  Provides path to compile vendor hook file.
259
260endif # OPENTHREAD_COPROCESSOR
261
262config OPENTHREAD_PLATFORM_INFO
263	string "Platform information for OpenThread"
264	default "ZEPHYR"
265	help
266	  Platform information for OpenThread
267
268config OPENTHREAD_CUSTOM_PARAMETERS
269	string "Custom Parameters to pass to OpenThread build system"
270	default ""
271	help
272	  This option is intended for advanced users only.
273	  Pass additional parameters that do not have corresponding Kconfig
274	  options to the OpenThread build system. Separate multiple values with
275	  space " ", for example:
276	  "OPENTHREAD_CONFIG_JOINER_ENABLE=1 OPENTHREAD_CONFIG_JOINER_MAX_CANDIDATES=3"
277
278config OPENTHREAD_NUM_MESSAGE_BUFFERS
279	int "The number of message buffers in the buffer pool"
280	default 128
281	help
282	  "The number of message buffers in the buffer pool."
283
284config OPENTHREAD_MESSAGE_BUFFER_SIZE
285	int "The size of a message buffer in bytes"
286	default 128
287	help
288	  "The size of a message buffer in bytes"
289
290config OPENTHREAD_PLATFORM_MESSAGE_MANAGEMENT
291	bool "Use platform message management"
292	help
293	  The message pool is managed by platform defined logic.
294
295config OPENTHREAD_MAX_STATECHANGE_HANDLERS
296	int "The maximum number of state-changed callback handlers"
297	default 2
298	help
299	  The maximum number of state-changed callback handlers
300	  set using otSetStateChangedCallback.
301
302config OPENTHREAD_TMF_ADDRESS_CACHE_ENTRIES
303	int "The number of EID-to-RLOC cache entries"
304	default 20
305	help
306	  The number of EID-to-RLOC cache entries.
307
308config OPENTHREAD_TMF_ADDRESS_CACHE_MAX_SNOOP_ENTRIES
309	int "The maximum number of EID-to-RLOC cache entries"
310	default 2
311	help
312	  The maximum number of EID-to-RLOC cache entries that can be used for
313	  "snoop optimization" where an entry is created by inspecting a received
314	  message.
315
316config OPENTHREAD_LOG_PREPEND_LEVEL_ENABLE
317	bool "Prepending the log level to all OpenThread log messages"
318	help
319	  When enabled the OpenThread logs will be prepended with the appropriate
320	  log level prefix i.e. [CRIT], [WARN], [NOTE], [INFO], [DEBG].
321
322config OPENTHREAD_MAC_SOFTWARE_ACK_TIMEOUT_ENABLE
323	bool "Software ACK timeout logic"
324	default y
325	help
326	  Set y if the radio supports AckTime event
327
328config OPENTHREAD_MAC_SOFTWARE_RETRANSMIT_ENABLE
329	bool "Software retransmission logic"
330	default y
331	help
332	  Set y if the radio supports tx retry logic with collision avoidance (CSMA)
333
334config OPENTHREAD_MAC_SOFTWARE_CSMA_BACKOFF_ENABLE
335	bool "Software CSMA backoff logic"
336	default y
337	help
338	  Set y to enable software CSMA backoff. The option can be disabled if
339	  the radio has hardware support for this feature (IEEE802154_HW_CSMA).
340
341config OPENTHREAD_CRYPTO_PSA
342	bool "ARM PSA crypto API"
343	depends on MBEDTLS_PSA_CRYPTO_CLIENT
344	select OPENTHREAD_PLATFORM_KEY_REF if !OPENTHREAD_COPROCESSOR_RCP
345	imply OPENTHREAD_PLATFORM_KEYS_EXPORTABLE_ENABLE
346	help
347	  Enable crypto backend library implementation based on ARM PSA crypto
348	  API instead of the default, using mbedTLS.
349
350config OPENTHREAD_PLATFORM_KEYS_EXPORTABLE_ENABLE
351	bool "Make MAC keys exportable"
352	depends on OPENTHREAD_PLATFORM_KEY_REF
353	help
354	  Enable the creation of exportable MAC keys in the OpenThread Key Manager.
355
356endif # NET_L2_OPENTHREAD_IMPLEMENTATION_ZEPHYR
357