diff --git a/samples/net/lwm2m_client/boards/qemu_x86.conf b/samples/net/lwm2m_client/boards/qemu_x86.conf index c099c8e81df..5a1dc0925c3 100644 --- a/samples/net/lwm2m_client/boards/qemu_x86.conf +++ b/samples/net/lwm2m_client/boards/qemu_x86.conf @@ -1 +1,5 @@ CONFIG_FPU=y +CONFIG_NET_L2_ETHERNET=y +CONFIG_NET_QEMU_ETHERNET=y + +CONFIG_PCIE=y diff --git a/tests/net/lib/lwm2m/interop/boards/native_posix.conf b/tests/net/lib/lwm2m/interop/boards/native_posix.conf index 44346db12ed..422e2c1bde4 100644 --- a/tests/net/lib/lwm2m/interop/boards/native_posix.conf +++ b/tests/net/lib/lwm2m/interop/boards/native_posix.conf @@ -5,3 +5,4 @@ CONFIG_LWM2M_DNS_SUPPORT=y CONFIG_NET_CONFIG_MY_IPV4_GW="192.0.2.2" CONFIG_NATIVE_POSIX_SLOWDOWN_TO_REAL_TIME=y CONFIG_NATIVE_UART_0_ON_STDINOUT=y +CONFIG_ASAN=y diff --git a/tests/net/lib/lwm2m/interop/boards/qemu_cortex_m3.conf b/tests/net/lib/lwm2m/interop/boards/qemu_cortex_m3.conf index 7a3fd344e50..44263f885a4 100644 --- a/tests/net/lib/lwm2m/interop/boards/qemu_cortex_m3.conf +++ b/tests/net/lib/lwm2m/interop/boards/qemu_cortex_m3.conf @@ -5,16 +5,14 @@ CONFIG_NET_QEMU_ETHERNET=y # RAM/ROM tuning CONFIG_IDLE_STACK_SIZE=128 -CONFIG_MBEDTLS_HEAP_SIZE=7000 CONFIG_ISR_STACK_SIZE=512 -CONFIG_SYSTEM_WORKQUEUE_STACK_SIZE=1024 -CONFIG_LWM2M_ENGINE_STACK_SIZE=2000 CONFIG_LWM2M_LOG_LEVEL_INF=y -CONFIG_LWM2M_ENGINE_MAX_MESSAGES=3 -CONFIG_LWM2M_ENGINE_VALIDATION_BUFFER_SIZE=0 -CONFIG_LWM2M_ENGINE_MAX_OBSERVER=5 -CONFIG_LWM2M_SECURITY_DTLS_TLS_CIPHERSUITE_MAX=3 -CONFIG_LWM2M_DEVICE_PWRSRC_MAX=2 -CONFIG_LWM2M_DEVICE_ERROR_CODE_MAX=5 -CONFIG_LWM2M_DEVICE_EXT_DEV_INFO_MAX=2 -CONFIG_LWM2M_NUM_ATTR=10 +CONFIG_LOG_BUFFER_SIZE=512 + +# qemu_cortex_m3 have smaller memory so simulate a small +# device and small network where max CoAP packet is 256+headers. +# This excercises the outgoing block-wise module intentionally. +CONFIG_LWM2M_COAP_MAX_MSG_SIZE=256 +CONFIG_LWM2M_COAP_BLOCK_SIZE=256 +CONFIG_LWM2M_COAP_BLOCK_TRANSFER=y +CONFIG_LWM2M_COAP_ENCODE_BUFFER_SIZE=2048 diff --git a/tests/net/lib/lwm2m/interop/boards/qemu_x86.conf b/tests/net/lib/lwm2m/interop/boards/qemu_x86.conf new file mode 100644 index 00000000000..18e513dffd1 --- /dev/null +++ b/tests/net/lib/lwm2m/interop/boards/qemu_x86.conf @@ -0,0 +1,4 @@ +CONFIG_FPU=y +CONFIG_NET_L2_ETHERNET=y +CONFIG_NET_QEMU_ETHERNET=y +CONFIG_PCIE=y diff --git a/tests/net/lib/lwm2m/interop/prj.conf b/tests/net/lib/lwm2m/interop/prj.conf index 66d6334264f..b393621b581 100644 --- a/tests/net/lib/lwm2m/interop/prj.conf +++ b/tests/net/lib/lwm2m/interop/prj.conf @@ -1,36 +1,22 @@ CONFIG_NETWORKING=y CONFIG_LOG=y -CONFIG_LWM2M_LOG_LEVEL_DBG=y CONFIG_TEST_RANDOM_GENERATOR=y -CONFIG_NET_IPV6=y -CONFIG_NET_IF_UNICAST_IPV6_ADDR_COUNT=3 -CONFIG_NET_IF_MCAST_IPV6_ADDR_COUNT=2 CONFIG_NET_IPV4=y +CONFIG_NET_IPV6=n CONFIG_NET_DHCPV4=n -CONFIG_NET_IF_UNICAST_IPV4_ADDR_COUNT=3 -CONFIG_NET_IF_MCAST_IPV4_ADDR_COUNT=2 -CONFIG_PRINTK=y -CONFIG_NET_PKT_RX_COUNT=10 -CONFIG_NET_PKT_TX_COUNT=10 -CONFIG_NET_BUF_RX_COUNT=10 -CONFIG_NET_BUF_TX_COUNT=10 -CONFIG_NET_MAX_CONTEXTS=5 -CONFIG_NET_CONFIG_MY_IPV6_ADDR="2001:db8::1" -CONFIG_NET_CONFIG_PEER_IPV6_ADDR="2001:db8::2" +CONFIG_NET_PKT_RX_COUNT=4 +CONFIG_NET_PKT_TX_COUNT=4 +CONFIG_NET_BUF_RX_COUNT=8 +CONFIG_NET_BUF_TX_COUNT=8 +CONFIG_NET_MAX_CONTEXTS=4 CONFIG_NET_CONFIG_MY_IPV4_ADDR="192.0.2.1" CONFIG_NET_CONFIG_MY_IPV4_GW="192.0.2.2" - -CONFIG_NET_LOG=y - -CONFIG_NET_CONFIG_NEED_IPV6=y CONFIG_NET_CONFIG_NEED_IPV4=y CONFIG_NET_CONFIG_SETTINGS=y CONFIG_LWM2M=y -CONFIG_LWM2M_COAP_BLOCK_SIZE=512 CONFIG_LWM2M_IPSO_SUPPORT=y CONFIG_LWM2M_SHELL=y -CONFIG_LWM2M_ACCESS_CONTROL_ENABLE=n #Enable Portfolio object CONFIG_LWM2M_PORTFOLIO_OBJ_SUPPORT=y @@ -47,7 +33,7 @@ CONFIG_LWM2M_RW_SENML_JSON_SUPPORT=y #Enable SenML CBOR content format CONFIG_LWM2M_RW_SENML_CBOR_SUPPORT=y -CONFIG_LWM2M_RW_SENML_CBOR_RECORDS=60 +CONFIG_LWM2M_RW_SENML_CBOR_RECORDS=40 CONFIG_ZCBOR_CANONICAL=y #Enable legacy content formats @@ -62,7 +48,6 @@ CONFIG_COAP_EXTENDED_OPTIONS_LEN_VALUE=40 CONFIG_LWM2M_QUEUE_MODE_ENABLED=y CONFIG_LWM2M_QUEUE_MODE_UPTIME=20 CONFIG_LWM2M_UPDATE_PERIOD=30 -CONFIG_LWM2M_SECONDS_TO_UPDATE_EARLY=10 # LwM2M configuration as OMA-ETS-LightweightM2M_INT-V1_1-20190912-D Configuration 3 CONFIG_LWM2M_ENGINE_DEFAULT_LIFETIME=30 @@ -74,19 +59,45 @@ CONFIG_MBEDTLS_TLS_VERSION_1_2=y # Special MbedTLS changes CONFIG_MBEDTLS_ENABLE_HEAP=y -CONFIG_MBEDTLS_HEAP_SIZE=8192 -CONFIG_MBEDTLS_SSL_MAX_CONTENT_LEN=1500 +# MTU - IPv6 header - UDP header - DTLS header +# 1280 - 40 - 8 - 21 +CONFIG_MBEDTLS_SSL_MAX_CONTENT_LEN=1211 +CONFIG_MBEDTLS_HEAP_SIZE=7168 CONFIG_MBEDTLS_CIPHER_CCM_ENABLED=y - # Disable RSA, we don't parse certs: saves flash/memory CONFIG_MBEDTLS_KEY_EXCHANGE_RSA_ENABLED=n # Enable PSK instead CONFIG_MBEDTLS_KEY_EXCHANGE_PSK_ENABLED=y +CONFIG_LWM2M_SECURITY_DTLS_TLS_CIPHERSUITE_MAX=3 CONFIG_NET_SOCKETS_SOCKOPT_TLS=y -CONFIG_NET_SOCKETS_TLS_MAX_CONTEXTS=4 +# For testing purposes, limit DTLS contexts to one, +# LwM2M engine should not use more than one on any given time. +CONFIG_NET_SOCKETS_TLS_MAX_CONTEXTS=1 CONFIG_NET_SOCKETS_ENABLE_DTLS=y -# MbedTLS needs a larger stack -CONFIG_MAIN_STACK_SIZE=2048 -CONFIG_SYSTEM_WORKQUEUE_STACK_SIZE=2048 +# Assume that IPv6 minimum MTU is accepted +# MTU - IPv6 header - UDP header - DTLS header - CoAP header room +# 1280 - 40 - 8 - 21 - 48 +CONFIG_LWM2M_COAP_MAX_MSG_SIZE=1163 +CONFIG_LWM2M_COAP_BLOCK_SIZE=1024 +CONFIG_LWM2M_COAP_BLOCK_TRANSFER=y +CONFIG_LWM2M_COAP_ENCODE_BUFFER_SIZE=4096 +CONFIG_LWM2M_NUM_OUTPUT_BLOCK_CONTEXT=1 +CONFIG_LWM2M_NUM_BLOCK1_CONTEXT=1 +CONFIG_SYS_HASH_FUNC32=y +CONFIG_LWM2M_ENGINE_VALIDATION_BUFFER_SIZE=0 +CONFIG_LWM2M_ENGINE_MAX_PENDING=2 +CONFIG_LWM2M_ENGINE_MAX_REPLIES=2 +CONFIG_LWM2M_ENGINE_MAX_MESSAGES=3 +CONFIG_LWM2M_ENGINE_MAX_OBSERVER=5 +CONFIG_LWM2M_DEVICE_PWRSRC_MAX=2 +CONFIG_LWM2M_DEVICE_ERROR_CODE_MAX=2 +CONFIG_LWM2M_DEVICE_EXT_DEV_INFO_MAX=2 +CONFIG_LWM2M_NUM_ATTR=20 + +# Configure stack sizes +CONFIG_MAIN_STACK_SIZE=1024 +CONFIG_SYSTEM_WORKQUEUE_STACK_SIZE=512 +CONFIG_SHELL_STACK_SIZE=1536 +CONFIG_LWM2M_ENGINE_STACK_SIZE=2048 diff --git a/tests/net/lib/lwm2m/interop/src/lwm2m-client.c b/tests/net/lib/lwm2m/interop/src/lwm2m-client.c index 983fea79f3e..9fe1f1dce7b 100644 --- a/tests/net/lib/lwm2m/interop/src/lwm2m-client.c +++ b/tests/net/lib/lwm2m/interop/src/lwm2m-client.c @@ -11,7 +11,6 @@ #include LOG_MODULE_REGISTER(LOG_MODULE_NAME); #include -#include #include #include #include @@ -28,15 +27,37 @@ LOG_MODULE_REGISTER(LOG_MODULE_NAME); #define VERSION "1.2.3" static struct lwm2m_ctx client; +static void rd_client_event(struct lwm2m_ctx *client, + enum lwm2m_rd_client_event client_event); +static void observe_cb(enum lwm2m_observe_event event, + struct lwm2m_obj_path *path, void *user_data); + +static uint8_t bat_idx = LWM2M_DEVICE_PWR_SRC_TYPE_BAT_INT; +static int bat_mv = 3800; +static int bat_ma = 125; +static uint8_t usb_idx = LWM2M_DEVICE_PWR_SRC_TYPE_USB; +static int usb_mv = 5000; +static int usb_ma = 900; + +static void reboot_handler(struct k_work *work) +{ + /* I cannot really restart the client, as we don't know + * the endpoint name. Testcase sets that on a command line. + * So we only stop. + */ + lwm2m_rd_client_stop(&client, rd_client_event, true); +} + +K_WORK_DEFINE(reboot_work, reboot_handler); static int device_reboot_cb(uint16_t obj_inst_id, uint8_t *args, uint16_t args_len) { LOG_INF("DEVICE: REBOOT"); + k_work_submit(&reboot_work); return 0; } - static int lwm2m_setup(void) { /* setup DEVICE object */ @@ -53,6 +74,20 @@ static int lwm2m_setup(void) lwm2m_set_res_buf(&LWM2M_OBJ(3, 0, 17), CONFIG_BOARD, sizeof(CONFIG_BOARD), sizeof(CONFIG_BOARD), LWM2M_RES_DATA_FLAG_RO); + /* add power source resource instances */ + lwm2m_create_res_inst(&LWM2M_OBJ(3, 0, 6, 0)); + lwm2m_set_res_buf(&LWM2M_OBJ(3, 0, 6, 0), &bat_idx, sizeof(bat_idx), sizeof(bat_idx), 0); + lwm2m_create_res_inst(&LWM2M_OBJ(3, 0, 7, 0)); + lwm2m_set_res_buf(&LWM2M_OBJ(3, 0, 7, 0), &bat_mv, sizeof(bat_mv), sizeof(bat_mv), 0); + lwm2m_create_res_inst(&LWM2M_OBJ(3, 0, 8, 0)); + lwm2m_set_res_buf(&LWM2M_OBJ(3, 0, 8, 0), &bat_ma, sizeof(bat_ma), sizeof(bat_ma), 0); + lwm2m_create_res_inst(&LWM2M_OBJ(3, 0, 6, 1)); + lwm2m_set_res_buf(&LWM2M_OBJ(3, 0, 6, 1), &usb_idx, sizeof(usb_idx), sizeof(usb_idx), 0); + lwm2m_create_res_inst(&LWM2M_OBJ(3, 0, 7, 1)); + lwm2m_set_res_buf(&LWM2M_OBJ(3, 0, 7, 1), &usb_mv, sizeof(usb_mv), sizeof(usb_mv), 0); + lwm2m_create_res_inst(&LWM2M_OBJ(3, 0, 8, 1)); + lwm2m_set_res_buf(&LWM2M_OBJ(3, 0, 8, 1), &usb_ma, sizeof(usb_ma), sizeof(usb_ma), 0); + return 0; } diff --git a/tests/net/lib/lwm2m/interop/testcase.yaml b/tests/net/lib/lwm2m/interop/testcase.yaml index aeba64748df..93f3fc13b1c 100644 --- a/tests/net/lib/lwm2m/interop/testcase.yaml +++ b/tests/net/lib/lwm2m/interop/testcase.yaml @@ -8,6 +8,7 @@ tests: platform_allow: - native_posix - qemu_cortex_m3 + - qemu_x86 tags: - testing - pytest