-#define SEQ 4711
-
-static int read_reply(int fd, struct address **list, unsigned *n_list) {
- ssize_t bytes;
- struct cmsghdr *cmsg;
- struct ucred *ucred;
- struct nlmsghdr *p;
- uint8_t cred_buffer[CMSG_SPACE(sizeof(struct ucred))];
- struct {
- struct nlmsghdr hdr;
- struct ifaddrmsg ifaddrmsg;
- uint8_t payload[16*1024];
- } resp;
- struct iovec iov = {
- .iov_base = &resp,
- .iov_len = sizeof(resp),
- };
- struct msghdr msg = {
- .msg_name = NULL,
- .msg_namelen = 0,
- .msg_iov = &iov,
- .msg_iovlen = 1,
- .msg_control = cred_buffer,
- .msg_controllen = sizeof(cred_buffer),
- .msg_flags = 0,
- };
-
- assert(fd >= 0);
- assert(list);
-
- bytes = recvmsg(fd, &msg, 0);
- if (bytes < 0)
- return -errno;
+static int address_compare(const void *_a, const void *_b) {
+ const struct address *a = _a, *b = _b;