X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=src%2Fra.c;h=24c99c5ac16bbad30e4687c57f973c25c8cfc17f;hb=cf2c1eec0dcd49c0b838a97a1e21e712a83b4320;hp=c572c130ebe3bbedf62ebac3909de81ceebcf52e;hpb=3fb3c327d889a8c5e0370259c4c6360c7d3106cb;p=odhcp6c.git diff --git a/src/ra.c b/src/ra.c index c572c13..24c99c5 100644 --- a/src/ra.c +++ b/src/ra.c @@ -18,9 +18,11 @@ #include #include #include +#include #include #include +#include #include #include #include @@ -165,7 +167,8 @@ bool ra_rtnl_process(void) struct in6_addr *addr = NULL; if (NLMSG_PAYLOAD(nh, 0) < sizeof(*ifa) || ifa->ifa_index != if_index || (nh->nlmsg_type == RTM_NEWADDR && !(ifa->ifa_flags & IFA_F_DADFAILED)) || - (nh->nlmsg_type == RTM_DELADDR && !(ifa->ifa_flags & IFA_F_TENTATIVE))) + (nh->nlmsg_type == RTM_DELADDR && !(ifa->ifa_flags & IFA_F_TENTATIVE)) || + (nh->nlmsg_type != RTM_NEWADDR && nh->nlmsg_type != RTM_DELADDR)) continue; ssize_t alen = NLMSG_PAYLOAD(nh, sizeof(*ifa)); @@ -174,8 +177,13 @@ bool ra_rtnl_process(void) if (rta->rta_type == IFA_ADDRESS && RTA_PAYLOAD(rta) >= sizeof(*addr)) addr = RTA_DATA(rta); - if (addr) + if (addr) { + char ipbuf[INET6_ADDRSTRLEN]; + inet_ntop(AF_INET6, addr, ipbuf, sizeof(ipbuf)); + syslog(LOG_WARNING, "duplicate address detected: %s (code: %u:%x)", + ipbuf, (unsigned)nh->nlmsg_type, (unsigned)ifa->ifa_flags); found |= ra_deduplicate(addr, ifa->ifa_prefixlen); + } } } return found; @@ -210,6 +218,8 @@ bool ra_process(void) uint32_t router_valid = ntohs(adv->nd_ra_router_lifetime); // Parse default route + entry.target = any; + entry.length = 0; entry.router = from.sin6_addr; entry.priority = pref_to_priority(adv->nd_ra_flags_reserved); if (entry.priority < 0)