home *** CD-ROM | disk | FTP | other *** search
/ ARM Club 3 / TheARMClub_PDCD3.iso / hensa / network / netlib_1 / !NetLib / netinet / h / ip < prev    next >
Text File  |  1995-05-23  |  4KB  |  131 lines

  1. #ifndef __netinet_ip_h
  2. #define __netinet_ip_h
  3.  
  4. /* Freenet programmers interface - netinet/ip.h - 23/5/95 */
  5.  
  6. #include "sys/types.h"
  7. #include "netinet/in.h"
  8. #include "netinet/in_systm.h"
  9. #include "sys/byteorder.h"
  10.  
  11. /*
  12.  * Current IP version
  13.  */
  14. #define IPVERSION 4
  15.  
  16. /*
  17.  * Structure of an IP header
  18.  */
  19. struct ip {
  20.   u_int          ip_hl  : 4;  /* Header length */
  21.   u_int          ip_v   : 4;  /* Protocol version */
  22.   u_int          ip_tos : 8;  /* Type of service */
  23.   short          ip_len : 16; /* Packet length  - short not u_short */
  24.   u_short        ip_id;       /* Packet ID */
  25.   short          ip_off;      /* Fragment offset */
  26. #define IP_DF 0x4000             /* Don't fragment flag */
  27. #define IP_MF 0x2000             /* More fragments flag */
  28. #define    IP_OFFMASK 0x1fff        /* mask for fragmenting bits */
  29.   u_char         ip_ttl;      /* Time-to-live */
  30.   u_char         ip_p;        /* Protocol */
  31.   u_short        ip_sum;      /* Checksum */
  32.   struct in_addr ip_src;      /* Source address */
  33.   struct in_addr ip_dst;      /* Destination address */
  34. };
  35.  
  36. /*
  37.  * Maximum size of an IP packet
  38.  */
  39. #define    IP_MAXPACKET    65535
  40.  
  41. /*
  42.  * Definitions for IP type of service (ip_tos)
  43.  */
  44. #define    IPTOS_LOWDELAY        0x10
  45. #define    IPTOS_THROUGHPUT    0x08
  46. #define    IPTOS_RELIABILITY    0x04
  47.  
  48. /*
  49.  * Definitions for IP precedence (also in ip_tos) (hopefully unused)
  50.  */
  51. #define    IPTOS_PREC_NETCONTROL        0xe0
  52. #define    IPTOS_PREC_INTERNETCONTROL    0xc0
  53. #define    IPTOS_PREC_CRITIC_ECP        0xa0
  54. #define    IPTOS_PREC_FLASHOVERRIDE    0x80
  55. #define    IPTOS_PREC_FLASH        0x60
  56. #define    IPTOS_PREC_IMMEDIATE        0x40
  57. #define    IPTOS_PREC_PRIORITY        0x20
  58. #define    IPTOS_PREC_ROUTINE        0x10
  59.  
  60. /*
  61.  * Option codes for IP options
  62.  */
  63. #define    IPOPT_COPIED(o)        ((o)&0x80)
  64. #define    IPOPT_CLASS(o)        ((o)&0x60)
  65. #define    IPOPT_NUMBER(o)        ((o)&0x1f)
  66.  
  67. #define    IPOPT_CONTROL        0x00
  68. #define    IPOPT_RESERVED1        0x20
  69. #define    IPOPT_DEBMEAS        0x40
  70. #define    IPOPT_RESERVED2        0x60
  71.  
  72. #define    IPOPT_EOL        0        /* End of option list */
  73. #define    IPOPT_NOP        1        /* No operation */
  74. #define    IPOPT_RR        7        /* Record packet route */
  75. #define    IPOPT_TS        68        /* Timestamp */
  76. #define    IPOPT_SECURITY        130        /* Provide s,c,h,tcc */
  77. #define    IPOPT_LSRR        131        /* Loose source route */
  78. #define    IPOPT_SATID        136        /* Satnet id */
  79. #define    IPOPT_SSRR        137        /* Strict source route */
  80.  
  81. /*
  82.  * Offsets into IP options
  83.  */
  84. #define    IPOPT_OPTVAL        0        /* Option ID */
  85. #define    IPOPT_OLEN        1        /* Option length */
  86. #define    IPOPT_OFFSET        2        /* Offset within option */
  87. #define    IPOPT_MINOFF        4        /* Min value of above */
  88.  
  89. /*
  90.  * Time stamp option structure.
  91.  */
  92. struct    ip_timestamp {
  93.     u_char    ipt_code;        /* IPOPT_TS */
  94.     u_char    ipt_len;        /* size of structure (variable) */
  95.     u_char    ipt_ptr;        /* index of current entry */
  96.     u_char    ipt_flg:4,        /* flags, see below */
  97.         ipt_oflw:4;        /* overflow counter */
  98.     union ipt_timestamp {
  99.         n_long    ipt_time[1];
  100.         struct    ipt_ta {
  101.             struct in_addr ipt_addr;
  102.             n_long ipt_time;
  103.         } ipt_ta[1];
  104.     } ipt_timestamp;
  105. };
  106.  
  107. /* flag bits for ipt_flg */
  108. #define    IPOPT_TS_TSONLY        0        /* timestamps only */
  109. #define    IPOPT_TS_TSANDADDR    1        /* timestamps and addresses */
  110. #define    IPOPT_TS_PRESPEC    3        /* specified modules only */
  111.  
  112. /* bits for security (not byte swapped) */
  113. #define    IPOPT_SECUR_UNCLASS    0x0000
  114. #define    IPOPT_SECUR_CONFID    0xf135
  115. #define    IPOPT_SECUR_EFTO    0x789a
  116. #define    IPOPT_SECUR_MMMM    0xbc4d
  117. #define    IPOPT_SECUR_RESTR    0xaf13
  118. #define    IPOPT_SECUR_SECRET    0xd788
  119. #define    IPOPT_SECUR_TOPSECRET    0x6bc5
  120.  
  121. /*
  122.  * Standard values for various parameters
  123.  */
  124. #define    MAXTTL        255        /* Maximum time to live (seconds) */
  125. #define    IPDEFTTL    64        /* Default ttl, from RFC 1340 */
  126. #define    IPFRAGTTL    60        /* Time to live for frags, slowhz */
  127. #define    IPTTLDEC    1        /* Subtracted when forwarding */
  128. #define    IP_MSS        576        /* Default maximum segment size */
  129.  
  130. #endif
  131.