1 /* $Header: fsmdef.h,v 1.4 85/06/18 14:28:45 walsh Exp $ */
2
3
4 #ifndef TRPT
5 char fstab[TCP_NSTATES][INOP] = {
6 {
7 /* STATE CLOSED */
8 /* unused X unused */ 0,
9 /* CLOSED X from U:OPEN(await) */ 1,
10 /* CLOSED X from N:RECEIVE(response) */ 0,
11 /* CLOSED X from U:OPEN(request) */ 4,
12 /* user may close a socket after socket() or bind() */
13 /* CLOSED X from U:CLOSE(request) */ 6, /* was 0 in 4.1 */
14 /* CLOSED X from S:TIMER(response) */ 24,
15 /* CLOSED X from U:RECEIVE(request) */ 0,
16 /* CLOSED X from U:SEND(normal) */ 0,
17 /* CLOSED X from U:ABORT(request) */ 0,
18 /* CLOSED X from N:CLEAR(indication) */ 24,
19 }, /* STATE CLOSED */
20
21 /* STATE LISTEN */
22 {
23 /* LISTEN X unused */ 0,
24 /* LISTEN X from U:OPEN(await) */ 0,
25 /* LISTEN X from N:RECEIVE(response) */ 2,
26 /* LISTEN X from U:OPEN(request) */ 0,
27 /* LISTEN X from U:CLOSE(request) */ 6,
28 /* LISTEN X from S:TIMER(response) */ 9,
29 /* LISTEN X from U:RECEIVE(request) */ 24,
30 /* LISTEN X from U:SEND(normal) */ 24,
31 /* LISTEN X from U:ABORT(request) */ 21,
32 /* LISTEN X from N:CLEAR(indication) */ 23,
33 }, /* STATE LISTEN */
34
35
36 /* STATE SYN_SENT */
37 {
38 /* SYN_SENT X unused */ 0,
39 /* SYN_SENT X from U:OPEN(await) */ 0,
40 /* SYN_SENT X from N:RECEIVE(response) */ 5,
41 /* SYN_SENT X from U:OPEN(request) */ 0,
42 /* SYN_SENT X from U:CLOSE(request) */ 6,
43 /* SYN_SENT X from S:TIMER(response) */ 9,
44 /* SYN_SENT X from U:RECEIVE(request) */ 24,
45 /* SYN_SENT X from U:SEND(normal) */ 19, /* was 24 in 4.1 */
46 /* SYN_SENT X from U:ABORT(request) */ 21,
47 /* SYN_SENT X from N:CLEAR(indication) */ 23,
48 }, /* STATE SYN_SENT */
49
50
51 /* STATE SYN_RCVD */
52 {
53 /* SYN_RCVD X unused */ 0,
54 /* SYN_RCVD X from U:OPEN(await) */ 0,
55 /* SYN_RCVD X from N:RECEIVE(response) */ 3,
56 /* SYN_RCVD X from U:OPEN(request) */ 0,
57 /* SYN_RCVD X from U:CLOSE(request) */ 14,
58 /* SYN_RCVD X from S:TIMER(response) */ 9,
59 /* SYN_RCVD X from U:RECEIVE(request) */ 24,
60 /* SYN_RCVD X from U:SEND(normal) */ 24,
61 /* SYN_RCVD X from U:ABORT(request) */ 21,
62 /* SYN_RCVD X from N:CLEAR(indication) */ 23,
63 }, /* STATE SYN_RCVD */
64
65
66 /* STATE L_SYN_RCVD */
67 {
68 /* L_SYN_RCVD X unused */ 0,
69 /* L_SYN_RCVD X from U:OPEN(await) */ 0,
70 /* L_SYN_RCVD X from N:RECEIVE(response) */ 3,
71 /* L_SYN_RCVD X from U:OPEN(request) */ 0,
72 /* L_SYN_RCVD X from U:CLOSE(request) */ 14,
73 /* L_SYN_RCVD X from S:TIMER(response) */ 9,
74 /* L_SYN_RCVD X from U:RECEIVE(request) */ 24,
75 /* L_SYN_RCVD X from U:SEND(normal) */ 24,
76 /* L_SYN_RCVD X from U:ABORT(request) */ 21,
77 /* L_SYN_RCVD X from N:CLEAR(indication) */ 23,
78 }, /* STATE L_SYN_RCVD */
79
80
81 /* STATE ESTAB */
82 {
83 /* ESTAB X unused */ 0,
84 /* ESTAB X from U:OPEN(await) */ 0,
85 /* ESTAB X from N:RECEIVE(response) */ 7,
86 /* ESTAB X from U:OPEN(request) */ 0,
87 /* ESTAB X from U:CLOSE(request) */ 14,
88 /* ESTAB X from S:TIMER(response) */ 9,
89 /* ESTAB X from U:RECEIVE(request) */ 20,
90 /* ESTAB X from U:SEND(normal) */ 19,
91 /* ESTAB X from U:ABORT(request) */ 22,
92 /* ESTAB X from N:CLEAR(indication) */ 23,
93 }, /* STATE ESTAB */
94
95
96 /* STATE FIN_WAIT_1 */
97 {
98 /* FIN_WAIT_1 X unused */ 0,
99 /* FIN_WAIT_1 X from U:OPEN(await) */ 0,
100 /* FIN_WAIT_1 X from N:RECEIVE(response) */ 15,
101 /* FIN_WAIT_1 X from U:OPEN(request) */ 0,
102 /* FIN_WAIT_1 X from U:CLOSE(request) */ 24,
103 /* FIN_WAIT_1 X from S:TIMER(response) */ 9,
104 /* FIN_WAIT_1 X from U:RECEIVE(request) */ 20,
105 /* FIN_WAIT_1 X from U:SEND(normal) */ 25,
106 /* FIN_WAIT_1 X from U:ABORT(request) */ 22,
107 /* FIN_WAIT_1 X from N:CLEAR(indication) */ 23,
108 }, /* STATE FIN_WAIT_1 */
109
110
111 /* STATE FIN_WAIT_2 */
112 {
113 /* FIN_WAIT_2 X unused */ 0,
114 /* FIN_WAIT_2 X from U:OPEN(await) */ 0,
115 /* FIN_WAIT_2 X from N:RECEIVE(response) */ 16,
116 /* FIN_WAIT_2 X from U:OPEN(request) */ 0,
117 /* FIN_WAIT_2 X from U:CLOSE(request) */ 24,
118 /* FIN_WAIT_2 X from S:TIMER(response) */ 9,
119 /* FIN_WAIT_2 X from U:RECEIVE(request) */ 20,
120 /* FIN_WAIT_2 X from U:SEND(normal) */ 24,
121 /* FIN_WAIT_2 X from U:ABORT(request) */ 22,
122 /* FIN_WAIT_2 X from N:CLEAR(indication) */ 23,
123 }, /* STATE FIN_WAIT_2 */
124
125
126 /* STATE TIME_WAIT */
127 {
128 /* TIME_WAIT X unused */ 0,
129 /* TIME_WAIT X from U:OPEN(await) */ 0,
130 /* TIME_WAIT X from N:RECEIVE(response) */ 18,
131 /* TIME_WAIT X from U:OPEN(request) */ 0,
132 /* TIME_WAIT X from U:CLOSE(request) */ 24,
133 /* TIME_WAIT X from S:TIMER(response) */ 9,
134 /* TIME_WAIT X from U:RECEIVE(request) */ 20,
135 /* TIME_WAIT X from U:SEND(normal) */ 25,
136 /* TIME_WAIT X from U:ABORT(request) */ 22,
137 /* TIME_WAIT X from N:CLEAR(indication) */ 23,
138 }, /* STATE TIME_WAIT */
139
140
141 /* STATE CLOSE_WAIT */
142 {
143 /* CLOSE_WAIT X unused */ 0,
144 /* CLOSE_WAIT X from U:OPEN(await) */ 0,
145 /* CLOSE_WAIT X from N:RECEIVE(response) */ 17,
146 /* CLOSE_WAIT X from U:OPEN(request) */ 0,
147 /* CLOSE_WAIT X from U:CLOSE(request) */ 8,
148 /* CLOSE_WAIT X from S:TIMER(response) */ 9,
149 /* CLOSE_WAIT X from U:RECEIVE(request) */ 20,
150 /* CLOSE_WAIT X from U:SEND(normal) */ 19,
151 /* CLOSE_WAIT X from U:ABORT(request) */ 22,
152 /* CLOSE_WAIT X from N:CLEAR(indication) */ 23,
153 }, /* STATE CLOSE_WAIT */
154
155
156 /* STATE CLOSING_1 */
157 {
158 /* CLOSING_1 X unused */ 0,
159 /* CLOSING_1 X from U:OPEN(await) */ 0,
160 /* CLOSING_1 X from N:RECEIVE(response) */ 10,
161 /* CLOSING_1 X from U:OPEN(request) */ 0,
162 /* CLOSING_1 X from U:CLOSE(request) */ 25,
163 /* CLOSING_1 X from S:TIMER(response) */ 9,
164 /* CLOSING_1 X from U:RECEIVE(request) */ 20,
165 /* CLOSING_1 X from U:SEND(normal) */ 25,
166 /* CLOSING_1 X from U:ABORT(request) */ 22,
167 /* CLOSING_1 X from N:CLEAR(indication) */ 23,
168 }, /* STATE CLOSING_1 */
169
170
171 /* STATE CLOSING_2 */
172 {
173 /* CLOSING_2 X unused */ 0,
174 /* CLOSING_2 X from U:OPEN(await) */ 0,
175 /* CLOSING_2 X from N:RECEIVE(response) */ 11,
176 /* CLOSING_2 X from U:OPEN(request) */ 0,
177 /* CLOSING_2 X from U:CLOSE(request) */ 25,
178 /* CLOSING_2 X from S:TIMER(response) */ 9,
179 /* CLOSING_2 X from U:RECEIVE(request) */ 20,
180 /* CLOSING_2 X from U:SEND(normal) */ 25,
181 /* CLOSING_2 X from U:ABORT(request) */ 22,
182 /* CLOSING_2 X from N:CLEAR(indication) */ 23,
183 }, /* STATE CLOSING_2 */
184
185
186 /* STATE RCV_WAIT */
187 {
188 /* RCV_WAIT X unused */ 0,
189 /* RCV_WAIT X from U:OPEN(await) */ 0,
190 /* RCV_WAIT X from N:RECEIVE(response) */ 13,
191 /* RCV_WAIT X from U:OPEN(request) */ 0,
192 /* RCV_WAIT X from U:CLOSE(request) */ 25,
193 /* RCV_WAIT X from S:TIMER(response) */ 9,
194 /* RCV_WAIT X from U:RECEIVE(request) */ 12,
195 /* RCV_WAIT X from U:SEND(normal) */ 25,
196 /* RCV_WAIT X from U:ABORT(request) */ 22,
197 /* RCV_WAIT X from N:CLEAR(indication) */ 23,
198 }, /* STATE RCV_WAIT */
199
200
201 /* STATE CLOSED */
202 {
203 /* CLOSED X unused */ 0,
204 /* CLOSED X from U:OPEN(await) */ 1,
205 /* CLOSED X from N:RECEIVE(response) */ 0,
206 /* CLOSED X from U:OPEN(request) */ 4,
207 /* CLOSED X from U:CLOSE(request) */ 0,
208 /* CLOSED X from S:TIMER(response) */ 24,
209 /* CLOSED X from U:RECEIVE(request) */ 0,
210 /* CLOSED X from U:SEND(normal) */ 0,
211 /* CLOSED X from U:ABORT(request) */ 0,
212 /* CLOSED X from N:CLEAR(indication) */ 24
213 } /* STATE CLOSED */
214
215 };
216
null()217 int null() {return(0);}
218 int lis_cls();
219 int lis_netr();
220 int syr_netr();
221 int sys_cls();
222 int sys_netr();
223 int cls_opn();
224 int est_netr();
225 int cl2_clw();
226 int timers();
227 int cl1_netr();
228 int cl2_netr();
229 int cls_rwt();
230 int rwt_netr();
231 int fw1_syr();
232 int fw1_netr();
233 int fw2_netr();
234 int cwt_netr();
235 int sss_syn();
236 int sss_snd();
237 int sss_rcv();
238 int cls_nsy();
239 int cls_syn();
240 int cls_act();
241 int cls_err();
242
243 int (*fsactab[])() = {
244
245 /* 0 */ null,
246 /* 1 */ lis_cls, /* 1 */
247 /* 2 */ lis_netr, /* 3,4 */
248 /* 3 */ syr_netr, /* 5,33 */
249 /* 4 */ sys_cls, /* 6 */
250 /* 5 */ sys_netr, /* 8,9,11,32 */
251 /* 6 */ cls_opn, /* 10 */
252 /* 7 */ est_netr, /* 12,39 */
253 /* 8 */ cl2_clw, /* 13 */
254 /* 9 */ timers, /* 14,17,35,36,37,38 */
255 /* 10 */ cl1_netr, /* 15,18,22,23,30,39 */
256 /* 11 */ cl2_netr, /* 16,19,31,39 */
257 /* 12 */ cls_rwt, /* 20 */
258 /* 13 */ rwt_netr, /* 21,30 */
259 /* 14 */ fw1_syr, /* 24 */
260 /* 15 */ fw1_netr, /* 26,27,28,39 */
261 /* 16 */ fw2_netr, /* 29,39 */
262 /* 17 */ cwt_netr, /* 30,31,39 */
263 /* 18 */ sss_syn, /* 39 */
264 /* 19 */ sss_snd, /* 40,41 */
265 /* 20 */ sss_rcv, /* 42 */
266 /* 21 */ cls_nsy, /* 44 */
267 /* 22 */ cls_syn, /* 45 */
268 /* 23 */ cls_act, /* 47 ### this & INCLEAR unused on 4.2 */
269 /* 24 */ null,
270 /* 25 */ cls_err
271 };
272
273 #endif TRPT
274 #ifdef TCPDEBUG
275
276 char *tcpstates[] =
277 {
278 "CLOSED",
279 "LISTEN",
280 "SYN_SENT",
281 "SYN_RCVD",
282 "L_SYN_RCVD",
283 "ESTAB",
284 "FIN_W1",
285 "FIN_W2",
286 "TIME_WAIT",
287 "CLOSE_WAIT",
288 "CLOSING1",
289 "CLOSING2",
290 "RCV_WAIT",
291 "CLOSED"
292 };
293
294 char *tcpinputs[] =
295 {
296 "BAD",
297 "UOPENA",
298 "NRECV",
299 "UOPENR",
300 "UCLOSE",
301 "TIMER",
302 "URECV",
303 "USEND",
304 "UABORT",
305 "NCLEAR"
306 };
307
308 char *tcptimers[] =
309 {
310 "",
311 "INIT",
312 "REXMT",
313 "REXMTTL",
314 "PERSIST",
315 "FINACK",
316 "DELACK",
317 "NOACT"
318 };
319
320 #endif TCPDEBUG
321
322