xref: /csrg-svn/sys/netinet/in_proto.c (revision 68256)
123179Smckusick /*
263218Sbostic  * Copyright (c) 1982, 1986, 1993
363218Sbostic  *	The Regents of the University of California.  All rights reserved.
423179Smckusick  *
544476Sbostic  * %sccs.include.redist.c%
632787Sbostic  *
7*68256Scgd  *	@(#)in_proto.c	8.2 (Berkeley) 02/09/95
823179Smckusick  */
97618Sroot 
1056531Sbostic #include <sys/param.h>
1156531Sbostic #include <sys/socket.h>
1256531Sbostic #include <sys/protosw.h>
1356531Sbostic #include <sys/domain.h>
1456531Sbostic #include <sys/mbuf.h>
157618Sroot 
1661335Sbostic #include <net/if.h>
1761335Sbostic #include <net/radix.h>
1861335Sbostic #include <net/route.h>
1961335Sbostic 
2056531Sbostic #include <netinet/in.h>
2156531Sbostic #include <netinet/in_systm.h>
2261335Sbostic #include <netinet/ip.h>
2361335Sbostic #include <netinet/ip_var.h>
2461335Sbostic #include <netinet/ip_icmp.h>
2561335Sbostic #include <netinet/in_pcb.h>
2661335Sbostic #include <netinet/igmp_var.h>
2761335Sbostic #include <netinet/tcp.h>
2861335Sbostic #include <netinet/tcp_fsm.h>
2961335Sbostic #include <netinet/tcp_seq.h>
3061335Sbostic #include <netinet/tcp_timer.h>
3161335Sbostic #include <netinet/tcp_var.h>
3261335Sbostic #include <netinet/tcpip.h>
3361335Sbostic #include <netinet/tcp_debug.h>
3461335Sbostic #include <netinet/udp.h>
3561335Sbostic #include <netinet/udp_var.h>
367618Sroot /*
377618Sroot  * TCP/IP protocol family: IP, ICMP, UDP, TCP.
387618Sroot  */
397618Sroot 
4021771Skarels #ifdef NSIP
4161335Sbostic void	idpip_input(), nsip_ctlinput();
4221771Skarels #endif
4321771Skarels 
4437471Ssklower #ifdef TPIP
45*68256Scgd void	tpip_input(), tpip_ctlinput(), tp_init(), tp_slowtimo(), tp_drain();
46*68256Scgd int	tp_ctloutput(), tp_usrreq();
4737471Ssklower #endif
4837471Ssklower 
4937471Ssklower #ifdef EON
5061335Sbostic void	eoninput(), eonctlinput(), eonprotoinit();
5157433Sandrew #endif /* EON */
5237471Ssklower 
5316990Skarels extern	struct domain inetdomain;
5416990Skarels 
557618Sroot struct protosw inetsw[] = {
5616990Skarels { 0,		&inetdomain,	0,		0,
577618Sroot   0,		ip_output,	0,		0,
587618Sroot   0,
5959134Smckusick   ip_init,	0,		ip_slowtimo,	ip_drain,	ip_sysctl
607618Sroot },
6116990Skarels { SOCK_DGRAM,	&inetdomain,	IPPROTO_UDP,	PR_ATOMIC|PR_ADDR,
6224809Skarels   udp_input,	0,		udp_ctlinput,	ip_ctloutput,
637618Sroot   udp_usrreq,
6459309Smckusick   udp_init,	0,		0,		0,		udp_sysctl
657618Sroot },
6616990Skarels { SOCK_STREAM,	&inetdomain,	IPPROTO_TCP,	PR_CONNREQUIRED|PR_WANTRCVD,
6724809Skarels   tcp_input,	0,		tcp_ctlinput,	tcp_ctloutput,
687618Sroot   tcp_usrreq,
697618Sroot   tcp_init,	tcp_fasttimo,	tcp_slowtimo,	tcp_drain,
707618Sroot },
7116990Skarels { SOCK_RAW,	&inetdomain,	IPPROTO_RAW,	PR_ATOMIC|PR_ADDR,
7226026Skarels   rip_input,	rip_output,	0,		rip_ctloutput,
7337471Ssklower   rip_usrreq,
747618Sroot   0,		0,		0,		0,
757618Sroot },
7621771Skarels { SOCK_RAW,	&inetdomain,	IPPROTO_ICMP,	PR_ATOMIC|PR_ADDR,
7726026Skarels   icmp_input,	rip_output,	0,		rip_ctloutput,
7837471Ssklower   rip_usrreq,
7959134Smckusick   0,		0,		0,		0,		icmp_sysctl
8016797Skarels },
8157433Sandrew { SOCK_RAW,	&inetdomain,	IPPROTO_IGMP,	PR_ATOMIC|PR_ADDR,
8257433Sandrew   igmp_input,	rip_output,	0,		rip_ctloutput,
8357433Sandrew   rip_usrreq,
8457433Sandrew   igmp_init,	igmp_fasttimo,	0,		0,
8557433Sandrew },
8637471Ssklower #ifdef TPIP
8737471Ssklower { SOCK_SEQPACKET,&inetdomain,	IPPROTO_TP,	PR_CONNREQUIRED|PR_WANTRCVD,
8854716Ssklower   tpip_input,	0,		tpip_ctlinput,	tp_ctloutput,
8937471Ssklower   tp_usrreq,
9037471Ssklower   tp_init,	0,		tp_slowtimo,	tp_drain,
9137471Ssklower },
9237471Ssklower #endif
9337471Ssklower /* EON (ISO CLNL over IP) */
9437471Ssklower #ifdef EON
9537471Ssklower { SOCK_RAW,	&inetdomain,	IPPROTO_EON,	0,
9637471Ssklower   eoninput,	0,		eonctlinput,		0,
9737471Ssklower   0,
9837471Ssklower   eonprotoinit,	0,		0,		0,
9937471Ssklower },
10037471Ssklower #endif
10121771Skarels #ifdef NSIP
10224231Skarels { SOCK_RAW,	&inetdomain,	IPPROTO_IDP,	PR_ATOMIC|PR_ADDR,
10325056Ssklower   idpip_input,	rip_output,	nsip_ctlinput,	0,
10437471Ssklower   rip_usrreq,
10516052Skarels   0,		0,		0,		0,
10616052Skarels },
10721771Skarels #endif
10821771Skarels 	/* raw wildcard */
10921771Skarels { SOCK_RAW,	&inetdomain,	0,		PR_ATOMIC|PR_ADDR,
11026026Skarels   rip_input,	rip_output,	0,		rip_ctloutput,
11137471Ssklower   rip_usrreq,
11254716Ssklower   rip_init,	0,		0,		0,
11321771Skarels },
1147620Sroot };
1157620Sroot 
1167620Sroot struct domain inetdomain =
11716990Skarels     { AF_INET, "internet", 0, 0, 0,
11854825Ssklower       inetsw, &inetsw[sizeof(inetsw)/sizeof(inetsw[0])], 0,
11954825Ssklower       rn_inithead, 32, sizeof(struct sockaddr_in) };
1207620Sroot 
12161335Sbostic #include "imp.h"
1227618Sroot #if NIMP > 0
12316990Skarels extern	struct domain impdomain;
12461335Sbostic int	rimp_output(), hostslowtimo();
12516990Skarels 
1267620Sroot struct protosw impsw[] = {
12716990Skarels { SOCK_RAW,	&impdomain,	0,		PR_ATOMIC|PR_ADDR,
1287618Sroot   0,		rimp_output,	0,		0,
12937471Ssklower   rip_usrreq,
1307618Sroot   0,		0,		hostslowtimo,	0,
1317620Sroot },
1327618Sroot };
1337618Sroot 
1347620Sroot struct domain impdomain =
13516990Skarels     { AF_IMPLINK, "imp", 0, 0, 0,
13616990Skarels       impsw, &impsw[sizeof (impsw)/sizeof(impsw[0])] };
1377620Sroot #endif
13823744Skarels 
13923744Skarels #include "hy.h"
14023744Skarels #if NHY > 0
14123744Skarels /*
14223744Skarels  * HYPERchannel protocol family: raw interface.
14323744Skarels  */
14423744Skarels int	rhy_output();
14524809Skarels extern	struct domain hydomain;
14623744Skarels 
14723744Skarels struct protosw hysw[] = {
14824809Skarels { SOCK_RAW,	&hydomain,	0,		PR_ATOMIC|PR_ADDR,
14923744Skarels   0,		rhy_output,	0,		0,
15037471Ssklower   rip_usrreq,
15123744Skarels   0,		0,		0,		0,
15223744Skarels },
15323744Skarels };
15423744Skarels 
15523744Skarels struct domain hydomain =
15626246Skarels     { AF_HYLINK, "hy", 0, 0, 0, hysw, &hysw[sizeof (hysw)/sizeof(hysw[0])] };
15723744Skarels #endif
158