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);
}