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); }