libamxd  6.4.1
Data Model Manager
amxd_object.h File Reference

Ambiorix Data Model API header file. More...

Go to the source code of this file.

Macros

#define amxd_object_for_each(type, it, object)
 Helper macro for iterating object content. More...
 
#define amxd_object_iterate(type, it, object)
 Helper macro for iterating object content. More...
 
#define AMXD_OBJECT_NAMED   0x00
 Name and path format flag - default behavior, use name for instance objects. More...
 
#define AMXD_OBJECT_INDEXED   0x01
 Name and path format flag - use index for instance objects. More...
 
#define AMXD_OBJECT_EXTENDED   0x02
 Path format flag - set name or index of instrance objects between '[' and ']'. More...
 
#define AMXD_OBJECT_REGEXP   0x04
 Path format flag - create path that can be used as regular expression. More...
 
#define AMXD_OBJECT_TERMINATE   0x08
 Path format flag - when set the object path is terminated with a dot. More...
 
#define AMXD_OBJECT_SUPPORTED   0x10
 Path format flag - adds {i} as placeholder for an instance object. More...
 
#define AMXD_OBJECT_AUTO_PATH   0x20
 
#define AMXD_OBJECT_PARAM   0x01
 List and describe flag. More...
 
#define AMXD_OBJECT_FUNC   0x02
 List and describe flag. More...
 
#define AMXD_OBJECT_CHILD   0x04
 List flag. More...
 
#define AMXD_OBJECT_INSTANCE   0x08
 List flag. More...
 
#define AMXD_OBJECT_NO_BASE   0x10
 List and describe flag. More...
 
#define AMXD_TEMPLATE_INFO   0x20
 List and describe flag. More...
 
#define AMXD_OBJECT_KEY_PARAM   0x40
 
#define AMXD_OBJECT_EVENT   0x80
 
#define AMXD_OBJECT_ALL
 List and describe flag. More...
 

Functions

amxd_status_t amxd_object_new (amxd_object_t **object, const amxd_object_type_t type, const char *name)
 Data model object constructor function. More...
 
void amxd_object_free (amxd_object_t **object)
 Data model object destructor function. More...
 
amxd_status_t amxd_object_new_instance (amxd_object_t **object, amxd_object_t *templ, const char *name, uint32_t index, amxc_var_t *values)
 Data model object constructor function. More...
 
amxd_status_t amxd_object_add_instance (amxd_object_t **object, amxd_object_t *templ, const char *name, uint32_t index, amxc_var_t *values)
 Data model object constructor function. More...
 
void amxd_object_delete (amxd_object_t **object)
 Invokes the destroy handler(s) of the object. More...
 
const char * amxd_object_get_name (const amxd_object_t *const object, const uint32_t flags)
 Get the name of the object (or index as a string for instance objects) More...
 
uint32_t amxd_object_get_index (const amxd_object_t *const object)
 Get the index of an instance object. More...
 
static amxd_object_type_t amxd_object_get_type (const amxd_object_t *const object)
 Returns the object type. More...
 
amxd_status_t amxd_object_set_attr (amxd_object_t *const object, const amxd_oattr_id_t attr, const bool enable)
 Sets or unsets an object attribute. More...
 
amxd_status_t amxd_object_set_attrs (amxd_object_t *const object, const uint32_t bitmask, bool enable)
 Sets or unsets object attributes using a bitmap. More...
 
uint32_t amxd_object_get_attrs (const amxd_object_t *const object)
 Gets the set attributes of an object. More...
 
bool amxd_object_is_attr_set (const amxd_object_t *const object, const amxd_oattr_id_t attr)
 Checks if an attribute is set. More...
 
char * amxd_object_get_mibs (amxd_object_t *object)
 Get the names of all mibs attached to this object. More...
 
bool amxd_object_has_mib (amxd_object_t *object, const char *mib_name)
 Checks if a mib has been added to a data model object. More...
 
amxd_status_t amxd_object_add_mib (amxd_object_t *const object, const char *mib_name)
 Adds a mib to an object. More...
 
