mirror of
https://github.com/pi-hole/dnsmasq.git
synced 2025-12-19 18:28:25 +00:00
Simplify and fix RA lifetime calculation.
This commit is contained in:
15
src/dhcp6.c
15
src/dhcp6.c
@@ -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;
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
35
src/radv.c
35
src/radv.c
@@ -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;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user