From 7abf3a212310f72fbe6bc05a2ecc5a98b86a5329 Mon Sep 17 00:00:00 2001 From: Anoop Saldanha Date: Wed, 6 Oct 2010 11:54:59 +0530 Subject: [PATCH] fix csum handling for tcp/dup --- src/decode-tcp.h | 10 ++++++---- src/decode-udp.h | 10 ++++++---- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/src/decode-tcp.h b/src/decode-tcp.h index 7ffdc16894..f89616a65c 100644 --- a/src/decode-tcp.h +++ b/src/decode-tcp.h @@ -182,7 +182,7 @@ static inline uint16_t TCPCalculateChecksum(uint16_t *shdr, uint16_t *pkt, uint16_t pad = 0; uint32_t csum = shdr[0]; - csum += shdr[1] + shdr[2] + shdr[3] + htons(6 + tlen); + csum += shdr[1] + shdr[2] + shdr[3] + htons(6) + htons(tlen); csum += pkt[0] + pkt[1] + pkt[2] + pkt[3] + pkt[4] + pkt[5] + pkt[6] + pkt[7] + pkt[9]; @@ -222,8 +222,9 @@ static inline uint16_t TCPCalculateChecksum(uint16_t *shdr, uint16_t *pkt, } csum = (csum >> 16) + (csum & 0x0000FFFF); + csum += (csum >> 16); - return (uint16_t) ~csum; + return (uint16_t)~csum; } /** @@ -244,7 +245,7 @@ static inline uint16_t TCPV6CalculateChecksum(uint16_t *shdr, uint16_t *pkt, csum += shdr[1] + shdr[2] + shdr[3] + shdr[4] + shdr[5] + shdr[6] + shdr[7] + shdr[8] + shdr[9] + shdr[10] + shdr[11] + shdr[12] + - shdr[13] + shdr[14] + shdr[15] + htons(6 + tlen); + shdr[13] + shdr[14] + shdr[15] + htons(6) + htons(tlen); csum += pkt[0] + pkt[1] + pkt[2] + pkt[3] + pkt[4] + pkt[5] + pkt[6] + pkt[7] + pkt[9]; @@ -284,8 +285,9 @@ static inline uint16_t TCPV6CalculateChecksum(uint16_t *shdr, uint16_t *pkt, } csum = (csum >> 16) + (csum & 0x0000FFFF); + csum += (csum >> 16); - return (uint16_t) ~csum; + return (uint16_t)~csum; } diff --git a/src/decode-udp.h b/src/decode-udp.h index 679c772ae3..b062f1b2a4 100644 --- a/src/decode-udp.h +++ b/src/decode-udp.h @@ -82,7 +82,7 @@ static inline uint16_t UDPV4CalculateChecksum(uint16_t *shdr, uint16_t *pkt, uint16_t pad = 0; uint32_t csum = shdr[0]; - csum += shdr[1] + shdr[2] + shdr[3] + htons(17 + tlen); + csum += shdr[1] + shdr[2] + shdr[3] + htons(17) + htons(tlen); csum += pkt[0] + pkt[1] + pkt[2]; @@ -121,8 +121,9 @@ static inline uint16_t UDPV4CalculateChecksum(uint16_t *shdr, uint16_t *pkt, } csum = (csum >> 16) + (csum & 0x0000FFFF); + csum += (csum >> 16); - return (uint16_t) ~csum; + return (uint16_t)~csum; } /** @@ -143,7 +144,7 @@ static inline uint16_t UDPV6CalculateChecksum(uint16_t *shdr, uint16_t *pkt, csum += shdr[1] + shdr[2] + shdr[3] + shdr[4] + shdr[5] + shdr[6] + shdr[7] + shdr[8] + shdr[9] + shdr[10] + shdr[11] + shdr[12] + - shdr[13] + shdr[14] + shdr[15] + htons(17 + tlen); + shdr[13] + shdr[14] + shdr[15] + htons(17) + htons(tlen); csum += pkt[0] + pkt[1] + pkt[2]; @@ -182,8 +183,9 @@ static inline uint16_t UDPV6CalculateChecksum(uint16_t *shdr, uint16_t *pkt, } csum = (csum >> 16) + (csum & 0x0000FFFF); + csum += (csum >> 16); - return (uint16_t) ~csum; + return (uint16_t)~csum; }