From 69d61eda016109700a680182913985302d1fb276 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 31fa1d50..818819eb 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-12-17: Simon Goldschmidt * ip.h: implemented API functions to access so_options of IP pcbs (UDP, TCP, RAW) (fixes bug #35061) diff --git a/src/core/ipv4/icmp.c b/src/core/ipv4/icmp.c index ca59acfc..af471533 100644 --- a/src/core/ipv4/icmp.c +++ b/src/core/ipv4/icmp.c @@ -189,12 +189,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 4f52811c..9d8c86d6 100644 --- a/src/include/lwip/opt.h +++ b/src/include/lwip/opt.h @@ -1854,6 +1854,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.