From owner-svn-src-user@FreeBSD.ORG Wed Dec 4 19:51:44 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 ESMTPS id BA3E0916; Wed, 4 Dec 2013 19:51:44 +0000 (UTC) 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 A77EC1AAE; Wed, 4 Dec 2013 19:51:44 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.7/8.14.7) with ESMTP id rB4JpiCt060108; Wed, 4 Dec 2013 19:51:44 GMT (envelope-from ae@svn.freebsd.org) Received: (from ae@localhost) by svn.freebsd.org (8.14.7/8.14.7/Submit) id rB4Jpihm060107; Wed, 4 Dec 2013 19:51:44 GMT (envelope-from ae@svn.freebsd.org) Message-Id: <201312041951.rB4Jpihm060107@svn.freebsd.org> From: "Andrey V. Elsukov" Date: Wed, 4 Dec 2013 19:51:44 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org Subject: svn commit: r258932 - user/ae/inet6/sys/netinet 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.17 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: Wed, 04 Dec 2013 19:51:44 -0000 Author: ae Date: Wed Dec 4 19:51:44 2013 New Revision: 258932 URL: http://svnweb.freebsd.org/changeset/base/258932 Log: Use zone index to determine outgoing interface in syncache_respond. Use IPV6_USEROIF flag with ip6_output when interface is known. Modified: user/ae/inet6/sys/netinet/tcp_syncache.c Modified: user/ae/inet6/sys/netinet/tcp_syncache.c ============================================================================== --- user/ae/inet6/sys/netinet/tcp_syncache.c Wed Dec 4 19:15:56 2013 (r258931) +++ user/ae/inet6/sys/netinet/tcp_syncache.c Wed Dec 4 19:51:44 2013 (r258932) @@ -77,6 +77,7 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #endif #include #include @@ -1541,10 +1542,16 @@ syncache_respond(struct syncache *sc) m->m_pkthdr.csum_data = offsetof(struct tcphdr, th_sum); #ifdef INET6 if (sc->sc_inc.inc_flags & INC_ISIPV6) { + struct ifnet *ifp; + m->m_pkthdr.csum_flags = CSUM_TCP_IPV6; th->th_sum = in6_cksum_pseudo(ip6, tlen + optlen - hlen, IPPROTO_TCP, 0); - ip6->ip6_hlim = in6_selecthlim(NULL, NULL); + if (sc->sc_inc.inc6_zoneid != 0) + ifp = in6_getlinkifnet(sc->sc_inc.inc6_zoneid); + else + ifp = NULL; + ip6->ip6_hlim = in6_selecthlim(NULL, ifp); #ifdef TCP_OFFLOAD if (ADDED_BY_TOE(sc)) { struct toedev *tod = sc->sc_tod; @@ -1554,8 +1561,8 @@ syncache_respond(struct syncache *sc) return (error); } #endif - /* XXX: scope zone id */ - error = ip6_output(m, NULL, NULL, 0, NULL, NULL, NULL); + error = ip6_output(m, NULL, NULL, ifp ? IPV6_USEROIF: 0, + NULL, &ifp, NULL); } #endif #if defined(INET6) && defined(INET)