LINUX.ORG.RU

netlink: получение адреса кокретного интерфейса


0

1

Доброго дня и с наступившим Новым Годом!
Разбираюсь с 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);
Если я корректно расшифровал ответ, то мне приходит сообщение типа NLMSG_ERROR с ошибкой 0.
Аналогичный код нормально отрабатывает при получении информации о конкретном сетевом интерфейсе.
Можете подсказать в чём можем быть проблема?
Спасибо.

★★

Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.