Module Name:    src
Committed By:   maxv
Date:           Wed Jul 11 05:25:46 UTC 2018

Modified Files:
        src/sys/arch/powerpc/booke/dev: pq3etsec.c
        src/sys/dist/pf/net: pf.c pf_ioctl.c
        src/sys/external/bsd/ipf/netinet: fil.c ip_fil_netbsd.c
        src/sys/net: if_loop.c
        src/sys/net/npf: npf_mbuf.c
        src/sys/netinet: in.h in_offload.c in_offload.h ip_mroute.c ip_output.c
        src/sys/netipsec: ipsec.c

Log Message:
Rename

        ip_undefer_csum  -> in_undefer_cksum
        in_delayed_cksum -> in_undefer_cksum_tcpudp

The two previous names were inconsistent and misleading.

Put the two functions into in_offload.c. Add comments to explain what
we're doing.

The same could be done for IPv6.


To generate a diff of this commit:
cvs rdiff -u -r1.34 -r1.35 src/sys/arch/powerpc/booke/dev/pq3etsec.c
cvs rdiff -u -r1.81 -r1.82 src/sys/dist/pf/net/pf.c
cvs rdiff -u -r1.52 -r1.53 src/sys/dist/pf/net/pf_ioctl.c
cvs rdiff -u -r1.23 -r1.24 src/sys/external/bsd/ipf/netinet/fil.c
cvs rdiff -u -r1.28 -r1.29 src/sys/external/bsd/ipf/netinet/ip_fil_netbsd.c
cvs rdiff -u -r1.103 -r1.104 src/sys/net/if_loop.c
cvs rdiff -u -r1.18 -r1.19 src/sys/net/npf/npf_mbuf.c
cvs rdiff -u -r1.105 -r1.106 src/sys/netinet/in.h
cvs rdiff -u -r1.7 -r1.8 src/sys/netinet/in_offload.c
cvs rdiff -u -r1.8 -r1.9 src/sys/netinet/in_offload.h
cvs rdiff -u -r1.160 -r1.161 src/sys/netinet/ip_mroute.c
cvs rdiff -u -r1.306 -r1.307 src/sys/netinet/ip_output.c
cvs rdiff -u -r1.164 -r1.165 src/sys/netipsec/ipsec.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/arch/powerpc/booke/dev/pq3etsec.c
diff -u src/sys/arch/powerpc/booke/dev/pq3etsec.c:1.34 src/sys/arch/powerpc/booke/dev/pq3etsec.c:1.35
--- src/sys/arch/powerpc/booke/dev/pq3etsec.c:1.34	Tue Jun 26 06:47:59 2018
+++ src/sys/arch/powerpc/booke/dev/pq3etsec.c	Wed Jul 11 05:25:45 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: pq3etsec.c,v 1.34 2018/06/26 06:47:59 msaitoh Exp $	*/
+/*	$NetBSD: pq3etsec.c,v 1.35 2018/07/11 05:25:45 maxv Exp $	*/
 /*-
  * Copyright (c) 2010, 2011 The NetBSD Foundation, Inc.
  * All rights reserved.
@@ -41,7 +41,7 @@
 
 #include <sys/cdefs.h>
 
-__KERNEL_RCSID(0, "$NetBSD: pq3etsec.c,v 1.34 2018/06/26 06:47:59 msaitoh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: pq3etsec.c,v 1.35 2018/07/11 05:25:45 maxv Exp $");
 
 #include <sys/param.h>
 #include <sys/cpu.h>
@@ -2087,7 +2087,7 @@ pq3etsec_tx_offload(
 		if (mn == NULL) {
 			if (csum_flags & M_CSUM_IP4) {
 #ifdef INET
-				ip_undefer_csum(m, ETHER_HDR_LEN,
+				in_undefer_cksum(m, ETHER_HDR_LEN,
 				    csum_flags & M_CSUM_IP4);
 #else
 				panic("%s: impossible M_CSUM flags %#x",

Index: src/sys/dist/pf/net/pf.c
diff -u src/sys/dist/pf/net/pf.c:1.81 src/sys/dist/pf/net/pf.c:1.82
--- src/sys/dist/pf/net/pf.c:1.81	Thu May  3 07:01:08 2018
+++ src/sys/dist/pf/net/pf.c	Wed Jul 11 05:25:46 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: pf.c,v 1.81 2018/05/03 07:01:08 maxv Exp $	*/
+/*	$NetBSD: pf.c,v 1.82 2018/07/11 05:25:46 maxv Exp $	*/
 /*	$OpenBSD: pf.c,v 1.552.2.1 2007/11/27 16:37:57 henning Exp $ */
 
 /*
@@ -37,7 +37,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: pf.c,v 1.81 2018/05/03 07:01:08 maxv Exp $");
+__KERNEL_RCSID(0, "$NetBSD: pf.c,v 1.82 2018/07/11 05:25:46 maxv Exp $");
 
 #include "pflog.h"
 
@@ -5353,7 +5353,7 @@ pf_route(struct mbuf **m, struct pf_rule
 	/* Catch routing changes wrt. hardware checksumming for TCP or UDP. */
 #ifdef __NetBSD__
 	if (m0->m_pkthdr.csum_flags & (M_CSUM_TCPv4|M_CSUM_UDPv4)) {
-		in_delayed_cksum(m0);
+		in_undefer_cksum_tcpudp(m0);
 		m0->m_pkthdr.csum_flags &= ~(M_CSUM_TCPv4|M_CSUM_UDPv4);
 	}
 #else

