Module Name:    src
Committed By:   christos
Date:           Sun Sep 17 17:35:10 UTC 2017

Modified Files:
        src/sys/netinet6: in6_src.c

Log Message:
Skip the scope test for loopback addresses in non-loopback interfaces.
While this test is also done in in6_setscope, testing here allows us
to log an error for other callers.


To generate a diff of this commit:
cvs rdiff -u -r1.80 -r1.81 src/sys/netinet6/in6_src.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/netinet6/in6_src.c
diff -u src/sys/netinet6/in6_src.c:1.80 src/sys/netinet6/in6_src.c:1.81
--- src/sys/netinet6/in6_src.c:1.80	Sun Aug 27 08:34:21 2017
+++ src/sys/netinet6/in6_src.c	Sun Sep 17 13:35:10 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: in6_src.c,v 1.80 2017/08/27 12:34:21 christos Exp $	*/
+/*	$NetBSD: in6_src.c,v 1.81 2017/09/17 17:35:10 christos Exp $	*/
 /*	$KAME: in6_src.c,v 1.159 2005/10/19 01:40:32 t-momose Exp $	*/
 
 /*
@@ -66,7 +66,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: in6_src.c,v 1.80 2017/08/27 12:34:21 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: in6_src.c,v 1.81 2017/09/17 17:35:10 christos Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_inet.h"
@@ -204,6 +204,12 @@ in6_select_best_ia(struct sockaddr_in6 *
 			continue;
 		}
 		src = ia->ia_addr.sin6_addr;
+
+		/* Skip the scope test in impossible cases */
+		if (!(ifp->if_flags & IFF_LOOPBACK) &&
+		    IN6_IS_ADDR_LOOPBACK(&src))
+			continue;
+
 		if (in6_setscope(&src, ifp, &osrczone) ||
 		    in6_setscope(&src, ifp1, &srczone) ||
 		    osrczone != srczone) {
@@ -614,11 +620,11 @@ in6_selectroute(struct sockaddr_in6 *dst
 	    dstsock->sin6_addr.s6_addr32[1] == 0 &&
 	    !IN6_IS_ADDR_LOOPBACK(&dstsock->sin6_addr)) {
 		char ip6buf[INET6_ADDRSTRLEN];
-		printf("in6_selectroute: strange destination %s\n",
+		printf("%s: strange destination %s\n", __func__,
 		       IN6_PRINT(ip6buf, &dstsock->sin6_addr));
 	} else {
 		char ip6buf[INET6_ADDRSTRLEN];
-		printf("in6_selectroute: destination = %s%%%d\n",
+		printf("%s: destination = %s%%%d\n", __func__,
 		       IN6_PRINT(ip6buf, &dstsock->sin6_addr),
 		       dstsock->sin6_scope_id); /* for debug */
 	}

Reply via email to