cache: event_filter() cache operation to filter notifications

Certain notifications need to be filtered out and should not be applied to
a cache when a cache is handled by a cache manager.
This commit is contained in:
Thomas Graf 2011-10-21 11:31:15 +02:00
parent 30d3f8c199
commit 2bcd8ecd27
2 changed files with 13 additions and 0 deletions

View file

@ -201,6 +201,13 @@ struct nl_cache_ops
int (*co_msg_parser)(struct nl_cache_ops *, struct sockaddr_nl *,
struct nlmsghdr *, struct nl_parser_param *);
/**
* Called whenever a notification has been parsed into an object and
* is considered for inclusion into a cache. Must return NL_SKIP if
* the object should not be included in the cache.
*/
int (*co_event_filter)(struct nl_cache *, struct nl_object *obj);
/** Object operations */
struct nl_object_ops * co_obj_ops;

View file

@ -89,12 +89,18 @@
static int include_cb(struct nl_object *obj, struct nl_parser_param *p)
{
struct nl_cache_assoc *ca = p->pp_arg;
struct nl_cache_ops *ops = ca->ca_cache->c_ops;
NL_DBG(2, "Including object %p into cache %p\n", obj, ca->ca_cache);
#ifdef NL_DEBUG
if (nl_debug >= 4)
nl_object_dump(obj, &nl_debug_dp);
#endif
if (ops->co_event_filter)
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);
}