From owner-svn-src-user@FreeBSD.ORG Fri Oct 25 06:15:24 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 4EFF65D1; Fri, 25 Oct 2013 06:15:24 +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 3CCED2EA5; Fri, 25 Oct 2013 06:15:24 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.7/8.14.7) with ESMTP id r9P6FOha024437; Fri, 25 Oct 2013 06:15:24 GMT (envelope-from ae@svn.freebsd.org) Received: (from ae@localhost) by svn.freebsd.org (8.14.7/8.14.5/Submit) id r9P6FOV1024436; Fri, 25 Oct 2013 06:15:24 GMT (envelope-from ae@svn.freebsd.org) Message-Id: <201310250615.r9P6FOV1024436@svn.freebsd.org> From: "Andrey V. Elsukov" Date: Fri, 25 Oct 2013 06:15:24 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org Subject: svn commit: r257104 - 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: Fri, 25 Oct 2013 06:15:24 -0000 Author: ae Date: Fri Oct 25 06:15:23 2013 New Revision: 257104 URL: http://svnweb.freebsd.org/changeset/base/257104 Log: Don't do route lookup 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 Fri Oct 25 06:11:12 2013 (r257103) +++ user/ae/inet6/sys/netinet6/in6.c Fri Oct 25 06:15:23 2013 (r257104) @@ -2381,16 +2381,17 @@ in6_lltable_prefix_free(struct lltable * } static int -in6_lltable_rtcheck(struct ifnet *ifp, - u_int flags, - const struct sockaddr *l3addr) +in6_lltable_rtcheck(struct ifnet *ifp, u_int flags, + const struct sockaddr_in6 *l3addr) { struct rtentry *rt; char ip6buf[INET6_ADDRSTRLEN]; - KASSERT(l3addr->sa_family == AF_INET6, - ("sin_family %d", l3addr->sa_family)); + KASSERT(l3addr->sin6_family == AF_INET6, + ("sin_family %d", l3addr->sin6_family)); + if (IN6_IS_ADDR_LINKLOCAL(&l3addr->sin6_addr)) + return (0); /* Our local addresses are always only installed on the default FIB. */ /* XXX rtalloc1 should take a const param */ rt = in6_rtalloc1(__DECONST(struct sockaddr *, l3addr), 0, 0, @@ -2410,7 +2411,7 @@ in6_lltable_rtcheck(struct ifnet *ifp, return 0; } log(LOG_INFO, "IPv6 address: \"%s\" is not on the network\n", - ip6_sprintf(ip6buf, &((const struct sockaddr_in6 *)l3addr)->sin6_addr)); + ip6_sprintf(ip6buf, &l3addr->sin6_addr)); if (rt != NULL) RTFREE_LOCKED(rt); return EINVAL; @@ -2453,7 +2454,7 @@ in6_lltable_lookup(struct lltable *llt, * verify this. */ if (!(flags & LLE_IFADDR) && - in6_lltable_rtcheck(ifp, flags, l3addr) != 0) + in6_lltable_rtcheck(ifp, flags, sin6) != 0) return NULL; lle = in6_lltable_new(l3addr, flags);