From owner-svn-src-all@FreeBSD.ORG Fri Sep 7 09:45:09 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 2ADBF106564A; Fri, 7 Sep 2012 09:45:09 +0000 (UTC) (envelope-from bz@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 13CB08FC12; Fri, 7 Sep 2012 09:45:09 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q879j8TC076082; Fri, 7 Sep 2012 09:45:08 GMT (envelope-from bz@svn.freebsd.org) Received: (from bz@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q879j8EY076079; Fri, 7 Sep 2012 09:45:08 GMT (envelope-from bz@svn.freebsd.org) Message-Id: <201209070945.q879j8EY076079@svn.freebsd.org> From: "Bjoern A. Zeeb" Date: Fri, 7 Sep 2012 09:45:08 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-releng@freebsd.org X-SVN-Group: releng MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r240194 - releng/9.1/sys/netinet6 X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 07 Sep 2012 09:45:09 -0000 Author: bz Date: Fri Sep 7 09:45:08 2012 New Revision: 240194 URL: http://svn.freebsd.org/changeset/base/240194 Log: MFC r238935,238960: Properly apply #ifdef INET and leave a comment that we are (will) apply delayed IPv6 checksum processing in ip6_output.c when doing IPsec. In case of IPsec he have to do delayed checksum calculations before adding any extension header, or rather before calling into IPsec processing as we may send the packet and not return to IPv6 output processing here. PR: kern/170116 Approved by: re (kib) Modified: releng/9.1/sys/netinet6/ip6_ipsec.c releng/9.1/sys/netinet6/ip6_output.c Directory Properties: releng/9.1/sys/ (props changed) Modified: releng/9.1/sys/netinet6/ip6_ipsec.c ============================================================================== --- releng/9.1/sys/netinet6/ip6_ipsec.c Fri Sep 7 09:22:11 2012 (r240193) +++ releng/9.1/sys/netinet6/ip6_ipsec.c Fri Sep 7 09:45:08 2012 (r240194) @@ -291,16 +291,16 @@ ip6_ipsec_output(struct mbuf **m, struct /* * Do delayed checksums now because we send before * this is done in the normal processing path. - * XXX-BZ CSUM_DELAY_DATA_IPV6? + * For IPv6 we do delayed checksums in ip6_output.c. */ +#ifdef INET if ((*m)->m_pkthdr.csum_flags & CSUM_DELAY_DATA) { ipseclog((LOG_DEBUG, "%s: we do not support IPv4 over IPv6", __func__)); -#ifdef INET in_delayed_cksum(*m); -#endif (*m)->m_pkthdr.csum_flags &= ~CSUM_DELAY_DATA; } +#endif /* * Preserve KAME behaviour: ENOENT can be returned Modified: releng/9.1/sys/netinet6/ip6_output.c ============================================================================== --- releng/9.1/sys/netinet6/ip6_output.c Fri Sep 7 09:22:11 2012 (r240193) +++ releng/9.1/sys/netinet6/ip6_output.c Fri Sep 7 09:45:08 2012 (r240194) @@ -304,6 +304,20 @@ ip6_output(struct mbuf *m0, struct ip6_p goto freehdrs; case -1: /* Do IPSec */ needipsec = 1; + /* + * Do delayed checksums now, as we may send before returning. + */ + if (m->m_pkthdr.csum_flags & CSUM_DELAY_DATA_IPV6) { + plen = m->m_pkthdr.len - sizeof(*ip6); + in6_delayed_cksum(m, plen, sizeof(struct ip6_hdr)); + m->m_pkthdr.csum_flags &= ~CSUM_DELAY_DATA_IPV6; + } +#ifdef SCTP + if (m->m_pkthdr.csum_flags & CSUM_SCTP_IPV6) { + sctp_delayed_cksum(m, sizeof(struct ip6_hdr)); + m->m_pkthdr.csum_flags &= ~CSUM_SCTP_IPV6; + } +#endif case 0: /* No IPSec */ default: break;