|
|
1.1 root 1: /*
2: * Copyright (c) 1982, 1986 Regents of the University of California.
3: * All rights reserved.
4: *
5: * Redistribution is only permitted until one year after the first shipment
6: * of 4.4BSD by the Regents. Otherwise, redistribution and use in source and
7: * binary forms are permitted provided that: (1) source distributions retain
8: * this entire copyright notice and comment, and (2) distributions including
9: * binaries display the following acknowledgement: This product includes
10: * software developed by the University of California, Berkeley and its
11: * contributors'' in the documentation or other materials provided with the
12: * distribution and in all advertising materials mentioning features or use
13: * of this software. Neither the name of the University nor the names of
14: * its contributors may be used to endorse or promote products derived from
15: * this software without specific prior written permission.
16: * THIS SOFTWARE IS PROVIDED AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
17: * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
18: * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
19: *
20: * @(#)in_proto.c 7.5 (Berkeley) 6/28/90
21: */
22:
23: #include "param.h"
24: #include "socket.h"
25: #include "protosw.h"
26: #include "domain.h"
27: #include "mbuf.h"
28:
29: #include "in.h"
30: #include "in_systm.h"
31:
32: /*
33: * TCP/IP protocol family: IP, ICMP, UDP, TCP.
34: */
35: int ip_output(),ip_ctloutput();
36: int ip_init(),ip_slowtimo(),ip_drain();
37: int icmp_input();
38: int udp_input(),udp_ctlinput();
39: int udp_usrreq();
40: int udp_init();
41: int tcp_input(),tcp_ctlinput();
42: int tcp_usrreq(),tcp_ctloutput();
43: int tcp_init(),tcp_fasttimo(),tcp_slowtimo(),tcp_drain();
44: int rip_input(),rip_output(),rip_ctloutput(), rip_usrreq();
45: /*
46: * IMP protocol family: raw interface.
47: * Using the raw interface entry to get the timer routine
48: * in is a kludge.
49: */
50: #include "imp.h"
51: #if NIMP > 0
52: int rimp_output(), hostslowtimo();
53: #endif
54:
55: #ifdef NSIP
56: int idpip_input(), nsip_ctlinput();
57: #endif
58:
59: #ifdef TPIP
60: int tpip_input(), tpip_ctlinput(), tp_ctloutput(), tp_usrreq();
61: int tp_init(), tp_slowtimo(), tp_drain();
62: #endif
63:
64: #ifdef EON
65: int eoninput(), eonctlinput(), eonprotoinit();
66: #endif EON
67:
68: extern struct domain inetdomain;
69:
70: struct protosw inetsw[] = {
71: { 0, &inetdomain, 0, 0,
72: 0, ip_output, 0, 0,
73: 0,
74: ip_init, 0, ip_slowtimo, ip_drain,
75: },
76: { SOCK_DGRAM, &inetdomain, IPPROTO_UDP, PR_ATOMIC|PR_ADDR,
77: udp_input, 0, udp_ctlinput, ip_ctloutput,
78: udp_usrreq,
79: udp_init, 0, 0, 0,
80: },
81: { SOCK_STREAM, &inetdomain, IPPROTO_TCP, PR_CONNREQUIRED|PR_WANTRCVD,
82: tcp_input, 0, tcp_ctlinput, tcp_ctloutput,
83: tcp_usrreq,
84: tcp_init, tcp_fasttimo, tcp_slowtimo, tcp_drain,
85: },
86: { SOCK_RAW, &inetdomain, IPPROTO_RAW, PR_ATOMIC|PR_ADDR,
87: rip_input, rip_output, 0, rip_ctloutput,
88: rip_usrreq,
89: 0, 0, 0, 0,
90: },
91: { SOCK_RAW, &inetdomain, IPPROTO_ICMP, PR_ATOMIC|PR_ADDR,
92: icmp_input, rip_output, 0, rip_ctloutput,
93: rip_usrreq,
94: 0, 0, 0, 0,
95: },
96: #ifdef TPIP
97: { SOCK_SEQPACKET,&inetdomain, IPPROTO_TP, PR_CONNREQUIRED|PR_WANTRCVD,
98: tpip_input, 0, tpip_ctlinput, tp_ctloutput,
99: tp_usrreq,
100: tp_init, 0, tp_slowtimo, tp_drain,
101: },
102: #endif
103: /* EON (ISO CLNL over IP) */
104: #ifdef EON
105: { SOCK_RAW, &inetdomain, IPPROTO_EON, 0,
106: eoninput, 0, eonctlinput, 0,
107: 0,
108: eonprotoinit, 0, 0, 0,
109: },
110: #endif
111: #ifdef NSIP
112: { SOCK_RAW, &inetdomain, IPPROTO_IDP, PR_ATOMIC|PR_ADDR,
113: idpip_input, rip_output, nsip_ctlinput, 0,
114: rip_usrreq,
115: 0, 0, 0, 0,
116: },
117: #endif
118: /* raw wildcard */
119: { SOCK_RAW, &inetdomain, 0, PR_ATOMIC|PR_ADDR,
120: rip_input, rip_output, 0, rip_ctloutput,
121: rip_usrreq,
122: 0, 0, 0, 0,
123: },
124: };
125:
126: struct domain inetdomain =
127: { AF_INET, "internet", 0, 0, 0,
128: inetsw, &inetsw[sizeof(inetsw)/sizeof(inetsw[0])] };
129:
130: #if NIMP > 0
131: extern struct domain impdomain;
132:
133: struct protosw impsw[] = {
134: { SOCK_RAW, &impdomain, 0, PR_ATOMIC|PR_ADDR,
135: 0, rimp_output, 0, 0,
136: rip_usrreq,
137: 0, 0, hostslowtimo, 0,
138: },
139: };
140:
141: struct domain impdomain =
142: { AF_IMPLINK, "imp", 0, 0, 0,
143: impsw, &impsw[sizeof (impsw)/sizeof(impsw[0])] };
144: #endif
145:
146: #include "hy.h"
147: #if NHY > 0
148: /*
149: * HYPERchannel protocol family: raw interface.
150: */
151: int rhy_output();
152: extern struct domain hydomain;
153:
154: struct protosw hysw[] = {
155: { SOCK_RAW, &hydomain, 0, PR_ATOMIC|PR_ADDR,
156: 0, rhy_output, 0, 0,
157: rip_usrreq,
158: 0, 0, 0, 0,
159: },
160: };
161:
162: struct domain hydomain =
163: { AF_HYLINK, "hy", 0, 0, 0, hysw, &hysw[sizeof (hysw)/sizeof(hysw[0])] };
164: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.