Author: bz
Date: Mon Apr 18 12:18:27 2011
New Revision: 220773
URL: http://svn.freebsd.org/changeset/base/220773

Log:
  MFC r220743:
  
    Fix IPv6 ND.  After r219562 we in nd6_ns_input() were erroneously always
    passing the cached proxydl reference (sockaddr_dl initialized or not) to
    nd6_na_output().  nd6_na_output() will thus assume a proxy NA.  Revert to
    conditionally passing either &proxydl or NULL if no proxy case desired.
  
    Tested by:  ipv6gw and ref9-i386
    Tested by:  Pete French (petefrench ingresso.co.uk on stable)
    Reported by:        Pete French (petefrench ingresso.co.uk on stable)
    Reported by:        bz, simon on Y! cluster
    Reported by:        kib
  PR:           kern/151908
  X-Early-MFC:  yes

Modified:
  stable/8/sys/netinet6/nd6_nbr.c
Directory Properties:
  stable/8/sys/   (props changed)
  stable/8/sys/amd64/include/xen/   (props changed)
  stable/8/sys/cddl/contrib/opensolaris/   (props changed)
  stable/8/sys/contrib/dev/acpica/   (props changed)
  stable/8/sys/contrib/pf/   (props changed)

Modified: stable/8/sys/netinet6/nd6_nbr.c
==============================================================================
--- stable/8/sys/netinet6/nd6_nbr.c     Mon Apr 18 12:15:43 2011        
(r220772)
+++ stable/8/sys/netinet6/nd6_nbr.c     Mon Apr 18 12:18:27 2011        
(r220773)
@@ -339,7 +339,7 @@ nd6_ns_input(struct mbuf *m, int off, in
                nd6_na_output(ifp, &in6_all, &taddr6,
                    ((anycast || proxy || !tlladdr) ? 0 : ND_NA_FLAG_OVERRIDE) |
                    (V_ip6_forwarding ? ND_NA_FLAG_ROUTER : 0),
-                   tlladdr, (struct sockaddr *)&proxydl);
+                   tlladdr, proxy ? (struct sockaddr *)&proxydl : NULL);
                goto freeit;
        }
 
@@ -349,7 +349,7 @@ nd6_ns_input(struct mbuf *m, int off, in
        nd6_na_output(ifp, &saddr6, &taddr6,
            ((anycast || proxy || !tlladdr) ? 0 : ND_NA_FLAG_OVERRIDE) |
            (V_ip6_forwarding ? ND_NA_FLAG_ROUTER : 0) | ND_NA_FLAG_SOLICITED,
-           tlladdr, (struct sockaddr *)&proxydl);
+           tlladdr, proxy ? (struct sockaddr *)&proxydl : NULL);
  freeit:
        if (ifa != NULL)
                ifa_free(ifa);
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to