Доброго дня и с наступившим Новым Годом!
Разбираюсь с netlink и запнулся на получении адреса конкретного интерфеса.
struct nl_req {
struct nlmsghdr nl;
struct ifaddrmsg addr;
};
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 ifaddrmsg));
req.nl.nlmsg_type = RTM_GETADDR;
req.nl.nlmsg_flags = NLM_F_REQUEST;
if (index)
req.addr.ifa_index = index;
else
req.nl.nlmsg_flags |= NLM_F_ROOT;
req.addr.ifa_family = family;
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);
Аналогичный код нормально отрабатывает при получении информации о конкретном сетевом интерфейсе.
Можете подсказать в чём можем быть проблема?
Спасибо.