tcp checksum big endian fix

This commit is contained in:
bolvan 2016-03-30 16:43:06 +03:00
parent f28b87331a
commit 873be59496
3 changed files with 15 additions and 3 deletions

View File

@ -57,3 +57,7 @@ tpws : added split-pos option. split every message at specified position
v11 v11
ipset : scripts optimizations ipset : scripts optimizations
v12
nfqws : fix wrong tcp checksum calculation if packet length is odd and platform is big-endian

View File

@ -125,8 +125,12 @@ uint16_t tcp_checksum(const void *buff, int len, in_addr_t src_addr, in_addr_t d
len -= 2; len -= 2;
} }
if ( len & 1 ) if ( len & 1 )
{
// Add the padding if the packet lenght is odd // Add the padding if the packet lenght is odd
sum += *((uint8_t *)buf); uint16_t v=0;
*(uint8_t *)&v = *((uint8_t *)buf);
sum += v;
}
// Add the pseudo-header // Add the pseudo-header
sum += *(ip_src++); sum += *(ip_src++);
@ -165,8 +169,12 @@ uint16_t tcp6_checksum(const void *buff, int len, const struct in6_addr *src_add
len -= 2; len -= 2;
} }
if ( len & 1 ) if ( len & 1 )
{
// Add the padding if the packet lenght is odd // Add the padding if the packet lenght is odd
sum += *((uint8_t *)buf); uint16_t v=0;
*(uint8_t *)&v = *((uint8_t *)buf);
sum += v;
}
// Add the pseudo-header // Add the pseudo-header
sum += *(ip_src++); sum += *(ip_src++);

View File

@ -1,4 +1,4 @@
zapret v.11 zapret v.12
Для чего это надо Для чего это надо
----------------- -----------------