NCS version 1.9.1
nRF52840 DK
I have two projects based on the coap server and coap client examples. I have made the server a commissioner, and call otCommissioerJoinerStart() when button 4 is pressed (instead of activating provisioning).
I want the client to autostart openthread and join the network. It does not succeed.
Server prj.conf
CONFIG_GPIO=y CONFIG_SPI=y #CONFIG_MINIMAL_LIBC=y CONFIG_MINIMAL_LIBC_MALLOC=y CONFIG_MINIMAL_LIBC_MALLOC_ARENA_SIZE=4096 # Debugging CONFIG_ASSERT=y CONFIG_STACK_SENTINEL=y CONFIG_DEBUG_OPTIMIZATIONS=y CONFIG_LOG=y #CONFIG_LOG_PRINTK=y CONFIG_MBEDTLS_DEBUG_C=y CONFIG_MBEDTLS_SSL_DEBUG_ALL=y # CRYPTO #CONFIG_NORDIC_SECURITY_BACKEND=y CONFIG_ENTROPY_GENERATOR=y #CONFIG_ENTROPY_DEVICE_RANDOM_GENERATOR=y #CONFIG_HARDWARE_DEVICE_CS_GENERATOR=y ##CONFIG_CTR_DRBG_CSPRNG_GENERATOR=y #CONFIG_MBEDTLS=y #CONFIG_MBEDTLS_BUILTIN=y ##CONFIG_APP_LINK_WITH_MBEDTLS=y ##CONFIG_MBEDTLS_LIBRARY=y #CONFIG_PSA_CRYPTO_DRIVER_BUILTIN=y #CONFIG_PSA_CRYPTO_DRIVER_OBERON=y CONFIG_MBEDTLS_ENABLE_HEAP=y # SSL inbuf/outbuf are 16K each #CONFIG_MBEDTLS_HEAP_SIZE=40000 CONFIG_MBEDTLS_HEAP_SIZE=86016 #CONFIG_MBEDTLS_DEBUG_C=y # Crypto CONFIG_NORDIC_SECURITY_BACKEND=y #CONFIG_CC3XX_BACKEND=n #CONFIG_OBERON_BACKEND=y #CONFIG_MBEDTLS_VANILLA_BACKEND=n # build\modules\nrfxlib\nrf_security\include CONFIG_MBEDTLS_PK_C=y CONFIG_MBEDTLS_PK_WRITE_C=y #CONFIG_MBEDTLS_CFG_FILE="../../../../mbedtls_config.h" #CONFIG_MBEDTLS_PEM_CERTIFICATE_FORMAT=y CONFIG_NRF_SECURITY=y CONFIG_NRF_SECURITY_ADVANCED=y CONFIG_MBEDTLS_TLS_LIBRARY=y CONFIG_MBEDTLS_X509_LIBRARY=y # JSON #CONFIG_NEWLIB_LIBC=y #CONFIG_CJSON_LIB=y CONFIG_BASE64=y # Heap and stacks CONFIG_HEAP_MEM_POOL_SIZE=4096 #CONFIG_MAIN_STACK_SIZE=2048 CONFIG_MAIN_STACK_SIZE=8192 CONFIG_SYSTEM_WORKQUEUE_STACK_SIZE=2048 CONFIG_LOG_PROCESS_THREAD_STACK_SIZE=2048 CONFIG_ISR_STACK_SIZE=4096 ########################### # COAP Server ########################### # nRF board library CONFIG_DK_LIBRARY=y # Enable OpenThread CoAP support API CONFIG_OPENTHREAD_COAP=y #CONFIG_OPENTHREAD_COAP_OBSERVE=y # Configure sample logging setting #CONFIG_LOG=y ##CONFIG_COAP_SERVER_LOG_LEVEL_DBG=y ##CONFIG_OT_COAP_UTILS_LOG_LEVEL_DBG=y #CONFIG_OPENTHREAD_LOG_LEVEL_NOTE=y #CONFIG_OPENTHREAD_DEBUG=y # Adjust log strdup settings #CONFIG_LOG_STRDUP_MAX_STRING=128 # Network shell #CONFIG_SHELL=y #CONFIG_OPENTHREAD_SHELL=y #CONFIG_SHELL_ARGC_MAX=26 #CONFIG_SHELL_CMD_BUFF_SIZE=416 # Same network Master Key for client and server CONFIG_OPENTHREAD_NETWORKKEY="00:11:22:33:44:55:66:77:88:99:aa:bb:cc:dd:ee:ff" CONFIG_OPENTHREAD_COMMISSIONER=y CONFIG_OPENTHREAD_FTD=y # L2 OpenThread enabling CONFIG_NET_L2_OPENTHREAD=y # Generic networking options CONFIG_NETWORKING=y ## (defined above)CONFIG_ASSERT=y #CONFIG_ASSERT_NO_COND_INFO=y #CONFIG_MBEDTLS_SHA1_C=n #CONFIG_FPU=y # Add in mbedtls elements disabled by openthread, but needed by certificates CONFIG_MBEDTLS_CIPHER_MODE_CTR=y CONFIG_MBEDTLS_CHACHA20_C=y CONFIG_MBEDTLS_POLY1305_C=y CONFIG_MBEDTLS_CHACHAPOLY_C=y CONFIG_MBEDTLS_DHM_C=y CONFIG_MBEDTLS_RSA_C=y CONFIG_MBEDTLS_SHA512_C=y CONFIG_MBEDTLS_GCM_C=y CONFIG_MBEDTLS_KEY_EXCHANGE_PSK_ENABLED=y CONFIG_MBEDTLS_KEY_EXCHANGE_DHE_PSK_ENABLED=y CONFIG_MBEDTLS_KEY_EXCHANGE_ECDHE_PSK_ENABLED=y CONFIG_MBEDTLS_KEY_EXCHANGE_RSA_PSK_ENABLED=y CONFIG_MBEDTLS_KEY_EXCHANGE_RSA_ENABLED=y CONFIG_MBEDTLS_KEY_EXCHANGE_DHE_RSA_ENABLED=y CONFIG_MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED=y CONFIG_MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED=y CONFIG_MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA_ENABLED=y CONFIG_MBEDTLS_ECDSA_DETERMINISTIC=y CONFIG_MBEDTLS_KEY_EXCHANGE_ECDH_RSA_ENABLED=y CONFIG_MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED=y CONFIG_MBEDTLS_CIPHER=y CONFIG_MBEDTLS_SHA1_C=y CONFIG_MBEDTLS_SSL_ALL_ALERT_MESSAGES=y CONFIG_MBEDTLS_SSL_CONTEXT_SERIALIZATION=y CONFIG_MBEDTLS_SSL_DEBUG_ALL=y CONFIG_MBEDTLS_SSL_KEEP_PEER_CERTIFICATE=y CONFIG_MBEDTLS_SSL_OUT_CONTENT_LEN=16380 CONFIG_MBEDTLS_SSL_IN_CONTENT_LEN=16380 #CONFIG_MBEDTLS_CIPHER_PADDING_PKCS7=y #CONFIG_MBEDTLS_CIPHER_PADDING_ONE_AND_ZEROS=y #CONFIG_MBEDTLS_CIPHER_PADDING_ZEROS_AND_LEN=y #CONFIG_MBEDTLS_CIPHER_PADDING_ZEROS=y #CONFIG_MBEDTLS_SHA224_C=y #CONFIG_MBEDTLS_SHA384_C=y
client pjf.conf
# # Copyright (c) 2020 Nordic Semiconductor # # SPDX-License-Identifier: LicenseRef-Nordic-5-Clause # # nRF board library CONFIG_DK_LIBRARY=y # Enable CoAP utils and CoAP protocol CONFIG_COAP_UTILS=y # Configure sample logging setting CONFIG_LOG=y CONFIG_COAP_CLIENT_LOG_LEVEL_DBG=y CONFIG_COAP_CLIENT_UTILS_LOG_LEVEL_DBG=y CONFIG_COAP_UTILS_LOG_LEVEL_DBG=y CONFIG_OPENTHREAD_LOG_LEVEL_NOTE=y CONFIG_OPENTHREAD_DEBUG=y # Adjust log strdup settings CONFIG_LOG_STRDUP_MAX_STRING=128 # Generic networking options CONFIG_NETWORKING=y # L2 OpenThread enabling CONFIG_NET_L2_OPENTHREAD=y # Network shell CONFIG_SHELL=y CONFIG_OPENTHREAD_SHELL=y CONFIG_SHELL_ARGC_MAX=26 CONFIG_SHELL_CMD_BUFF_SIZE=416 # Enable OpenThread features set CONFIG_OPENTHREAD_NORDIC_LIBRARY_MASTER=y # Network sockets CONFIG_NET_SOCKETS=y CONFIG_NET_SOCKETS_POSIX_NAMES=y CONFIG_NET_SOCKETS_POLL_MAX=4 # Thread Joiner CONFIG_OPENTHREAD_JOINER=y CONFIG_OPENTHREAD_JOINER_AUTOSTART=y CONFIG_OPENTHREAD_JOINER_PSKD="J01NUS" CONFIG_OPENTHREAD_MANUAL_START=n # Same network Master Key for client and server #CONFIG_OPENTHREAD_NETWORKKEY="00:11:22:33:44:55:66:77:88:99:aa:bb:cc:dd:ee:ff" CONFIG_ASSERT=y CONFIG_ASSERT_NO_COND_INFO=y CONFIG_MBEDTLS_SHA1_C=n CONFIG_FPU=y
Server starts Commissioner joiner add when Button 4 is pressed by calling activate_provisioning().
static void commissioner_joiner_cb(otCommissionerJoinerEvent aEvent, const otJoinerInfo *aJoinerInfo, const otExtAddress *aJoinerId, void *aContext)
{
switch(aEvent)
{
case OT_COMMISSIONER_JOINER_START:
printk("\r\nCommissioner joiner started.\r\n");
break;
case OT_COMMISSIONER_JOINER_CONNECTED:
printk("\r\nCommissioner joiner connected\r\n");
break;
case OT_COMMISSIONER_JOINER_FINALIZE:
printk("\r\nCommissioner joiner finalized\r\n");
break;
case OT_COMMISSIONER_JOINER_END:
printk("\r\nCommissioner joiner end\r\n");
break;
case OT_COMMISSIONER_JOINER_REMOVED:
printk("\r\nCommissioner joiner removed\r\n");
break;
}
}
#define JOINER_TIMEOUT 120
static char pskd[] = "J01NUS";
static void activate_provisioning(struct k_work *item)
{
ARG_UNUSED(item);
//ot_coap_activate_provisioning();
struct openthread_context *ot_context = openthread_get_default_context();
otError err;
otInstance *instance = ot_context->instance;
// err = otCommissionerStart(instance, commissioner_state_cb, commissioner_joiner_cb, ot_context);
// if (err != OT_ERROR_NONE)
// printk("otCommissionerStart() failed [%d]\r\n", err);
otCommissionerState state;
if ((state = otCommissionerGetState(instance)) == OT_COMMISSIONER_STATE_ACTIVE)
{
err = otCommissionerAddJoiner(instance, NULL, pskd, JOINER_TIMEOUT);
if (err != OT_ERROR_NONE)
{
printk("\r\notCommissionerAddJoiner() failed [%d]\r\n", err);
}
else
{
k_timer_start(&led_timer, K_MSEC(100), K_MSEC(100));
k_timer_start(&provisioning_timer, K_SECONDS(JOINER_TIMEOUT), K_NO_WAIT);
printk("\r\nCommissioner joiner started for %d seconds...\r\n", JOINER_TIMEOUT);
}
}
else
{
printk("\r\nCommissioner state = %d. Can't add joiner.", state);
}
//LOG_INF("Provisioning activated");
}
Console output from Server:
................ .................................. Commissioner joiner started for 120 seconds... ............................................................... Commissioner joiner started. ........................................ Commissioner joiner started. .................................................................. Commissioner joiner started. ................................................................................... .......................................................................... Commissioner joiner started. ................................................................. ..................................................................................................................................................... ........................... Commissioner joiner removed .............................
Console output from client:
*** Booting Zephyr OS build v2.7.99-ncs1-1 *** FloLogic CoAP-client POC version 0.2 [00:00:04.966,552] <inf> net_openthread: [NOTE]-MAC-----: Failed to send IPv6 UDP msg, len:56, chksum:62e1, to:None, sec:no, error:Abort, prio:net [00:00:04.966,857] <inf> net_openthread: [NOTE]-MAC-----: src:[fe80:0:0:0:888c:b654:d626:2eaf]:19788 [00:00:04.967,102] <inf> net_openthread: [NOTE]-MAC-----: dst:[ff02:0:0:0:0:0:0:2]:19788 [00:00:09.423,675] <wrn> net_openthread: [WARN]-MLE-----: Failed to process UDP: InvalidState [00:00:35.960,357] <wrn> net_openthread: [WARN]-MLE-----: Failed to process UDP: InvalidState [00:01:17.562,255] <wrn> net_openthread: [WARN]-MLE-----: Failed to process UDP: InvalidState [00:01:52.352,416] <wrn> net_openthread: [WARN]-MLE-----: Failed to process UDP: InvalidState [00:02:15.436,553] <wrn> net_openthread: [WARN]-MLE-----: Failed to process UDP: InvalidState [00:02:50.947,540] <wrn> net_openthread: [WARN]-MLE-----: Failed to process UDP: InvalidState [00:03:11.212,310] <wrn> net_openthread: [WARN]-MLE-----: Failed to process UDP: InvalidState uart:~$
I'm also attaching a Wireshark file.
How do I fix this?
Also, can I call