- for (addr = resp; addr; addr = sd_rtnl_message_next(addr)) {
- uint16_t type;
- unsigned char family;
- union {
- struct in_addr in;
- struct in6_addr in6;
- } in_addr;
- struct iovec iov[2];
-
- r = sd_rtnl_message_get_type(addr, &type);
- if (r < 0)
- _exit(EXIT_FAILURE);
-
- if (type != RTM_NEWADDR)
- continue;
-
- r = sd_rtnl_message_addr_get_family(addr, &family);
- if (r < 0)
- _exit(EXIT_FAILURE);
-
- iov[0] = (struct iovec) { .iov_base = &family, .iov_len = sizeof(family) };
-
- switch (family) {
-
- case AF_INET:
-
- r = sd_rtnl_message_read_in_addr(addr, IFA_LOCAL, &in_addr.in);
- if (r < 0)
- _exit(EXIT_FAILURE);
-
- if (in_addr.in.s_addr == htobe32(INADDR_LOOPBACK))
- continue;
-
- iov[1] = (struct iovec) { .iov_base = &in_addr.in, .iov_len = sizeof(in_addr.in) };
- break;
-
- case AF_INET6:
-
- r = sd_rtnl_message_read_in6_addr(addr, IFA_ADDRESS, &in_addr.in6);
- if (r < 0)
- _exit(EXIT_FAILURE);
-
- if (IN6_IS_ADDR_LOOPBACK(&in_addr.in6))
- continue;
-
- iov[1] = (struct iovec) { .iov_base = &in_addr.in6, .iov_len = sizeof(in_addr.in6) };
- break;
-
- default:
- continue;
- }
+ for (a = addresses, i = 0; i < n; a++, i++) {
+ struct iovec iov[2] = {
+ { .iov_base = &a->family, .iov_len = sizeof(a->family) },
+ { .iov_base = &a->address, .iov_len = FAMILY_ADDRESS_SIZE(a->family) },
+ };