mirror of
https://github.com/pi-hole/dnsmasq.git
synced 2025-12-19 18:28:25 +00:00
Tweak sending ICMP6 echo requests for slaac.
This commit is contained in:
19
src/slaac.c
19
src/slaac.c
@@ -108,8 +108,8 @@ time_t periodic_slaac(time_t now, struct dhcp_lease *leases)
|
|||||||
{
|
{
|
||||||
struct dhcp_context *context;
|
struct dhcp_context *context;
|
||||||
struct dhcp_lease *lease;
|
struct dhcp_lease *lease;
|
||||||
struct slaac_address *slaac;
|
struct slaac_address *slaac;
|
||||||
time_t next_event = 0;
|
time_t next_event = 0;
|
||||||
|
|
||||||
for (context = daemon->ra_contexts; context; context = context->next)
|
for (context = daemon->ra_contexts; context; context = context->next)
|
||||||
if ((context->flags & CONTEXT_RA_NAME))
|
if ((context->flags & CONTEXT_RA_NAME))
|
||||||
@@ -139,7 +139,6 @@ time_t periodic_slaac(time_t now, struct dhcp_lease *leases)
|
|||||||
{
|
{
|
||||||
struct ping_packet *ping;
|
struct ping_packet *ping;
|
||||||
struct sockaddr_in6 addr;
|
struct sockaddr_in6 addr;
|
||||||
int err;
|
|
||||||
|
|
||||||
save_counter(0);
|
save_counter(0);
|
||||||
ping = expand(sizeof(struct ping_packet));
|
ping = expand(sizeof(struct ping_packet));
|
||||||
@@ -156,9 +155,15 @@ time_t periodic_slaac(time_t now, struct dhcp_lease *leases)
|
|||||||
addr.sin6_port = htons(IPPROTO_ICMPV6);
|
addr.sin6_port = htons(IPPROTO_ICMPV6);
|
||||||
addr.sin6_addr = slaac->addr;
|
addr.sin6_addr = slaac->addr;
|
||||||
|
|
||||||
if (send_from(daemon->icmp6fd, 0, daemon->outpacket.iov_base, save_counter(0),
|
if (sendto(daemon->icmp6fd, daemon->outpacket.iov_base, save_counter(0), 0,
|
||||||
(union mysockaddr *)&addr, (struct all_addr *)&slaac->local,
|
(struct sockaddr *)&addr, sizeof(addr)) == -1 &&
|
||||||
lease->last_interface, &err))
|
errno == EHOSTUNREACH)
|
||||||
|
{
|
||||||
|
slaac->ping_time = 0; /* Give up */
|
||||||
|
inet_ntop(AF_INET6, &addr, daemon->addrbuff, ADDRSTRLEN);
|
||||||
|
my_syslog(MS_DHCP | LOG_INFO, "SLAAC-HOSTUNREACH %s", daemon->addrbuff);
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
slaac->ping_time += (1 << (slaac->backoff - 1)) + (rand16()/21785); /* 0 - 3 */
|
slaac->ping_time += (1 << (slaac->backoff - 1)) + (rand16()/21785); /* 0 - 3 */
|
||||||
if (slaac->backoff > 4)
|
if (slaac->backoff > 4)
|
||||||
@@ -166,8 +171,6 @@ time_t periodic_slaac(time_t now, struct dhcp_lease *leases)
|
|||||||
if (slaac->backoff < 12)
|
if (slaac->backoff < 12)
|
||||||
slaac->backoff++;
|
slaac->backoff++;
|
||||||
}
|
}
|
||||||
else if (err == EHOSTUNREACH)
|
|
||||||
slaac->ping_time = 0; /* Give up */
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (slaac->ping_time != 0 &&
|
if (slaac->ping_time != 0 &&
|
||||||
|
|||||||
Reference in New Issue
Block a user