Commit 8e72880f authored by Phil Sutter's avatar Phil Sutter Committed by Stephen Hemminger

libnetlink: introduce nc_flags

Allow for a filter to ignore certain nlmsg_flags.
Signed-off-by: default avatarPhil Sutter <phil@nwl.cc>
parent c6995c48
...@@ -60,11 +60,16 @@ struct rtnl_dump_filter_arg ...@@ -60,11 +60,16 @@ struct rtnl_dump_filter_arg
{ {
rtnl_filter_t filter; rtnl_filter_t filter;
void *arg1; void *arg1;
__u16 nc_flags;
}; };
int rtnl_dump_filter_l(struct rtnl_handle *rth, int rtnl_dump_filter_l(struct rtnl_handle *rth,
const struct rtnl_dump_filter_arg *arg); const struct rtnl_dump_filter_arg *arg);
int rtnl_dump_filter(struct rtnl_handle *rth, rtnl_filter_t filter, void *arg); int rtnl_dump_filter_nc(struct rtnl_handle *rth,
rtnl_filter_t filter,
void *arg, __u16 nc_flags);
#define rtnl_dump_filter(rth, filter, arg) \
rtnl_dump_filter_nc(rth, filter, arg, 0)
int rtnl_talk(struct rtnl_handle *rtnl, struct nlmsghdr *n, int rtnl_talk(struct rtnl_handle *rtnl, struct nlmsghdr *n,
struct nlmsghdr *answer, size_t len) struct nlmsghdr *answer, size_t len)
__attribute__((warn_unused_result)); __attribute__((warn_unused_result));
......
...@@ -259,6 +259,8 @@ int rtnl_dump_filter_l(struct rtnl_handle *rth, ...@@ -259,6 +259,8 @@ int rtnl_dump_filter_l(struct rtnl_handle *rth,
while (NLMSG_OK(h, msglen)) { while (NLMSG_OK(h, msglen)) {
int err = 0; int err = 0;
h->nlmsg_flags &= ~a->nc_flags;
if (nladdr.nl_pid != 0 || if (nladdr.nl_pid != 0 ||
h->nlmsg_pid != rth->local.nl_pid || h->nlmsg_pid != rth->local.nl_pid ||
h->nlmsg_seq != rth->dump) h->nlmsg_seq != rth->dump)
...@@ -317,13 +319,13 @@ skip_it: ...@@ -317,13 +319,13 @@ skip_it:
} }
} }
int rtnl_dump_filter(struct rtnl_handle *rth, int rtnl_dump_filter_nc(struct rtnl_handle *rth,
rtnl_filter_t filter, rtnl_filter_t filter,
void *arg1) void *arg1, __u16 nc_flags)
{ {
const struct rtnl_dump_filter_arg a[2] = { const struct rtnl_dump_filter_arg a[2] = {
{ .filter = filter, .arg1 = arg1, }, { .filter = filter, .arg1 = arg1, .nc_flags = nc_flags, },
{ .filter = NULL, .arg1 = NULL, }, { .filter = NULL, .arg1 = NULL, .nc_flags = 0, },
}; };
return rtnl_dump_filter_l(rth, a); return rtnl_dump_filter_l(rth, a);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment