INET Framework for OMNeT++/OMNEST
inet::TcpIpChecksum Class Reference

Calculates checksum. More...

#include <TcpIpChecksum.h>

Public Member Functions

 TcpIpChecksum ()
 

Static Public Member Functions

static uint16_t checksum (const void *addr, unsigned int count)
 
static uint16_t _checksum (const void *addr, unsigned int count)
 
static uint16_t _checksum (const std::vector< uint8_t > &vec)
 
static uint16_t checksum (const std::vector< uint8_t > &vec)
 

Detailed Description

Calculates checksum.

Constructor & Destructor Documentation

◆ TcpIpChecksum()

inet::TcpIpChecksum::TcpIpChecksum ( )
inline
22 {}

Member Function Documentation

◆ _checksum() [1/2]

uint16_t inet::TcpIpChecksum::_checksum ( const std::vector< uint8_t > &  vec)
static
36 {
37  uint32_t sum = 0;
38  for (size_t i = 0; i < vec.size(); i++) {
39  sum += (i & 1) ? vec[i] : (vec[i] << 8);
40  if (sum & 0x80000000)
41  sum = (sum & 0xFFFF) + (sum >> 16);
42  }
43 
44  while (sum >> 16)
45  sum = (sum & 0xFFFF) + (sum >> 16);
46 
47  return (uint16_t)sum;
48 }

◆ _checksum() [2/2]

uint16_t inet::TcpIpChecksum::_checksum ( const void *  addr,
unsigned int  count 
)
static
14 {
15  const uint8_t *addr = static_cast<const uint8_t *>(_addr);
16  uint32_t sum = 0;
17 
18  while (count > 1) {
19  sum += (addr[0] << 8) | addr[1];
20  addr += 2;
21  if (sum & 0x80000000)
22  sum = (sum & 0xFFFF) + (sum >> 16);
23  count -= 2;
24  }
25 
26  if (count)
27  sum += addr[0] << 8;
28 
29  while (sum >> 16)
30  sum = (sum & 0xFFFF) + (sum >> 16);
31 
32  return (uint16_t)sum;
33 }

◆ checksum() [1/2]

static uint16_t inet::TcpIpChecksum::checksum ( const std::vector< uint8_t > &  vec)
inlinestatic
41 { return ~_checksum(vec); }

◆ checksum() [2/2]


The documentation for this class was generated from the following files:
inet::count
int count(const std::vector< T > &v, const Tk &a)
Definition: stlutils.h:54
inet::TcpIpChecksum::_checksum
static uint16_t _checksum(const void *addr, unsigned int count)
Definition: TcpIpChecksum.cc:13