nd6: add nd6_clear_destination_cache() function

The new function, while currently not used internally, allows external
code to clear the ND destination cache in the case that it may have
become inconsistent with the current situation, for example as the
result of a change of locally assigned addresses, or a change in
routing tables implemented through the LWIP_HOOK_ND6_GET_GW hook.
diff --git a/src/core/ipv6/nd6.c b/src/core/ipv6/nd6.c
index 72a2523..37b91db 100644
--- a/src/core/ipv6/nd6.c
+++ b/src/core/ipv6/nd6.c
@@ -1294,6 +1294,22 @@
 }
 
 /**
+ * Clear the destination cache.
+ *
+ * This operation may be necessary for consistency in the light of changing
+ * local addresses and/or use of the gateway hook.
+ */
+void
+nd6_clear_destination_cache(void)
+{
+  s8_t i;
+
+  for (i = 0; i < LWIP_ND6_NUM_DESTINATIONS; i++) {
+    ip6_addr_set_any(&destination_cache[i].destination_addr);
+  }
+}
+
+/**
  * Determine whether an address matches an on-link prefix.
  *
  * @param ip6addr the IPv6 address to match
diff --git a/src/include/lwip/nd6.h b/src/include/lwip/nd6.h
index e4715ad..e6e2d9c 100644
--- a/src/include/lwip/nd6.h
+++ b/src/include/lwip/nd6.h
@@ -141,6 +141,7 @@
 
 void nd6_tmr(void);
 void nd6_input(struct pbuf *p, struct netif *inp);
+void nd6_clear_destination_cache(void);
 s8_t nd6_get_next_hop_entry(const ip6_addr_t *ip6addr, struct netif *netif);
 s8_t nd6_select_router(const ip6_addr_t *ip6addr, struct netif *netif);
 u16_t nd6_get_destination_mtu(const ip6_addr_t *ip6addr, struct netif *netif);