From: Joan Lledó <[email protected]>
- init_ifs: drop redundant manual tentative-state setup; let
netif_add_ip6_address() handle DAD state internally.
- update_if: skip multicast addresses, remove unused prefix_len
hardcoding and trailing dead code.
- inquire_device: memset the addr6 output buffer, only copy addresses
whose state is valid, and set prefix_len based on whether the
address is static (64) or autoconf (128) instead of always 64.
---
lwip/lwip-util.c | 40 +++++++++++++++++-----------------------
1 file changed, 17 insertions(+), 23 deletions(-)
diff --git a/lwip/lwip-util.c b/lwip/lwip-util.c
index 35f38694..d6c3f41e 100644
--- a/lwip/lwip-util.c
+++ b/lwip/lwip-util.c
@@ -218,11 +218,7 @@ init_ifs (void *arg)
{
netif_add_ip6_address (netif, address6, &ipv6_addr_idx);
- if (ipv6_addr_idx >= 0)
- /* First use DAD to make sure nobody else has it */
- netif_ip6_addr_set_state (netif, ipv6_addr_idx,
- IP6_ADDR_TENTATIVE);
- else
+ if (ipv6_addr_idx < 0)
error (0, 0, "No free slot for IPv6 address: %s\n",
ip6addr_ntoa (address6));
}
@@ -271,8 +267,8 @@ update_if (void *arg)
if (args->addr6)
for (i = 0; i < LWIP_IPV6_NUM_ADDRESSES; i++)
{
- ip6_addr_t *laddr6 = ((ip6_addr_t *) args->addr6 + i);
- if (!ip6_addr_isany (laddr6))
+ ip6_addr_t *laddr6 = args->addr6 + i;
+ if (!ip6_addr_isany (laddr6) && !ip6_addr_ismulticast (laddr6))
{
netif_ip6_addr_set (args->netif, i, laddr6);
@@ -281,13 +277,7 @@ update_if (void *arg)
}
}
- if (args->addr6_prefix_len)
- for (i = 0; i < LWIP_IPV6_NUM_ADDRESSES; i++)
- *(args->addr6_prefix_len + i) = 64;
-
free (args);
-
- return;
}
/* Get the IP configuration of an interface */
@@ -317,17 +307,21 @@ inquire_device (struct netif *netif, ip4_addr_t * addr,
ip4_addr_t * netmask,
gateway->addr = netif_ip4_gw (netif)->addr;
if (addr6)
- for (i = 0; i < LWIP_IPV6_NUM_ADDRESSES; i++)
- {
- *(addr6 + i * 4 + 0) = netif_ip6_addr (netif, i)->addr[0];
- *(addr6 + i * 4 + 1) = netif_ip6_addr (netif, i)->addr[1];
- *(addr6 + i * 4 + 2) = netif_ip6_addr (netif, i)->addr[2];
- *(addr6 + i * 4 + 3) = netif_ip6_addr (netif, i)->addr[3];
- }
+ {
+ for (i = 0; i < LWIP_IPV6_NUM_ADDRESSES; i++)
+ {
+ if (!ip6_addr_isvalid (netif_ip6_addr_state (netif, i)))
+ {
+ memset (&addr6[i], 0, sizeof (ip6_addr_t));
+ continue;
+ }
+
+ addr6[i] = *netif_ip6_addr (netif, i);
- if (addr6_prefix_len)
- for (i = 0; i < LWIP_IPV6_NUM_ADDRESSES; i++)
- *(addr6_prefix_len + i) = 64;
+ if (addr6_prefix_len)
+ *(addr6_prefix_len + i) = 64;
+ }
+ }
}
}
--
2.50.1