amxd_status_t amxd_object_remove_mib (amxd_object_t *const object, const char *mib_name)
 Removes a mib from an object. More...
 
amxd_status_t amxd_object_validate (amxd_object_t *const object, int32_t depth)
 
amxd_status_t amxd_object_set_counter (amxd_object_t *const object, const char *name)
 
amxd_status_t amxd_object_set_max_instances (amxd_object_t *object, uint32_t max)
 
amxd_status_t amxd_object_list (amxd_object_t *const object, amxc_var_t *const list, uint32_t flags, amxd_dm_access_t access)
 
amxd_status_t amxd_object_describe (amxd_object_t *const object, amxc_var_t *const value, uint32_t flags, amxd_dm_access_t access)
 
amxd_object_tamxd_object_get_base (const amxd_object_t *const object)
 
static amxc_llist_it_t * amxd_object_first_function (const amxd_object_t *const object)
 
static amxc_llist_it_t * amxd_object_first_parameter (const amxd_object_t *const object)
 

Detailed Description

Ambiorix Data Model API header file.

Definition in file amxd_object.h.

Macro Definition Documentation

◆ AMXD_OBJECT_AUTO_PATH

#define AMXD_OBJECT_AUTO_PATH   0x20

Definition at line 228 of file amxd_object.h.

◆ AMXD_OBJECT_EVENT

#define AMXD_OBJECT_EVENT   0x80

Definition at line 318 of file amxd_object.h.

◆ AMXD_OBJECT_KEY_PARAM

#define AMXD_OBJECT_KEY_PARAM   0x40

Definition at line 316 of file amxd_object.h.

Function Documentation

◆ amxd_object_describe()

amxd_status_t amxd_object_describe ( amxd_object_t *const  object,
amxc_var_t *const  value,
uint32_t  flags,
amxd_dm_access_t  access 
)

Definition at line 353 of file amxd_action_object_describe.c.

356  {
358  amxc_var_t args;
359 
360  amxc_var_init(&args);
361 
362  when_null(object, exit);
363  when_null(value, exit);
364 
365  amxc_var_set_type(&args, AMXC_VAR_ID_HTABLE);
366  amxc_var_add_key(bool, &args, "parameters", flags & (AMXD_OBJECT_PARAM | AMXD_OBJECT_KEY_PARAM));
367  amxc_var_add_key(bool, &args, "functions", flags & AMXD_OBJECT_FUNC);
368  amxc_var_add_key(bool, &args, "objects", flags & AMXD_OBJECT_CHILD);
369  amxc_var_add_key(bool, &args, "instances", flags & AMXD_OBJECT_INSTANCE);
370  amxc_var_add_key(bool, &args, "template_info", flags & AMXD_TEMPLATE_INFO);
371  amxc_var_add_key(bool, &args, "events", flags & AMXD_OBJECT_EVENT);
372  amxc_var_add_key(uint32_t, &args, "access", access);
373 
374  if(flags & (AMXD_OBJECT_KEY_PARAM)) {
375  uint32_t attributes = flags & AMXD_OBJECT_KEY_PARAM ? SET_BIT(amxd_pattr_key) : 0;
376  amxc_var_add_key(uint32_t, &args, "attributes", attributes);
377  }
378 
379  retval = amxd_dm_invoke_action(object,
380  NULL,
382  &args,
383  value);
384 
385 exit:
386  amxc_var_clean(&args);
387  return retval;
388 }
#define SET_BIT(x)
Definition: amxd_common.h:65
amxd_status_t amxd_dm_invoke_action(amxd_object_t *object, amxd_param_t *param, amxd_action_t reason, const amxc_var_t *const args, amxc_var_t *const retval)
Definition: amxd_dm.c:591
#define AMXD_OBJECT_KEY_PARAM
Definition: amxd_object.h:316
#define AMXD_OBJECT_EVENT
Definition: amxd_object.h:318
@ amxd_pattr_key
Definition: amxd_types.h:362
@ action_object_describe
Definition: amxd_types.h:121
enum _amxd_status amxd_status_t
@ amxd_status_unknown_error
Definition: amxd_types.h:79
#define AMXD_OBJECT_INSTANCE
List flag.
Definition: amxd_object.h:287
#define AMXD_TEMPLATE_INFO
List and describe flag.
Definition: amxd_object.h:314
#define AMXD_OBJECT_CHILD
List flag.
Definition: amxd_object.h:273
#define AMXD_OBJECT_FUNC
List and describe flag.
Definition: amxd_object.h:260
#define AMXD_OBJECT_PARAM
List and describe flag.
Definition: amxd_object.h:244

