libnl 1.1
|
Data Structures | |
struct | nl_derived_object |
Modules | |
Object API | |
Object Creation/Deletion | |
struct nl_object * | nl_object_alloc (struct nl_object_ops *ops) |
Allocate a new object of kind specified by the operations handle. | |
struct nl_object * | nl_object_alloc_name (const char *kind) |
Allocate a new object of kind specified by the name. | |
struct nl_object * | nl_object_clone (struct nl_object *obj) |
Allocate a new object and copy all data from an existing object. | |
void | nl_object_free (struct nl_object *obj) |
Free a cacheable object. | |
Reference Management | |
void | nl_object_get (struct nl_object *obj) |
Acquire a reference on a object. | |
void | nl_object_put (struct nl_object *obj) |
Release a reference from an object. | |
int | nl_object_shared (struct nl_object *obj) |
Check whether this object is used by multiple users. | |
Marks | |
void | nl_object_mark (struct nl_object *obj) |
Add mark to object. | |
void | nl_object_unmark (struct nl_object *obj) |
Remove mark from object. | |
int | nl_object_is_marked (struct nl_object *obj) |
Return true if object is marked. | |
Utillities | |
void | nl_object_dump (struct nl_object *obj, struct nl_dump_params *params) |
Dump this object according to the specified parameters. | |
int | nl_object_identical (struct nl_object *a, struct nl_object *b) |
Check if the identifiers of two objects are identical. | |
uint32_t | nl_object_diff (struct nl_object *a, struct nl_object *b) |
Compute bitmask representing difference in attribute values. | |
int | nl_object_match_filter (struct nl_object *obj, struct nl_object *filter) |
Match a filter against an object. | |
char * | nl_object_attrs2str (struct nl_object *obj, uint32_t attrs, char *buf, size_t len) |
Convert bitmask of attributes to a character string. | |
char * | nl_object_attr_list (struct nl_object *obj, char *buf, size_t len) |
Return list of attributes present in an object. | |
Attributes | |
int | nl_object_get_refcnt (struct nl_object *obj) |
struct nl_cache * | nl_object_get_cache (struct nl_object *obj) |
void * | nl_object_priv (struct nl_object *obj) |
struct nl_object* nl_object_alloc | ( | struct nl_object_ops * | ops | ) | [read] |
ops | cache operations handle |
Definition at line 42 of file object.c.
References nl_object_ops::oo_constructor, and nl_object_ops::oo_size.
Referenced by nl_object_alloc_name(), and nl_object_clone().
{ struct nl_object *new; if (ops->oo_size < sizeof(*new)) BUG(); new = calloc(1, ops->oo_size); if (!new) { nl_errno(ENOMEM); return NULL; } new->ce_refcnt = 1; nl_init_list_head(&new->ce_list); new->ce_ops = ops; if (ops->oo_constructor) ops->oo_constructor(new); NL_DBG(4, "Allocated new object %p\n", new); return new; }
struct nl_object* nl_object_alloc_name | ( | const char * | kind | ) | [read] |
kind | name of object type |
Definition at line 72 of file object.c.
References nl_cache_ops_lookup(), and nl_object_alloc().
{ struct nl_cache_ops *ops; ops = nl_cache_ops_lookup(kind); if (!ops) { nl_error(ENOENT, "Unable to lookup cache kind \"%s\"", kind); return NULL; } return nl_object_alloc(ops->co_obj_ops); }
struct nl_object* nl_object_clone | ( | struct nl_object * | obj | ) | [read] |
obj | object to inherite data from |
Definition at line 95 of file object.c.
References nl_object_alloc(), nl_object_free(), nl_object_ops::oo_clone, nl_object_ops::oo_free_data, and nl_object_ops::oo_size.
Referenced by nl_cache_add().
{ struct nl_object *new; struct nl_object_ops *ops = obj_ops(obj); int doff = offsetof(struct nl_derived_object, data); int size; new = nl_object_alloc(ops); if (!new) return NULL; size = ops->oo_size - doff; if (size < 0) BUG(); new->ce_ops = obj->ce_ops; new->ce_msgtype = obj->ce_msgtype; if (size) memcpy((void *)new + doff, (void *)obj + doff, size); if (ops->oo_clone) { if (ops->oo_clone(new, obj) < 0) { nl_object_free(new); return NULL; } } else if (size && ops->oo_free_data) BUG(); return new; }
void nl_object_free | ( | struct nl_object * | obj | ) |
obj | object to free |
Definition at line 133 of file object.c.
References nl_cache_remove(), and nl_object_ops::oo_free_data.
Referenced by nl_object_clone(), and nl_object_put().
{ struct nl_object_ops *ops = obj_ops(obj); if (obj->ce_refcnt > 0) NL_DBG(1, "Warning: Freeing object in use...\n"); if (obj->ce_cache) nl_cache_remove(obj); if (ops->oo_free_data) ops->oo_free_data(obj); free(obj); NL_DBG(4, "Freed object %p\n", obj); }
void nl_object_get | ( | struct nl_object * | obj | ) |
obj | object to acquire reference from |
Definition at line 162 of file object.c.
Referenced by genl_ctrl_search(), genl_ctrl_search_by_name(), nl_cache_add(), nl_cache_move(), nl_cache_search(), rtnl_link_get(), rtnl_link_get_by_name(), rtnl_neigh_get(), rtnl_neightbl_get(), rtnl_qdisc_get(), and rtnl_qdisc_get_by_parent().
{
obj->ce_refcnt++;
NL_DBG(4, "New reference to object %p, total %d\n",
obj, obj->ce_refcnt);
}
void nl_object_put | ( | struct nl_object * | obj | ) |
obj | object to release reference from |
Definition at line 173 of file object.c.
References nl_object_free().
Referenced by nl_cache_remove().
{ if (!obj) return; obj->ce_refcnt--; NL_DBG(4, "Returned object reference %p, %d remaining\n", obj, obj->ce_refcnt); if (obj->ce_refcnt < 0) BUG(); if (obj->ce_refcnt <= 0) nl_object_free(obj); }
int nl_object_shared | ( | struct nl_object * | obj | ) |
void nl_object_mark | ( | struct nl_object * | obj | ) |
obj | Object to mark |
Definition at line 210 of file object.c.
Referenced by nl_cache_mark_all().
{ obj->ce_flags |= NL_OBJ_MARK; }
void nl_object_unmark | ( | struct nl_object * | obj | ) |
int nl_object_is_marked | ( | struct nl_object * | obj | ) |
void nl_object_dump | ( | struct nl_object * | obj, |
struct nl_dump_params * | params | ||
) |
int nl_object_identical | ( | struct nl_object * | a, |
struct nl_object * | b | ||
) |
a | an object |
b | another object of same type |
Definition at line 258 of file object.c.
References nl_object_ops::oo_compare.
Referenced by nl_cache_search().
{ struct nl_object_ops *ops = obj_ops(a); int req_attrs; /* Both objects must be of same type */ if (ops != obj_ops(b)) return 0; req_attrs = ops->oo_id_attrs; /* Both objects must provide all required attributes to uniquely * identify an object */ if ((a->ce_mask & req_attrs) != req_attrs || (b->ce_mask & req_attrs) != req_attrs) return 0; /* Can't judge unless we can compare */ if (ops->oo_compare == NULL) return 0; return !(ops->oo_compare(a, b, req_attrs, 0)); }
uint32_t nl_object_diff | ( | struct nl_object * | a, |
struct nl_object * | b | ||
) |
a | an object |
b | another object of same type |
The bitmask returned is specific to an object type, each bit set represents an attribute which mismatches in either of the two objects. Unavailability of an attribute in one object and presence in the other is regarded a mismatch as well.
Definition at line 294 of file object.c.
References nl_object_ops::oo_compare.
{ struct nl_object_ops *ops = obj_ops(a); if (ops != obj_ops(b) || ops->oo_compare == NULL) return UINT_MAX; return ops->oo_compare(a, b, ~0, 0); }
int nl_object_match_filter | ( | struct nl_object * | obj, |
struct nl_object * | filter | ||
) |
obj | object to check |
filter | object of same type acting as filter |
Definition at line 313 of file object.c.
References nl_object_ops::oo_compare.
Referenced by nl_cache_dump_filter(), nl_cache_foreach_filter(), nl_cache_nitems_filter(), and nl_cache_subset().
{ struct nl_object_ops *ops = obj_ops(obj); if (ops != obj_ops(filter) || ops->oo_compare == NULL) return 0; return !(ops->oo_compare(obj, filter, filter->ce_mask, LOOSE_FLAG_COMPARISON)); }
char* nl_object_attrs2str | ( | struct nl_object * | obj, |
uint32_t | attrs, | ||
char * | buf, | ||
size_t | len | ||
) |
obj | object of same type as attribute bitmask |
attrs | bitmask of attribute types |
buf | destination buffer |
len | length of destination buffer |
Converts the bitmask of attribute types into a list of attribute names separated by comas.
Definition at line 336 of file object.c.
Referenced by nl_object_attr_list().
{ struct nl_object_ops *ops = obj_ops(obj); if (ops->oo_attrs2str != NULL) return ops->oo_attrs2str(attrs, buf, len); else { memset(buf, 0, len); return buf; } }
char* nl_object_attr_list | ( | struct nl_object * | obj, |
char * | buf, | ||
size_t | len | ||
) |
obj | an object |
buf | destination buffer |
len | length of destination buffer |
Definition at line 357 of file object.c.
References nl_object_attrs2str().
{ return nl_object_attrs2str(obj, obj->ce_mask, buf, len); }