@@ -65,6 +65,9 @@ struct rtnl_dump_filter_arg
int rtnl_dump_filter_l(struct rtnl_handle *rth,
const struct rtnl_dump_filter_arg *arg);
int rtnl_dump_filter(struct rtnl_handle *rth, rtnl_filter_t filter, void *arg);
+int rtnl_talk_l(struct rtnl_handle *rtnl, struct nlmsghdr *n,
+ struct nlmsghdr *answer, size_t len, int expect_success)
+ __attribute__((warn_unused_result));
int rtnl_talk(struct rtnl_handle *rtnl, struct nlmsghdr *n,
struct nlmsghdr *answer, size_t len)
__attribute__((warn_unused_result));
@@ -417,6 +417,11 @@ int rtnl_talk(struct rtnl_handle *rtnl, struct nlmsghdr *n,
return 0;
}
+ if (rtnl->proto == NETLINK_SOCK_DIAG &&
+ (errno == ENOENT ||
+ errno == EOPNOTSUPP))
+ return -1;
+
fprintf(stderr, "RTNETLINK answers: %s\n",
strerror(-err->error));
errno = -err->error;
rtnl_dump ignors ENOENT or EOPNOTSUPP when attempting SOCK_DIAG_BY_FAMILY dumps. Do the same in rtnl_talk. Signed-off-by: Lorenzo Colitti <lorenzo@google.com> --- include/libnetlink.h | 3 +++ lib/libnetlink.c | 5 +++++ 2 files changed, 8 insertions(+)