xref: /csrg-svn/sys/netinet/in_proto.c (revision 23744)
123179Smckusick /*
223179Smckusick  * Copyright (c) 1982 Regents of the University of California.
323179Smckusick  * All rights reserved.  The Berkeley software License Agreement
423179Smckusick  * specifies the terms and conditions for redistribution.
523179Smckusick  *
6*23744Skarels  *	@(#)in_proto.c	6.9 (Berkeley) 06/24/85
723179Smckusick  */
87618Sroot 
917059Sbloom #include "param.h"
1017059Sbloom #include "socket.h"
1117059Sbloom #include "protosw.h"
1217059Sbloom #include "domain.h"
1317059Sbloom #include "mbuf.h"
147618Sroot 
1517059Sbloom #include "in.h"
1617059Sbloom #include "in_systm.h"
179030Sroot 
187618Sroot /*
197618Sroot  * TCP/IP protocol family: IP, ICMP, UDP, TCP.
207618Sroot  */
217618Sroot int	ip_output();
227618Sroot int	ip_init(),ip_slowtimo(),ip_drain();
237618Sroot int	icmp_input();
247618Sroot int	udp_input(),udp_ctlinput();
257618Sroot int	udp_usrreq();
267618Sroot int	udp_init();
277618Sroot int	tcp_input(),tcp_ctlinput();
287618Sroot int	tcp_usrreq();
297618Sroot int	tcp_init(),tcp_fasttimo(),tcp_slowtimo(),tcp_drain();
307618Sroot int	rip_input(),rip_output();
317620Sroot extern	int raw_usrreq();
327618Sroot /*
337618Sroot  * IMP protocol family: raw interface.
347618Sroot  * Using the raw interface entry to get the timer routine
357618Sroot  * in is a kludge.
367618Sroot  */
377618Sroot #include "imp.h"
387618Sroot #if NIMP > 0
397618Sroot int	rimp_output(), hostslowtimo();
407618Sroot #endif
417618Sroot 
4221771Skarels #ifdef NSIP
4321771Skarels int	idpip_input();
4421771Skarels #endif
4521771Skarels 
4616990Skarels extern	struct domain inetdomain;
4716990Skarels 
487618Sroot struct protosw inetsw[] = {
4916990Skarels { 0,		&inetdomain,	0,		0,
507618Sroot   0,		ip_output,	0,		0,
517618Sroot   0,
527618Sroot   ip_init,	0,		ip_slowtimo,	ip_drain,
537618Sroot },
5416990Skarels { SOCK_DGRAM,	&inetdomain,	IPPROTO_UDP,	PR_ATOMIC|PR_ADDR,
557618Sroot   udp_input,	0,		udp_ctlinput,	0,
567618Sroot   udp_usrreq,
577618Sroot   udp_init,	0,		0,		0,
587618Sroot },
5916990Skarels { SOCK_STREAM,	&inetdomain,	IPPROTO_TCP,	PR_CONNREQUIRED|PR_WANTRCVD,
607618Sroot   tcp_input,	0,		tcp_ctlinput,	0,
617618Sroot   tcp_usrreq,
627618Sroot   tcp_init,	tcp_fasttimo,	tcp_slowtimo,	tcp_drain,
637618Sroot },
6416990Skarels { SOCK_RAW,	&inetdomain,	IPPROTO_RAW,	PR_ATOMIC|PR_ADDR,
657618Sroot   rip_input,	rip_output,	0,	0,
667618Sroot   raw_usrreq,
677618Sroot   0,		0,		0,		0,
687618Sroot },
6921771Skarels { SOCK_RAW,	&inetdomain,	IPPROTO_ICMP,	PR_ATOMIC|PR_ADDR,
7021771Skarels   icmp_input,	rip_output,	0,		0,
7116797Skarels   raw_usrreq,
7216797Skarels   0,		0,		0,		0,
7316797Skarels },
7421771Skarels #ifdef NSIP
7521771Skarels { SOCK_RAW,	&inetdomain,	IPPROTO_PUP,	PR_ATOMIC|PR_ADDR,
7621771Skarels   idpip_input,	rip_output,	0,		0,
7716052Skarels   raw_usrreq,
7816052Skarels   0,		0,		0,		0,
7916052Skarels },
8021771Skarels #endif
8121771Skarels 	/* raw wildcard */
8221771Skarels { SOCK_RAW,	&inetdomain,	0,		PR_ATOMIC|PR_ADDR,
8321771Skarels   rip_input,	rip_output,	0,	0,
8421771Skarels   raw_usrreq,
8521771Skarels   0,		0,		0,		0,
8621771Skarels },
877620Sroot };
887620Sroot 
897620Sroot struct domain inetdomain =
9016990Skarels     { AF_INET, "internet", 0, 0, 0,
9116990Skarels       inetsw, &inetsw[sizeof(inetsw)/sizeof(inetsw[0])] };
927620Sroot 
937618Sroot #if NIMP > 0
9416990Skarels extern	struct domain impdomain;
9516990Skarels 
967620Sroot struct protosw impsw[] = {
9716990Skarels { SOCK_RAW,	&impdomain,	0,		PR_ATOMIC|PR_ADDR,
987618Sroot   0,		rimp_output,	0,		0,
997618Sroot   raw_usrreq,
1007618Sroot   0,		0,		hostslowtimo,	0,
1017620Sroot },
1027618Sroot };
1037618Sroot 
1047620Sroot struct domain impdomain =
10516990Skarels     { AF_IMPLINK, "imp", 0, 0, 0,
10616990Skarels       impsw, &impsw[sizeof (impsw)/sizeof(impsw[0])] };
1077620Sroot #endif
108*23744Skarels 
109*23744Skarels #include "hy.h"
110*23744Skarels #if NHY > 0
111*23744Skarels /*
112*23744Skarels  * HYPERchannel protocol family: raw interface.
113*23744Skarels  */
114*23744Skarels int	rhy_output();
115*23744Skarels 
116*23744Skarels struct protosw hysw[] = {
117*23744Skarels { SOCK_RAW,	PF_HYLINK,	0,		PR_ATOMIC|PR_ADDR,
118*23744Skarels   0,		rhy_output,	0,		0,
119*23744Skarels   raw_usrreq,
120*23744Skarels   0,		0,		0,		0,
121*23744Skarels },
122*23744Skarels };
123*23744Skarels 
124*23744Skarels struct domain hydomain =
125*23744Skarels     { AF_HYLINK, "hy", hysw, &hysw[sizeof (hysw)/sizeof(hysw[0])] };
126*23744Skarels #endif
127