X-Git-Url: http://git.archive.openwrt.org/?p=project%2Fodhcpd.git;a=blobdiff_plain;f=src%2Frouter.c;h=89b1c520ab13d4a104e00a65d10dd7c1cf79771d;hp=e3a9aa9747ba44c6e93d4c6ee1d6c3b3a47d7815;hb=053ca41a841aa4a1b1ce86ce6ee9f4304cba7027;hpb=01bfec4c333d906ca4d2230c804dfe361779f42f diff --git a/src/router.c b/src/router.c index e3a9aa9..89b1c52 100644 --- a/src/router.c +++ b/src/router.c @@ -321,7 +321,7 @@ static uint64_t send_router_advert(struct interface *iface, const struct in6_add } } - if (maxvalid && !iface->default_router && adv.h.nd_ra_router_lifetime) { + if (!maxvalid && !iface->default_router && adv.h.nd_ra_router_lifetime) { syslog(LOG_WARNING, "A default route is present but there is no public prefix " "on %s thus we don't announce a default route!", iface->ifname); adv.h.nd_ra_router_lifetime = 0; @@ -331,7 +331,7 @@ static uint64_t send_router_advert(struct interface *iface, const struct in6_add if (iface->dns_cnt > 0) { dns_addr = iface->dns; dns_cnt = iface->dns_cnt; - dns_time = 2 * MaxRtrAdvInterval; + dns_time = 0; } if (!dns_addr || IN6_IS_ADDR_UNSPECIFIED(dns_addr)) @@ -376,7 +376,6 @@ static uint64_t send_router_advert(struct interface *iface, const struct in6_add search->len = search_len ? ((sizeof(*search) + search_padded) / 8) : 0; search->pad = 0; search->pad2 = 0; - search->lifetime = htonl(2 * MaxRtrAdvInterval);; memcpy(search->name, search_domain, search_len); memset(&search->name[search_len], 0, search_padded - search_len); @@ -428,7 +427,7 @@ static uint64_t send_router_advert(struct interface *iface, const struct in6_add if (maxival < 4000 || maxival > MaxRtrAdvInterval * 1000) maxival = MaxRtrAdvInterval * 1000; - if (minvalid < maxival / 3) { + if (maxival > minvalid / 3) { maxival = minvalid / 3; if (maxival < 4000) @@ -437,7 +436,12 @@ static uint64_t send_router_advert(struct interface *iface, const struct in6_add minival = (maxival * 3) / 4; if (adv.h.nd_ra_router_lifetime) - adv.h.nd_ra_router_lifetime = htons(maxvalid); + adv.h.nd_ra_router_lifetime = htons(maxvalid / 1000); + + search->lifetime = htonl(maxvalid / 1000); + + if (!dns.lifetime) + dns.lifetime = search->lifetime; odhcpd_urandom(&msecs, sizeof(msecs)); msecs = (labs(msecs) % (maxival - minival)) + minival;