included by arpa/inet.h, so protect it.
[unix-history] / usr / src / sys / netinet / in_proto.c
index f8e30cf..4b778d3 100644 (file)
@@ -1,28 +1,34 @@
-/*     in_proto.c      6.5     84/08/21        */
+/*
+ * Copyright (c) 1982, 1986 Regents of the University of California.
+ * All rights reserved.
+ *
+ * %sccs.include.redist.c%
+ *
+ *     @(#)in_proto.c  7.5 (Berkeley) %G%
+ */
 
 
-#include "../h/param.h"
-#include "../h/socket.h"
-#include "../h/protosw.h"
-#include "../h/domain.h"
-#include "../h/mbuf.h"
+#include "param.h"
+#include "socket.h"
+#include "protosw.h"
+#include "domain.h"
+#include "mbuf.h"
 
 
-#include "../netinet/in.h"
-#include "../netinet/in_systm.h"
+#include "in.h"
+#include "in_systm.h"
 
 /*
  * TCP/IP protocol family: IP, ICMP, UDP, TCP.
  */
 
 /*
  * TCP/IP protocol family: IP, ICMP, UDP, TCP.
  */
-int    ip_output();
+int    ip_output(),ip_ctloutput();
 int    ip_init(),ip_slowtimo(),ip_drain();
 int    icmp_input();
 int    udp_input(),udp_ctlinput();
 int    udp_usrreq();
 int    udp_init();
 int    tcp_input(),tcp_ctlinput();
 int    ip_init(),ip_slowtimo(),ip_drain();
 int    icmp_input();
 int    udp_input(),udp_ctlinput();
 int    udp_usrreq();
 int    udp_init();
 int    tcp_input(),tcp_ctlinput();
-int    tcp_usrreq();
+int    tcp_usrreq(),tcp_ctloutput();
 int    tcp_init(),tcp_fasttimo(),tcp_slowtimo(),tcp_drain();
 int    tcp_init(),tcp_fasttimo(),tcp_slowtimo(),tcp_drain();
