From owner-svn-src-user@FreeBSD.ORG Thu Oct 17 13:28:57 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 E2C745A3; Thu, 17 Oct 2013 13:28:57 +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 D182F2F7C; Thu, 17 Oct 2013 13:28:57 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.7/8.14.7) with ESMTP id r9HDSvKE098419; Thu, 17 Oct 2013 13:28:57 GMT (envelope-from ae@svn.freebsd.org) Received: (from ae@localhost) by svn.freebsd.org (8.14.7/8.14.5/Submit) id r9HDSvlK098418; Thu, 17 Oct 2013 13:28:57 GMT (envelope-from ae@svn.freebsd.org) Message-Id: <201310171328.r9HDSvlK098418@svn.freebsd.org> From: "Andrey V. Elsukov" Date: Thu, 17 Oct 2013 13:28:57 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org Subject: svn commit: r256685 - 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.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: Thu, 17 Oct 2013 13:28:58 -0000 Author: ae Date: Thu Oct 17 13:28:57 2013 New Revision: 256685 URL: http://svnweb.freebsd.org/changeset/base/256685 Log: When connection has non zero scope zone id, use its link ifnet to determine maximum mtu. Modified: user/ae/inet6/sys/netinet/tcp_subr.c Modified: user/ae/inet6/sys/netinet/tcp_subr.c ============================================================================== --- user/ae/inet6/sys/netinet/tcp_subr.c Thu Oct 17 12:58:40 2013 (r256684) +++ user/ae/inet6/sys/netinet/tcp_subr.c Thu Oct 17 13:28:57 2013 (r256685) @@ -1828,21 +1828,26 @@ tcp_maxmtu6(struct in_conninfo *inc, str KASSERT(inc != NULL, ("tcp_maxmtu6 with NULL in_conninfo pointer")); - bzero(&sro6, sizeof(sro6)); - if (!IN6_IS_ADDR_UNSPECIFIED(&inc->inc6_faddr)) { + ifp = NULL; + if (inc->inc6_zoneid != 0) { + ifp = in6_getlinkifnet(inc->inc6_zoneid); + } else if (!IN6_IS_ADDR_UNSPECIFIED(&inc->inc6_faddr)) { + bzero(&sro6, sizeof(sro6)); sro6.ro_dst.sin6_family = AF_INET6; sro6.ro_dst.sin6_len = sizeof(struct sockaddr_in6); sro6.ro_dst.sin6_addr = inc->inc6_faddr; in6_rtalloc_ign(&sro6, 0, inc->inc_fibnum); + if (sro6.ro_rt != NULL) { + ifp = sro6.ro_rt->rt_ifp; + maxmtu = sro6.ro_rt->rt_rmx.rmx_mtu; + RTFREE(sro6.ro_rt); + } } - if (sro6.ro_rt != NULL) { - ifp = sro6.ro_rt->rt_ifp; - if (sro6.ro_rt->rt_rmx.rmx_mtu == 0) - maxmtu = IN6_LINKMTU(sro6.ro_rt->rt_ifp); + if (ifp != NULL) { + if (maxmtu != 0) + maxmtu = min(maxmtu, IN6_LINKMTU(ifp)); else - maxmtu = min(sro6.ro_rt->rt_rmx.rmx_mtu, - IN6_LINKMTU(sro6.ro_rt->rt_ifp)); - + maxmtu = IN6_LINKMTU(ifp); /* Report additional interface capabilities. */ if (cap != NULL) { if (ifp->if_capenable & IFCAP_TSO6 && @@ -1850,7 +1855,6 @@ tcp_maxmtu6(struct in_conninfo *inc, str cap->ifcap |= CSUM_TSO; cap->tsomax = ifp->if_hw_tsomax; } - RTFREE(sro6.ro_rt); } return (maxmtu);