◆ amxd_object_first_function()

static amxc_llist_it_t* amxd_object_first_function ( const amxd_object_t *const  object)
inlinestatic

Definition at line 835 of file amxd_object.h.

835  {
836  return object == NULL ? NULL : amxc_llist_get_first(&object->functions);
837 }
amxc_llist_t functions
Definition: amxd_types.h:245

◆ amxd_object_first_parameter()

static amxc_llist_it_t* amxd_object_first_parameter ( const amxd_object_t *const  object)
inlinestatic

Definition at line 840 of file amxd_object.h.

840  {
841  return object == NULL ? NULL : amxc_llist_get_first(&object->parameters);
842 }
amxc_llist_t parameters
Definition: amxd_types.h:246

◆ amxd_object_get_base()

amxd_object_t* amxd_object_get_base ( const amxd_object_t *const  object)

Definition at line 389 of file amxd_object.c.

389  {
390  amxd_object_t* base = NULL;
391 
392  when_null(object, exit);
393  when_null(object->derived_from.llist, exit);
394  base = amxc_container_of(object->derived_from.llist, amxd_object_t, derived_objects);
395 
396 exit:
397  return base;
398 }
amxc_llist_it_t derived_from
Definition: amxd_types.h:249

◆ amxd_object_list()

amxd_status_t amxd_object_list ( amxd_object_t *const  object,
amxc_var_t *const  list,
uint32_t  flags,
amxd_dm_access_t  access 
)

Definition at line 322 of file amxd_action_object_list.c.

325  {
327  amxc_var_t args;
328 
329  amxc_var_init(&args);
330  when_null(object, exit);
331  when_null(list, exit);
332 
333  amxc_var_set_type(&args, AMXC_VAR_ID_HTABLE);
334  amxc_var_add_key(bool, &args, "parameters", flags & AMXD_OBJECT_PARAM);
335  amxc_var_add_key(bool, &args, "functions", flags & AMXD_OBJECT_FUNC);
336  amxc_var_add_key(bool, &args, "objects", flags & AMXD_OBJECT_CHILD);
337  amxc_var_add_key(bool, &args, "instances", flags & AMXD_OBJECT_INSTANCE);
338  amxc_var_add_key(bool, &args, "template_info", flags & AMXD_TEMPLATE_INFO);
339  amxc_var_add_key(bool, &args, "events", flags & AMXD_OBJECT_EVENT);
340  amxc_var_add_key(uint32_t, &args, "access", access);
341  retval = amxd_dm_invoke_action(object,
342  NULL,
344  &args,
345  list);
346 
347  amxc_var_clean(&args);
348 
349 exit:
350  return retval;
351 }
@ action_object_list
Definition: amxd_types.h:120

◆ amxd_object_set_counter()

amxd_status_t amxd_object_set_counter ( amxd_object_t *const  object,
const char *  name 
)

Definition at line 362 of file amxd_object.c.

