From dd8a87da9653848bb8811cc61ed97574254536c9 Mon Sep 17 00:00:00 2001 From: roopa Date: Mon, 12 Nov 2012 12:38:31 -0800 Subject: Add support for per cache flags This patch adds support for per cache flags and adds a flag NL_CACHE_AF_ITER to iter over all supported families when filling the cache. Signed-off-by: Thomas Graf --- include/netlink-types.h | 1 + include/netlink/cache-api.h | 8 ++++++++ include/netlink/cache.h | 1 + lib/cache.c | 21 +++++++++++++++++++++ 4 files changed, 31 insertions(+) diff --git a/include/netlink-types.h b/include/netlink-types.h index 0be58d1..01b4505 100644 --- a/include/netlink-types.h +++ b/include/netlink-types.h @@ -79,6 +79,7 @@ struct nl_cache int c_nitems; int c_iarg1; int c_iarg2; + unsigned int c_flags; struct nl_hash_table * hashtable; struct nl_cache_ops * c_ops; }; diff --git a/include/netlink/cache-api.h b/include/netlink/cache-api.h index aa5eeb6..ccb4098 100644 --- a/include/netlink/cache-api.h +++ b/include/netlink/cache-api.h @@ -168,6 +168,11 @@ struct nl_parser_param void * pp_arg; }; +/** + * Cache flags + */ +#define NL_CACHE_AF_ITER 0x0001 + /** * Cache Operations * @@ -189,6 +194,9 @@ struct nl_cache_ops /** cache object hash size **/ int co_hash_size; + /** cache flags */ + unsigned int co_flags; + /** Group definition */ struct nl_af_group * co_groups; diff --git a/include/netlink/cache.h b/include/netlink/cache.h index c919e6b..ee3b5d8 100644 --- a/include/netlink/cache.h +++ b/include/netlink/cache.h @@ -66,6 +66,7 @@ extern int nl_cache_include(struct nl_cache *, void *); extern void nl_cache_set_arg1(struct nl_cache *, int); extern void nl_cache_set_arg2(struct nl_cache *, int); +extern void nl_cache_set_flags(struct nl_cache *, unsigned int); /* General */ extern int nl_cache_is_empty(struct nl_cache *); diff --git a/lib/cache.c b/lib/cache.c index af4ee95..f21df2b 100644 --- a/lib/cache.c +++ b/lib/cache.c @@ -190,6 +190,7 @@ struct nl_cache *nl_cache_alloc(struct nl_cache_ops *ops) nl_init_list_head(&cache->c_items); cache->c_ops = ops; + cache->c_flags |= ops->co_flags; /* * If object type provides a hash keygen @@ -565,6 +566,26 @@ void nl_cache_set_arg2(struct nl_cache *cache, int arg) cache->c_iarg2 = arg; } +/** + * Set cache ops flags + * @arg ops Cache ops + * @arg arg flags + */ +void nl_cache_ops_set_flags(struct nl_cache_ops *ops, unsigned int flags) +{ + ops->co_flags |= flags; +} + +/** + * Set cache flags + * @arg cache Cache + * @arg arg flags + */ +void nl_cache_set_flags(struct nl_cache *cache, unsigned int flags) +{ + cache->c_flags |= flags; +} + /** * Invoke the request-update operation * @arg sk Netlink socket. -- cgit v1.2.1