Пытаюсь разобраться с netlink, в частности сейчас пытаюсь получить информацию по конкретному всем интерфейсам.
Код: Выделить всё
struct nl_req {
struct nlmsghdr nl;
union {
struct ifinfomsg link;
} data;
};
struct msghdr msg;
struct sockaddr_nl kern;
struct nl_req req;
struct iovec iov;
memset(&msg, 0, sizeof(msg));
memset(&kern, 0, sizeof(kern));
memset(&req, 0, sizeof(req));
memset(&iov, 0, sizeof(iov));
kern.nl_family = AF_NETLINK;
req.nl.nlmsg_len = NLMSG_LENGTH(sizeof(struct ifinfomsg));
req.nl.nlmsg_type = RTM_GETLINK;
if (ifname != NULL && strlen(ifname)) {
req.nl.nlmsg_flags = NLM_F_REQUEST;
if (0 == (req.data.link.ifi_index = if_nametoindex(ifname))) {
close(sd);
return -1;
}
fprintf(stderr, "interface index %d\n", req.data.link.ifi_index);
} else
req.nl.nlmsg_flags = NLM_F_REQUEST | NLM_F_DUMP;
req.data.link.ifi_family = AF_UNSPEC;
req.data.link.ifi_change = 0xFFFFFFFF;
req.nl.nlmsg_seq = 1;
req.nl.nlmsg_pid = getpid();
iov.iov_base = &req;
iov.iov_len = req.nl.nlmsg_len;
msg.msg_iov = &iov;
msg.msg_iovlen = 1;
msg.msg_name = &kern;
msg.msg_namelen = sizeof(kern);
И если с получением информации проблем не возникло, использовал в качестве примера http://iijean.blogspot.com/2010/03/howto-g...erfaces-in.html , то с получением инфомации по конкретному интерфейсу проблема - складывается впечатление, что в ответе отсутствует сообщение с типом NLMSG_DONE.
Предполагаю, что проблема в не совсем корректно построеном запросе, можете подсказать в чём проблема?
Спасибо.