struct ifaddrmsg ifa;
} req = {{sizeof(req), RTM_GETADDR, NLM_F_REQUEST | NLM_F_DUMP,
++rtnl_seq, 0}, {AF_INET6, 0, 0, 0, ifindex}};
- if (send(rtnl_socket, &req, sizeof(req), 0) < (ssize_t)sizeof(req))
+ if (send(rtnl_socket, &req, sizeof(req), 0) < (ssize_t)sizeof(req)) {
+ syslog(LOG_WARNING, "Request failed to dump IPv6 addresses (%s)", strerror(errno));
return 0;
+ }
uint8_t buf[8192];
ssize_t len = 0, ret = 0;
if (len < 0 || !NLMSG_OK(nhm, (size_t)len)) {
if (errno == EINTR)
continue;
- else
- return ret;
+
+ syslog(LOG_WARNING, "Failed to receive IPv6 address rtnetlink message (%s)", strerror(errno));
+ return ret;
}
}
- if (nhm->nlmsg_type != RTM_NEWADDR)
+ if (nhm->nlmsg_type != RTM_NEWADDR) {
+ syslog(LOG_WARNING, "Unexpected rtnetlink message (%d) in response to IPv6 address dump", nhm->nlmsg_type);
break;
+ }
// Skip address but keep clearing socket buffer
if (ret >= (ssize_t)cnt)
else if (parse_routes(addrs, ipcnt))
adv.h.nd_ra_router_lifetime = htons(1);
- syslog(LOG_INFO, "Initial router lifetime %d, %d address(es) available",
- ntohs(adv.h.nd_ra_router_lifetime), (int)ipcnt);
+ syslog(LOG_INFO, "Initial RA router lifetime %d, %d address(es) available on %s",
+ ntohs(adv.h.nd_ra_router_lifetime), (int)ipcnt, iface->ifname);
}
// Construct Prefix Information options
char namebuf[INET6_ADDRSTRLEN];
inet_ntop(AF_INET6, addr, namebuf, sizeof(namebuf));
- syslog(LOG_INFO, "Address %s (prefix %d, valid %u) not suitable",
- namebuf, addr->prefix, addr->valid);
+ syslog(LOG_INFO, "Address %s (prefix %d, valid %u) not suitable as RA prefix on %s",
+ namebuf, addr->prefix, addr->valid, iface->ifname);
continue;
}
&& ntohs(adv.h.nd_ra_router_lifetime) < this_lifetime) {
adv.h.nd_ra_router_lifetime = htons(this_lifetime);
- syslog(LOG_DEBUG, "Updating router lifetime to %d", this_lifetime);
+ syslog(LOG_INFO, "Updating RA router lifetime to %d on %s", this_lifetime, iface->ifname);
}
odhcpd_bmemcpy(&p->nd_opt_pi_prefix, &addr->addr,