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