From f531afbd2c8edbb13e539516c8285d7787b259a9 Mon Sep 17 00:00:00 2001 From: Andreas Rudolf Date: Fri, 19 Apr 2024 16:57:46 +0200 Subject: [PATCH] net: lwm2m: Add config to always report obj version Adds a config that enables sending the object version for all objects. According to LwM2M specification v1.0 and v1.1, non-core object versions other than 1.0 'must' be provided, while all other versions 'may' be provided. With specification v1.2, a client 'can always attach Object Version Information'. Or in other words, it is OK to always report the object version with all specifications. Signed-off-by: Andreas Rudolf --- subsys/net/lib/lwm2m/Kconfig | 8 ++++++++ subsys/net/lib/lwm2m/lwm2m_registry.c | 4 ++++ .../net/lib/lwm2m/lwm2m_registry/src/lwm2m_registry.c | 8 +++++++- tests/net/lib/lwm2m/lwm2m_registry/testcase.yaml | 10 ++++++++++ 4 files changed, 29 insertions(+), 1 deletion(-) diff --git a/subsys/net/lib/lwm2m/Kconfig b/subsys/net/lib/lwm2m/Kconfig index 33a093308df..4d8e911e373 100644 --- a/subsys/net/lib/lwm2m/Kconfig +++ b/subsys/net/lib/lwm2m/Kconfig @@ -492,6 +492,14 @@ config LWM2M_ENGINE_DEFAULT_LIFETIME This is also a minimum lifetime that client accepts. If server sets lifetime less than this value, client automatically raises it. +config LWM2M_ENGINE_ALWAYS_REPORT_OBJ_VERSION + bool "LwM2M engine always report object version" + help + According to LwM2M specification v1.0 and v1.1, non-core object versions other than 1.0 + 'must' be provided, while all other versions 'may' be provided. With specification v1.2, + a client 'can always attach Object Version Information'. Enable this configuration to + always report all object versions. + config LWM2M_UPDATE_PERIOD int "LwM2M engine update period" default 0 diff --git a/subsys/net/lib/lwm2m/lwm2m_registry.c b/subsys/net/lib/lwm2m/lwm2m_registry.c index 725ef91210e..3ead504bc94 100644 --- a/subsys/net/lib/lwm2m/lwm2m_registry.c +++ b/subsys/net/lib/lwm2m/lwm2m_registry.c @@ -2010,6 +2010,10 @@ struct lwm2m_engine_res_inst *lwm2m_engine_get_res_inst(const struct lwm2m_obj_p bool lwm2m_engine_shall_report_obj_version(const struct lwm2m_engine_obj *obj) { + if (IS_ENABLED(CONFIG_LWM2M_ENGINE_ALWAYS_REPORT_OBJ_VERSION)) { + return true; + } + /* For non-core objects, report version other than 1.0 */ if (!obj->is_core) { return obj->version_major != 1 || obj->version_minor != 0; diff --git a/tests/net/lib/lwm2m/lwm2m_registry/src/lwm2m_registry.c b/tests/net/lib/lwm2m/lwm2m_registry/src/lwm2m_registry.c index 68056c5389b..4c193cfd50b 100644 --- a/tests/net/lib/lwm2m/lwm2m_registry/src/lwm2m_registry.c +++ b/tests/net/lib/lwm2m/lwm2m_registry/src/lwm2m_registry.c @@ -599,11 +599,17 @@ ZTEST(lwm2m_registry, test_null_strings) ZTEST(lwm2m_registry, test_obj_version) { - +#if defined(CONFIG_LWM2M_ENGINE_ALWAYS_REPORT_OBJ_VERSION) + zassert_true(lwm2m_engine_shall_report_obj_version(lwm2m_engine_get_obj(&LWM2M_OBJ(0)))); + zassert_true( + lwm2m_engine_shall_report_obj_version(lwm2m_engine_get_obj(&LWM2M_OBJ(32768)))); + zassert_true(lwm2m_engine_shall_report_obj_version(lwm2m_engine_get_obj(&LWM2M_OBJ(3303)))); +#else zassert_false(lwm2m_engine_shall_report_obj_version(lwm2m_engine_get_obj(&LWM2M_OBJ(0)))); zassert_false( lwm2m_engine_shall_report_obj_version(lwm2m_engine_get_obj(&LWM2M_OBJ(32768)))); zassert_true(lwm2m_engine_shall_report_obj_version(lwm2m_engine_get_obj(&LWM2M_OBJ(3303)))); +#endif } ZTEST(lwm2m_registry, test_resource_cache) diff --git a/tests/net/lib/lwm2m/lwm2m_registry/testcase.yaml b/tests/net/lib/lwm2m/lwm2m_registry/testcase.yaml index a994dd72ad8..a318fe6e0d9 100644 --- a/tests/net/lib/lwm2m/lwm2m_registry/testcase.yaml +++ b/tests/net/lib/lwm2m/lwm2m_registry/testcase.yaml @@ -7,3 +7,13 @@ tests: - net integration_platforms: - native_sim + net.lwm2m.lwm2m_registry.always_report_obj_version: + platform_key: + - simulation + tags: + - lwm2m + - net + integration_platforms: + - native_sim + extra_configs: + - CONFIG_LWM2M_ENGINE_ALWAYS_REPORT_OBJ_VERSION=y