From ff0c3156353830540028400aa20eadc9e86fa55f Mon Sep 17 00:00:00 2001 From: Natanael Copa Date: Mon, 15 Aug 2011 16:39:57 +0200 Subject: pingu_netlink: log error responses --- pingu_netlink.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'pingu_netlink.c') diff --git a/pingu_netlink.c b/pingu_netlink.c index 709e00c..c6800d4 100644 --- a/pingu_netlink.c +++ b/pingu_netlink.c @@ -118,6 +118,17 @@ static int netlink_add_rtattr_addr_any(struct nlmsghdr *n, int maxlen, return FALSE; } +static int netlink_log_error(struct nlmsghdr *hdr) +{ + struct nlmsgerr *nlerr = (struct nlmsgerr*)NLMSG_DATA(hdr); + if (hdr->nlmsg_len < NLMSG_LENGTH(sizeof(struct nlmsgerr))) { + log_error("Netlink error message truncated"); + } else { + log_error("Netlink error: %s", strerror(-nlerr->error)); + } + return FALSE; +} + static int netlink_receive(struct netlink_fd *fd, struct nlmsghdr *reply) { struct sockaddr_nl nladdr; @@ -166,6 +177,8 @@ static int netlink_receive(struct netlink_fd *fd, struct nlmsghdr *reply) } else if (h->nlmsg_type <= fd->dispatch_size && fd->dispatch[h->nlmsg_type] != NULL) { fd->dispatch[h->nlmsg_type](h); + } else if (h->nlmsg_type == NLMSG_ERROR) { + return netlink_log_error(h); } else if (h->nlmsg_type != NLMSG_DONE) { log_info("Unknown NLmsg: 0x%08x, len %d", h->nlmsg_type, h->nlmsg_len); -- cgit v1.2.3