Data type to represent an IPv4 packet header. More...
Data type to represent an IPv4 packet header.
The structure of the header is as follows:
#include <hdr.h>
Data Fields | |
| uint8_t | v_ihl |
| Version and Internet Header Length. | |
| uint8_t | ts |
| type of service of packet | |
| network_uint16_t | tl |
| total length of the datagram | |
| network_uint16_t | id |
| identification value of packet | |
| network_uint16_t | fl_fo |
| Version control flags and Fragment Offset. | |
| uint8_t | ttl |
| time to live for this packet | |
| uint8_t | protocol |
| protocol of this packet | |
| network_uint16_t | csum |
| checksum of this packet | |
| ipv4_addr_t | src |
| source address of this packet | |
| ipv4_addr_t | dst |
| destination address of this packet | |
| network_uint16_t ipv4_hdr_t::csum |
| ipv4_addr_t ipv4_hdr_t::dst |
| network_uint16_t ipv4_hdr_t::fl_fo |
Version control flags and Fragment Offset.
The flags are the 3 most significant bits, and the remaining 13 bits are the fragment offset.
This module provides helper functions to set, get, and check these fields accordingly:
| network_uint16_t ipv4_hdr_t::id |
| ipv4_addr_t ipv4_hdr_t::src |
| network_uint16_t ipv4_hdr_t::tl |
| uint8_t ipv4_hdr_t::v_ihl |
Version and Internet Header Length.
The version is encoded in the four most significant bits and the Internet Header Length in the four least significant bits (see above).
The Internet Header Length is the length of the header in 32-bit words, so it must be multiplied by 4 to get the length in bytes. The minimum value is 5 (20 bytes) and the maximum is 15 (60 bytes).
This module provides helper functions to set, get, and check these fields accordingly: