BSD 4_3 release
[unix-history] / usr / src / sys / netinet / ip_var.h
index 9b6e6b5..d28c3f8 100644 (file)
@@ -1,4 +1,10 @@
-/*     ip_var.h        4.3     81/11/18        */
+/*
+ * 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_var.h    7.1 (Berkeley) 6/5/86
+ */
 
 /*
  * Overlay for ip header used by other protocols (tcp, udp).
 
 /*
  * Overlay for ip header used by other protocols (tcp, udp).
@@ -30,10 +36,14 @@ struct ipq {
 
 /*
  * Ip header, when holding a fragment.
 
 /*
  * Ip header, when holding a fragment.
+ *
+ * Note: ipf_next must be at same offset as ipq_next above
  */
 struct ipasfrag {
  */
 struct ipasfrag {
+#ifdef vax
        u_char  ip_hl:4,
                ip_v:4;
        u_char  ip_hl:4,
                ip_v:4;
+#endif
        u_char  ipf_mff;                /* copied from (ip_off&IP_MF) */
        short   ip_len;
        u_short ip_id;
        u_char  ipf_mff;                /* copied from (ip_off&IP_MF) */
        short   ip_len;
        u_short ip_id;
@@ -45,13 +55,43 @@ struct      ipasfrag {
        struct  ipasfrag *ipf_prev;     /* previous fragment */
 };
 
        struct  ipasfrag *ipf_prev;     /* previous fragment */
 };
 
+/*
+ * Structure stored in mbuf in inpcb.ip_options
+ * and passed to ip_output when ip options are in use.
+ * The actual length of the options (including ipopt_dst)
+ * is in m_len.
+ */
+#define MAX_IPOPTLEN   40
+
+struct ipoption {
+       struct  in_addr ipopt_dst;      /* first-hop dst if source routed */
+       char    ipopt_list[MAX_IPOPTLEN];       /* options proper */
+};
+
 struct ipstat {
 struct ipstat {
-       int     ips_badsum;
+       long    ips_total;              /* total packets received */
+       long    ips_badsum;             /* checksum bad */
+       long    ips_tooshort;           /* packet too short */
+       long    ips_toosmall;           /* not enough data */
+       long    ips_badhlen;            /* ip header length < data size */
+       long    ips_badlen;             /* ip length < ip header length */
+       long    ips_fragments;          /* fragments received */
+       long    ips_fragdropped;        /* frags dropped (dups, out of space) */
+       long    ips_fragtimeout;        /* fragments timed out */
+       long    ips_forward;            /* packets forwarded */
+       long    ips_cantforward;        /* packets rcvd for unreachable dest */
+       long    ips_redirectsent;       /* packets forwarded on same net */
 };
 
 #ifdef KERNEL
 };
 
 #ifdef KERNEL
+/* flags passed to ip_output as last parameter */
+#define        IP_FORWARDING           0x1             /* most of ip header exists */
+#define        IP_ROUTETOIF            SO_DONTROUTE    /* bypass routing tables */
+#define        IP_ALLOWBROADCAST       SO_BROADCAST    /* can send broadcast packets */
+
 struct ipstat  ipstat;
 struct ipq     ipq;                    /* ip reass. queue */
 struct ipstat  ipstat;
 struct ipq     ipq;                    /* ip reass. queue */
-struct ipq     *ip_freef();
 u_short        ip_id;                          /* ip packet ctr, for ids */
 u_short        ip_id;                          /* ip packet ctr, for ids */
+
+struct mbuf *ip_srcroute();
 #endif
 #endif