test: add imitate_tcp_packet test case (TCP over GREv0: GRE enable checksum)
This commit is contained in:
@@ -2,27 +2,22 @@
|
||||
|
||||
#include <arpa/inet.h>
|
||||
|
||||
uint16_t checksum(const char *data, uint16_t len)
|
||||
uint16_t checksum(const void *data, int len)
|
||||
{
|
||||
uint16_t *ptr = (uint16_t *)data;
|
||||
uint32_t sum = 0;
|
||||
const uint16_t *ip1 = (const uint16_t *)data;
|
||||
|
||||
while (len > 1)
|
||||
{
|
||||
sum += *ip1++;
|
||||
if (sum & 0x80000000)
|
||||
{
|
||||
sum = (sum & 0xFFFF) + (sum >> 16);
|
||||
}
|
||||
sum += *ptr++;
|
||||
len -= 2;
|
||||
}
|
||||
|
||||
while (sum >> 16)
|
||||
if (len == 1)
|
||||
{
|
||||
sum = (sum & 0xFFFF) + (sum >> 16);
|
||||
sum += *(uint8_t *)ptr;
|
||||
}
|
||||
|
||||
return (~sum);
|
||||
sum = (sum >> 16) + (sum & 0xFFFF);
|
||||
sum += (sum >> 16);
|
||||
return (uint16_t)~sum;
|
||||
}
|
||||
|
||||
uint16_t checksum_v4(const void *l4_hdr_ptr, uint16_t l4_total_len, uint8_t l4_proto, struct in_addr *src_addr, struct in_addr *dst_addr)
|
||||
|
||||
Reference in New Issue
Block a user