From 4cb1666fe19f71c09628615a1c4b6f822b7cd8de Mon Sep 17 00:00:00 2001 From: Thomas Graf Date: Wed, 11 May 2011 09:33:29 +0200 Subject: Provide silent variation of nl_cache_require() Use in addr and tc layer to avoid warnings being printed if no cache is available. --- include/netlink/cache.h | 1 + lib/cache_mngt.c | 21 ++++++++++++++------- lib/route/addr.c | 2 +- lib/route/tc.c | 2 +- 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))) { -- cgit v1.2.1