From owner-svn-src-user@FreeBSD.ORG Sun Oct 20 21:23:53 2013 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 7A091AA2; Sun, 20 Oct 2013 21:23:53 +0000 (UTC) (envelope-from ae@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 6840D2128; Sun, 20 Oct 2013 21:23:53 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.7/8.14.7) with ESMTP id r9KLNrrL082862; Sun, 20 Oct 2013 21:23:53 GMT (envelope-from ae@svn.freebsd.org) Received: (from ae@localhost) by svn.freebsd.org (8.14.7/8.14.5/Submit) id r9KLNrkW082861; Sun, 20 Oct 2013 21:23:53 GMT (envelope-from ae@svn.freebsd.org) Message-Id: <201310202123.r9KLNrkW082861@svn.freebsd.org> From: "Andrey V. Elsukov" Date: Sun, 20 Oct 2013 21:23:53 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org Subject: svn commit: r256811 - user/ae/inet6/sys/netinet6 X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 20 Oct 2013 21:23:53 -0000 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)