From 22b11ba8fef35b36ffb66ae9a389810329287c2b Mon Sep 17 00:00:00 2001 From: Michael Scott Date: Thu, 17 Aug 2017 12:21:28 -0700 Subject: [PATCH] net: lwm2m: define a CREATE operation Prior to this patch, a CREATE operation was handled as a WRITE operation after the object instance was created. This becomes problematic when handling of optional resources differs between these 2 operations. Let's introduce an actual CREATE operation and use it later to create these differences. Signed-off-by: Michael Scott --- subsys/net/lib/lwm2m/lwm2m_engine.c | 3 ++- subsys/net/lib/lwm2m/lwm2m_object.h | 10 +++++++--- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/subsys/net/lib/lwm2m/lwm2m_engine.c b/subsys/net/lib/lwm2m/lwm2m_engine.c index fc492bb6467..68cc8bdfa0a 100644 --- a/subsys/net/lib/lwm2m/lwm2m_engine.c +++ b/subsys/net/lib/lwm2m/lwm2m_engine.c @@ -2043,7 +2043,7 @@ static int handle_request(struct zoap_packet *request, case ZOAP_METHOD_POST: if (path.level < 2) { /* write/create a object instance */ - context.operation = LWM2M_OP_WRITE; + context.operation = LWM2M_OP_CREATE; } else { context.operation = LWM2M_OP_EXECUTE; } @@ -2123,6 +2123,7 @@ static int handle_request(struct zoap_packet *request, break; case LWM2M_OP_WRITE: + case LWM2M_OP_CREATE: r = do_write_op(obj, &context, format); break; diff --git a/subsys/net/lib/lwm2m/lwm2m_object.h b/subsys/net/lib/lwm2m/lwm2m_object.h index baee4959f74..96d2033e6e0 100644 --- a/subsys/net/lib/lwm2m/lwm2m_object.h +++ b/subsys/net/lib/lwm2m/lwm2m_object.h @@ -62,19 +62,23 @@ #define LWM2M_OP_WRITE 3 #define LWM2M_OP_WRITE_ATTR 4 #define LWM2M_OP_EXECUTE 5 -#define LWM2M_OP_DELETE 6 +#define LWM2M_OP_DELETE 6 +#define LWM2M_OP_CREATE 7 /* operation permission bits */ #define LWM2M_OP_BIT(op) (1 << (op - 1)) /* resource permissions */ #define LWM2M_PERM_R LWM2M_OP_BIT(LWM2M_OP_READ) -#define LWM2M_PERM_W LWM2M_OP_BIT(LWM2M_OP_WRITE) +#define LWM2M_PERM_W (LWM2M_OP_BIT(LWM2M_OP_WRITE) | \ + LWM2M_OP_BIT(LWM2M_OP_CREATE)) #define LWM2M_PERM_X LWM2M_OP_BIT(LWM2M_OP_EXECUTE) #define LWM2M_PERM_RW (LWM2M_OP_BIT(LWM2M_OP_READ) | \ - LWM2M_OP_BIT(LWM2M_OP_WRITE)) + LWM2M_OP_BIT(LWM2M_OP_WRITE) | \ + LWM2M_OP_BIT(LWM2M_OP_CREATE)) #define LWM2M_PERM_RWX (LWM2M_OP_BIT(LWM2M_OP_READ) | \ LWM2M_OP_BIT(LWM2M_OP_WRITE) | \ + LWM2M_OP_BIT(LWM2M_OP_CREATE) | \ LWM2M_OP_BIT(LWM2M_OP_EXECUTE)) /* resource types */