support IPv4 & IPv6 frag reassemble

This commit is contained in:
luwenpeng
2024-02-22 18:52:04 +08:00
parent 5e5ac458f2
commit 5cd0571b4d
21 changed files with 2116 additions and 95 deletions

41
src/packet/checksum.h Normal file
View File

@@ -0,0 +1,41 @@
#ifndef _CHECKSUM_H
#define _CHECKSUM_H
#ifdef __cpluscplus
extern "C"
{
#endif
#include <stdint.h>
// https://datatracker.ietf.org/doc/html/rfc1071
static inline uint16_t checksum(char *data, int len)
{
long sum = 0;
uint16_t *addr = (uint16_t *)data;
while (len > 1)
{
sum += *addr++;
len -= 2;
}
if (len > 0)
{
sum += *(unsigned char *)addr;
}
// Fold 32-bit sum to 16 bits
while (sum >> 16)
{
sum = (sum & 0xffff) + (sum >> 16);
}
return (uint16_t)(~sum);
}
#ifdef __cpluscplus
}
#endif
#endif