|
int | nl_cache_add (struct nl_cache *cache, struct nl_object *obj) |
| Add object to a cache. More...
|
|
int | nl_cache_move (struct nl_cache *cache, struct nl_object *obj) |
| Move object from one cache to another. More...
|
|
void | nl_cache_remove (struct nl_object *obj) |
| Removes an object from a cache. More...
|
|
struct nl_object * | nl_cache_search (struct nl_cache *cache, struct nl_object *needle) |
| Search for an object in a cache. More...
|
|
|
int | nl_cache_request_full_dump (struct nl_handle *handle, struct nl_cache *cache) |
| Request a full dump from the kernel to fill a cache. More...
|
|
int | __cache_pickup (struct nl_handle *handle, struct nl_cache *cache, struct nl_parser_param *param) |
|
int | nl_cache_pickup (struct nl_handle *handle, struct nl_cache *cache) |
| Pickup a netlink dump response and put it into a cache. More...
|
|
int | nl_cache_include (struct nl_cache *cache, struct nl_object *obj, change_func_t change_cb) |
|
int | nl_cache_resync (struct nl_handle *handle, struct nl_cache *cache, change_func_t change_cb) |
|
|
int | nl_cache_parse_and_add (struct nl_cache *cache, struct nl_msg *msg) |
| Parse a netlink message and add it to the cache. More...
|
|
int | nl_cache_refill (struct nl_handle *handle, struct nl_cache *cache) |
| (Re)fill a cache with the contents in the kernel. More...
|
|
|
void | nl_cache_foreach (struct nl_cache *cache, void(*cb)(struct nl_object *, void *), void *arg) |
| Call a callback on each element of the cache. More...
|
|
void | nl_cache_foreach_filter (struct nl_cache *cache, struct nl_object *filter, void(*cb)(struct nl_object *, void *), void *arg) |
| Call a callback on each element of the cache (filtered). More...
|
|
Cache Management | | Type Specific Cache Operations
| | +----------------+ +------------+
| request update | | msg_parser |
| | +----------------+ +------------+
+- - - - -^- - - - - - - -^- -|- - - -
nl_cache_update: | | | |
1) --------- co_request_update ------+ | |
| | |
2) destroy old cache +----------- pp_cb ---------|---+
| | |
+--------------+ | | | |
+--------------+ | | +-------------+
| | +-----|-^-----+
+---v-|---+
+---------+
| | Core Netlink
int nl_cache_nitems |
( |
struct nl_cache * |
cache | ) |
|
- Parameters
-
Definition at line 58 of file cache.c.
60 return cache->c_nitems;
int nl_cache_nitems_filter |
( |
struct nl_cache * |
cache, |
|
|
struct nl_object * |
filter |
|
) |
| |
- Parameters
-
cache | Cache object. |
filter | Filter object. |
Definition at line 68 of file cache.c.
References nl_object_match_filter().
71 struct nl_object *obj;
74 if (cache->c_ops == NULL)
77 ops = cache->c_ops->co_obj_ops;
79 nl_list_for_each_entry(obj, &cache->c_items, ce_list) {
int nl_cache_is_empty |
( |
struct nl_cache * |
cache | ) |
|
- Parameters
-
- Returns
- true if the cache is empty, otherwise false is returned.
Definition at line 94 of file cache.c.
96 return nl_list_empty(&cache->c_items);
struct nl_cache_ops* nl_cache_get_ops |
( |
struct nl_cache * |
cache | ) |
|
|
read |
- Parameters
-
Definition at line 103 of file cache.c.
struct nl_object* nl_cache_get_first |
( |
struct nl_cache * |
cache | ) |
|
|
read |
- Parameters
-
Definition at line 112 of file cache.c.
114 if (nl_list_empty(&cache->c_items))
117 return nl_list_entry(cache->c_items.next,
118 struct nl_object, ce_list);
struct nl_object* nl_cache_get_last |
( |
struct nl_cache * |
cache | ) |
|
|
read |
- Parameters
-
Definition at line 125 of file cache.c.
127 if (nl_list_empty(&cache->c_items))
130 return nl_list_entry(cache->c_items.prev,
131 struct nl_object, ce_list);
struct nl_object* nl_cache_get_next |
( |
struct nl_object * |
obj | ) |
|
|
read |
- Parameters
-
Definition at line 138 of file cache.c.
140 if (nl_list_at_tail(obj, &obj->ce_cache->c_items, ce_list))
143 return nl_list_entry(obj->ce_list.next,
144 struct nl_object, ce_list);
struct nl_object* nl_cache_get_prev |
( |
struct nl_object * |
obj | ) |
|
|
read |
- Parameters
-
Definition at line 151 of file cache.c.
153 if (nl_list_at_head(obj, &obj->ce_cache->c_items, ce_list))
156 return nl_list_entry(obj->ce_list.prev,
157 struct nl_object, ce_list);
struct nl_cache* nl_cache_alloc |
( |
struct nl_cache_ops * |
ops | ) |
|
|
read |
- Parameters
-
ops | cache operations to base the cache on |
- Returns
- A newly allocated and initialized cache.
Definition at line 173 of file cache.c.
Referenced by flnl_result_alloc_cache(), nfnl_ct_alloc_cache(), nl_cache_alloc_name(), nl_cache_mngr_add(), nl_cache_subset(), rtnl_class_alloc_cache(), rtnl_cls_alloc_cache(), rtnl_link_alloc_cache(), rtnl_neigh_alloc_cache(), rtnl_neightbl_alloc_cache(), rtnl_qdisc_alloc_cache(), rtnl_route_alloc_cache(), and rtnl_rule_alloc_cache_by_family().
175 struct nl_cache *cache;
177 cache = calloc(1,
sizeof(*cache));
183 nl_init_list_head(&cache->c_items);
186 NL_DBG(2,
"Allocated cache %p <%s>.\n", cache, nl_cache_name(cache));
struct nl_cache* nl_cache_alloc_name |
( |
const char * |
kind | ) |
|
|
read |
struct nl_cache* nl_cache_subset |
( |
struct nl_cache * |
orig, |
|
|
struct nl_object * |
filter |
|
) |
| |
|
read |
- Parameters
-
orig | Original cache to be based on |
filter | Filter defining the subset to be filled into new cache |
- Returns
- A newly allocated cache or NULL.
Definition at line 215 of file cache.c.
References nl_cache_add(), nl_cache_alloc(), and nl_object_match_filter().
218 struct nl_cache *cache;
220 struct nl_object *obj;
229 ops = orig->c_ops->co_obj_ops;
231 nl_list_for_each_entry(obj, &orig->c_items, ce_list) {
void nl_cache_clear |
( |
struct nl_cache * |
cache | ) |
|
- Parameters
-
Removes all elements of a cache.
Definition at line 247 of file cache.c.
References nl_cache_remove().
Referenced by nl_cache_free(), and nl_cache_refill().
249 struct nl_object *obj, *tmp;
251 NL_DBG(1,
"Clearing cache %p <%s>...\n", cache, nl_cache_name(cache));
253 nl_list_for_each_entry_safe(obj, tmp, &cache->c_items, ce_list)
void nl_cache_free |
( |
struct nl_cache * |
cache | ) |
|
- Parameters
-
Removes all elements of a cache and frees all memory.
- Note
- Use this function if you are working with allocated caches.
Definition at line 265 of file cache.c.
References nl_cache_clear().
Referenced by genl_ctrl_resolve(), nl_cache_mngr_add(), rtnl_class_alloc_cache(), rtnl_cls_alloc_cache(), rtnl_link_alloc_cache(), rtnl_neigh_alloc_cache(), rtnl_neightbl_alloc_cache(), and rtnl_qdisc_alloc_cache().
268 NL_DBG(1,
"Freeing cache %p <%s>...\n", cache, nl_cache_name(cache));
int nl_cache_add |
( |
struct nl_cache * |
cache, |
|
|
struct nl_object * |
obj |
|
) |
| |
- Parameters
-
cache | Cache to add object to |
obj | Object to be added to the cache |
Adds the given object to the specified cache. The object is cloned if it has been added to another cache already.
- Returns
- 0 or a negative error code.
Definition at line 302 of file cache.c.
References nl_object_clone(), and nl_object_get().
Referenced by nl_cache_subset().
304 struct nl_object *
new;
306 if (cache->c_ops->co_obj_ops != obj->ce_ops)
307 return nl_error(EINVAL,
"Object mismatches cache type");
309 if (!nl_list_empty(&obj->ce_list)) {
312 return nl_errno(ENOMEM);
318 return __cache_add(cache,
new);
int nl_cache_move |
( |
struct nl_cache * |
cache, |
|
|
struct nl_object * |
obj |
|
) |
| |
- Parameters
-
cache | Cache to move object to. |
obj | Object subject to be moved |
Removes the given object from its associated cache if needed and adds it to the new cache.
- Returns
- 0 on success or a negative error code.
Definition at line 331 of file cache.c.
References nl_cache_remove(), and nl_object_get().
333 if (cache->c_ops->co_obj_ops != obj->ce_ops)
334 return nl_error(EINVAL,
"Object mismatches cache type");
336 NL_DBG(3,
"Moving object %p to cache %p\n", obj, cache);
342 if (!nl_list_empty(&obj->ce_list))
345 return __cache_add(cache, obj);
void nl_cache_remove |
( |
struct nl_object * |
obj | ) |
|
- Parameters
-
obj | Object to remove from its cache |
Removes the object obj
from the cache it is assigned to, since an object can only be assigned to one cache at a time, the cache must ne be passed along with it.
Definition at line 356 of file cache.c.
References nl_object_put().
Referenced by nl_cache_clear(), nl_cache_move(), and nl_object_free().
358 struct nl_cache *cache = obj->ce_cache;
363 nl_list_del(&obj->ce_list);
364 obj->ce_cache = NULL;
368 NL_DBG(1,
"Deleted %p from cache %p <%s>.\n",
369 obj, cache, nl_cache_name(cache));
struct nl_object* nl_cache_search |
( |
struct nl_cache * |
cache, |
|
|
struct nl_object * |
needle |
|
) |
| |
|
read |
- Parameters
-
cache | Cache to search in. |
needle | Object to look for. |
Iterates over the cache and looks for an object with identical identifiers as the needle.
- Returns
- Reference to object or NULL if not found.
- Note
- The returned object must be returned via nl_object_put().
Definition at line 383 of file cache.c.
References nl_object_get(), and nl_object_identical().
386 struct nl_object *obj;
388 nl_list_for_each_entry(obj, &cache->c_items, ce_list) {
int nl_cache_request_full_dump |
( |
struct nl_handle * |
handle, |
|
|
struct nl_cache * |
cache |
|
) |
| |
- Parameters
-
handle | Netlink handle |
cache | Cache subjected to be filled. |
Send a dumping request to the kernel causing it to dump all objects related to the specified cache to the netlink socket.
Use nl_cache_pickup() to read the objects from the socket and fill them into a cache.
Definition at line 417 of file cache.c.
Referenced by nl_cache_refill().
419 NL_DBG(2,
"Requesting dump from kernel for cache %p <%s>...\n",
420 cache, nl_cache_name(cache));
422 if (cache->c_ops->co_request_update == NULL)
423 return nl_error(EOPNOTSUPP,
"Operation not supported");
425 return cache->c_ops->co_request_update(cache, handle);
int nl_cache_pickup |
( |
struct nl_handle * |
handle, |
|
|
struct nl_cache * |
cache |
|
) |
| |
- Parameters
-
handle | Netlink handle. |
cache | Cache to put items into. |
Waits for netlink messages to arrive, parses them and puts them into the specified cache.
- Returns
- 0 on success or a negative error code.
Definition at line 487 of file cache.c.
Referenced by flnl_lookup(), and nl_cache_refill().
494 return __cache_pickup(handle, cache, &p);
int nl_cache_parse_and_add |
( |
struct nl_cache * |
cache, |
|
|
struct nl_msg * |
msg |
|
) |
| |
- Parameters
-
cache | cache to add element to |
msg | netlink message |
Parses a netlink message by calling the cache specific message parser and adds the new element to the cache.
- Returns
- 0 or a negative error code.
Definition at line 642 of file cache.c.
References nlmsg_hdr().
649 return nl_cache_parse(cache->c_ops, NULL,
nlmsg_hdr(msg), &p);
int nl_cache_refill |
( |
struct nl_handle * |
handle, |
|
|
struct nl_cache * |
cache |
|
) |
| |
- Parameters
-
handle | netlink handle |
cache | cache to update |
Clears the specified cache and fills it with the current state in the kernel.
- Returns
- 0 or a negative error code.
Definition at line 662 of file cache.c.
References nl_cache_clear(), nl_cache_pickup(), and nl_cache_request_full_dump().
Referenced by nfnl_ct_alloc_cache(), nl_cache_mngr_add(), rtnl_class_alloc_cache(), rtnl_cls_alloc_cache(), rtnl_link_alloc_cache(), rtnl_neigh_alloc_cache(), rtnl_neightbl_alloc_cache(), rtnl_qdisc_alloc_cache(), rtnl_route_alloc_cache(), and rtnl_rule_alloc_cache_by_family().
670 NL_DBG(2,
"Upading cache %p <%s>, request sent, waiting for dump...\n",
671 cache, nl_cache_name(cache));
void nl_cache_mark_all |
( |
struct nl_cache * |
cache | ) |
|
- Parameters
-
cache | Cache to mark all objects in |
Definition at line 688 of file cache.c.
References nl_object_mark().
690 struct nl_object *obj;
692 NL_DBG(2,
"Marking all objects in cache %p <%s>...\n",
693 cache, nl_cache_name(cache));
695 nl_list_for_each_entry(obj, &cache->c_items, ce_list)
void nl_cache_dump |
( |
struct nl_cache * |
cache, |
|
|
struct nl_dump_params * |
params |
|
) |
| |
- Parameters
-
cache | cache to dump |
params | dumping parameters |
Dumps all elements of the cache to the file descriptor fd.
Definition at line 713 of file cache.c.
References nl_cache_dump_filter().
void nl_cache_dump_filter |
( |
struct nl_cache * |
cache, |
|
|
struct nl_dump_params * |
params, |
|
|
struct nl_object * |
filter |
|
) |
| |
- Parameters
-
cache | cache to dump |
params | dumping parameters (optional) |
filter | filter object |
Dumps all elements of the cache to the file descriptor fd given they match the given filter filter.
Definition at line 727 of file cache.c.
References nl_dump_params::dp_type, NL_DUMP_FULL, nl_object_match_filter(), and nl_object_ops::oo_dump.
Referenced by nl_cache_dump().
733 struct nl_object *obj;
735 NL_DBG(2,
"Dumping cache %p <%s> filter %p\n",
736 cache, nl_cache_name(cache), filter);
738 if (type > NL_DUMP_MAX || type < 0)
741 if (cache->c_ops == NULL)
744 ops = cache->c_ops->co_obj_ops;
748 nl_list_for_each_entry(obj, &cache->c_items, ce_list) {
752 NL_DBG(4,
"Dumping object %p...\n", obj);
753 dump_from_ops(obj, params);
void nl_cache_foreach |
( |
struct nl_cache * |
cache, |
|
|
void(*)(struct nl_object *, void *) |
cb, |
|
|
void * |
arg |
|
) |
| |
- Parameters
-
cache | cache to iterate on |
cb | callback function |
arg | argument passed to callback function |
Calls a callback function cb on each element of the cache. The argument arg is passed on the callback function.
Definition at line 773 of file cache.c.
References nl_cache_foreach_filter().
void nl_cache_foreach_filter |
( |
struct nl_cache * |
cache, |
|
|
struct nl_object * |
filter, |
|
|
void(*)(struct nl_object *, void *) |
cb, |
|
|
void * |
arg |
|
) |
| |