Index: src/sys/dist/pf/net/pf_ioctl.c
diff -u src/sys/dist/pf/net/pf_ioctl.c:1.52 src/sys/dist/pf/net/pf_ioctl.c:1.53
--- src/sys/dist/pf/net/pf_ioctl.c:1.52	Sun Oct 15 04:30:05 2017
+++ src/sys/dist/pf/net/pf_ioctl.c	Wed Jul 11 05:25:46 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: pf_ioctl.c,v 1.52 2017/10/15 04:30:05 pgoyette Exp $	*/
+/*	$NetBSD: pf_ioctl.c,v 1.53 2018/07/11 05:25:46 maxv Exp $	*/
 /*	$OpenBSD: pf_ioctl.c,v 1.182 2007/06/24 11:17:13 mcbride Exp $ */
 
 /*
@@ -37,7 +37,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: pf_ioctl.c,v 1.52 2017/10/15 04:30:05 pgoyette Exp $");
+__KERNEL_RCSID(0, "$NetBSD: pf_ioctl.c,v 1.53 2018/07/11 05:25:46 maxv Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_inet.h"
@@ -3293,7 +3293,7 @@ pfil4_wrapper(void *arg, struct mbuf **m
 	 */
 	if (dir == PFIL_OUT) {
 		if ((*mp)->m_pkthdr.csum_flags & (M_CSUM_TCPv4|M_CSUM_UDPv4)) {
-			in_delayed_cksum(*mp);
+			in_undefer_cksum_tcpudp(*mp);
 			(*mp)->m_pkthdr.csum_flags &=
 			    ~(M_CSUM_TCPv4|M_CSUM_UDPv4);
 		}

Index: src/sys/external/bsd/ipf/netinet/fil.c
diff -u src/sys/external/bsd/ipf/netinet/fil.c:1.23 src/sys/external/bsd/ipf/netinet/fil.c:1.24
--- src/sys/external/bsd/ipf/netinet/fil.c:1.23	Sun Jun  3 10:37:23 2018
+++ src/sys/external/bsd/ipf/netinet/fil.c	Wed Jul 11 05:25:46 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: fil.c,v 1.23 2018/06/03 10:37:23 maxv Exp $	*/
+/*	$NetBSD: fil.c,v 1.24 2018/07/11 05:25:46 maxv Exp $	*/
 
 /*
  * Copyright (C) 2012 by Darren Reed.
@@ -133,12 +133,15 @@ extern struct callout ipf_slowtimer_ch;
 # include <sys/timeout.h>
 extern struct timeout ipf_slowtimer_ch;
 #endif
+#if defined(__NetBSD__)
+#include <netinet/in_offload.h>
+#endif
 /* END OF INCLUDES */
 
 #if !defined(lint)
 #if defined(__NetBSD__)
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: fil.c,v 1.23 2018/06/03 10:37:23 maxv Exp $");
+__KERNEL_RCSID(0, "$NetBSD: fil.c,v 1.24 2018/07/11 05:25:46 maxv Exp $");
 #else
 static const char sccsid[] = "@(#)fil.c	1.36 6/5/96 (C) 1993-2000 Darren Reed";
 static const char rcsid[] = "@(#)Id: fil.c,v 1.1.1.2 2012/07/22 13:45:07 darrenr Exp $";
@@ -2853,7 +2856,7 @@ ipf_check(void *ctx, ip_t *ip, int hlen,
 	 * disable delayed checksums.
 	 */
 	if (m->m_pkthdr.csum_flags & CSUM_DELAY_DATA) {
-		in_delayed_cksum(m);
+		in_undefer_cksum_tcpudp(m);
 		m->m_pkthdr.csum_flags &= ~CSUM_DELAY_DATA;
 	}
 #  endif /* CSUM_DELAY_DATA */

Index: src/sys/external/bsd/ipf/netinet/ip_fil_netbsd.c
diff -u src/sys/external/bsd/ipf/netinet/ip_fil_netbsd.c:1.28 src/sys/external/bsd/ipf/netinet/ip_fil_netbsd.c:1.29
--- src/sys/external/bsd/ipf/netinet/ip_fil_netbsd.c:1.28	Thu May  3 07:13:48 2018
+++ src/sys/external/bsd/ipf/netinet/ip_fil_netbsd.c	Wed Jul 11 05:25:46 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: ip_fil_netbsd.c,v 1.28 2018/05/03 07:13:48 maxv Exp $	*/
+/*	$NetBSD: ip_fil_netbsd.c,v 1.29 2018/07/11 05:25:46 maxv Exp $	*/
 
 /*
  * Copyright (C) 2012 by Darren Reed.
@@ -8,7 +8,7 @@
 #if !defined(lint)
 #if defined(__NetBSD__)
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ip_fil_netbsd.c,v 1.28 2018/05/03 07:13:48 maxv Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ip_fil_netbsd.c,v 1.29 2018/07/11 05:25:46 maxv Exp $");
 #else
 static const char sccsid[] = "@(#)ip_fil.c	2.41 6/5/96 (C) 1993-2000 Darren Reed";
 static const char rcsid[] = "@(#)Id: ip_fil_netbsd.c,v 1.1.1.2 2012/07/22 13:45:17 darrenr Exp";
@@ -57,6 +57,9 @@ static const char rcsid[] = "@(#)Id: ip_
 #include <sys/module.h>
 #include <sys/mutex.h>
 #endif
+#if defined(__NetBSD__)
+#include <netinet/in_offload.h>
+#endif
 
 #include <net/if.h>
 #include <net/route.h>
@@ -219,7 +222,7 @@ ipf_check_wrapper(void *arg, struct mbuf
 	 */
 	if (dir == PFIL_OUT) {
 		if ((*mp)->m_pkthdr.csum_flags & (M_CSUM_TCPv4|M_CSUM_UDPv4)) {
-			in_delayed_cksum(*mp);
+			in_undefer_cksum_tcpudp(*mp);
 			(*mp)->m_pkthdr.csum_flags &=
 			    ~(M_CSUM_TCPv4|M_CSUM_UDPv4);
 		}

Index: src/sys/net/if_loop.c
diff -u src/sys/net/if_loop.c:1.103 src/sys/net/if_loop.c:1.104
--- src/sys/net/if_loop.c:1.103	Thu Jun 28 06:02:24 2018
+++ src/sys/net/if_loop.c	Wed Jul 11 05:25:45 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_loop.c,v 1.103 2018/06/28 06:02:24 ozaki-r Exp $	*/
+/*	$NetBSD: if_loop.c,v 1.104 2018/07/11 05:25:45 maxv Exp $	*/
 
 /*
  * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
@@ -65,7 +65,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_loop.c,v 1.103 2018/06/28 06:02:24 ozaki-r Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_loop.c,v 1.104 2018/07/11 05:25:45 maxv Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_inet.h"
@@ -320,7 +320,7 @@ looutput(struct ifnet *ifp, struct mbuf 
 		csum_flags = m->m_pkthdr.csum_flags;
 		KASSERT((csum_flags & ~(M_CSUM_IPv4|M_CSUM_UDPv4)) == 0);
 		if (csum_flags != 0 && IN_LOOPBACK_NEED_CHECKSUM(csum_flags)) {
-			ip_undefer_csum(m, 0, csum_flags);
+			in_undefer_cksum(m, 0, csum_flags);
 		}
 		m->m_pkthdr.csum_flags = 0;
 		pktq = ip_pktq;

Index: src/sys/net/npf/npf_mbuf.c
diff -u src/sys/net/npf/npf_mbuf.c:1.18 src/sys/net/npf/npf_mbuf.c:1.19
--- src/sys/net/npf/npf_mbuf.c:1.18	Mon Dec 26 23:05:06 2016
+++ src/sys/net/npf/npf_mbuf.c	Wed Jul 11 05:25:45 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: npf_mbuf.c,v 1.18 2016/12/26 23:05:06 christos Exp $	*/
+/*	$NetBSD: npf_mbuf.c,v 1.19 2018/07/11 05:25:45 maxv Exp $	*/
 
 /*-
  * Copyright (c) 2009-2012 The NetBSD Foundation, Inc.
@@ -38,10 +38,11 @@
 
 #ifdef _KERNEL
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: npf_mbuf.c,v 1.18 2016/12/26 23:05:06 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: npf_mbuf.c,v 1.19 2018/07/11 05:25:45 maxv Exp $");
 
 #include <sys/param.h>
 #include <sys/mbuf.h>
+#include <netinet/in_offload.h>
 #endif
 
 #include "npf_impl.h"
@@ -272,7 +273,7 @@ nbuf_cksum_barrier(nbuf_t *nbuf, int di)
 	KASSERT(m_flags_p(m, M_PKTHDR));
 
 	if (m->m_pkthdr.csum_flags & (M_CSUM_TCPv4 | M_CSUM_UDPv4)) {
-		in_delayed_cksum(m);
+		in_undefer_cksum_tcpudp(m);
 		m->m_pkthdr.csum_flags &= ~(M_CSUM_TCPv4 | M_CSUM_UDPv4);
 		return true;
 	}

Index: src/sys/netinet/in.h
diff -u src/sys/netinet/in.h:1.105 src/sys/netinet/in.h:1.106
--- src/sys/netinet/in.h:1.105	Thu Apr 19 21:21:44 2018
+++ src/sys/netinet/in.h	Wed Jul 11 05:25:45 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: in.h,v 1.105 2018/04/19 21:21:44 christos Exp $	*/
+/*	$NetBSD: in.h,v 1.106 2018/07/11 05:25:45 maxv Exp $	*/
 
 /*
  * Copyright (c) 1982, 1986, 1990, 1993
@@ -569,7 +569,6 @@ int	in_canforward(struct in_addr);
 int	cpu_in_cksum(struct mbuf *, int, int, uint32_t);
 int	in_cksum(struct mbuf *, int);
 int	in4_cksum(struct mbuf *, u_int8_t, int, int);
-void	in_delayed_cksum(struct mbuf *);
 int	in_localaddr(struct in_addr);
 void	in_socktrim(struct sockaddr_in *);
 

Index: src/sys/netinet/in_offload.c
diff -u src/sys/netinet/in_offload.c:1.7 src/sys/netinet/in_offload.c:1.8
--- src/sys/netinet/in_offload.c:1.7	Tue Apr 26 09:30:01 2016
+++ src/sys/netinet/in_offload.c	Wed Jul 11 05:25:45 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: in_offload.c,v 1.7 2016/04/26 09:30:01 ozaki-r Exp $	*/
+/*	$NetBSD: in_offload.c,v 1.8 2018/07/11 05:25:45 maxv Exp $	*/
 
 /*-
  * Copyright (c)2005, 2006 YAMAMOTO Takashi,
@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: in_offload.c,v 1.7 2016/04/26 09:30:01 ozaki-r Exp $");
+__KERNEL_RCSID(0, "$NetBSD: in_offload.c,v 1.8 2018/07/11 05:25:45 maxv Exp $");
 
 #include <sys/param.h>
 #include <sys/mbuf.h>
@@ -197,8 +197,12 @@ quit:
 	return error;
 }
 
+/*
+ * Compute now in software the IP and TCP/UDP checksums. Cancel the
+ * hardware offloading.
+ */
 void
-ip_undefer_csum(struct mbuf *m, size_t hdrlen, int csum_flags)
+in_undefer_cksum(struct mbuf *m, size_t hdrlen, int csum_flags)
 {
 	const size_t iphdrlen = M_CSUM_DATA_IPv4_IPHL(m->m_pkthdr.csum_data);
 	uint16_t csum;
@@ -252,3 +256,29 @@ ip_undefer_csum(struct mbuf *m, size_t h
 
 	m->m_pkthdr.csum_flags ^= csum_flags;
 }
+
+/*
+ * Compute now in software the TCP/UDP checksum. Cancel the hardware
+ * offloading.
+ */
+void
+in_undefer_cksum_tcpudp(struct mbuf *m)
+{
+	struct ip *ip;
+	u_int16_t csum, offset;
+
+	ip = mtod(m, struct ip *);
+	offset = ip->ip_hl << 2;
+	csum = in4_cksum(m, 0, offset, ntohs(ip->ip_len) - offset);
+	if (csum == 0 && (m->m_pkthdr.csum_flags & M_CSUM_UDPv4) != 0)
+		csum = 0xffff;
+
+	offset += M_CSUM_DATA_IPv4_OFFSET(m->m_pkthdr.csum_data);
+
+	if ((offset + sizeof(u_int16_t)) > m->m_len) {
+		/* This happens when ip options were inserted */
+		m_copyback(m, offset, sizeof(csum), (void *)&csum);
+	} else {
+		*(u_int16_t *)(mtod(m, char *) + offset) = csum;
+	}
+}

Index: src/sys/netinet/in_offload.h
diff -u src/sys/netinet/in_offload.h:1.8 src/sys/netinet/in_offload.h:1.9
--- src/sys/netinet/in_offload.h:1.8	Mon Apr 25 22:20:59 2011
+++ src/sys/netinet/in_offload.h	Wed Jul 11 05:25:45 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: in_offload.h,v 1.8 2011/04/25 22:20:59 yamt Exp $	*/
+/*	$NetBSD: in_offload.h,v 1.9 2018/07/11 05:25:45 maxv Exp $	*/
 
 /*-
  * Copyright (c)2005, 2006 YAMAMOTO Takashi,
@@ -36,7 +36,8 @@
 int tcp4_segment(struct mbuf *, int (*)(void *, struct mbuf *), void *);
 int ip_tso_output(struct ifnet *, struct mbuf *, const struct sockaddr *,
     struct rtentry *);
-void ip_undefer_csum(struct mbuf *, size_t, int);        
+void in_undefer_cksum(struct mbuf *, size_t, int);
+void in_undefer_cksum_tcpudp(struct mbuf *m);
 
 /*
  * offloading related sysctl variables.

Index: src/sys/netinet/ip_mroute.c
diff -u src/sys/netinet/ip_mroute.c:1.160 src/sys/netinet/ip_mroute.c:1.161
--- src/sys/netinet/ip_mroute.c:1.160	Thu Jun 21 10:37:50 2018
+++ src/sys/netinet/ip_mroute.c	Wed Jul 11 05:25:45 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: ip_mroute.c,v 1.160 2018/06/21 10:37:50 knakahara Exp $	*/
+/*	$NetBSD: ip_mroute.c,v 1.161 2018/07/11 05:25:45 maxv Exp $	*/
 
 /*
  * Copyright (c) 1992, 1993
@@ -93,7 +93,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ip_mroute.c,v 1.160 2018/06/21 10:37:50 knakahara Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ip_mroute.c,v 1.161 2018/07/11 05:25:45 maxv Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_inet.h"
@@ -1723,7 +1723,7 @@ encap_send(struct ip *ip, struct vif *vi
 
 	/* Take care of delayed checksums */
 	if (m->m_pkthdr.csum_flags & (M_CSUM_TCPv4|M_CSUM_UDPv4)) {
-		in_delayed_cksum(m);
+		in_undefer_cksum_tcpudp(m);
 		m->m_pkthdr.csum_flags &= ~(M_CSUM_TCPv4|M_CSUM_UDPv4);
 	}
 
@@ -2743,7 +2743,7 @@ pim_register_prepare(struct ip *ip, stru
 
 	/* Take care of delayed checksums */
 	if (m->m_pkthdr.csum_flags & (M_CSUM_TCPv4|M_CSUM_UDPv4)) {
-		in_delayed_cksum(m);
+		in_undefer_cksum_tcpudp(m);
 		m->m_pkthdr.csum_flags &= ~(M_CSUM_TCPv4|M_CSUM_UDPv4);
 	}
 

Index: src/sys/netinet/ip_output.c
diff -u src/sys/netinet/ip_output.c:1.306 src/sys/netinet/ip_output.c:1.307
--- src/sys/netinet/ip_output.c:1.306	Sat Jun  2 11:56:57 2018
+++ src/sys/netinet/ip_output.c	Wed Jul 11 05:25:45 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: ip_output.c,v 1.306 2018/06/02 11:56:57 maxv Exp $	*/
+/*	$NetBSD: ip_output.c,v 1.307 2018/07/11 05:25:45 maxv Exp $	*/
 
 /*
  * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
@@ -91,7 +91,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ip_output.c,v 1.306 2018/06/02 11:56:57 maxv Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ip_output.c,v 1.307 2018/07/11 05:25:45 maxv Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_inet.h"
@@ -707,7 +707,7 @@ sendit:
 			if (sw_csum & (M_CSUM_TCPv4|M_CSUM_UDPv4)) {
 				if (IN_NEED_CHECKSUM(ifp,
 				    sw_csum & (M_CSUM_TCPv4|M_CSUM_UDPv4))) {
-					in_delayed_cksum(m);
+					in_undefer_cksum_tcpudp(m);
 				}
 				m->m_pkthdr.csum_flags &=
 				    ~(M_CSUM_TCPv4|M_CSUM_UDPv4);
@@ -733,7 +733,7 @@ sendit:
 	if (m->m_pkthdr.csum_flags & (M_CSUM_TCPv4|M_CSUM_UDPv4)) {
 		if (IN_NEED_CHECKSUM(ifp,
 		    m->m_pkthdr.csum_flags & (M_CSUM_TCPv4|M_CSUM_UDPv4))) {
-			in_delayed_cksum(m);
+			in_undefer_cksum_tcpudp(m);
 		}
 		m->m_pkthdr.csum_flags &= ~(M_CSUM_TCPv4|M_CSUM_UDPv4);
 	}
@@ -960,31 +960,6 @@ sendorfree:
 }
 
 /*
- * Process a delayed payload checksum calculation.
- */
-void
-in_delayed_cksum(struct mbuf *m)
-{
-	struct ip *ip;
-	u_int16_t csum, offset;
-
-	ip = mtod(m, struct ip *);
-	offset = ip->ip_hl << 2;
-	csum = in4_cksum(m, 0, offset, ntohs(ip->ip_len) - offset);
-	if (csum == 0 && (m->m_pkthdr.csum_flags & M_CSUM_UDPv4) != 0)
-		csum = 0xffff;
-
-	offset += M_CSUM_DATA_IPv4_OFFSET(m->m_pkthdr.csum_data);
-
-	if ((offset + sizeof(u_int16_t)) > m->m_len) {
-		/* This happens when ip options were inserted */
-		m_copyback(m, offset, sizeof(csum), (void *)&csum);
-	} else {
-		*(u_int16_t *)(mtod(m, char *) + offset) = csum;
-	}
-}
-
-/*
  * Determine the maximum length of the options to be inserted;
  * we would far rather allocate too much space rather than too little.
  */
@@ -2157,7 +2132,7 @@ ip_mloopback(struct ifnet *ifp, struct m
 	ip = mtod(copym, struct ip *);
 
 	if (copym->m_pkthdr.csum_flags & (M_CSUM_TCPv4|M_CSUM_UDPv4)) {
-		in_delayed_cksum(copym);
+		in_undefer_cksum_tcpudp(copym);
 		copym->m_pkthdr.csum_flags &=
 		    ~(M_CSUM_TCPv4|M_CSUM_UDPv4);
 	}

Index: src/sys/netipsec/ipsec.c
diff -u src/sys/netipsec/ipsec.c:1.164 src/sys/netipsec/ipsec.c:1.165
--- src/sys/netipsec/ipsec.c:1.164	Mon May 14 17:34:26 2018
+++ src/sys/netipsec/ipsec.c	Wed Jul 11 05:25:45 2018
@@ -1,4 +1,4 @@
-/* $NetBSD: ipsec.c,v 1.164 2018/05/14 17:34:26 maxv Exp $ */
+/* $NetBSD: ipsec.c,v 1.165 2018/07/11 05:25:45 maxv Exp $ */
 /* $FreeBSD: ipsec.c,v 1.2.2.2 2003/07/01 01:38:13 sam Exp $ */
 /* $KAME: ipsec.c,v 1.103 2001/05/24 07:14:18 sakane Exp $ */
 
@@ -32,7 +32,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ipsec.c,v 1.164 2018/05/14 17:34:26 maxv Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ipsec.c,v 1.165 2018/07/11 05:25:45 maxv Exp $");
 
 /*
  * IPsec controller part.
@@ -81,6 +81,7 @@ __KERNEL_RCSID(0, "$NetBSD: ipsec.c,v 1.
 #include <netinet6/ip6_var.h>
 #endif
 #include <netinet/in_pcb.h>
+#include <netinet/in_offload.h>
 #ifdef INET6
 #include <netinet6/in6_pcb.h>
 #include <netinet/icmp6.h>
@@ -664,7 +665,7 @@ ipsec4_output(struct mbuf *m, struct inp
 	 * this is done in the normal processing path.
 	 */
 	if (m->m_pkthdr.csum_flags & (M_CSUM_TCPv4|M_CSUM_UDPv4)) {
-		in_delayed_cksum(m);
+		in_undefer_cksum_tcpudp(m);
 		m->m_pkthdr.csum_flags &= ~(M_CSUM_TCPv4|M_CSUM_UDPv4);
 	}
 

Reply via email to