Module Name:    src
Committed By:   roy
Date:           Thu Feb 26 12:58:37 UTC 2015

Modified Files:
        src/sys/netinet: in.c
        src/sys/netinet6: in6.c

Log Message:
Don't add local routes for the any address or p2p addresses where the address 
matches the destination.


To generate a diff of this commit:
cvs rdiff -u -r1.150 -r1.151 src/sys/netinet/in.c
cvs rdiff -u -r1.184 -r1.185 src/sys/netinet6/in6.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/netinet/in.c
diff -u src/sys/netinet/in.c:1.150 src/sys/netinet/in.c:1.151
--- src/sys/netinet/in.c:1.150	Thu Feb 26 09:54:46 2015
+++ src/sys/netinet/in.c	Thu Feb 26 12:58:36 2015
@@ -1,4 +1,4 @@
-/*	$NetBSD: in.c,v 1.150 2015/02/26 09:54:46 roy Exp $	*/
+/*	$NetBSD: in.c,v 1.151 2015/02/26 12:58:36 roy Exp $	*/
 
 /*
  * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
@@ -91,7 +91,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: in.c,v 1.150 2015/02/26 09:54:46 roy Exp $");
+__KERNEL_RCSID(0, "$NetBSD: in.c,v 1.151 2015/02/26 12:58:36 roy Exp $");
 
 #include "opt_inet.h"
 #include "opt_inet_conf.h"
@@ -606,6 +606,16 @@ in_control(struct socket *so, u_long cmd
 static void
 in_ifaddlocal(struct ifaddr *ifa)
 {
+	struct in_ifaddr *ia;
+
+	ia = (struct in_ifaddr *)ifa;
+	if (ia->ia_addr.sin_addr.s_addr == INADDR_ANY ||
+	    (ia->ia_ifp->if_flags & IFF_POINTOPOINT &&
+	    in_hosteq(ia->ia_dstaddr.sin_addr, ia->ia_addr.sin_addr)))
+	{
+		rt_newaddrmsg(RTM_NEWADDR, ifa, 0, NULL);
+		return;
+	}
 
 	rt_ifa_addlocal(ifa);
 }

Index: src/sys/netinet6/in6.c
diff -u src/sys/netinet6/in6.c:1.184 src/sys/netinet6/in6.c:1.185
--- src/sys/netinet6/in6.c:1.184	Thu Feb 26 09:54:46 2015
+++ src/sys/netinet6/in6.c	Thu Feb 26 12:58:36 2015
@@ -1,4 +1,4 @@
-/*	$NetBSD: in6.c,v 1.184 2015/02/26 09:54:46 roy Exp $	*/
+/*	$NetBSD: in6.c,v 1.185 2015/02/26 12:58:36 roy Exp $	*/
 /*	$KAME: in6.c,v 1.198 2001/07/18 09:12:38 itojun Exp $	*/
 
 /*
@@ -62,7 +62,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: in6.c,v 1.184 2015/02/26 09:54:46 roy Exp $");
+__KERNEL_RCSID(0, "$NetBSD: in6.c,v 1.185 2015/02/26 12:58:36 roy Exp $");
 
 #include "opt_inet.h"
 #include "opt_compat_netbsd.h"
@@ -155,6 +155,14 @@ void
 in6_ifaddlocal(struct ifaddr *ifa)
 {
 
+	if (IN6_ARE_ADDR_EQUAL(IFA_IN6(ifa), &in6addr_any) ||
+	    (ifa->ifa_ifp->if_flags & IFF_POINTOPOINT &&
+	    IN6_ARE_ADDR_EQUAL(IFA_IN6(ifa), IFA_DSTIN6(ifa))))
+	{
+		rt_newaddrmsg(RTM_NEWADDR, ifa, 0, NULL);
+		return;
+	}
+
 	rt_ifa_addlocal(ifa);
 }
 

Reply via email to