BSD 4_4 release
[unix-history] / usr / src / sys / netinet / in.h
index 09b3a46..1a5e153 100644 (file)
@@ -1,23 +1,36 @@
 /*
 /*
- * Copyright (c) 1982, 1986, 1990 Regents of the University of California.
- * All rights reserved.
+ * Copyright (c) 1993, 1982198619901993
+ *     The Regents of the University of California.  All rights reserved.
  *
  *
- * Redistribution is only permitted until one year after the first shipment
- * of 4.4BSD by the Regents.  Otherwise, redistribution and use in source and
- * binary forms are permitted provided that: (1) source distributions retain
- * this entire copyright notice and comment, and (2) distributions including
- * binaries display the following acknowledgement:  This product includes
- * software developed by the University of California, Berkeley and its
- * contributors'' in the documentation or other materials provided with the
- * distribution and in all advertising materials mentioning features or use
- * of this software.  Neither the name of the University nor the names of
- * its contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- * THIS SOFTWARE IS PROVIDED AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ *    must display the following acknowledgement:
+ *     This product includes software developed by the University of
+ *     California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
  *
  *
- *     @(#)in.h        7.10 (Berkeley) 6/28/90
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ *     @(#)in.h        8.1 (Berkeley) 6/10/93
  */
 
 /*
  */
 
 /*
@@ -30,6 +43,7 @@
  */
 #define        IPPROTO_IP              0               /* dummy for IP */
 #define        IPPROTO_ICMP            1               /* control message protocol */
  */
 #define        IPPROTO_IP              0               /* dummy for IP */
 #define        IPPROTO_ICMP            1               /* control message protocol */
+#define        IPPROTO_IGMP            2               /* group mgmt protocol */
 #define        IPPROTO_GGP             3               /* gateway^2 (deprecated) */
 #define        IPPROTO_TCP             6               /* tcp */
 #define        IPPROTO_EGP             8               /* exterior gateway protocol */
 #define        IPPROTO_GGP             3               /* gateway^2 (deprecated) */
 #define        IPPROTO_TCP             6               /* tcp */
 #define        IPPROTO_EGP             8               /* exterior gateway protocol */
@@ -38,6 +52,7 @@
 #define        IPPROTO_IDP             22              /* xns idp */
 #define        IPPROTO_TP              29              /* tp-4 w/ class negotiation */
 #define        IPPROTO_EON             80              /* ISO cnlp */
 #define        IPPROTO_IDP             22              /* xns idp */
 #define        IPPROTO_TP              29              /* tp-4 w/ class negotiation */
 #define        IPPROTO_EON             80              /* ISO cnlp */
+#define        IPPROTO_ENCAP           98              /* encapsulation header */
 
 #define        IPPROTO_RAW             255             /* raw IP packet */
 #define        IPPROTO_MAX             256
 
 #define        IPPROTO_RAW             255             /* raw IP packet */
 #define        IPPROTO_MAX             256
