Index: ip_input.c =================================================================== RCS file: /cvs/src/sys/netinet/ip_input.c,v retrieving revision 1.385 diff -u -p -r1.385 ip_input.c --- ip_input.c 18 May 2023 09:59:43 -0000 1.385 +++ ip_input.c 5 Aug 2023 10:04:21 -0000 @@ -1529,6 +1529,12 @@ ip_forward(struct mbuf *m, struct ifnet } ip->ip_ttl -= IPTTLDEC; + { + uint32_t sum = ip->ip_sum; + sum += htons(IPTTLDEC << 8); + sum += sum >> 16; + ip->ip_sum = sum; + } /* * If forwarding packet using same interface that it came in on, Index: ip_output.c =================================================================== RCS file: /cvs/src/sys/netinet/ip_output.c,v retrieving revision 1.390 diff -u -p -r1.390 ip_output.c --- ip_output.c 7 Jul 2023 08:05:02 -0000 1.390 +++ ip_output.c 5 Aug 2023 10:04:21 -0000 @@ -1790,7 +1806,12 @@ ip_mloopback(struct ifnet *ifp, struct m void in_hdr_cksum_out(struct mbuf *m, struct ifnet *ifp) { - struct ip *ip = mtod(m, struct ip *); + struct ip *ip; + + if (ISSET(m->m_pkthdr.csum_flags, M_IPV4_CSUM_IN_OK)) + return; + + ip = mtod(m, struct ip *); ip->ip_sum = 0; if (in_ifcap_cksum(m, ifp, IFCAP_CSUM_IPv4)) {