xref: /csrg-svn/sys/kern/uipc_proto.c (revision 4825)
1*4825Swnj /*	uipc_proto.c	4.2	81/11/08	*/
2*4825Swnj 
34787Swnj #include "../h/param.h"
4*4825Swnj #include "../h/socket.h"
5*4825Swnj #include "../h/protocol.h"
6*4825Swnj #include "../h/protosw.h"
7*4825Swnj #include "../h/mbuf.h"
8*4825Swnj #include "../net/inet.h"
9*4825Swnj 
104787Swnj /* should include a header file giving desired protocols */
114787Swnj #define	NTCP	1
124787Swnj 
134787Swnj /*
144787Swnj  * Protocol configuration table and routines to search it.
154787Swnj  */
164787Swnj 
174787Swnj /*
184787Swnj  * Generic (local or not yet specified) protocol.
194787Swnj  */
204787Swnj int	gen_usrreq();
214787Swnj 
224787Swnj #if NTCP > 0
234787Swnj /*
244787Swnj  * TCP/IP protocol family: IP, ICMP, UDP, TCP.
254787Swnj  */
26*4825Swnj int	ip_init(),ip_input(),ip_output(),ip_advise(),ip_slowtimo(),ip_drain();
27*4825Swnj int	icmp_input(),icmp_drain();
284787Swnj int	udp_input(),udp_advise(),udp_usrreq(),udp_sense();
29*4825Swnj int	tcp_init(),tcp_input(),tcp_advise(),tcp_fasttimo(),tcp_slowtimo(),
30*4825Swnj 	    tcp_usrreq(),tcp_drain(),tcp_sense();
31*4825Swnj int	ri_input(),ri_advise(),ri_usrreq(),ri_sense();
324787Swnj #endif
334787Swnj 
344787Swnj #if NPUP > 0
354787Swnj /*
364787Swnj  * Pup protocols: PUP, BSP.
374787Swnj  */
384787Swnj int	pup1_input(),pup1_output(),pup1_advise(),pup1_slowtimo(),
394787Swnj 	    pup1_drain(),pup1_usrreq(),pup1_sense();
404787Swnj int	bsp_input(),bsp_advise(),bsp_fasttimo(),bsp_slowtimo(),
414787Swnj 	    bsp_drain(),bsp_usrreq(),bsp_sense();
424787Swnj int	rawpup_input(),rawpup_usrreq(),rawpup_sense();
434787Swnj #endif
444787Swnj 
454787Swnj #if NCHAOS > 0
464787Swnj /*
474787Swnj  * Chaosnet protocols.
484787Swnj  */
494787Swnj /* ... */
504787Swnj #endif
514787Swnj 
524787Swnj #if NOISCP > 0
534787Swnj /*
544787Swnj  * Office information system communcation protocols.
554787Swnj  */
564787Swnj /* ... */
574787Swnj #endif
584787Swnj 
594787Swnj #if NNBS > 0
604787Swnj /*
614787Swnj  * NBS protocols.
624787Swnj  */
634787Swnj /* ... */
644787Swnj #endif
654787Swnj 
664787Swnj #if NECMA > 0
674787Swnj /*
684787Swnj  * ECMA protocols.
694787Swnj  */
704787Swnj /* ... */
714787Swnj #endif
724787Swnj 
734787Swnj #if NDATAKIT > 0
744787Swnj /*
754787Swnj  * Datakit protocols.
764787Swnj  */
774787Swnj /* ... */
784787Swnj #endif
794787Swnj 
804787Swnj struct protosw protosw[] = {
814787Swnj { SOCK_STREAM,	PF_GENERIC,	0,		0,
82*4825Swnj   0,		0,		0,		0,
834787Swnj   0,		0,		0,		gen_usrreq,	0,
844787Swnj   0 },
85*4825Swnj { SOCK_DGRAM,	PF_GENERIC,	0,		PR_ATOMIC|PR_ADDR,
86*4825Swnj   0,		0,		0,		0,
874787Swnj   0,		0,		0,		gen_usrreq,	0,
884787Swnj   0 },
89*4825Swnj { SOCK_RDM,	PF_GENERIC,	0,		PR_ATOMIC|PR_ADDR,
90*4825Swnj   0,		0,		0,		0,
914787Swnj   0,		0,		0,		gen_usrreq,	0,
924787Swnj   0 },
93*4825Swnj { SOCK_RAW,	PF_GENERIC,	0,		PR_ATOMIC|PR_ADDR,
94*4825Swnj   0,		0,		0,		0,
954787Swnj   0,		0,		0,		gen_usrreq,	0,
96*4825Swnj   0 },
974787Swnj #if NTCP > 0
984787Swnj { 0,		0,		0,		0,
99*4825Swnj   ip_init,	ip_input,	ip_output,	0,
1004787Swnj   0,		ip_slowtimo,	ip_drain,	0,		0,
1014787Swnj   0 },
1024787Swnj { 0,		0,		IPPROTO_ICMP,	0,
103*4825Swnj   0,		icmp_input,	0,		0,
1044787Swnj   0,		0,		icmp_drain,	0,		0,
1054787Swnj   0 },
106*4825Swnj { SOCK_DGRAM,	PF_INET,	IPPROTO_UDP,	PR_ATOMIC|PR_ADDR,
107*4825Swnj   0,		udp_input,	0,		udp_advise,
1084787Swnj   0,		0,		0,		udp_usrreq,	udp_sense,
1094787Swnj   MLEN },
1104787Swnj { SOCK_STREAM,	PF_INET,	IPPROTO_TCP,	0,
111*4825Swnj   tcp_init,	tcp_input,	0,		tcp_advise,
1124787Swnj   tcp_fasttimo,	tcp_slowtimo,	tcp_drain,	tcp_usrreq,	tcp_sense,
1134787Swnj   MLEN },
114*4825Swnj { SOCK_RAW,	PF_INET,	IPPROTO_RAW,	PR_ATOMIC|PR_ADDR,
115*4825Swnj   0,		ri_input,	0,		ri_advise,
116*4825Swnj   0,		0,		0,		ri_usrreq,	ri_sense,
1174787Swnj   MLEN },
1184787Swnj #endif
1194787Swnj #if NPUP > 0
120*4825Swnj { SOCK_DGRAM,	PF_PUP,		0,		PR_ATOMIC|PR_ADDR,
121*4825Swnj   pup_init,	pup_input,	pup_output,	pup_advise,
1224787Swnj   0,		pup_slowtimo,	pup_drain,	pup_usrreq,	pup_sense,
1234787Swnj   MLEN },
1244787Swnj { SOCK_STREAM,	PF_PUP1,	PUPPROTO_BSP,	0,
125*4825Swnj   bsp_init,	bsp_input,	0,		bsp_advise,
1264787Swnj   bsp_fasttimo,	bsp_slowtimo,	bsp_drain,	bsp_usrreq,	bsp_sense,
1274787Swnj   MLEN },
128*4825Swnj { SOCK_RAW,	PF_PUP1,	PUPPROTO_RAW,	PR_ATOMIC|PR_ADDR,
129*4825Swnj   rp_init,	rp_input,	0,		rp_advise,
1304787Swnj   rp_fasttimo,	rp_slowtimo,	rp_drain,	rp_usrreq,	rp_sense,
1314787Swnj   MLEN	},
1324787Swnj #endif
1334787Swnj #if NCHAOS > 0
1344787Swnj /* ... */
1354787Swnj #endif
1364787Swnj #if NOISCP > 0
1374787Swnj /* ... */
1384787Swnj #endif
1394787Swnj #if NNBS > 0
1404787Swnj /* ... */
1414787Swnj #endif
1424787Swnj #if NECMA > 0
1434787Swnj /* ... */
1444787Swnj #endif
1454787Swnj #if NDATAKIT > 0
1464787Swnj /* ... */
1474787Swnj #endif
1484787Swnj };
1494787Swnj #define	protoswEND	&protosw[sizeof (protosw)/sizeof (protosw[0])]
1504787Swnj 
1514787Swnj /*
1524787Swnj  * Operations on protocol table and protocol families.
1534787Swnj  */
1544787Swnj 
1554787Swnj /*
1564787Swnj  * Find a standard protocol in a protocol family
1574787Swnj  * of a specific type.
1584787Swnj  */
159*4825Swnj struct protosw *
160*4825Swnj pf_findtype(family, type)
1614787Swnj 	int family, type;
1624787Swnj {
1634787Swnj 	register struct protosw *pr;
1644787Swnj 
1654787Swnj 	if (family == 0)
1664787Swnj 		return (0);
1674787Swnj 	for (pr = protosw; pr < protoswEND; pr++)
1684787Swnj 		if (pr->pr_family == family && pr->pr_type == type)
1694787Swnj 			return (pr);
1704787Swnj 	return (0);
1714787Swnj }
1724787Swnj 
1734787Swnj /*
1744787Swnj  * Find a specified protocol in a specified protocol family.
1754787Swnj  */
176*4825Swnj struct protosw *
177*4825Swnj pf_findproto(family, protocol)
178*4825Swnj 	int family, protocol;
1794787Swnj {
1804787Swnj 	register struct protosw *pr;
1814787Swnj 
1824787Swnj 	if (family == 0)
1834787Swnj 		return (0);
1844787Swnj 	for (pr = protosw; pr < protoswEND; pr++)
185*4825Swnj 		if (pr->pr_family == family && pr->pr_protocol == protocol)
1864787Swnj 			return (pr);
1874787Swnj 	return (0);
1884787Swnj }
189*4825Swnj 
190*4825Swnj prinit()
191*4825Swnj {
192*4825Swnj 
193*4825Swnj }
194