date and time created 81/11/29 22:20:02 by wnj
[unix-history] / usr / src / sys / netinet / ip.h
index 2605ce0..60284f2 100644 (file)
@@ -1,51 +1,89 @@
-/* ip.h 1.4 81/10/26 */
+/* ip.h 1.9 81/11/18 */
 
 
+/*
+ * Definitions for internet protocol version 4.
+ * Per RFC 791, September 1981.
+ */
+#define        IPVERSION       4
+
+/*
+ * Structure of an internet header, naked of options.
+ *
+ * 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 {
        u_char  ip_hl:4,                /* header length */
                ip_v:4;                 /* version */
        u_char  ip_tos;                 /* type of service */
 struct ip {
        u_char  ip_hl:4,                /* header length */
                ip_v:4;                 /* version */
        u_char  ip_tos;                 /* type of service */
-#define        ip_mff  ip_tos                  /* more fragments flag (input) */
-       u_short ip_len;                 /* total length */
+       short   ip_len;                 /* total length */
        u_short ip_id;                  /* identification */
        u_short ip_id;                  /* identification */
-       u_short ip_off;                 /* fragment offset field */
-#define        ip_df 0x4000                    /* dont fragment flag */
-#define        ip_mf 0x2000                    /* more fragments flag (output) */
+       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 */
        u_char  ip_ttl;                 /* time to live */
        u_char  ip_p;                   /* protocol */
        u_short ip_sum;                 /* checksum */
-#define        ip_end  ip_sum                  /* fragment end */
-       union {
-               struct socket 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 socket 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 */
 };
 
 /*
 };
 
 /*
- * Ip reassembly queue.
+ * Definitions for options.
+ */
+#define        IPOPT_COPIED(o)         ((o)&0x80)
+#define        IPOPT_CLASS(o)          ((o)&0x40)
+#define        IPOPT_NUMBER(o)         ((o)&0x3f)
+
+#define        IPOPT_CONTROL           0x00
+#define        IPOPT_RESERVED1         0x10
+#define        IPOPT_DEBMEAS           0x20
+#define        IPOPT_RESERVED2         0x30
+
+#define        IPOPT_EOL               0               /* end of option list */
+#define        IPOPT_NOP               1               /* no operation */
+
+#define        IPOPT_RR                7               /* record packet route */
+#define        IPOPT_TS                68              /* timestamp */
+#define        IPOPT_SECURITY          130             /* provide s,c,h,tcc */
+#define        IPOPT_LSRR              131             /* loose source route */
+#define        IPOPT_SATID             136             /* satnet id */
+#define        IPOPT_SSRR              137             /* strict source route */
+
+/*
+ * Time stamp option structure.
  */
  */
-struct ipq {
-       struct  ip iqx;         /* dummy ip element for top of list */
-       struct  ipq *iq_next;   /* -> next chain on q */
-       struct  ipq *iq_prev;   /* -> prev chain on q */
-       struct  ip iqh;         /* fragment header */
+struct ip_timestamp {
+       u_char  ipt_code;               /* IPOPT_TS */
+       u_char  ipt_len;                /* size of structure (variable) */
+       u_char  ipt_ptr;                /* index of current entry */
+       u_char  ipt_flg:4,              /* flags, see below */
+               ipt_oflw:4;             /* overflow counter */
+       union {
+               n_long  ipt_time[1];
+               struct  ipt_ta {
+                       struct in_addr ipt_addr;
+                       n_long ipt_time;
+               } ipt_ta[1];
+       }
 };
 
 };
 
-#define        IPVERSION       4               /* internet protocol version number */
-#define        IPLOLINK        155             /* internet link numbers */
-#define        IPHILINK        158
-#define        IPLINK          IPLOLINK
-#define        MAXTTL          255             /* maximum time to live (seconds) */
+/* flag bits for ipt_flg */
+#define        IPOPT_TS_TSONLY         0               /* timestamps only */
+#define        IPOPT_TS_TSANDADDR      1               /* timestamps and addresses */
+#define        IPOPT_TS_PRESPEC        2               /* specified modules only */
 
 
-#define        ip_bswap(p) { \
-       p->ip_len = ntohs(p->ip_len); \
-       p->ip_id = ntohs(p->ip_id); \
-       p->ip_off = ntohs(p->ip_off); }
+/* bits for security (not byte swapped) */
+#define        IPOPT_SECUR_UNCLASS     0x0000
+#define        IPOPT_SECUR_CONFID      0xf135
+#define        IPOPT_SECUR_EFTO        0x789a
+#define        IPOPT_SECUR_MMMM        0xbc4d
+#define        IPOPT_SECUR_RESTR       0xaf13
+#define        IPOPT_SECUR_SECRET      0xd788
+#define        IPOPT_SECUR_TOPSECRET   0x6bc5
 
 
+/*
+ * Internet implementation parameters.
+ */
+#define        MAXTTL          255             /* maximum time to live (seconds) */
+#define        IPFRAGTTL       15              /* time to live for frag chains */