From 8145bb96b3c9363bc3e7eb35641601d8296472cd Mon Sep 17 00:00:00 2001 From: David Cermak Date: Wed, 17 Apr 2024 16:22:59 +0200 Subject: [PATCH] ip_forward: Reset IP checksums only on netifs with CHECKSUM_GEN_IP This fixes regression from 61c67fc2, after which we zero-out all checksums on all interfaces if `CHECKSUM_GEN_IP` is enabled. Mentioned in https://savannah.nongnu.org/bugs/?56288#comment3 by Tom Gibson. See bug #56288 --- src/core/ipv4/ip4.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/core/ipv4/ip4.c b/src/core/ipv4/ip4.c index a28ec9ef..bda49d2b 100644 --- a/src/core/ipv4/ip4.c +++ b/src/core/ipv4/ip4.c @@ -345,7 +345,7 @@ ip4_forward(struct pbuf *p, struct ip_hdr *iphdr, struct netif *inp) } /* Take care of setting checksums to 0 for checksum offload netifs */ - if (CHECKSUM_GEN_IP || NETIF_CHECKSUM_ENABLED(inp, NETIF_CHECKSUM_GEN_IP)) { + if (!CHECKSUM_GEN_IP || NETIF_CHECKSUM_ENABLED(inp, NETIF_CHECKSUM_GEN_IP)) { IPH_CHKSUM_SET(iphdr, 0); } switch (IPH_PROTO(iphdr)) { @@ -354,21 +354,21 @@ ip4_forward(struct pbuf *p, struct ip_hdr *iphdr, struct netif *inp) case IP_PROTO_UDPLITE: #endif case IP_PROTO_UDP: - if (CHECKSUM_GEN_UDP || NETIF_CHECKSUM_ENABLED(inp, NETIF_CHECKSUM_GEN_UDP)) { + if (!CHECKSUM_GEN_UDP || NETIF_CHECKSUM_ENABLED(inp, NETIF_CHECKSUM_GEN_UDP)) { ((struct udp_hdr *)((u8_t *)iphdr + IPH_HL_BYTES(iphdr)))->chksum = 0; } break; #endif #if LWIP_TCP case IP_PROTO_TCP: - if (CHECKSUM_GEN_TCP || NETIF_CHECKSUM_ENABLED(inp, NETIF_CHECKSUM_GEN_TCP)) { + if (!CHECKSUM_GEN_TCP || NETIF_CHECKSUM_ENABLED(inp, NETIF_CHECKSUM_GEN_TCP)) { ((struct tcp_hdr *)((u8_t *)iphdr + IPH_HL_BYTES(iphdr)))->chksum = 0; } break; #endif #if LWIP_ICMP case IP_PROTO_ICMP: - if (CHECKSUM_GEN_ICMP || NETIF_CHECKSUM_ENABLED(inp, NETIF_CHECKSUM_GEN_ICMP)) { + if (!CHECKSUM_GEN_ICMP || NETIF_CHECKSUM_ENABLED(inp, NETIF_CHECKSUM_GEN_ICMP)) { ((struct icmp_hdr *)((u8_t *)iphdr + IPH_HL_BYTES(iphdr)))->chksum = 0; } break;