Author: markj
Date: Thu Jun  2 17:17:15 2016
New Revision: 301213
URL: https://svnweb.freebsd.org/changeset/base/301213

Log:
  Always start IPv6 DAD asynchronously.
  
  Otherwise we transmit the first neighbour solicitation in the context of the
  caller of nd6_dad_start(), which can easily result in lock recursion. When
  DAD is to be started after some delay, we send the first NS from the DAD
  callout handler, so just change the implementation to do this in the
  non-delayed case as well.
  
  Reviewed by:  ae, hrs
  MFC after:    2 weeks
  Differential Revision:        https://reviews.freebsd.org/D6639

Modified:
  head/sys/netinet6/nd6_nbr.c

Modified: head/sys/netinet6/nd6_nbr.c
==============================================================================
--- head/sys/netinet6/nd6_nbr.c Thu Jun  2 17:11:24 2016        (r301212)
+++ head/sys/netinet6/nd6_nbr.c Thu Jun  2 17:17:15 2016        (r301213)
@@ -1216,7 +1216,6 @@ nd6_dad_start(struct ifaddr *ifa, int de
        struct in6_ifaddr *ia = (struct in6_ifaddr *)ifa;
        struct dadq *dp;
        char ip6buf[INET6_ADDRSTRLEN];
-       int send_ns;
 
        /*
         * If we don't need DAD, don't do it.
@@ -1290,12 +1289,7 @@ nd6_dad_start(struct ifaddr *ifa, int de
        dp->dad_ns_lcount = dp->dad_loopbackprobe = 0;
        refcount_init(&dp->dad_refcnt, 1);
        nd6_dad_add(dp);
-       send_ns = 0;
-       if (delay == 0) {
-               send_ns = 1;
-               delay = (long)ND_IFINFO(ifa->ifa_ifp)->retrans * hz / 1000;
-       }
-       nd6_dad_starttimer(dp, delay, send_ns);
+       nd6_dad_starttimer(dp, delay, 0);
 }
 
 /*
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to