xref: /csrg-svn/sys/netinet/tcp_fsm.h (revision 4725)
1*4725Swnj /* fsm.h 1.4 81/10/29 */
2*4725Swnj 
3*4725Swnj /*
4*4725Swnj  * TCP FSM definitions.
5*4725Swnj  */
6*4725Swnj 
7*4725Swnj /*
8*4725Swnj  * States
9*4725Swnj  */
10*4725Swnj #define	TCP_NSTATES	14
11*4725Swnj 
12*4725Swnj #define	EFAILEC		-1		/* pseudo-state for internal use */
13*4725Swnj #define	SAME		0
14*4725Swnj #define	LISTEN		1
15*4725Swnj #define	SYN_SENT	2
16*4725Swnj #define	SYN_RCVD	3
17*4725Swnj #define	L_SYN_RCVD	4
18*4725Swnj #define	ESTAB		5
19*4725Swnj #define	FIN_W1		6
20*4725Swnj #define	FIN_W2		7
21*4725Swnj #define	TIME_WAIT	8
22*4725Swnj #define	CLOSE_WAIT	9
23*4725Swnj #define	CLOSING1	10
24*4725Swnj #define	CLOSING2	11
25*4725Swnj #define	RCV_WAIT	12
26*4725Swnj #define	CLOSED		13
27*4725Swnj 
28*4725Swnj /*
29*4725Swnj  * Inputs to fsm.
30*4725Swnj  */
31*4725Swnj #define	TCP_NINPUTS	10
32*4725Swnj 
33*4725Swnj #define	IUOPENA 	1
34*4725Swnj #define	INRECV		2
35*4725Swnj #define	IUOPENR		3
36*4725Swnj #define	IUCLOSE		4
37*4725Swnj #define	ISTIMER		5
38*4725Swnj #define	IURECV		6
39*4725Swnj #define	IUSEND		7
40*4725Swnj #define	IUABORT		8
41*4725Swnj #define	INCLEAR		9
42*4725Swnj #define	INSEND		10
43*4725Swnj 
44*4725Swnj /*
45*4725Swnj  * Actions
46*4725Swnj  */
47*4725Swnj #define	BAD		0
48*4725Swnj #define	LIS_CLS		1
49*4725Swnj #define	LIS_NETR	2
50*4725Swnj #define	SYR_NETR	3
51*4725Swnj #define	SYS_CLS		4
52*4725Swnj #define	SYS_NETR	5
53*4725Swnj #define	CLS_OPN		6
54*4725Swnj #define	EST_NETR	7
55*4725Swnj #define	CL2_CLW		8
56*4725Swnj #define	TIMERS		9
57*4725Swnj #define	CL1_NETR	10
58*4725Swnj #define	CL2_NETR	11
59*4725Swnj #define	CLS_RWT		12
60*4725Swnj #define	RWT_NETR	13
61*4725Swnj #define	FW1_SYR		14
62*4725Swnj #define	FW1_NETR	15
63*4725Swnj #define	FW2_NETR	16
64*4725Swnj #define	CWT_NETR	17
65*4725Swnj #define	SSS_SYN		18
66*4725Swnj #define	SSS_SND		19
67*4725Swnj #define	SSS_RCV		20
68*4725Swnj #define	CLS_NSY		21
69*4725Swnj #define	CLS_SYN		22
70*4725Swnj #define	CLS_ACT		23
71*4725Swnj #define	NOP		24
72*4725Swnj #define	CLS_ERR		25
73*4725Swnj 
74*4725Swnj #ifdef	KERNEL
75*4725Swnj int	acounts[14][10];
76*4725Swnj #endif
77*4725Swnj 
78*4725Swnj #ifdef TCPFSTAB
79*4725Swnj /* SHOULD FIGURE OUT HOW TO MAKE THIS READABLE! */
80*4725Swnj char	tcp_fstab[TCP_NSTATES][TCP_NINPUTS] = {
81*4725Swnj 	{ 0, 1, 0, 4, 0, 24, 0, 0, 0, 24 },		/* CLOSED */
82*4725Swnj 	{ 0, 0, 2, 0, 6, 0, 0, 0, 21, 23 },		/* LISTEN */
83*4725Swnj 	{ 0, 0, 5, 0, 6, 9, 0,	0, 21, 23, },		/* SYN_SENT */
84*4725Swnj 	{ 0, 0, 3, 0, 14, 9, 0,	0, 21, 23, },		/* SYN_RCVD */
85*4725Swnj 	{ 0, 0, 3, 0, 14, 9, 0, 0, 21, 23, },		/* L_SYN_RCVD */
86*4725Swnj 	{ 0, 0, 7, 0, 14, 9, 20, 19, 22, 23, },		/* ESTAB */
87*4725Swnj 	{ 0, 0, 15, 0, 24, 9, 20, 25, 22, 23, },	/* FIN_WAIT_1 */
88*4725Swnj 	{ 0, 0, 16, 0, 24, 9, 20, 24, 22, 23, },	/* FIN_WAIT_2 */
89*4725Swnj 	{ 0, 0, 18, 0, 24, 9, 20, 25, 22, 23, },	/* TIME_WAIT */
90*4725Swnj 	{ 0, 0, 17, 0, 8, 9, 20, 19, 22, 23, },		/* CLOSE_WAIT */
91*4725Swnj 	{ 0, 0, 10, 0, 25, 9, 20, 25, 22, 23, },	/* CLOSING_1 */
92*4725Swnj 	{ 0, 0, 11, 0, 25, 9, 20, 25, 22, 23, },	/* CLOSING_2 */
93*4725Swnj 	{ 0, 0, 13, 0, 25, 9, 12, 25, 22, 23, },	/* RCV_WAIT */
94*4725Swnj 	{ 0, 1, 0, 4, 0, 24, 0, 0, 0, 24 }		/* CLOSED */
95*4725Swnj };
96*4725Swnj #endif
97*4725Swnj #ifdef KERNEL
98*4725Swnj int	acounts[TCP_NSTATES][TCP_NINPUTS];
99*4725Swnj #endif
100*4725Swnj 
101*4725Swnj #ifdef TCPSTATES
102*4725Swnj char *tcpstates[] = {
103*4725Swnj 	"CLOSED",	"LISTEN",	"SYN_SENT",	"SYN_RCVD",
104*4725Swnj 	"L_SYN_RCVD",	"ESTAB",	"FIN_W1",	"FIN_W2",
105*4725Swnj 	"TIME_WAIT",	"CLOSE_WAIT",	"CLOSING1",	"CLOSING2",
106*4725Swnj 	"RCV_WAIT",	"CLOSED"
107*4725Swnj };
108*4725Swnj char *tcpinputs[] = {
109*4725Swnj 	"BAD",		"UOPENA",	"NRECV",	"UOPENR",
110*4725Swnj 	"UCLOSE",	"STIMER",	"URECV",	"USEND",
111*4725Swnj 	"UABORT",	"NCLEAR"
112*4725Swnj };
113*4725Swnj char *tcptimers[] = { "", "INIT", "REXMT", "REXMTTL", "PERSIST", "FINACK" };
114*4725Swnj #endif
115*4725Swnj 
116*4725Swnj #define	TINIT		1
117*4725Swnj #define	TREXMT		2
118*4725Swnj #define	TREXMTTL	3
119*4725Swnj #define	TPERSIST	4
120*4725Swnj #define	TFINACK		5
121