/* * 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; }
/* * 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; }