mirror of
https://github.com/espressif/esp-lwip.git
synced 2026-06-05 21:04:45 +00:00
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
This commit is contained in:
+4
-4
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user