363  {
365  amxd_param_t* param = NULL;
366  amxd_object_t* container = NULL;
367 
368  container = amxd_object_get_parent(object);
369  when_true(!amxd_is_valid_counter(container, object), exit);
370  param = amxd_create_counter_param(container, object, name);
371  when_null(param, exit);
372 
373  if((amxd_object_get_type(container) == amxd_object_instance) ||
375  (amxd_object_get_type(container) == amxd_object_template)) {
377  }
378 
379 exit:
380  if(status != amxd_status_ok) {
381  if(param != NULL) {
382  free(param->priv);
383  }
384  amxd_param_free(&param);
385  }
386  return status;
387 }
static amxd_param_t * amxd_create_counter_param(amxd_object_t *const container, amxd_object_t *const counted, const char *name)
Definition: amxd_object.c:107
static bool amxd_is_valid_counter(amxd_object_t *const counter, amxd_object_t *const counted)
Definition: amxd_object.c:92
void PRIVATE amxd_param_free(amxd_param_t **param)
@ amxd_status_ok
Definition: amxd_types.h:78
@ amxd_object_template
Definition: amxd_types.h:183
@ amxd_object_singleton
Definition: amxd_types.h:181
@ amxd_object_instance
Definition: amxd_types.h:186
amxd_object_t * amxd_object_get_parent(const amxd_object_t *const object)
Get the parent object.
static amxd_object_type_t amxd_object_get_type(const amxd_object_t *const object)
Returns the object type.
Definition: amxd_object.h:586
static amxd_status_t status

◆ amxd_object_set_max_instances()

amxd_status_t amxd_object_set_max_instances ( amxd_object_t object,
uint32_t  max 
)

Definition at line 397 of file amxd_object_instance.c.

398  {
400  amxc_var_t* max_var = NULL;
401  uint32_t instances = 0;
402  when_null(object, exit);
403  when_true_status(object->type != amxd_object_template,
404  exit,
405  retval = amxd_status_invalid_type);
406 
407  instances = amxd_object_get_instance_count(object);
408  when_true_status(max < instances, exit, retval = amxd_status_invalid_value);
409 
410  max_var =
411  (amxc_var_t*) amxd_object_get_action_cb_data(object,
414  if(max == UINT32_MAX) {
415  amxd_object_remove_max_instance_check(object, max_var);
416  retval = amxd_status_ok;
417  goto exit;
418  }
419 
420  if(max_var != NULL) {
421  amxc_var_set(uint32_t, max_var, max);
422  } else {
423  retval = amxd_object_add_max_instance_check(object, max);
424  when_failed(retval, exit);
425  }
426 
427  retval = amxd_status_ok;
428 
429 exit:
430  return retval;
431 }
amxd_status_t amxd_action_object_add_inst(amxd_object_t *const object, amxd_param_t *const param, amxd_action_t reason, const amxc_var_t *const args, amxc_var_t *const retval, void *priv)
void * amxd_object_get_action_cb_data(amxd_object_t *const object, const amxd_action_t reason, amxd_action_fn_t fn)
static uint32_t amxd_object_get_instance_count(const amxd_object_t *object)
static void amxd_object_remove_max_instance_check(amxd_object_t *object, amxc_var_t *max_var)
static amxd_status_t amxd_object_add_max_instance_check(amxd_object_t *object, uint32_t max)
@ action_object_add_inst
Definition: amxd_types.h:123
@ amxd_status_invalid_type
Definition: amxd_types.h:90
@ amxd_status_invalid_value
Definition: amxd_types.h:88
amxd_object_type_t type
Definition: amxd_types.h:236

◆ amxd_object_validate()

amxd_status_t amxd_object_validate ( amxd_object_t *const  object,
int32_t  depth 
)

Definition at line 132 of file amxd_action_object_validate.c.

133  {
135 
136  when_null(object, exit);
137 
142  depth,
143  &status);
144 
145 exit:
146  return status;
147 }
static void amxd_object_validate_impl(amxd_object_t *const object, UNUSED int32_t depth, void *priv)
static bool amxd_object_validate_filter(UNUSED amxd_object_t *const object, UNUSED int32_t depth, void *priv)
@ amxd_direction_down
Definition: amxd_types.h:216
void amxd_object_hierarchy_walk(amxd_object_t *const object, const amxd_direction_t direction, amxd_object_filter_fn_t filter, amxd_object_cb_fn_t cb, int32_t depth, void *priv)
Iterates over all objects in the data model tree.