41 lines
961 B
C++
41 lines
961 B
C++
#pragma once
|
|
|
|
#include <stdint.h>
|
|
|
|
namespace ip4 {
|
|
|
|
struct header {
|
|
uint8_t version_ihl;
|
|
uint8_t type_of_service;
|
|
uint16_t total_length;
|
|
uint16_t identification;
|
|
uint16_t fragment_offset;
|
|
uint8_t time_to_live;
|
|
uint8_t protocol;
|
|
uint16_t header_checksum;
|
|
uint32_t source_address;
|
|
uint32_t destination_address;
|
|
};
|
|
|
|
static_assert((sizeof (header)) == 20);
|
|
|
|
char const * tostr(uint32_t a);
|
|
uint32_t fromstr(char const * s);
|
|
|
|
uint32_t checksum_partial(uint32_t sum, void const * src, int length);
|
|
uint32_t checksum_finish(uint32_t sum);
|
|
uint32_t checksum(void const * src, int length);
|
|
|
|
header * make_header(void * buf,
|
|
uint16_t payload_length,
|
|
uint16_t identification,
|
|
uint32_t source_address, // big endian
|
|
uint32_t destination_address); // big endian
|
|
|
|
struct protocol {
|
|
enum {
|
|
udp = 17,
|
|
};
|
|
};
|
|
}
|