Beispiel #1
0
/*
 * Send netlink query message and read reply.
 */
static
ssize_t netlink_query(char *msgbuf)
{
	struct nlmsghdr *nlmsg;
	int sock;

	/* Create socket */
	if ((sock = socket(PF_NETLINK, SOCK_DGRAM, NETLINK_ROUTE)) < 0) {
		int e = errno;
		printf("create netlink socket: (%d: %s)", e, strerror(e));
		return -1;
	}

	/* Send request */
	nlmsg = (struct nlmsghdr *)msgbuf;
	if (send(sock, nlmsg, nlmsg->nlmsg_len, 0) < 0) {
		int e = errno;
		printf("write netlink socket: (%d: %s)", e, strerror(e));
		return -1;
	}

	/* Read response */
	ssize_t len = netlink_read_reply(sock, msgbuf, 1, getpid());

	if (len < 0) {
		int e = errno;

		printf("read netlink socket: (%d: %s)", e, strerror(e));
		return -1;
	}
	close(sock);
	return len;
}
Beispiel #2
0
/*
 * Send netlink query message and read reply.
 */
static
ssize_t netlink_query(char *msgbuf)
{
	int sock = socket(PF_NETLINK, SOCK_DGRAM, NETLINK_ROUTE);

	if (sock < 0) {
		int e = errno;

		printf("create netlink socket failure: (%d: %s)\n", e, strerror(e));
		return -1;
	}

	/* Send request */
	struct nlmsghdr *nlmsg = (struct nlmsghdr *)msgbuf;

	if (send(sock, nlmsg, nlmsg->nlmsg_len, 0) < 0) {
		int e = errno;

		printf("write netlink socket failure: (%d: %s)\n", e, strerror(e));
		return -1;
	}

	/* Read response */
	errno = 0;	/* in case failure does not set it */
	ssize_t len = netlink_read_reply(sock, msgbuf, 1, getpid());

	if (len < 0) {
		int e = errno;

		printf("read netlink socket failure: (%d: %s)\n", e, strerror(e));
		return -1;
	}
	close(sock);
	return len;
}