]> git.saurik.com Git - apple/xnu.git/blobdiff - bsd/netinet/in_proto.c
xnu-792.10.96.tar.gz
[apple/xnu.git] / bsd / netinet / in_proto.c
index 4ac5b78fc63f1772699f322991ce7cc2ab880094..d910aa342cb75d6df76c771075785c37e712f84b 100644 (file)
  *     @(#)in_proto.c  8.2 (Berkeley) 2/9/95
  */
 
-#if ISFB31
-#include "opt_ipdivert.h"
-#include "opt_ipx.h"
-#endif
-
 #include <sys/param.h>
 #include <sys/kernel.h>
 #include <sys/socket.h>
 #include <sys/domain.h>
 #include <sys/protosw.h>
-
-
+#include <sys/queue.h>
 #include <sys/sysctl.h>
-
+#include <sys/mbuf.h>
 
 #include <net/if.h>
 #include <net/route.h>
@@ -76,8 +70,6 @@
 #include <netinet/in_systm.h>
 #include <netinet/ip.h>
 #include <netinet/ip_var.h>
-#include <netinet/ip6.h>
-#include <netinet6/ip6_var.h>
 #include <netinet/ip_icmp.h>
 #include <netinet/igmp_var.h>
 #include <netinet/tcp.h>
 #include <netinet/tcpip.h>
 #include <netinet/udp.h>
 #include <netinet/udp_var.h>
+#include <netinet/ip_encap.h>
+#include <netinet/ip_divert.h>
+
+
 /*
  * TCP/IP protocol family: IP, ICMP, UDP, TCP.
  */
 #include <netinet6/ipcomp.h>
 #endif /* IPSEC */
 
-#include "gif.h"
-#if NGIF > 0
-#include <netinet/in_gif.h>
-#endif
-
 #if IPXIP
 #include <netipx/ipx_ip.h>
 #endif
 
-#if NSIP
-#include <netns/ns.h>
-#include <netns/ns_if.h>
-#endif
-
-#if PM
-void   pm_init         __P((void));
-void   pm_input        __P((struct mbuf *, int));
-int    pm_ctloutput    __P((int, struct socket *, int, int, struct mbuf **));
-struct pr_usrreqs pm_usrreqs;
-#endif
-
-#if NATPT
-void   natpt_init      __P((void));
-int    natpt_ctloutput __P((int, struct socket *, int, int, struct mbuf **));
-struct pr_usrreqs natpt_usrreqs;
-#endif
-
 extern struct domain inetdomain;
 static struct pr_usrreqs nousrreqs;
+extern struct   pr_usrreqs icmp_dgram_usrreqs;
+extern int icmp_dgram_ctloutput(struct socket *, struct sockopt *);
+
 
 struct protosw inetsw[] = {
 { 0,           &inetdomain,    0,              0,
   0,           0,              0,              0,
   0,
   ip_init,     0,              ip_slowtimo,    ip_drain,
-  0,           &nousrreqs      
+  0,   
+  &nousrreqs,
+  0,           0,              0,      { 0, 0 },       0,      { 0 }
 },
-{ SOCK_DGRAM,  &inetdomain,    IPPROTO_UDP,    PR_ATOMIC|PR_ADDR,
+{ SOCK_DGRAM,  &inetdomain,    IPPROTO_UDP,    PR_ATOMIC|PR_ADDR|PR_PROTOLOCK|PR_PCBLOCK,
   udp_input,   0,              udp_ctlinput,   ip_ctloutput,
   0,
-  udp_init,    0,              0,              0,
-  0, &udp_usrreqs
+  udp_init,    0,              udp_slowtimo,           0,
+  0,
+  &udp_usrreqs,
+  udp_lock,    udp_unlock,     udp_getlock,    { 0, 0 },       0,      { 0 }
 },
-{ SOCK_STREAM, &inetdomain,    IPPROTO_TCP,
-       PR_CONNREQUIRED|PR_IMPLOPCL|PR_WANTRCVD,
+{ SOCK_STREAM, &inetdomain,    IPPROTO_TCP, 
+       PR_CONNREQUIRED|PR_IMPLOPCL|PR_WANTRCVD|PR_PCBLOCK|PR_PROTOLOCK|PR_DISPOSE,
   tcp_input,   0,              tcp_ctlinput,   tcp_ctloutput,
   0,
   tcp_init,    tcp_fasttimo,   tcp_slowtimo,   tcp_drain,
-  0, &tcp_usrreqs
+  0,
+  &tcp_usrreqs,
+  tcp_lock,    tcp_unlock,     tcp_getlock,    { 0, 0 },       0,      { 0 }
 },
 { SOCK_RAW,    &inetdomain,    IPPROTO_RAW,    PR_ATOMIC|PR_ADDR,
   rip_input,   0,              rip_ctlinput,   rip_ctloutput,
   0,
   0,           0,              0,              0,
-  0, &rip_usrreqs
+  0,
+  &rip_usrreqs,
+  0,           rip_unlock,             0,      { 0, 0 },       0,      { 0 }
 },
-{ SOCK_RAW,    &inetdomain,    IPPROTO_ICMP,   PR_ATOMIC|PR_ADDR,
+{ SOCK_RAW,    &inetdomain,    IPPROTO_ICMP,   PR_ATOMIC|PR_ADDR|PR_LASTHDR,
   icmp_input,  0,              0,              rip_ctloutput,
   0,
   0,           0,              0,              0,
-  0, &rip_usrreqs
+  0,
+  &rip_usrreqs,
+  0,           rip_unlock,     0,      { 0, 0 },       0,      { 0 }
+},
+{ SOCK_DGRAM, &inetdomain,     IPPROTO_ICMP,   PR_ATOMIC|PR_ADDR|PR_LASTHDR,
+  icmp_input,  0,              0,              icmp_dgram_ctloutput,
+  0,
+  0,           0,              0,              0,
+  0,   
+  &icmp_dgram_usrreqs,
+  0,           rip_unlock,             0,      { 0, 0 },       0,      { 0 }
 },
-{ SOCK_RAW,    &inetdomain,    IPPROTO_IGMP,   PR_ATOMIC|PR_ADDR,
+{ SOCK_RAW,    &inetdomain,    IPPROTO_IGMP,   PR_ATOMIC|PR_ADDR|PR_LASTHDR,
   igmp_input,  0,              0,              rip_ctloutput,
   0,
   igmp_init,   igmp_fasttimo,  igmp_slowtimo,  0,
-  0, &rip_usrreqs
+  0,
+  &rip_usrreqs,
+  0,           rip_unlock,     0,      { 0, 0 },       0,      { 0 }
 },
-{ SOCK_RAW,    &inetdomain,    IPPROTO_RSVP,   PR_ATOMIC|PR_ADDR,
+{ SOCK_RAW,    &inetdomain,    IPPROTO_RSVP,   PR_ATOMIC|PR_ADDR|PR_LASTHDR,
   rsvp_input,  0,              0,              rip_ctloutput,
   0,
   0,           0,              0,              0,
-  0, &rip_usrreqs
+  0,
+  &rip_usrreqs,
+  0,           rip_unlock,             0,      { 0, 0 },       0,      { 0 }
 },
 #if IPSEC
-{ SOCK_RAW,    &inetdomain,    IPPROTO_AH,     PR_ATOMIC|PR_ADDR,
+{ SOCK_RAW,    &inetdomain,    IPPROTO_AH,     PR_ATOMIC|PR_ADDR|PR_PROTOLOCK,
   ah4_input,   0,              0,              0,
   0,     
   0,           0,              0,              0,
-  0, &nousrreqs
+  0,
+  &nousrreqs,
+  0,           0,              0,      { 0, 0 },       0,      { 0 }
 },
 #if IPSEC_ESP
-{ SOCK_RAW,    &inetdomain,    IPPROTO_ESP,    PR_ATOMIC|PR_ADDR,
+{ SOCK_RAW,    &inetdomain,    IPPROTO_ESP,    PR_ATOMIC|PR_ADDR|PR_PROTOLOCK,
   esp4_input,  0,              0,              0,
   0,     
   0,           0,              0,              0,
-  0, &nousrreqs
+  0,
+  &nousrreqs,
+  0,           0,              0,      { 0, 0 },       0,      { 0 }
 },
 #endif
-{ SOCK_RAW,    &inetdomain,    IPPROTO_IPCOMP, PR_ATOMIC|PR_ADDR,
+{ SOCK_RAW,    &inetdomain,    IPPROTO_IPCOMP, PR_ATOMIC|PR_ADDR|PR_PROTOLOCK,
   ipcomp4_input, 0,            0,              0,
   0,     
   0,           0,              0,              0,
-  0, &nousrreqs
+  0,
+  &nousrreqs,
+  0,           0,              0,      { 0, 0 },       0,      { 0 }
 },
 #endif /* IPSEC */
-#if NGIF > 0
-{ SOCK_RAW,    &inetdomain,    IPPROTO_IPV4,   PR_ATOMIC|PR_ADDR,
-  in_gif_input,        0,              0,              0,
-  0,     
-  0,           0,              0,              0,
-  0, &nousrreqs
+{ SOCK_RAW,    &inetdomain,    IPPROTO_IPV4,   PR_ATOMIC|PR_ADDR|PR_LASTHDR,
+  encap4_input,        0,              0,              rip_ctloutput,
+  0,
+  encap_init,          0,              0,              0,
+  0,
+  &rip_usrreqs,
+  0,           0,              0,      { 0, 0 },       0,      { 0 }
 },
 # if INET6
-{ SOCK_RAW,    &inetdomain,    IPPROTO_IPV6,   PR_ATOMIC|PR_ADDR,
-  in_gif_input,        0,              0,              0,
-  0,     
-  0,           0,              0,              0,
-  0, &nousrreqs
-},
-#endif
-#else /*NGIF*/
-{ SOCK_RAW,    &inetdomain,    IPPROTO_IPIP,   PR_ATOMIC|PR_ADDR,
-  ipip_input,  0,              0,              rip_ctloutput,
+{ SOCK_RAW,    &inetdomain,    IPPROTO_IPV6,   PR_ATOMIC|PR_ADDR|PR_LASTHDR,
+  encap4_input,        0,              0,              rip_ctloutput,
   0,
-  0,           0,              0,              0,
-  0, &rip_usrreqs
+  encap_init,  0,              0,              0,
+  0,
+  &rip_usrreqs,
+  0,           0,              0,      { 0, 0 },       0,      { 0 }
 },
-#endif /*NGIF*/
+#endif
 #if IPDIVERT
-{ SOCK_RAW,    &inetdomain,    IPPROTO_DIVERT, PR_ATOMIC|PR_ADDR,
+{ SOCK_RAW,    &inetdomain,    IPPROTO_DIVERT, PR_ATOMIC|PR_ADDR|PR_PCBLOCK,
   div_input,   0,              0,              ip_ctloutput,
   0,
   div_init,    0,              0,              0,
-  0, &div_usrreqs,
-},
-#endif
-#if TPIP
-{ SOCK_SEQPACKET,&inetdomain,  IPPROTO_TP,     PR_CONNREQUIRED|PR_WANTRCVD,
-  tpip_input,  0,              tpip_ctlinput,  tp_ctloutput,
-  0, tp_usrreq,
-  tp_init,     0,              tp_slowtimo,    tp_drain,
-},
-#endif
-/* EON (ISO CLNL over IP) */
-#if EON
-{ SOCK_RAW,    &inetdomain,    IPPROTO_EON,    0,
-  eoninput,    0,              eonctlinput,            0,
   0,
-  eonprotoinit,        0,              0,              0,
+  &div_usrreqs,
+  div_lock,            div_unlock,             div_getlock,    { 0, 0 },       0,      { 0 }
 },
 #endif
 #if IPXIP
-{ SOCK_RAW,    &inetdomain,    IPPROTO_IDP,    PR_ATOMIC|PR_ADDR,
+{ SOCK_RAW,    &inetdomain,    IPPROTO_IDP,    PR_ATOMIC|PR_ADDR|PR_LASTHDR,
   ipxip_input, 0,              ipxip_ctlinput, 0,
   0,
   0,           0,              0,              0,
-  0, &rip_usrreqs
+  0,
+  &rip_usrreqs,
+  0,           0,              0,      { 0, 0 },       0,      { 0 }
 },
 #endif
 #if NSIP
-{ SOCK_RAW,    &inetdomain,    IPPROTO_IDP,    PR_ATOMIC|PR_ADDR,
+{ SOCK_RAW,    &inetdomain,    IPPROTO_IDP,    PR_ATOMIC|PR_ADDR|PR_LASTHDR,
   idpip_input, 0,              nsip_ctlinput,  0,
   0,
   0,           0,              0,              0,
-  0, &rip_usrreqs
+  0,
+  &rip_usrreqs,
+  0,           0,              0,      { 0, 0 },       0,      { 0 }
 },
 #endif
        /* raw wildcard */
-{ SOCK_RAW,    &inetdomain,    0,              PR_ATOMIC|PR_ADDR,
+{ SOCK_RAW,    &inetdomain,    0,              PR_ATOMIC|PR_ADDR|PR_LASTHDR,
   rip_input,   0,              0,              rip_ctloutput,
   0,
   rip_init,    0,              0,              0,
-  0, &rip_usrreqs
+  0,
+  &rip_usrreqs,
+  0,                   rip_unlock,             0,      { 0, 0 },       0,      { 0 }
 },
 };
 
-#if NGIF > 0
-struct protosw in_gif_protosw = 
-{ SOCK_RAW,     &inetdomain,    0/*IPPROTO_IPV[46]*/,   PR_ATOMIC|PR_ADDR,   
-  in_gif_input, rip_output,     0,              rip_ctloutput,
-  0,
-  0,            0,              0,              0,
-  0, &rip_usrreqs
-}; 
-#endif /*NGIF*/
-
-extern int in_inithead __P((void **, int));
+extern int in_inithead(void **, int);
 
 int in_proto_count = (sizeof (inetsw) / sizeof (struct protosw));
 
 extern void in_dinit(void);
 /* A routing init function, and a header size */
 struct domain inetdomain =
-    { AF_INET, "internet", in_dinit, 0, 0, 
-      inetsw, 0,
-      in_inithead, 32, sizeof(struct sockaddr_in),
-      sizeof(struct tcpiphdr), 0
+    { AF_INET, 
+      "internet", 
+      in_dinit, 
+      0, 
+      0, 
+      inetsw, 
+      0,
+      in_inithead, 
+      32, 
+      sizeof(struct sockaddr_in),
+      sizeof(struct tcpiphdr), 
+      0, 
+      0, 
+      0, 
+      { 0, 0}
     };
 
 DOMAIN_SET(inet);
 
-
 SYSCTL_NODE(_net,      PF_INET,                inet,   CTLFLAG_RW, 0,
        "Internet Family");