/* ip.h */ /* EMACS_MODES: c !fill */ /* * This file contains the structure definitions for internet headers. */ #include /* Packet Data Length */ #define INETLEN 576 /* max. size of inet pkt in bytes */ typedef long in_name; /* an internet name */ struct ip { int ip_ihl : 4; /* IN header length in 32 bit words */ int ip_ver : 4; /* Header version */ char ip_tsrv; /* Type of service */ unshort ip_len; /* Total pkt length including header */ unshort ip_id; /* ID to help fragmentation */ unshort ip_foff : 13; /* Fragment offset */ unshort ip_flgs : 3; /* Flags */ char ip_time; /* Life time of packet in seconds */ char ip_prot; /* Protocol number */ unshort ip_chksum; /* Header checksum */ in_name ip_src; /* Source name */ in_name ip_dest; /* Destination name */ }; /* Constants to fill in Internet Header */ #define IPHSIZ sizeof( struct ip ) /* internet header size */ #define IP_VER 4 /* internet version */ #define IP_IHL 5 /* IN header length in longwords */ #define IP_TSRV 0 /* default type of service */ #define IP_ID 0 /* ==> kernel fills IN id */ #define IP_FLGS 0 /* no fragmentation yet */ #define IP_FOFF 0 /* no fragmentation yet */ #define IP_TIME 255 /* max. possible time to live */ #define CHKSUM 0 /* initial checksum value */ #define MININSIZ 8 /* min. size of IN data area */ /* Fragmentation buffer information */ struct frag { /* fragmentation info per connection */ int fg_size; /* max. fragment size in bytes */ caddr_t fg_buf; /* fragment buffer */ }; /* Macros to swap bytes */ #ifndef BIGINDIAN #define short_to_net(s) (swab (s)) #define long_to_net(l) (((long)(swab (*(unshort *)(&l))) << 16) | \ (swab (*(((unshort *)&l) + 1)))) #else #define short_to_net(s) (s) #define long_to_net(l) (l) #endif /* Other Internet macros - move address, etc. */ /* Return pointer to internet header of packet. Takes pointer to packet */ #define in_head(ppkt) ((struct ip *)((caddr_t)(ppkt) + lnhsiz)) /* Return pointer to start of packet data. Takes pointer to internet header */ #define in_data(pip) ((caddr_t)(pip) + ((pip)->ip_ihl << 2)) /* Return pointer to start of option string. Takes pointer to IN header */ #define in_options(pip) ((caddr_t)(pip) + (IP_IHL << 2)) /* Return length of option string in bytes. Takes pointer to IN header */ #define in_optlen(pip) (((pip)->ip_ihl - IP_IHL) << 2) #include