@@ -83,9 +98,12 @@ struct in_addr {
 #define        IN_CLASSC_HOST          0x000000ff
 
 #define        IN_CLASSD(i)            (((long)(i) & 0xf0000000) == 0xe0000000)
 #define        IN_CLASSC_HOST          0x000000ff
 
 #define        IN_CLASSD(i)            (((long)(i) & 0xf0000000) == 0xe0000000)
+#define        IN_CLASSD_NET           0xf0000000      /* These ones aren't really */
+#define        IN_CLASSD_NSHIFT        28              /* net and host fields, but */
+#define        IN_CLASSD_HOST          0x0fffffff      /* routing needn't know.    */
 #define        IN_MULTICAST(i)         IN_CLASSD(i)
 
 #define        IN_MULTICAST(i)         IN_CLASSD(i)
 
-#define        IN_EXPERIMENTAL(i)      (((long)(i) & 0xe0000000) == 0xe0000000)
+#define        IN_EXPERIMENTAL(i)      (((long)(i) & 0xf0000000) == 0xf0000000)
 #define        IN_BADCLASS(i)          (((long)(i) & 0xf0000000) == 0xf0000000)
 
 #define        INADDR_ANY              (u_long)0x00000000
 #define        IN_BADCLASS(i)          (((long)(i) & 0xf0000000) == 0xf0000000)
 
 #define        INADDR_ANY              (u_long)0x00000000
@@ -94,6 +112,10 @@ struct in_addr {
 #define        INADDR_NONE             0xffffffff              /* -1 return */
 #endif
 
 #define        INADDR_NONE             0xffffffff              /* -1 return */
 #endif
 
+#define INADDR_UNSPEC_GROUP    (u_long)0xe0000000      /* 224.0.0.0   */
+#define INADDR_ALLHOSTS_GROUP  (u_long)0xe0000001      /* 224.0.0.1   */
+#define INADDR_MAX_LOCAL_GROUP (u_long)0xe00000ff      /* 224.0.0.255 */
+
 #define        IN_LOOPBACKNET          127                     /* official! */
 
 /*
 #define        IN_LOOPBACKNET          127                     /* official! */
 
 /*
@@ -124,17 +146,93 @@ struct ip_opts {
  * First word of comment is data type; bool is stored in int.
  */
 #define        IP_OPTIONS      1       /* buf/ip_opts; set/get IP per-packet options */
  * First word of comment is data type; bool is stored in int.
  */
 #define        IP_OPTIONS      1       /* buf/ip_opts; set/get IP per-packet options */
-#define        IP_HDRINCL      2       /* int; header is included with data (raw) */
-#define        IP_TOS          3       /* int; IP type of service and precedence */
-#define        IP_TTL          4       /* int; IP time to live */
-#define        IP_RECVOPTS     5       /* bool; receive all IP options w/datagram */
-#define        IP_RECVRETOPTS  6       /* bool; receive IP options for response */
-#define        IP_RECVDSTADDR  7       /* bool; receive IP dst addr w/datagram */
-#define        IP_RETOPTS      8       /* ip_opts; set/get IP per-packet options */
+
+#define        IP_MULTICAST_IF         2 /* in_addr; set/get IP multicast interface */
+#define        IP_MULTICAST_TTL        3 /* u_char; set/get IP multicast timetolive */
+#define        IP_MULTICAST_LOOP       4 /* u_char; set/get IP multicast loopback */
+#define        IP_ADD_MEMBERSHIP       5 /* ip_mreq; add an IP group membership */
+#define        IP_DROP_MEMBERSHIP      6 /* ip_mreq; drop an IP group membership */
+
+
+#define        IP_HDRINCL      7       /* int; header is included with data (raw) */
+#define        IP_TOS          8       /* int; IP type of service and precedence */
+#define        IP_TTL          9       /* int; IP time to live */
+#define        IP_RECVOPTS     10      /* bool; receive all IP options w/datagram */
+#define        IP_RECVRETOPTS  11      /* bool; receive IP options for response */
+#define        IP_RECVDSTADDR  12      /* bool; receive IP dst addr w/datagram */
+#define        IP_RETOPTS      13      /* ip_opts; set/get IP per-packet options */
+
+#define        IP_DEFAULT_MULTICAST_TTL 1      /* normally limit m'casts to 1 hop */
+#define        IP_DEFAULT_MULTICAST_LOOP 1     /* normally hear sends if a member */
+#define        IP_MAX_MEMBERSHIPS      20      /* per socket */
+
+/*
+ * Argument structure for IP_ADD_MEMBERSHIP and IP_DROP_MEMBERSHIP.
+ */
+struct ip_mreq {
+       struct in_addr  imr_multiaddr;  /* IP multicast address of group */
+       struct in_addr  imr_interface;  /* local IP address of interface */
+};
+
+/*
+ * Definitions for inet sysctl operations.
+ *
+ * Third level is protocol number.
+ * Fourth level is desired variable within that protocol.
+ */
+#define IPPROTO_MAXID  (IPPROTO_IDP + 1)       /* don't list to IPPROTO_MAX */
+
+#define CTL_IPPROTO_NAMES { \
+       { "ip", CTLTYPE_NODE }, \
+       { "icmp", CTLTYPE_NODE }, \
+       { "igmp", CTLTYPE_NODE }, \
+       { "ggp", CTLTYPE_NODE }, \
+       { 0, 0 }, \
+       { 0, 0 }, \
+       { "tcp", CTLTYPE_NODE }, \
+       { 0, 0 }, \
+       { "egp", CTLTYPE_NODE }, \
+       { 0, 0 }, \
+       { 0, 0 }, \
+       { 0, 0 }, \
+       { "pup", CTLTYPE_NODE }, \
+       { 0, 0 }, \
+       { 0, 0 }, \
+       { 0, 0 }, \
+       { 0, 0 }, \
+       { "udp", CTLTYPE_NODE }, \
+       { 0, 0 }, \
+       { 0, 0 }, \
+       { 0, 0 }, \
+       { 0, 0 }, \
+       { "idp", CTLTYPE_NODE }, \
+}
+
+/*
+ * Names for IP sysctl objects
+ */
+#define        IPCTL_FORWARDING        1       /* act as router */
+#define        IPCTL_SENDREDIRECTS     2       /* may send redirects when forwarding */
+#define        IPCTL_DEFTTL            3       /* default TTL */
+#ifdef notyet
+#define        IPCTL_DEFMTU            4       /* default MTU */
+#endif
+#define        IPCTL_MAXID             5
+
+#define        IPCTL_NAMES { \
+       { 0, 0 }, \
+       { "forwarding", CTLTYPE_INT }, \
+       { "redirect", CTLTYPE_INT }, \
+       { "ttl", CTLTYPE_INT }, \
+       { "mtu", CTLTYPE_INT }, \
+}
+
 
 #ifdef KERNEL
 
 #ifdef KERNEL
-extern struct domain inetdomain;
-extern struct protosw inetsw[];
-struct in_addr in_makeaddr();
-u_long in_netof(), in_lnaof();
+int     in_broadcast __P((struct in_addr, struct ifnet *));
+int     in_canforward __P((struct in_addr));
+int     in_cksum __P((struct mbuf *, int));
+int     in_localaddr __P((struct in_addr));
+u_long  in_netof __P((struct in_addr));
+void    in_socktrim __P((struct sockaddr_in *));
 #endif
 #endif