[PATCH v2 1/3] Add support for per cache flags
roopa at cumulusnetworks.com
roopa at cumulusnetworks.com
Mon Nov 12 15:38:31 EST 2012
From: roopa <roopa at cumulusnetworks.com>
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.
---
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(+), 0 deletions(-)
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
@@ -169,6 +169,11 @@ struct nl_parser_param
};
/**
+ * Cache flags
+ */
+#define NL_CACHE_AF_ITER 0x0001
+
+/**
* Cache Operations
*
* This structure defines the characterstics of a cache type. It contains
@@ -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
@@ -566,6 +567,26 @@ void nl_cache_set_arg2(struct nl_cache *cache, int 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.
* @arg cache Cache
--
1.7.2.5
More information about the libnl
mailing list