netbroadcast should always be all-ones
[unix-history] / usr / src / sys / netinet / ip_var.h
index 31eb17f..6fd0171 100644 (file)
@@ -1,4 +1,16 @@
-/*     ip_var.h        4.8     83/02/05        */
+/*
+ * Copyright (c) 1982, 1986 Regents of the University of California.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms are permitted
+ * provided that this notice is preserved and that due credit is given
+ * to the University of California at Berkeley. The name of the University
+ * may not be used to endorse or promote products derived from this
+ * software without specific prior written permission. This software
+ * is provided ``as is'' without express or implied warranty.
+ *
+ *     @(#)ip_var.h    7.4 (Berkeley) %G%
+ */
 
 /*
  * Overlay for ip header used by other protocols (tcp, udp).
 
 /*
  * Overlay for ip header used by other protocols (tcp, udp).
@@ -34,11 +46,11 @@ struct ipq {
  * Note: ipf_next must be at same offset as ipq_next above
  */
 struct ipasfrag {
  * Note: ipf_next must be at same offset as ipq_next above
  */
 struct ipasfrag {
-#ifdef vax
+#if BYTE_ORDER == LITTLE_ENDIAN 
        u_char  ip_hl:4,
                ip_v:4;
 #endif
        u_char  ip_hl:4,
                ip_v:4;
 #endif
-#ifdef sun
+#if BYTE_ORDER == BIG_ENDIAN 
        u_char  ip_v:4,
                ip_hl:4;
 #endif
        u_char  ip_v:4,
                ip_hl:4;
 #endif
@@ -53,13 +65,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;             /* checksum bad */
-       int     ips_tooshort;           /* packet too short */
+       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 */
 u_short        ip_id;                          /* ip packet ctr, for ids */
 struct ipstat  ipstat;
 struct ipq     ipq;                    /* ip reass. queue */
 u_short        ip_id;                          /* ip packet ctr, for ids */
+
+struct mbuf *ip_srcroute();
 #endif
 #endif