net: lwm2m: Support for "Mute Server" resource

Added support for server Mute send operation.

Signed-off-by: Juha Heiskanen <juha.heiskanen@nordicsemi.no>
This commit is contained in:
Juha Heiskanen 2022-04-01 00:13:01 -07:00 committed by Maureen Helm
commit ba2354a277
3 changed files with 37 additions and 1 deletions

View file

@ -6155,6 +6155,7 @@ static int do_send_op(struct lwm2m_message *msg, uint16_t content_format,
} }
} }
#if defined(CONFIG_LWM2M_SERVER_OBJECT_VERSION_1_1)
static int do_send_reply_cb(const struct coap_packet *response, static int do_send_reply_cb(const struct coap_packet *response,
struct coap_reply *reply, struct coap_reply *reply,
const struct sockaddr *from) const struct sockaddr *from)
@ -6182,10 +6183,12 @@ static void do_send_timeout_cb(struct lwm2m_message *msg)
LOG_WRN("Send Timeout"); LOG_WRN("Send Timeout");
} }
#endif
int lwm2m_engine_send(struct lwm2m_ctx *ctx, char const *path_list[], uint8_t path_list_size, int lwm2m_engine_send(struct lwm2m_ctx *ctx, char const *path_list[], uint8_t path_list_size,
bool confirmation_request) bool confirmation_request)
{ {
#if defined(CONFIG_LWM2M_SERVER_OBJECT_VERSION_1_1)
struct lwm2m_message *msg; struct lwm2m_message *msg;
int ret; int ret;
uint16_t content_format; uint16_t content_format;
@ -6196,6 +6199,11 @@ int lwm2m_engine_send(struct lwm2m_ctx *ctx, char const *path_list[], uint8_t pa
sys_slist_t lwm2m_path_list; sys_slist_t lwm2m_path_list;
sys_slist_t lwm2m_path_free_list; sys_slist_t lwm2m_path_free_list;
if (lwm2m_server_get_mute_send(ctx->srv_obj_inst)) {
LOG_WRN("Send operation is muted by server");
return -EPERM;
}
/* Init list */ /* Init list */
lwm2m_engine_path_list_init(&lwm2m_path_list, &lwm2m_path_free_list, lwm2m_path_list_buf, lwm2m_engine_path_list_init(&lwm2m_path_list, &lwm2m_path_free_list, lwm2m_path_list_buf,
CONFIG_LWM2M_COMPOSITE_PATH_LIST_SIZE); CONFIG_LWM2M_COMPOSITE_PATH_LIST_SIZE);
@ -6278,6 +6286,10 @@ int lwm2m_engine_send(struct lwm2m_ctx *ctx, char const *path_list[], uint8_t pa
cleanup: cleanup:
lwm2m_reset_message(msg, true); lwm2m_reset_message(msg, true);
return ret; return ret;
#else
LOG_WRN("LwM2M send is only supported for CONFIG_LWM2M_SERVER_OBJECT_VERSION_1_1");
return -ENOTSUP;
#endif
} }
SYS_INIT(lwm2m_engine_init, APPLICATION, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT); SYS_INIT(lwm2m_engine_init, APPLICATION, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT);

View file

@ -166,6 +166,10 @@ int32_t lwm2m_server_get_pmin(uint16_t obj_inst_id);
int32_t lwm2m_server_get_pmax(uint16_t obj_inst_id); int32_t lwm2m_server_get_pmax(uint16_t obj_inst_id);
int lwm2m_server_short_id_to_inst(uint16_t short_id); int lwm2m_server_short_id_to_inst(uint16_t short_id);
#if defined(CONFIG_LWM2M_SERVER_OBJECT_VERSION_1_1)
bool lwm2m_server_get_mute_send(uint16_t obj_inst_id);
#endif
#if defined(CONFIG_LWM2M_FIRMWARE_UPDATE_OBJ_SUPPORT) #if defined(CONFIG_LWM2M_FIRMWARE_UPDATE_OBJ_SUPPORT)
void lwm2m_firmware_set_update_state_inst(uint16_t obj_inst_id, uint8_t state); void lwm2m_firmware_set_update_state_inst(uint16_t obj_inst_id, uint8_t state);
void lwm2m_firmware_set_update_result_inst(uint16_t obj_inst_id, uint8_t result); void lwm2m_firmware_set_update_result_inst(uint16_t obj_inst_id, uint8_t result);

View file

@ -82,6 +82,9 @@ static uint8_t server_flag_disabled[MAX_INSTANCE_COUNT];
static uint32_t disabled_timeout[MAX_INSTANCE_COUNT]; static uint32_t disabled_timeout[MAX_INSTANCE_COUNT];
static uint8_t server_flag_store_notify[MAX_INSTANCE_COUNT]; static uint8_t server_flag_store_notify[MAX_INSTANCE_COUNT];
static char transport_binding[MAX_INSTANCE_COUNT][TRANSPORT_BINDING_LEN]; static char transport_binding[MAX_INSTANCE_COUNT][TRANSPORT_BINDING_LEN];
#if defined(CONFIG_LWM2M_SERVER_OBJECT_VERSION_1_1)
static bool mute_send[MAX_INSTANCE_COUNT];
#endif
static struct lwm2m_engine_obj server; static struct lwm2m_engine_obj server;
static struct lwm2m_engine_obj_field fields[] = { static struct lwm2m_engine_obj_field fields[] = {
@ -156,6 +159,18 @@ static int bootstrap_trigger_cb(uint16_t obj_inst_id,
return -EPERM; return -EPERM;
#endif #endif
} }
bool lwm2m_server_get_mute_send(uint16_t obj_inst_id)
{
int i;
for (i = 0; i < ARRAY_SIZE(inst); i++) {
if (inst[i].obj && inst[i].obj_inst_id == obj_inst_id) {
return mute_send[i];
}
}
return false;
}
#endif /* defined(CONFIG_LWM2M_SERVER_OBJECT_VERSION_1_1) */ #endif /* defined(CONFIG_LWM2M_SERVER_OBJECT_VERSION_1_1) */
@ -252,6 +267,10 @@ static struct lwm2m_engine_obj_inst *server_create(uint16_t obj_inst_id)
default_min_period[index] = CONFIG_LWM2M_SERVER_DEFAULT_PMIN; default_min_period[index] = CONFIG_LWM2M_SERVER_DEFAULT_PMIN;
default_max_period[index] = CONFIG_LWM2M_SERVER_DEFAULT_PMAX; default_max_period[index] = CONFIG_LWM2M_SERVER_DEFAULT_PMAX;
disabled_timeout[index] = 86400U; disabled_timeout[index] = 86400U;
#if defined(CONFIG_LWM2M_SERVER_OBJECT_VERSION_1_1)
mute_send[index] = false;
#endif
lwm2m_engine_get_binding(transport_binding[index]); lwm2m_engine_get_binding(transport_binding[index]);
(void)memset(res[index], 0, (void)memset(res[index], 0,
@ -312,7 +331,8 @@ static struct lwm2m_engine_obj_inst *server_create(uint16_t obj_inst_id)
res_inst[index], j); res_inst[index], j);
INIT_OBJ_RES_OPTDATA(SERVER_SMS_TRIGGER_ID, res[index], i, res_inst[index], j); INIT_OBJ_RES_OPTDATA(SERVER_SMS_TRIGGER_ID, res[index], i, res_inst[index], j);
INIT_OBJ_RES_OPTDATA(SERVER_PREFERRED_TRANSPORT_ID, res[index], i, res_inst[index], j); INIT_OBJ_RES_OPTDATA(SERVER_PREFERRED_TRANSPORT_ID, res[index], i, res_inst[index], j);
INIT_OBJ_RES_OPTDATA(SERVER_MUTE_SEND_ID, res[index], i, res_inst[index], j); INIT_OBJ_RES_DATA(SERVER_MUTE_SEND_ID, res[index], i, res_inst[index], j, &mute_send[index],
sizeof(bool));
#endif /* defined(CONFIG_LWM2M_SERVER_OBJECT_VERSION_1_1) */ #endif /* defined(CONFIG_LWM2M_SERVER_OBJECT_VERSION_1_1) */
inst[index].resources = res[index]; inst[index].resources = res[index];