blob: eb61e4355738fb2c452775bba9a81e40e54cd117 [file] [log] [blame]
/*
* Copyright (c) 2022 Nordic Semiconductor ASA
*
* SPDX-License-Identifier: Apache-2.0
*/
#ifndef LWM2M_OBJ_ACCESS_CONTROL_H
#define LWM2M_OBJ_ACCESS_CONTROL_H
#include "lwm2m_engine.h"
#include "lwm2m_object.h"
/**
* @brief Main access control logic. Checks if the server with instance id @p server_obj_inst are
* allowed to do @p operation on the object instance of object id @p obj_id
* and object instance id @p obj_inst_id. If access control is enabled, this should
* be called before every operation to test access.
*
* @param obj_id object id of the object instance having its rights checked.
* @param obj_inst_id object instance id of the object instance having its rights checked.
* @param server_obj_inst object instance id of the server attempting to do the operation.
* @param operation lwm2m operation / permission (like LWM2M_OP_READ)
* @param bootstrap_mode 1/0. Bootstrap servers should have complete access during bootstrap.
* @return int to signal access:
* 0 - server has access
* -EACCES - unauthorized
* -EPERM - method not allowed
*/
int access_control_check_access(uint16_t obj_id, uint16_t obj_inst_id, uint16_t server_obj_inst,
uint16_t operation, bool bootstrap_mode);
/**
* @brief Creates an access control object instance. Should be called every
* time an object instance is created.
*
* @param obj_id object id of the object instance getting an access control.
* @param obj_inst_id object instance id of the object instance getting access control.
* @param server_obj_inst_id object instance id of the server creating the object instance.
*/
void access_control_add(uint16_t obj_id, uint16_t obj_inst_id, int server_obj_inst_id);
/**
* @brief Creates an access control object instance for objects. Should be called if servers should
* have access to create object instances of object id @p obj_id.
*
* @param obj_id object id of the object getting access control.
* @param server_obj_inst_id object instance id of the server creating the access control
* object instance.
*/
void access_control_add_obj(uint16_t obj_id, int server_obj_inst_id);
/**
* @brief Removes the access control instance that contains the access rights concerning
* the object instance of object id @p obj_id and object instance id @p obj_inst_id.
* Does nothing if obj_id == 2 (i.e. object id for access control). Should be called
* automatically any time an object instance is unregistered/deleted.
*
* @param obj_id object id of the object instance getting removed.
* @param obj_inst_id object instance id of the object instance getting removed.
*/
void access_control_remove(uint16_t obj_id, uint16_t obj_inst_id);
/**
* @brief Removes the access control instance that contains the access rights concerning
* the object with object id @p obj_id.
*
* @param obj_id object id of the object gettting removed.
*/
void access_control_remove_obj(uint16_t obj_id);
#endif