-int    rip_input(),rip_output();
-extern int raw_usrreq();
+int    rip_input(),rip_output(),rip_ctloutput(), rip_usrreq();
 /*
  * IMP protocol family: raw interface.
  * Using the raw interface entry to get the timer routine
 /*
  * IMP protocol family: raw interface.
  * Using the raw interface entry to get the timer routine
@@ -33,6 +39,19 @@ extern       int raw_usrreq();
 int    rimp_output(), hostslowtimo();
 #endif
 
 int    rimp_output(), hostslowtimo();
 #endif
 
+#ifdef NSIP
+int    idpip_input(), nsip_ctlinput();
+#endif
+
+#ifdef TPIP
+int    tpip_input(), tpip_ctlinput(), tp_ctloutput(), tp_usrreq();
+int    tp_init(), tp_slowtimo(), tp_drain();
+#endif
+
+#ifdef EON
+int    eoninput(), eonctlinput(), eonprotoinit();
+#endif EON
+
 extern struct domain inetdomain;
 
 struct protosw inetsw[] = {
 extern struct domain inetdomain;
 
 struct protosw inetsw[] = {
@@ -42,28 +61,51 @@ struct protosw inetsw[] = {
   ip_init,     0,              ip_slowtimo,    ip_drain,
 },
 { SOCK_DGRAM,  &inetdomain,    IPPROTO_UDP,    PR_ATOMIC|PR_ADDR,
   ip_init,     0,              ip_slowtimo,    ip_drain,
 },
 { SOCK_DGRAM,  &inetdomain,    IPPROTO_UDP,    PR_ATOMIC|PR_ADDR,
-  udp_input,   0,              udp_ctlinput,   0,
+  udp_input,   0,              udp_ctlinput,   ip_ctloutput,
   udp_usrreq,
   udp_init,    0,              0,              0,
 },
 { SOCK_STREAM, &inetdomain,    IPPROTO_TCP,    PR_CONNREQUIRED|PR_WANTRCVD,
   udp_usrreq,
   udp_init,    0,              0,              0,
 },
 { SOCK_STREAM, &inetdomain,    IPPROTO_TCP,    PR_CONNREQUIRED|PR_WANTRCVD,
-  tcp_input,   0,              tcp_ctlinput,   0,
+  tcp_input,   0,              tcp_ctlinput,   tcp_ctloutput,
   tcp_usrreq,
   tcp_init,    tcp_fasttimo,   tcp_slowtimo,   tcp_drain,
 },
 { SOCK_RAW,    &inetdomain,    IPPROTO_RAW,    PR_ATOMIC|PR_ADDR,
   tcp_usrreq,
   tcp_init,    tcp_fasttimo,   tcp_slowtimo,   tcp_drain,
 },
 { SOCK_RAW,    &inetdomain,    IPPROTO_RAW,    PR_ATOMIC|PR_ADDR,
-  rip_input,   rip_output,     0,      0,
-  raw_usrreq,
+  rip_input,   rip_output,     0,              rip_ctloutput,
+  rip_usrreq,
   0,           0,              0,              0,
 },
   0,           0,              0,              0,
 },
-{ SOCK_RAW,    &inetdomain,    IPPROTO_EGP,    PR_ATOMIC|PR_ADDR,
-  rip_input,   rip_output,     0,      0,
-  raw_usrreq,
+{ SOCK_RAW,    &inetdomain,    IPPROTO_ICMP,   PR_ATOMIC|PR_ADDR,
+  icmp_input,  rip_output,     0,              rip_ctloutput,
+  rip_usrreq,
   0,           0,              0,              0,
 },
   0,           0,              0,              0,
 },
-{ SOCK_RAW,    &inetdomain,    IPPROTO_ICMP,   PR_ATOMIC|PR_ADDR,
-  icmp_input,  rip_output,     0,              0,
-  raw_usrreq,
+#ifdef TPIP
+{ SOCK_SEQPACKET,&inetdomain,  IPPROTO_TP,     PR_CONNREQUIRED|PR_WANTRCVD,
+  tpip_input,  0,              tpip_ctlinput,          tp_ctloutput,
+  tp_usrreq,
+  tp_init,     0,              tp_slowtimo,    tp_drain,
+},
+#endif
+/* EON (ISO CLNL over IP) */
+#ifdef EON
+{ SOCK_RAW,    &inetdomain,    IPPROTO_EON,    0,
+  eoninput,    0,              eonctlinput,            0,
+  0,
+  eonprotoinit,        0,              0,              0,
+},
+#endif
+#ifdef NSIP
+{ SOCK_RAW,    &inetdomain,    IPPROTO_IDP,    PR_ATOMIC|PR_ADDR,
+  idpip_input, rip_output,     nsip_ctlinput,  0,
+  rip_usrreq,
+  0,           0,              0,              0,
+},
+#endif
+       /* raw wildcard */
+{ SOCK_RAW,    &inetdomain,    0,              PR_ATOMIC|PR_ADDR,
+  rip_input,   rip_output,     0,              rip_ctloutput,
+  rip_usrreq,
   0,           0,              0,              0,
 },
 };
   0,           0,              0,              0,
 },
 };
@@ -78,7 +120,7 @@ extern       struct domain impdomain;
 struct protosw impsw[] = {
 { SOCK_RAW,    &impdomain,     0,              PR_ATOMIC|PR_ADDR,
   0,           rimp_output,    0,              0,
 struct protosw impsw[] = {
 { SOCK_RAW,    &impdomain,     0,              PR_ATOMIC|PR_ADDR,
   0,           rimp_output,    0,              0,
-  raw_usrreq,
+  rip_usrreq,
   0,           0,              hostslowtimo,   0,
 },
 };
   0,           0,              hostslowtimo,   0,
 },
 };
@@ -87,3 +129,23 @@ struct domain impdomain =
     { AF_IMPLINK, "imp", 0, 0, 0,
       impsw, &impsw[sizeof (impsw)/sizeof(impsw[0])] };
 #endif
     { AF_IMPLINK, "imp", 0, 0, 0,
       impsw, &impsw[sizeof (impsw)/sizeof(impsw[0])] };
 #endif
+
+#include "hy.h"
+#if NHY > 0
+/*
+ * HYPERchannel protocol family: raw interface.
+ */
+int    rhy_output();
+extern struct domain hydomain;
+
+struct protosw hysw[] = {
+{ SOCK_RAW,    &hydomain,      0,              PR_ATOMIC|PR_ADDR,
+  0,           rhy_output,     0,              0,
+  rip_usrreq,
+  0,           0,              0,              0,
+},
+};
+
+struct domain hydomain =
+    { AF_HYLINK, "hy", 0, 0, 0, hysw, &hysw[sizeof (hysw)/sizeof(hysw[0])] };
+#endif