Subversion Repositories HelenOS

Compare Revisions

Ignore whitespace Rev 4727 → Rev 4728

/branches/network/uspace/srv/net/il/ip/ip_header.h
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;