BSD 4_3 release
[unix-history] / usr / src / sys / netinet / ip.h
index f875495..17d93e4 100644 (file)
-/* ip.h 1.2 81/10/14 */
-struct ip {                     /* ip leader */
-       unsigned char ip_hl:4,          /* header length */
-               ip_v:4;                 /* version */
-       unsigned char ip_tos;           /* type of service */
-#define ip_mff ip_tos                   /* more fragments flag (input) */
-       unsigned short ip_len;          /* total length */
-       unsigned short ip_id;           /* identification */
-       unsigned short ip_off;          /* fragment offset field */
-#define ip_df 0x4000                    /* dont fragment flag */
-#define ip_mf 0x2000                    /* more fragments flag (output) */
-       unsigned char ip_ttl;           /* time to live */
-       unsigned char ip_p;             /* protocol */
-       unsigned 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
+/*
+ * 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.
+ * 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 {
+#ifdef vax
+       u_char  ip_hl:4,                /* header length */
+               ip_v:4;                 /* version */
+#endif
+       u_char  ip_tos;                 /* type of service */
+       short   ip_len;                 /* total length */
+       u_short ip_id;                  /* identification */
+       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 */
+       struct  in_addr ip_src,ip_dst;  /* source and dest address */
 };
 
 };
 
-struct ipq {                    /* ip reass.q header */
-       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 */
+/*
+ * Definitions for options.
+ */
+#define        IPOPT_COPIED(o)         ((o)&0x80)
+#define        IPOPT_CLASS(o)          ((o)&0x60)
+#define        IPOPT_NUMBER(o)         ((o)&0x1f)
+
+#define        IPOPT_CONTROL           0x00
+#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_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 */
+
+/*
+ * 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.
+ */
+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 */
+
+/* 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
 
 
-#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); }
+/*
+ * 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 */
 
 
+#define        IP_MSS          576             /* default maximum segment size */