Hi, in_ifcap_cksum() checks ifp == NULL in_hdr_cksum_out() sets ip_sum = 0 in_proto_cksum_out() and in6_proto_cksum_out() always write th_sum if M_TCP_CSUM_OUT is set and proto is IPPROTO_TCP.
ok? bluhm Index: netinet/ip_output.c =================================================================== RCS file: /data/mirror/openbsd/cvs/src/sys/netinet/ip_output.c,v retrieving revision 1.388 diff -u -p -r1.388 ip_output.c --- netinet/ip_output.c 22 May 2023 16:08:34 -0000 1.388 +++ netinet/ip_output.c 26 May 2023 11:55:49 -0000 @@ -1801,7 +1801,7 @@ in_hdr_cksum_out(struct mbuf *m, struct struct ip *ip = mtod(m, struct ip *); ip->ip_sum = 0; - if (ifp && in_ifcap_cksum(m, ifp, IFCAP_CSUM_IPv4)) { + if (in_ifcap_cksum(m, ifp, IFCAP_CSUM_IPv4)) { SET(m->m_pkthdr.csum_flags, M_IPV4_CSUM_OUT); } else { ipstat_inc(ips_outswcsum); Index: netinet/tcp_output.c =================================================================== RCS file: /data/mirror/openbsd/cvs/src/sys/netinet/tcp_output.c,v retrieving revision 1.138 diff -u -p -r1.138 tcp_output.c --- netinet/tcp_output.c 15 May 2023 16:34:56 -0000 1.138 +++ netinet/tcp_output.c 26 May 2023 15:19:12 -0000 @@ -1295,7 +1295,6 @@ tcp_chopper(struct mbuf *m0, struct mbuf /* copy and adjust IP header, calculate checksum */ SET(m->m_pkthdr.csum_flags, M_TCP_CSUM_OUT); - mhth->th_sum = 0; if (ip) { struct ip *mhip; @@ -1328,10 +1327,8 @@ tcp_chopper(struct mbuf *m0, struct mbuf } /* adjust IP header, calculate checksum */ SET(m0->m_pkthdr.csum_flags, M_TCP_CSUM_OUT); - th->th_sum = 0; if (ip) { ip->ip_len = htons(m0->m_pkthdr.len); - ip->ip_sum = 0; in_hdr_cksum_out(m0, ifp); in_proto_cksum_out(m0, ifp); }