32,7 → 32,7 |
|
/** @file |
* IP header and options definitions. |
* Names according to the linux src/include/linux/ip.h header file. |
* Based on the RFC~791. |
*/ |
|
#ifndef __NET_IP_HEADER_H__ |
41,6 → 41,36 |
#include <byteorder.h> |
#include <sys/types.h> |
|
/** Returns the actual IP header length. |
* @param header The IP packet header. Input parameter. |
*/ |
#define IP_HEADER_LENGTH( header ) (( header )->header_length * 4u ) |
|
/** Returns the actual IP header length. |
* @param header The IP packet header. Input parameter. |
*/ |
#define IP_COMPUTE_HEADER_LENGTH( length ) (( uint8_t ) (( length ) / 4u )) |
|
/** Returns the actual IP packet total length. |
* @param header The IP packet header. Input parameter. |
*/ |
#define IP_TOTAL_LENGTH( header ) ntohs(( header )->total_length ) |
|
/** Returns the actual IP packet data length. |
* @param header The IP packet header. Input parameter. |
*/ |
#define IP_HEADER_DATA_LENGTH( header ) ( IP_TOTAL_LENGTH( header ) - IP_HEADER_LENGTH( header )) |
|
/** Returns the IP packet header checksum. |
* @param header The IP packet header. Input parameter. |
*/ |
#define IP_HEADER_CHECKSUM( header ) ( htons( ip_checksum(( uint8_t * )( header ), IP_HEADER_LENGTH( header )))) |
|
/** Returns the fragment offest. |
* @param length The prefixed data total length. Input parameter. |
*/ |
#define IP_COMPUTE_FRAGMENT_OFFSET( length ) (( length ) / 8 ) |
|
/** Type definition of the internet header. |
* @see ip_header |
*/ |
62,12 → 92,12 |
/** Internet Header Length is the length of the internet header in 32~bit words, and thus points to the beginning of the data. |
* Note that the minimum value for a~correct header is~5. |
*/ |
uint8_t ihl:4; |
uint8_t header_length:4; |
#else |
/** Internet Header Length is the length of the internet header in 32~bit words, and thus points to the beginning of the data. |
* Note that the minimum value for a~correct header is~5. |
*/ |
uint8_t ihl:4; |
uint8_t header_length:4; |
/** The Version field indicates the format of the internet header. |
*/ |
uint8_t version:4; |
200,14 → 230,6 |
|
/*@}*/ |
|
/* |
#define IPOPT_OPTVAL 0 |
#define IPOPT_OLEN 1 |
#define IPOPT_OFFSET 2 |
#define IPOPT_MINOFF 4 |
#define MAX_IPOPTLEN 40 |
*/ |
|
/** Type definition of the internet version 4 pseudo header. |
* @see ipv4_pseudo_header |
*/ |
227,9 → 249,10 |
/** The destination address. |
*/ |
uint32_t destination_address; |
/** Zero byte. |
/** Reserved byte. |
* Must be zero. |
*/ |
uint8_t zero; |
uint8_t reserved; |
/** This field indicates the next level protocol used in the data portion of the internet datagram. |
*/ |
uint8_t protocol; |