Skip to content

Commit 42da834

Browse files
modules: openthread: Allow building nrf5 networking backend
Prepared build environment to support building OpenThread without Zephyr's L2 and IEEE802.15.4 shim layers. To do it, some of Kconfigs must be cloned into the new Kconfig file (dedicated to nRF5-driver-based approach) to meet all OpenThread requirements while NET_L2_OPENTHREAD is disabled. Signed-off-by: Arkadiusz Balys <[email protected]>
1 parent c95eaff commit 42da834

File tree

13 files changed

+426
-108
lines changed

13 files changed

+426
-108
lines changed

modules/openthread/Kconfig

+316
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,327 @@
33

44
config OPENTHREAD
55
bool "OpenThread Support"
6+
imply FLASH
7+
imply FLASH_MAP
8+
imply MPU_ALLOW_FLASH_WRITE
9+
10+
select SETTINGS if FLASH
11+
select OPENTHREAD_SETTINGS_RAM if !FLASH
12+
select CPP
13+
select REBOOT
14+
select ENTROPY_GENERATOR
15+
16+
select NRF_802154_RADIO_DRIVER if HAS_HW_NRF_RADIO_IEEE802154 && !NET_L2_OPENTHREAD
17+
select NRF_802154_SER_HOST if !HAS_HW_NRF_RADIO_IEEE802154 && !NET_L2_OPENTHREAD
18+
select NRF_802154_RADIO_CONFIG if !NET_L2_OPENTHREAD
619
help
720
This option enables the OpenThread library
821

922
if OPENTHREAD
1023

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

modules/openthread/Kconfig.features

-8
Original file line numberDiff line numberDiff line change
@@ -405,11 +405,3 @@ config OPENTHREAD_VERHOEFF_CHECKSUM
405405

406406
config OPENTHREAD_CLI_VENDOR_EXTENSION
407407
string "Path to CMake file to define and link Openthread CLI vendor extension"
408-
409-
config OPENTHREAD_USE_NRF5_RADIO
410-
bool "Use Nordic Semiconductor radio driver directly"
411-
default y
412-
depends on HAS_HW_NRF_RADIO_IEEE802154
413-
help
414-
Use explicitly Nordic Semiconductor radio driver for OpenThread stack.
415-
This approach does not use Zephyr's net_pkt and net_time APIs.

modules/openthread/platform/CMakeLists.txt

+2-2
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ zephyr_library_sources_ifdef(CONFIG_OPENTHREAD_EXTERNAL_HEAP memory.c)
1919
zephyr_library_sources_ifdef(CONFIG_OPENTHREAD_PLATFORM_MESSAGE_MANAGEMENT messagepool.c)
2020
zephyr_library_sources_ifdef(CONFIG_SETTINGS settings.c)
2121
zephyr_library_sources_ifndef(CONFIG_LOG_BACKEND_SPINEL logging.c)
22-
zephyr_library_sources_ifdef(CONFIG_OPENTHREAD_USE_NRF5_RADIO radio_nrf5.c)
23-
zephyr_library_sources_ifndef(CONFIG_OPENTHREAD_USE_NRF5_RADIO radio.c)
22+
zephyr_library_sources_ifndef(CONFIG_NET_L2_OPENTHREAD radio_nrf5.c)
23+
zephyr_library_sources_ifdef(CONFIG_NET_L2_OPENTHREAD radio.c)
2424

2525
zephyr_include_directories(.)

modules/openthread/platform/alarm.c

+9-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
*/
77

88
#define LOG_MODULE_NAME net_openthread_alarm
9-
#define LOG_LEVEL CONFIG_OPENTHREAD_PLATFORM_LOG_LEVEL
9+
#define LOG_LEVEL CONFIG_OPENTHREAD_PLATFORM_LOG_LEVEL
1010

1111
#include <zephyr/logging/log.h>
1212
LOG_MODULE_REGISTER(LOG_MODULE_NAME);
@@ -34,15 +34,23 @@ static void ot_timer_ms_fired(struct k_timer *timer)
3434
ARG_UNUSED(timer);
3535

3636
timer_ms_fired = true;
37+
38+
/* TODO: Remove this once the issue is fixed */
39+
#ifdef CONFIG_NET_L2_OPENTHREAD
3740
otSysEventSignalPending();
41+
#endif
3842
}
3943

4044
static void ot_timer_us_fired(struct k_timer *timer)
4145
{
4246
ARG_UNUSED(timer);
4347

4448
timer_us_fired = true;
49+
50+
/* TODO: Remove this once the issue is fixed */
51+
#ifdef CONFIG_NET_L2_OPENTHREAD
4552
otSysEventSignalPending();
53+
#endif
4654
}
4755

4856
K_TIMER_DEFINE(ot_ms_timer, ot_timer_ms_fired, NULL);

0 commit comments

Comments
 (0)