* 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_
extern "C" {
#endif
+typedef void (*change_func_t)(struct nl_cache *, struct nl_object *, int, void *);
+
/**
* @ingroup cache
* @defgroup cache_api Cache Implementation
*/
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;
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 *,
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)