summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Graf <tgraf@suug.ch>2011-05-11 09:33:29 +0200
committerThomas Graf <tgraf@suug.ch>2011-05-11 09:33:29 +0200
commit4cb1666fe19f71c09628615a1c4b6f822b7cd8de (patch)
tree0a5a720b023c29b78ccae901f8fb09e3d77e7ec4
parentf443be6e744ac9be2ad48bd59432d5c2215d4e51 (diff)
downloadlibnl-4cb1666fe19f71c09628615a1c4b6f822b7cd8de.tar.gz
Provide silent variation of nl_cache_require()
Use in addr and tc layer to avoid warnings being printed if no cache is available.
-rw-r--r--include/netlink/cache.h1
-rw-r--r--lib/cache_mngt.c21
-rw-r--r--lib/route/addr.c2
-rw-r--r--lib/route/tc.c2
4 files changed, 17 insertions, 9 deletions
diff --git a/include/netlink/cache.h b/include/netlink/cache.h
index e17b015..f8073f0 100644
--- a/include/netlink/cache.h
+++ b/include/netlink/cache.h
@@ -107,6 +107,7 @@ extern int nl_cache_mngt_unregister(struct nl_cache_ops *);
extern void nl_cache_mngt_provide(struct nl_cache *);
extern void nl_cache_mngt_unprovide(struct nl_cache *);
extern struct nl_cache * nl_cache_mngt_require(const char *);
+extern struct nl_cache * __nl_cache_mngt_require(const char *);
struct nl_cache_mngr;
diff --git a/lib/cache_mngt.c b/lib/cache_mngt.c
index d57d836..a9ecf27 100644
--- a/lib/cache_mngt.c
+++ b/lib/cache_mngt.c
@@ -217,6 +217,17 @@ void nl_cache_mngt_unprovide(struct nl_cache *cache)
ops->co_major_cache = NULL;
}
+struct nl_cache *__nl_cache_mngt_require(const char *name)
+{
+ struct nl_cache_ops *ops;
+
+ ops = nl_cache_ops_lookup(name);
+ if (ops)
+ return ops->co_major_cache;
+
+ return NULL;
+}
+
/**
* Demand the use of a global cache
* @arg name name of the required object type
@@ -229,19 +240,15 @@ void nl_cache_mngt_unprovide(struct nl_cache *cache)
*/
struct nl_cache *nl_cache_mngt_require(const char *name)
{
- struct nl_cache_ops *ops;
+ struct nl_cache *cache;
- ops = nl_cache_ops_lookup(name);
- if (!ops || !ops->co_major_cache) {
+ if (!(cache = __nl_cache_mngt_require(name)))
fprintf(stderr, "Application BUG: Your application must "
"call nl_cache_mngt_provide() and\nprovide a valid "
"%s cache to be used for internal lookups.\nSee the "
" API documentation for more details.\n", name);
-
- return NULL;
- }
- return ops->co_major_cache;
+ return cache;
}
/** @} */
diff --git a/lib/route/addr.c b/lib/route/addr.c
index fa6d76d..4ca6335 100644
--- a/lib/route/addr.c
+++ b/lib/route/addr.c
@@ -294,7 +294,7 @@ static int addr_msg_parser(struct nl_cache_ops *ops, struct sockaddr_nl *who,
addr->ce_mask |= ADDR_ATTR_ANYCAST;
}
- if ((link_cache = nl_cache_mngt_require("route/link"))) {
+ if ((link_cache = __nl_cache_mngt_require("route/link"))) {
struct rtnl_link *link;
if ((link = rtnl_link_get(link_cache, addr->a_ifindex))) {
diff --git a/lib/route/tc.c b/lib/route/tc.c
index 03920aa..da8c75f 100644
--- a/lib/route/tc.c
+++ b/lib/route/tc.c
@@ -176,7 +176,7 @@ compat_xstats:
return err;
}
- if ((link_cache = nl_cache_mngt_require("route/link"))) {
+ if ((link_cache = __nl_cache_mngt_require("route/link"))) {
struct rtnl_link *link;
if ((link = rtnl_link_get(link_cache, tc->tc_ifindex))) {