summaryrefslogtreecommitdiffstats
path: root/src/lib
diff options
context:
space:
mode:
authorDavid Ahern <dsa@cumulusnetworks.com>2015-10-27 22:40:48 (GMT)
committerThomas Haller <thaller@redhat.com>2015-11-19 15:48:21 (GMT)
commit18d60cb9d72f61f2070f3758bcd347bb2e3747c1 (patch)
tree56b5794a49531dc4ebaa6d1511196ba8e3b8a95d /src/lib
parent7ea15f60a726de67f02e6868a8125a59570e956d (diff)
downloadlibnl-18d60cb9d72f61f2070f3758bcd347bb2e3747c1.zip
libnl-18d60cb9d72f61f2070f3758bcd347bb2e3747c1.tar.gz
libnl-18d60cb9d72f61f2070f3758bcd347bb2e3747c1.tar.bz2
link/neigh: add flags option to link and neighbor caches
Both link and neighbor cache support specify multiple groups (nl_af_group), but the alloc_cache functions for both do not set the NL_CACHE_AF_ITER flag before populating the cache so only the first group is used by default. This patch adds an API to pass in flags to make that happen and updates the nl-neigh-list command to make use of it. http://lists.infradead.org/pipermail/libnl/2015-October/001996.html Signed-off-by: David Ahern <dsa@cumulusnetworks.com> Signed-off-by: Thomas Haller <thaller@redhat.com>
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/link.c17
-rw-r--r--src/lib/utils.c17
2 files changed, 32 insertions, 2 deletions
diff --git a/src/lib/link.c b/src/lib/link.c
index 5bce824..eb5b54b 100644
--- a/src/lib/link.c
+++ b/src/lib/link.c
@@ -31,12 +31,14 @@ struct rtnl_link *nl_cli_link_alloc(void)
return link;
}
-struct nl_cache *nl_cli_link_alloc_cache_family(struct nl_sock *sock, int family)
+struct nl_cache *nl_cli_link_alloc_cache_family_flags(struct nl_sock *sock,
+ int family,
+ unsigned int flags)
{
struct nl_cache *cache;
int err;
- if ((err = rtnl_link_alloc_cache(sock, family, &cache)) < 0)
+ if ((err = rtnl_link_alloc_cache_flags(sock, family, &cache, flags)) < 0)
nl_cli_fatal(err, "Unable to allocate link cache: %s",
nl_geterror(err));
@@ -45,11 +47,22 @@ struct nl_cache *nl_cli_link_alloc_cache_family(struct nl_sock *sock, int family
return cache;
}
+struct nl_cache *nl_cli_link_alloc_cache_family(struct nl_sock *sock, int family)
+{
+ return nl_cli_link_alloc_cache_family_flags(sock, family, 0);
+}
+
struct nl_cache *nl_cli_link_alloc_cache(struct nl_sock *sock)
{
return nl_cli_link_alloc_cache_family(sock, AF_UNSPEC);
}
+struct nl_cache *nl_cli_link_alloc_cache_flags(struct nl_sock *sock,
+ unsigned int flags)
+{
+ return nl_cli_link_alloc_cache_family_flags(sock, AF_UNSPEC, flags);
+}
+
void nl_cli_link_parse_family(struct rtnl_link *link, char *arg)
{
int family;
diff --git a/src/lib/utils.c b/src/lib/utils.c
index e5eacde..467aaed 100644
--- a/src/lib/utils.c
+++ b/src/lib/utils.c
@@ -180,6 +180,23 @@ struct nl_cache *nl_cli_alloc_cache(struct nl_sock *sock, const char *name,
return cache;
}
+struct nl_cache *nl_cli_alloc_cache_flags(struct nl_sock *sock,
+ const char *name, unsigned int flags,
+ int (*ac)(struct nl_sock *, struct nl_cache **,
+ unsigned int))
+{
+ struct nl_cache *cache;
+ int err;
+
+ if ((err = ac(sock, &cache, flags)) < 0)
+ nl_cli_fatal(err, "Unable to allocate %s cache: %s",
+ name, nl_geterror(err));
+
+ nl_cache_mngt_provide(cache);
+
+ return cache;
+}
+
void nl_cli_load_module(const char *prefix, const char *name)
{
char path[FILENAME_MAX+1];