BSD 4_3 release
[unix-history] / usr / src / sys / netinet / ip.h
index 2e10618..17d93e4 100644 (file)
@@ -1,4 +1,10 @@
-/* ip.h 1.6 81/11/08 */
+/*
+ * Copyright (c) 1982, 1986 Regents of the University of California.
+ * All rights reserved.  The Berkeley software License Agreement
+ * specifies the terms and conditions for redistribution.
+ *
+ *     @(#)ip.h        7.1 (Berkeley) 6/5/86
+ */
 
 /*
  * Definitions for internet protocol version 4.
 
 /*
  * Definitions for internet protocol version 4.
 /*
  * Structure of an internet header, naked of options.
  *
 /*
  * Structure of an internet header, naked of options.
  *
- * SHOULD MAKE A VERSION OF THIS FOR KERNEL SO USER
- * VERSION CAN BE union FREE AND INITIALIZABLE.
+ * We declare ip_len and ip_off to be short, rather than u_short
+ * pragmatically since otherwise unsigned comparisons can result
+ * against negative integers quite easily, and fail in subtle ways.
  */
 struct ip {
  */
 struct ip {
+#ifdef vax
        u_char  ip_hl:4,                /* header length */
                ip_v:4;                 /* version */
        u_char  ip_hl:4,                /* header length */
                ip_v:4;                 /* version */
+#endif
        u_char  ip_tos;                 /* type of service */
        u_char  ip_tos;                 /* type of service */
-/* we copy the IP_MF to ip_tos on input */
-#define        ip_mff  ip_tos                  /* more fragments flag */
-/* by rights, ip_len should be a u_short, but this makes operations */
-/* on it very dangerous as comparisons become unsigned and comparing */
-/* against negative numbers then fails... we don't expect any > 32767 */
-/* byte packets, so pragmatically delcare it to be a short */
        short   ip_len;                 /* total length */
        u_short ip_id;                  /* identification */
        short   ip_len;                 /* total length */
        u_short ip_id;                  /* identification */
-/* ip_off should also, by rights, be u_short, ala ip_len */
        short   ip_off;                 /* fragment offset field */
 #define        IP_DF 0x4000                    /* dont fragment flag */
 #define        IP_MF 0x2000                    /* more fragments flag */
        u_char  ip_ttl;                 /* time to live */
        u_char  ip_p;                   /* protocol */
        u_short ip_sum;                 /* checksum */
        short   ip_off;                 /* fragment offset field */
 #define        IP_DF 0x4000                    /* dont fragment flag */
 #define        IP_MF 0x2000                    /* more fragments flag */
        u_char  ip_ttl;                 /* time to live */
        u_char  ip_p;                   /* protocol */
        u_short ip_sum;                 /* checksum */
-       union {
-               struct ip_addr ip_s;    /* source address */
-               struct ip *ip_nxt;      /* next fragment */
-       } I_sun;
-#define        ip_src  I_sun.ip_s
-#define        ip_next I_sun.ip_nxt
-       union {
-               struct ip_addr ip_d;    /* destination address */
-               struct ip *ip_prv;      /* prev fragment */
-       } I_dun;
-#define        ip_dst  I_dun.ip_d
-#define        ip_prev I_dun.ip_prv
+       struct  in_addr ip_src,ip_dst;  /* source and dest address */
 };
 
 /*
  * Definitions for options.
  */
 #define        IPOPT_COPIED(o)         ((o)&0x80)
 };
 
 /*
  * Definitions for options.
  */
 #define        IPOPT_COPIED(o)         ((o)&0x80)
-#define        IPOPT_CLASS(o)          ((o)&0x40)
-#define        IPOPT_NUMBER(o)         ((o)&0x3f)
+#define        IPOPT_CLASS(o)          ((o)&0x60)
+#define        IPOPT_NUMBER(o)         ((o)&0x1f)
 
 #define        IPOPT_CONTROL           0x00
 
 #define        IPOPT_CONTROL           0x00
-#define        IPOPT_RESERVED1         0x10
-#define        IPOPT_DEBMEAS           0x20
-#define        IPOPT_RESERVED2         0x30
+#define        IPOPT_RESERVED1         0x20
+#define        IPOPT_DEBMEAS           0x40
+#define        IPOPT_RESERVED2         0x60
 
 #define        IPOPT_EOL               0               /* end of option list */
 #define        IPOPT_NOP               1               /* no operation */
 
 #define        IPOPT_EOL               0               /* end of option list */
 #define        IPOPT_NOP               1               /* no operation */
@@ -67,6 +58,14 @@ struct ip {
 #define        IPOPT_SATID             136             /* satnet id */
 #define        IPOPT_SSRR              137             /* strict source route */
 
 #define        IPOPT_SATID             136             /* satnet id */
 #define        IPOPT_SSRR              137             /* strict source route */
 
+/*
+ * Offsets to fields in options other than EOL and NOP.
+ */
+#define        IPOPT_OPTVAL            0               /* option ID */
+#define        IPOPT_OLEN              1               /* option length */
+#define IPOPT_OFFSET           2               /* offset within option */
+#define        IPOPT_MINOFF            4               /* min value of above */
+
 /*
  * Time stamp option structure.
  */
 /*
  * Time stamp option structure.
  */
@@ -79,7 +78,7 @@ struct        ip_timestamp {
        union {
                n_long  ipt_time[1];
                struct  ipt_ta {
        union {
                n_long  ipt_time[1];
                struct  ipt_ta {
-                       struct ip_addr ipt_addr;
+                       struct in_addr ipt_addr;
                        n_long ipt_time;
                } ipt_ta[1];
        }
                        n_long ipt_time;
                } ipt_ta[1];
        }
@@ -99,29 +98,11 @@ struct      ip_timestamp {
 #define        IPOPT_SECUR_SECRET      0xd788
 #define        IPOPT_SECUR_TOPSECRET   0x6bc5
 
 #define        IPOPT_SECUR_SECRET      0xd788
 #define        IPOPT_SECUR_TOPSECRET   0x6bc5
 
-/*
- * Ip reassembly queue structure.  Each fragment
- * being reassambled is attached to one of these structures.
- * They are timed out after ipq_ttl drops to 0, and may also
- * be reclaimed if memory becomes tight.
- */
-struct ipq {
-       struct  ipq *next,*prev;        /* to other reass headers */
-       u_char  ipq_ttl;                /* time for reass q to live */
-       u_char  ipq_p;                  /* protocol of this fragment */
-       u_short ipq_id;                 /* sequence id for reassembly */
-       struct  ip *ipq_next,*ipq_prev; /* to ip headers of fragments */
-       struct  ip_addr ipq_src,ipq_dst;
-};
-
 /*
  * Internet implementation parameters.
  */
 #define        MAXTTL          255             /* maximum time to live (seconds) */
 #define        IPFRAGTTL       15              /* time to live for frag chains */
 /*
  * Internet implementation parameters.
  */
 #define        MAXTTL          255             /* maximum time to live (seconds) */
 #define        IPFRAGTTL       15              /* time to live for frag chains */
+#define        IPTTLDEC        1               /* subtracted when forwarding */
 
 
-#ifdef KERNEL
-struct ipq     ipq;                    /* ip reass. queue */
-struct ipq     *ip_freef();
-u_short        ip_id;                          /* ip packet ctr, for ids */
-#endif
+#define        IP_MSS          576             /* default maximum segment size */