summaryrefslogtreecommitdiffhomepage
path: root/src/router.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/router.c')
-rw-r--r--src/router.c9
1 files changed, 5 insertions, 4 deletions
diff --git a/src/router.c b/src/router.c
index 9055367..053b9e8 100644
--- a/src/router.c
+++ b/src/router.c
@@ -542,6 +542,7 @@ static uint64_t send_router_advert(struct interface *iface, const struct in6_add
/* Calculate periodic transmit */
uint32_t maxival;
int msecs = calc_adv_interval(iface, minvalid, &maxival);
+ uint16_t lifetime = calc_ra_lifetime(iface, maxival);
if (default_route) {
if (!valid_prefix) {
@@ -549,7 +550,7 @@ static uint64_t send_router_advert(struct interface *iface, const struct in6_add
"on %s thus we don't announce a default route!", iface->name);
adv.h.nd_ra_router_lifetime = 0;
} else
- adv.h.nd_ra_router_lifetime = htons(calc_ra_lifetime(iface, maxival));
+ adv.h.nd_ra_router_lifetime = htons(lifetime);
} else
adv.h.nd_ra_router_lifetime = 0;
@@ -659,7 +660,7 @@ static uint64_t send_router_advert(struct interface *iface, const struct in6_add
routes[routes_cnt].flags |= ND_RA_PREF_LOW;
else if (iface->route_preference > 0)
routes[routes_cnt].flags |= ND_RA_PREF_HIGH;
- routes[routes_cnt].lifetime = htonl(TIME_LEFT(addr->valid, now));
+ routes[routes_cnt].lifetime = htonl(lifetime);
routes[routes_cnt].addr[0] = addr->addr.in6.s6_addr32[0];
routes[routes_cnt].addr[1] = addr->addr.in6.s6_addr32[1];
routes[routes_cnt].addr[2] = 0;
@@ -668,8 +669,8 @@ static uint64_t send_router_advert(struct interface *iface, const struct in6_add
++routes_cnt;
}
- search->lifetime = htonl(maxival*10);
- dns.lifetime = search->lifetime;
+ search->lifetime = htonl(lifetime);
+ dns.lifetime = htonl(lifetime);
struct icmpv6_opt adv_interval = {
.type = ND_OPT_RTR_ADV_INTERVAL,