test: add imitate_tcp_packet test case (TCP over GREv0: GRE enable checksum)

This commit is contained in:
luwenpeng
2024-07-15 15:07:38 +08:00
parent d31cfd02fd
commit 07ce636f64
13 changed files with 408 additions and 150 deletions

View File

@@ -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)