From 5546e46c60b758325f410cb5a8c7d78f6b3bcd97 Mon Sep 17 00:00:00 2001 From: goldsimon Date: Mon, 16 Jan 2012 09:40:15 +0100 Subject: [PATCH] Added option CHECKSUM_GEN_ICMP --- CHANGELOG | 3 +++ src/core/ipv4/icmp.c | 4 ++++ src/include/lwip/opt.h | 7 +++++++ 3 files changed, 14 insertions(+) diff --git a/CHANGELOG b/CHANGELOG index a42c5807..e41e80bf 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -6,6 +6,9 @@ HISTORY ++ New features: + 2012-01-16: Simon Goldschmidt + * opt.h, icmp.c: Added option CHECKSUM_GEN_ICMP + 2011-07-21: Simon Goldschmidt (patch by hanhui) * ip4.c, etharp.c, pbuf.h: bug #33634 ip_forward() have a faulty behaviour: Added pbuf flags to mark incoming packets as link-layer broadcast/multicast. diff --git a/src/core/ipv4/icmp.c b/src/core/ipv4/icmp.c index 32902a52..47ba8571 100644 --- a/src/core/ipv4/icmp.c +++ b/src/core/ipv4/icmp.c @@ -190,12 +190,16 @@ icmp_input(struct pbuf *p, struct netif *inp) ip_addr_copy(iphdr->src, *ip_current_dest_addr()); ip_addr_copy(iphdr->dest, *ip_current_src_addr()); ICMPH_TYPE_SET(iecho, ICMP_ER); +#if CHECKSUM_GEN_ICMP /* adjust the checksum */ if (iecho->chksum >= PP_HTONS(0xffffU - (ICMP_ECHO << 8))) { iecho->chksum += PP_HTONS(ICMP_ECHO << 8) + 1; } else { iecho->chksum += PP_HTONS(ICMP_ECHO << 8); } +#else /* CHECKSUM_GEN_ICMP */ + iecho->chksum = 0; +#endif /* CHECKSUM_GEN_ICMP */ /* Set the correct TTL and recalculate the header checksum. */ IPH_TTL_SET(iphdr, ICMP_TTL); diff --git a/src/include/lwip/opt.h b/src/include/lwip/opt.h index 420c4005..b9234d37 100644 --- a/src/include/lwip/opt.h +++ b/src/include/lwip/opt.h @@ -1802,6 +1802,13 @@ #ifndef CHECKSUM_GEN_TCP #define CHECKSUM_GEN_TCP 1 #endif + +/** + * CHECKSUM_GEN_ICMP==1: Generate checksums in software for outgoing ICMP packets. + */ +#ifndef CHECKSUM_GEN_ICMP +#define CHECKSUM_GEN_ICMP 1 +#endif /** * CHECKSUM_CHECK_IP==1: Check checksums in software for incoming IP packets.