Add extra argument to VOP_BMAP.
[unix-history] / usr / src / sys / netinet / in_proto.c
index da80bd7..81ef2d3 100644 (file)
@@ -1,4 +1,11 @@
-/*     in_proto.c      6.6     84/08/29        */
+/*
+ * Copyright (c) 1982, 1986 Regents of the University of California.
+ * All rights reserved.
+ *
+ * %sccs.include.redist.c%
+ *
+ *     @(#)in_proto.c  7.7 (Berkeley) %G%
+ */
 
 #include "param.h"
 #include "socket.h"
 
 #include "param.h"
 #include "socket.h"
 #include "in.h"
 #include "in_systm.h"
 
 #include "in.h"
 #include "in_systm.h"
 
+#include "net/radix.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    ip_init(),ip_slowtimo(),ip_drain();
 int    icmp_input();
+#ifdef MULTICAST
+int    igmp_init(),igmp_input(),igmp_fasttimo();
+#endif
 int    udp_input(),udp_ctlinput();
 int    udp_usrreq();
 int    udp_init();
 int    tcp_input(),tcp_ctlinput();
 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_init(),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 +44,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,35 +66,66 @@ 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 MULTICAST
+{ SOCK_RAW,    &inetdomain,    IPPROTO_IGMP,   PR_ATOMIC|PR_ADDR,
+  igmp_input,  rip_output,     0,              rip_ctloutput,
+  rip_usrreq,
+  igmp_init,   igmp_fasttimo,  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,
 },
   0,           0,              0,              0,
 },
+#endif
+       /* raw wildcard */
+{ SOCK_RAW,    &inetdomain,    0,              PR_ATOMIC|PR_ADDR,
+  rip_input,   rip_output,     0,              rip_ctloutput,
+  rip_usrreq,
+  rip_init,    0,              0,              0,
+},
 };
 
 struct domain inetdomain =
     { AF_INET, "internet", 0, 0, 0, 
 };
 
 struct domain inetdomain =
     { AF_INET, "internet", 0, 0, 0, 
-      inetsw, &inetsw[sizeof(inetsw)/sizeof(inetsw[0])] };
+      inetsw, &inetsw[sizeof(inetsw)/sizeof(inetsw[0])], 0,
+      rn_inithead, 32, sizeof(struct sockaddr_in) };
 
 #if NIMP > 0
 extern struct domain impdomain;
 
 #if NIMP > 0
 extern struct domain impdomain;
@@ -78,7 +133,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 +142,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