[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