cache: Add co_include_event allowing caches to provide their own nl_cache_include() implementation
This commit is contained in:
parent
2e23491c50
commit
bd1e4d0384
3 changed files with 24 additions and 4 deletions
|
@ -6,7 +6,7 @@
|
|||
* License as published by the Free Software Foundation version 2.1
|
||||
* of the License.
|
||||
*
|
||||
* Copyright (c) 2003-2006 Thomas Graf <tgraf@suug.ch>
|
||||
* Copyright (c) 2003-2012 Thomas Graf <tgraf@suug.ch>
|
||||
*/
|
||||
|
||||
#ifndef NETLINK_CACHE_API_H_
|
||||
|
@ -18,6 +18,8 @@
|
|||
extern "C" {
|
||||
#endif
|
||||
|
||||
typedef void (*change_func_t)(struct nl_cache *, struct nl_object *, int, void *);
|
||||
|
||||
/**
|
||||
* @ingroup cache
|
||||
* @defgroup cache_api Cache Implementation
|
||||
|
@ -225,6 +227,22 @@ struct nl_cache_ops
|
|||
*/
|
||||
int (*co_event_filter)(struct nl_cache *, struct nl_object *obj);
|
||||
|
||||
/**
|
||||
* The function registered under this callback is called when an
|
||||
* object formed from a notification event needs to be included in
|
||||
* a cache.
|
||||
*
|
||||
* For each modified object, the change callback \c change_cb must
|
||||
* be called with the \c data argument provided.
|
||||
*
|
||||
* If no function is registered, the function nl_cache_include()
|
||||
* will be used for this purpose.
|
||||
*
|
||||
* @see nl_cache_include()
|
||||
*/
|
||||
int (*co_include_event)(struct nl_cache *cache, struct nl_object *obj,
|
||||
change_func_t change_cb, void *data);
|
||||
|
||||
/** Object operations */
|
||||
struct nl_object_ops * co_obj_ops;
|
||||
|
||||
|
|
|
@ -24,8 +24,6 @@ extern "C" {
|
|||
|
||||
struct nl_cache;
|
||||
|
||||
typedef void (*change_func_t)(struct nl_cache *, struct nl_object *, int, void *);
|
||||
|
||||
/* Access Functions */
|
||||
extern int nl_cache_nitems(struct nl_cache *);
|
||||
extern int nl_cache_nitems_filter(struct nl_cache *,
|
||||
|
|
|
@ -42,7 +42,11 @@ static int include_cb(struct nl_object *obj, struct nl_parser_param *p)
|
|||
if (ops->co_event_filter(ca->ca_cache, obj) != NL_OK)
|
||||
return 0;
|
||||
|
||||
return nl_cache_include(ca->ca_cache, obj, ca->ca_change, ca->ca_change_data);
|
||||
if (ops->co_include_event)
|
||||
return ops->co_include_event(ca->ca_cache, obj, ca->ca_change,
|
||||
ca->ca_change_data);
|
||||
else
|
||||
return nl_cache_include(ca->ca_cache, obj, ca->ca_change, ca->ca_change_data);
|
||||
}
|
||||
|
||||
static int event_input(struct nl_msg *msg, void *arg)
|
||||
|
|
Loading…
Add table
Reference in a new issue