Simplify and fix RA lifetime calculation.

This commit is contained in:
Simon Kelley
2012-12-21 16:23:26 +00:00
parent bad7b875eb
commit ed8b68ad06
3 changed files with 15 additions and 36 deletions

View File

@@ -488,6 +488,8 @@ static int construct_worker(struct in6_addr *local, int prefix,
(void)scope; (void)scope;
(void)flags; (void)flags;
(void)valid;
(void)preferred;
struct cparam *param = vparam; struct cparam *param = vparam;
@@ -549,19 +551,6 @@ static int construct_worker(struct in6_addr *local, int prefix,
log_context(AF_INET6, context); log_context(AF_INET6, context);
} }
if (context)
{
if (valid == -1)
context->valid = valid;
else
context->valid = valid + param->now;
if (preferred == -1)
context->preferred = preferred;
else
context->preferred = preferred + param->now;
}
} }
return 1; return 1;

View File

@@ -685,7 +685,6 @@ struct dhcp_context {
int prefix, if_index; int prefix, if_index;
time_t ra_time, ra_short_period_start; time_t ra_time, ra_short_period_start;
char *template_interface; char *template_interface;
int valid, preferred; /* times from address for constructed contexts */
#endif #endif
int flags; int flags;
struct dhcp_netid netid, *filter; struct dhcp_netid netid, *filter;

View File

@@ -331,10 +331,7 @@ static int add_prefixes(struct in6_addr *local, int prefix,
struct ra_param *param = vparam; struct ra_param *param = vparam;
(void)scope; /* warning */ (void)scope; /* warning */
(void)flags;
(void)preferred;
(void)valid;
if (if_index == param->ind) if (if_index == param->ind)
{ {
if (IN6_IS_ADDR_LINKLOCAL(local)) if (IN6_IS_ADDR_LINKLOCAL(local))
@@ -345,9 +342,7 @@ static int add_prefixes(struct in6_addr *local, int prefix,
int do_prefix = 0; int do_prefix = 0;
int do_slaac = 0; int do_slaac = 0;
int deprecate = 0; int deprecate = 0;
int found_constructed = 0;
unsigned int time = 0xffffffff; unsigned int time = 0xffffffff;
int calc_valid = 0, calc_preferred = 0;
struct dhcp_context *context; struct dhcp_context *context;
for (context = daemon->dhcp6; context; context = context->next) for (context = daemon->dhcp6; context; context = context->next)
@@ -376,17 +371,6 @@ static int add_prefixes(struct in6_addr *local, int prefix,
param->other = 1; param->other = 1;
} }
if (context->flags & CONTEXT_CONSTRUCTED)
{
found_constructed = 1;
calc_valid = context->valid;
calc_preferred = context->preferred;
if (context->valid != -1)
calc_valid -= (int)param->now;
if (context->preferred != -1)
calc_preferred -= (int)param->now;
}
/* find floor time */ /* find floor time */
if (time > context->lease_time) if (time > context->lease_time)
time = context->lease_time; time = context->lease_time;
@@ -417,10 +401,17 @@ static int add_prefixes(struct in6_addr *local, int prefix,
param->found_context = 1; param->found_context = 1;
} }
if (!found_constructed) /* configured time is ceiling */
if ((unsigned int)valid > time)
valid = time;
if ((flags & IFACE_DEPRECATED) || deprecate)
preferred = 0;
else
{ {
calc_valid = time; /* configured time is ceiling */
calc_preferred = deprecate ? 0 : time; if ((unsigned int)preferred > time)
preferred = time;
} }
if (do_prefix) if (do_prefix)
@@ -441,8 +432,8 @@ static int add_prefixes(struct in6_addr *local, int prefix,
opt->prefix_len = prefix; opt->prefix_len = prefix;
/* autonomous only if we're not doing dhcp, always set "on-link" */ /* autonomous only if we're not doing dhcp, always set "on-link" */
opt->flags = do_slaac ? 0xC0 : 0x80; opt->flags = do_slaac ? 0xC0 : 0x80;
opt->valid_lifetime = htonl(calc_valid); opt->valid_lifetime = htonl(valid);
opt->preferred_lifetime = htonl(calc_preferred); opt->preferred_lifetime = htonl(preferred);
opt->reserved = 0; opt->reserved = 0;
opt->prefix = *local; opt->prefix = *local;