1*25202Skarels 
2*25202Skarels #include "../h/param.h"
3*25202Skarels #include "../h/socket.h"
4*25202Skarels #include "../h/protosw.h"
5*25202Skarels #include "../h/domain.h"
6*25202Skarels #include "../h/mbuf.h"
7*25202Skarels 
8*25202Skarels #include "../net/route.h"
9*25202Skarels #include "../net/raw_cb.h"
10*25202Skarels 
11*25202Skarels #include "../bbnnet/in.h"
12*25202Skarels #include "../bbnnet/in_pcb.h"
13*25202Skarels 
14*25202Skarels /*
15*25202Skarels  * Internet protocols
16*25202Skarels  */
17*25202Skarels 
18*25202Skarels int	 raw_init(), raw_usrreq();
19*25202Skarels 
20*25202Skarels /* IP */
21*25202Skarels int	ip_init(),ip_timeo(),ip_drain();
22*25202Skarels int	ip_send(), ip_ctloutput();
23*25202Skarels int	raw_ip_input(), raw_ip_output();
24*25202Skarels 
25*25202Skarels /* ICMP */
26*25202Skarels int	icmp(), ic_timeo();
27*25202Skarels int	raw_icmp_output();
28*25202Skarels 
29*25202Skarels /* UDP */
30*25202Skarels int	udp_input();
31*25202Skarels int	udp_usrreq(), udp_init(), udp_ctlinput();
32*25202Skarels int	raw_udp_output();
33*25202Skarels 
34*25202Skarels /* TCP */
35*25202Skarels int	tcp_input();
36*25202Skarels int	tcp_usrreq(), tcp_ctlinput(), tcp_ctloutput();
37*25202Skarels int	tcp_init(), tcp_timeo(), tcp_drain();
38*25202Skarels int	raw_tcp_output();
39*25202Skarels 
40*25202Skarels /* RDP */
41*25202Skarels #ifdef RDP
42*25202Skarels int	rdp_input(), rdp_init(), rdp_timeo(), rdp_usrreq();
43*25202Skarels int	rdp_ctlinput(), rdp_ctloutput();
44*25202Skarels int	raw_rdp_output();
45*25202Skarels #endif
46*25202Skarels 
47*25202Skarels /* HMP */
48*25202Skarels #ifdef HMP
49*25202Skarels int	hmp_input(), hmp_init(), hmp_usrreq();
50*25202Skarels int 	hmp_ctlinput(), hmp_ctloutput();
51*25202Skarels int	raw_hmp_output();
52*25202Skarels #endif
53*25202Skarels 
54*25202Skarels /*
55*25202Skarels  * IMP protocol family: raw interface.
56*25202Skarels  * Using the raw interface entry to get the timer routine
57*25202Skarels  * in is a kludge.
58*25202Skarels  */
59*25202Skarels #include "imp.h"
60*25202Skarels #if NIMP > 0
61*25202Skarels int	rimp_output(), hostslowtimo();
62*25202Skarels #endif
63*25202Skarels 
64*25202Skarels #ifdef NSIP
65*25202Skarels int	idpip_input(), rip_output();
66*25202Skarels #endif
67*25202Skarels 
68*25202Skarels extern	struct domain inetdomain;
69*25202Skarels 
70*25202Skarels struct protosw inetsw[] = {
71*25202Skarels { 0,		&inetdomain,	0,		0,
72*25202Skarels   0,		ip_send,	0,		ip_ctloutput,
73*25202Skarels   0,
74*25202Skarels   ip_init,	0,		ip_timeo,	ip_drain
75*25202Skarels },
76*25202Skarels 
77*25202Skarels /*
78*25202Skarels  * put frequently used protocols early.  Table is beginning to get large..
79*25202Skarels  */
80*25202Skarels 
81*25202Skarels /* UDP */
82*25202Skarels { SOCK_DGRAM,	&inetdomain,	IPPROTO_UDP,	PR_ATOMIC|PR_ADDR,
83*25202Skarels   udp_input,	0,		udp_ctlinput,	ip_ctloutput,
84*25202Skarels   udp_usrreq,
85*25202Skarels   udp_init,	0,		0,		0
86*25202Skarels },
87*25202Skarels 
88*25202Skarels /* TCP */
89*25202Skarels { SOCK_STREAM,	&inetdomain,	IPPROTO_TCP,	PR_CONNREQUIRED|PR_WANTRCVD,
90*25202Skarels   tcp_input,	0,		tcp_ctlinput,	tcp_ctloutput,
91*25202Skarels   tcp_usrreq,
92*25202Skarels   tcp_init,	0,		tcp_timeo,	tcp_drain
93*25202Skarels },
94*25202Skarels 
95*25202Skarels /* RDP */
96*25202Skarels #ifdef RDP
97*25202Skarels { SOCK_SEQPACKET, &inetdomain,	IPPROTO_RDP,	PR_CONNREQUIRED|PR_WANTRCVD,
98*25202Skarels   rdp_input,	0,		rdp_ctlinput,	rdp_ctloutput,
99*25202Skarels   rdp_usrreq,
100*25202Skarels   rdp_init,	0,		rdp_timeo,	0
101*25202Skarels },
102*25202Skarels #endif
103*25202Skarels 
104*25202Skarels /* HMP */
105*25202Skarels #ifdef HMP
106*25202Skarels { SOCK_DGRAM,	&inetdomain,	IPPROTO_HMP,	PR_ATOMIC|PR_ADDR,
107*25202Skarels   hmp_input,	0,		hmp_ctlinput,	hmp_ctloutput,
108*25202Skarels   hmp_usrreq,
109*25202Skarels   hmp_init,	0,		0,		0
110*25202Skarels },
111*25202Skarels #endif
112*25202Skarels 
113*25202Skarels #ifdef NSIP
114*25202Skarels { SOCK_RAW,	&inetdomain,	IPPROTO_IDP,	PR_ATOMIC|PR_ADDR,
115*25202Skarels   idpip_input,	rip_output,	0,		0,
116*25202Skarels   raw_usrreq,
117*25202Skarels   0,		0,		0,		0
118*25202Skarels },
119*25202Skarels #endif
120*25202Skarels 
121*25202Skarels /*
122*25202Skarels  * to get all incoming IP packets:
123*25202Skarels  *	socket(AF_INET,SOCK_RAW,0)
124*25202Skarels  */
125*25202Skarels { SOCK_RAW,	&inetdomain,	0,		PR_ATOMIC|PR_ADDR,
126*25202Skarels   raw_ip_input,	raw_ip_output,	0,		0,
127*25202Skarels   raw_usrreq,
128*25202Skarels   raw_init,	0,		0,		0
129*25202Skarels },
130*25202Skarels 
131*25202Skarels /*
132*25202Skarels  * to get all incoming ICMP packets:
133*25202Skarels  * 	socket(AF_INET,SOCK_RAW, IPPROTO_ICMP)
134*25202Skarels  */
135*25202Skarels { SOCK_RAW,	&inetdomain,	IPPROTO_ICMP,	PR_ATOMIC|PR_ADDR,
136*25202Skarels   raw_ip_input,	raw_icmp_output,0,		0,
137*25202Skarels   raw_usrreq,
138*25202Skarels   0,		0,		ic_timeo,	0
139*25202Skarels },
140*25202Skarels 
141*25202Skarels #ifdef RDP
142*25202Skarels /*
143*25202Skarels  * to get all incoming RDP packets:
144*25202Skarels  *	socket(AF_INET,SOCK_RAW, IPPROTO_RDP)
145*25202Skarels  */
146*25202Skarels { SOCK_RAW,	&inetdomain,	IPPROTO_RDP,	PR_ATOMIC|PR_ADDR,
147*25202Skarels   raw_ip_input,	raw_rdp_output,	0,		0,
148*25202Skarels   raw_usrreq,
149*25202Skarels   0,		0,		0,		0
150*25202Skarels },
151*25202Skarels #endif
152*25202Skarels 
153*25202Skarels /*
154*25202Skarels  * to get all incoming UDP packets:
155*25202Skarels  *	socket(AF_INET, SOCK_RAW, IPPROTO_UDP);
156*25202Skarels  */
157*25202Skarels { SOCK_RAW,	&inetdomain,	IPPROTO_UDP,	PR_ATOMIC|PR_ADDR,
158*25202Skarels   raw_ip_input,	raw_udp_output,	0,		0,
159*25202Skarels   raw_usrreq,
160*25202Skarels   0,		0,		0,		0
161*25202Skarels },
162*25202Skarels 
163*25202Skarels #ifdef HMP
164*25202Skarels /*
165*25202Skarels  * to get all incoming HMP packets:
166*25202Skarels  *	socket(AF_INET,SOCK_RAW, IPPROTO_HMP);
167*25202Skarels  */
168*25202Skarels { SOCK_RAW,	&inetdomain,	IPPROTO_HMP,	PR_ATOMIC|PR_ADDR,
169*25202Skarels   raw_ip_input,	raw_hmp_output,	0,		0,
170*25202Skarels   raw_usrreq,
171*25202Skarels   0,		0,		0,		0
172*25202Skarels },
173*25202Skarels #endif
174*25202Skarels 
175*25202Skarels /*
176*25202Skarels  * to get all TCP packets:
177*25202Skarels  *	socket(AF_INET, SOCK_RAW, IPPROTO_TCP);
178*25202Skarels  */
179*25202Skarels { SOCK_RAW,	&inetdomain,	IPPROTO_TCP,	PR_ATOMIC|PR_ADDR,
180*25202Skarels   raw_ip_input,	raw_tcp_output,	0,		0,
181*25202Skarels   raw_usrreq,
182*25202Skarels   0,		0,		0,		0
183*25202Skarels },
184*25202Skarels };
185*25202Skarels 
186*25202Skarels struct domain inetdomain =
187*25202Skarels     { AF_INET, "internet", 0, 0, 0,
188*25202Skarels       inetsw, &inetsw[sizeof(inetsw)/sizeof(inetsw[0])] };
189*25202Skarels 
190*25202Skarels #if NIMP > 0
191*25202Skarels extern	struct domain impdomain;
192*25202Skarels 
193*25202Skarels struct protosw impsw[] = {
194*25202Skarels { SOCK_RAW,	&impdomain,	0,		PR_ATOMIC|PR_ADDR,
195*25202Skarels   0,		rimp_output,	0,		0,
196*25202Skarels   raw_usrreq,
197*25202Skarels   0,		0,		hostslowtimo,	0
198*25202Skarels },
199*25202Skarels };
200*25202Skarels 
201*25202Skarels struct domain impdomain =
202*25202Skarels     { AF_IMPLINK, "imp", 0, 0, 0,
203*25202Skarels       impsw, &impsw[sizeof (impsw)/sizeof(impsw[0])] };
204*25202Skarels #endif
205*25202Skarels 
206*25202Skarels #include "hy.h"
207*25202Skarels #if NHY > 0
208*25202Skarels /*
209*25202Skarels  * HYPERchannel protocol family: raw interface.
210*25202Skarels  */
211*25202Skarels int	rhy_output();
212*25202Skarels 
213*25202Skarels struct protosw hysw[] = {
214*25202Skarels { SOCK_RAW,	PF_HYLINK,	0,		PR_ATOMIC|PR_ADDR,
215*25202Skarels   0,		rhy_output,	0,		0,
216*25202Skarels   raw_usrreq,
217*25202Skarels   0,		0,		0,		0
218*25202Skarels },
219*25202Skarels };
220*25202Skarels 
221*25202Skarels struct domain hydomain =
222*25202Skarels     { AF_HYLINK, "hy", hysw, &hysw[sizeof (hysw)/sizeof(hysw[0])] };
223*25202Skarels #endif
224*25202Skarels 
225*25202Skarels #define N_ELEMENTS(x) (sizeof(x)/sizeof((x)[0]))
226*25202Skarels 
227*25202Skarels #ifdef AF_RDPDEBUG
228*25202Skarels struct protosw rdpdebugsw[] = {
229*25202Skarels 	{ SOCK_RAW, PF_RDPDEBUG, 0, PR_ATOMIC|PR_ADDR,
230*25202Skarels 	  0,0,0,0,
231*25202Skarels 	  raw_usrreq,
232*25202Skarels 	  0,0,0,0}
233*25202Skarels };
234*25202Skarels struct domain rdpdebugdomain =
235*25202Skarels { AF_RDPDEBUG, "rdpdebug", rdpdebugsw, &rdpdebugsw[N_ELEMENTS(rdpdebugsw)] };
236*25202Skarels #endif
237*25202Skarels 
238*25202Skarels #ifdef AF_TCPDEBUG
239*25202Skarels struct protosw tcpdebugsw[] = {
240*25202Skarels 	{ SOCK_RAW, PF_TCPDEBUG, 0, PR_ATOMIC|PR_ADDR,
241*25202Skarels 	  0,0,0,0,
242*25202Skarels 	  raw_usrreq,
243*25202Skarels 	  0,0,0,0}
244*25202Skarels };
245*25202Skarels struct domain tcpdebugdomain =
246*25202Skarels { AF_TCPDEBUG, "tcpdebug", tcpdebugsw, &tcpdebugsw[N_ELEMENTS(tcpdebugsw)] };
247*25202Skarels #endif
248