The list of IPv6 addresses to perfom Duplicate Address Detection on is
entirely static to nd6_nbr.c incl. its state vars with the exception of
ip6_dad_pending aka. the net.inet6.ip6.dad_pending sysctl(2).

Statically initialise the list head, pull dad_init from the middle to
the file up to where the rest is and set it =1 rather than incrementing
as it is only used as early bail-out check (!dad_init).

Leave the global ip6_dad_pending and its in/decrement semantic as-is.

This should be a tad clearer and simpler;  no function change.

Feedback? Objection? OK?

diff --git a/sys/netinet6/nd6_nbr.c b/sys/netinet6/nd6_nbr.c
index 0597c8d0d9a..d8fdc5b9bd6 100644
--- a/sys/netinet6/nd6_nbr.c
+++ b/sys/netinet6/nd6_nbr.c
@@ -62,7 +62,8 @@
 #include <netinet/ip_carp.h>
 #endif
 
-TAILQ_HEAD(dadq_head, dadq);
+static TAILQ_HEAD(, dadq) dadq =
+    TAILQ_HEAD_INITIALIZER(dadq);      /* list of addresses to run DAD on */
 struct dadq {
        TAILQ_ENTRY(dadq) dad_list;
        struct ifaddr *dad_ifa;
@@ -84,6 +85,7 @@ void nd6_dad_duplicated(struct dadq *);
 
 int nd6_isneighbor(const struct ifnet *, const struct in6_addr *);
 
+static int dad_init = 0;
 static int dad_maxtry = 15;    /* max # of *tries* to transmit DAD packet */
 
 /*
@@ -1036,9 +1038,6 @@ nd6_ifptomac(struct ifnet *ifp)
        }
 }
 
-static struct dadq_head dadq;
-static int dad_init = 0;
-
 struct dadq *
 nd6_dad_find(struct ifaddr *ifa)
 {
@@ -1078,10 +1077,8 @@ nd6_dad_start(struct ifaddr *ifa)
 
        NET_ASSERT_LOCKED();
 
-       if (!dad_init) {
-               TAILQ_INIT(&dadq);
-               dad_init++;
-       }
+       if (!dad_init)
+               dad_init = 1;
 
        /*
         * If we don't need DAD, don't do it.

Reply via email to