svn commit: r256811 - user/ae/inet6/sys/netinet6

Andrey V. Elsukov ae at FreeBSD.org
Sun Oct 20 21:23:53 UTC 2013


Author: ae
Date: Sun Oct 20 21:23:52 2013
New Revision: 256811
URL: http://svnweb.freebsd.org/changeset/base/256811

Log:
  * Initialize sin6_scope_id using specified ifnet.
  * Don't add loopback routes for link-local addresses.

Modified:
  user/ae/inet6/sys/netinet6/in6.c

Modified: user/ae/inet6/sys/netinet6/in6.c
==============================================================================
--- user/ae/inet6/sys/netinet6/in6.c	Sun Oct 20 21:21:50 2013	(r256810)
+++ user/ae/inet6/sys/netinet6/in6.c	Sun Oct 20 21:23:52 2013	(r256811)
@@ -1684,7 +1684,11 @@ in6_ifinit(struct ifnet *ifp, struct in6
 	IF_ADDR_RUNLOCK(ifp);
 
 	ia->ia_addr = *sin6;
-
+	/*
+	 * Initialize sin6_scope_id using specified ifnet.
+	 */
+	ia->ia_addr.sin6_scope_id = in6_getscopezone(ifp,
+	    in6_addrscope(&sin6->sin6_addr));
 	if (ifacount <= 1 && ifp->if_ioctl) {
 		error = (*ifp->if_ioctl)(ifp, SIOCSIFADDR, (caddr_t)ia);
 		if (error)
@@ -1707,6 +1711,7 @@ in6_ifinit(struct ifnet *ifp, struct in6
 	if (!(ia->ia_flags & IFA_ROUTE) && plen == 128 &&
 	    ia->ia_dstaddr.sin6_family == AF_INET6) {
 		int rtflags = RTF_UP | RTF_HOST;
+		/* XXX: link-local destinations */
 		error = rtinit(&ia->ia_ifa, RTM_ADD, ia->ia_flags | rtflags);
 		if (error)
 			return (error);
@@ -1721,7 +1726,8 @@ in6_ifinit(struct ifnet *ifp, struct in6
 	/*
 	 * add a loopback route to self
 	 */
-	if (!(ia->ia_flags & IFA_RTSELF) && V_nd6_useloopback) {
+	if (!IN6_IS_ADDR_LINKLOCAL(&ia->ia_addr.sin6_addr) &&
+	    (ia->ia_flags & IFA_RTSELF) == 0 && V_nd6_useloopback) {
 		error = ifa_add_loopback_route((struct ifaddr *)ia,
 		    (struct sockaddr *)&ia->ia_addr);
 		if (error == 0)


More information about the svn-src-user mailing list