35 const unsigned int len_udp,
36 const std::uint8_t *src_addr,
37 const std::uint8_t *dest_addr)
39 std::uint32_t sum = 0;
43 for (
unsigned int i = 0; i < len_udp; i += 2)
45 std::uint16_t word16 =
static_cast<uint16_t
>(((buf[i] << 8) & 0xFF00) + ((i + 1 < len_udp) ? (buf[i + 1] & 0xFF) : 0));
50 for (
unsigned int i = 0; i < 4; i += 2)
52 std::uint16_t word16 =
static_cast<uint16_t
>(((src_addr[i] << 8) & 0xFF00) + (src_addr[i + 1] & 0xFF));
55 for (
unsigned int i = 0; i < 4; i += 2)
57 std::uint16_t word16 =
static_cast<uint16_t
>(((dest_addr[i] << 8) & 0xFF00) + (dest_addr[i + 1] & 0xFF));
66 sum = (sum & 0xFFFF) + (sum >> 16);
69 return std::uint16_t(~sum);