1*25202Skarels /*
2*25202Skarels   $Log:	rdp_fsm.c,v $
3*25202Skarels  * Revision 2.1  84/11/02  10:12:44  walsh
4*25202Skarels  * Fixed to include RCS comments in checked out source.
5*25202Skarels  *
6*25202Skarels  *
7*25202Skarels  * description:
8*25202Skarels  * Transition table for RDP finite state machine.
9*25202Skarels  *
10*25202Skarels  * revision 1.5
11*25202Skarels  * date: 84/07/22 19:44:39;  author: walsh;  state: Exp;  lines added/del: 2/1
12*25202Skarels  * Added a state transition function rdp_closew_rcv() to compensate for
13*25202Skarels  * socket code's dropping of system priority level for a brief period of time.
14*25202Skarels  *
15*25202Skarels  * revision 1.4
16*25202Skarels  * date: 84/07/18 18:50:34;  author: walsh;  state: Exp;  lines added/del: 2/1
17*25202Skarels  * Added provision for sending of NULL messages.  These are sent on an idle
18*25202Skarels  * connection to determine that the other side still exists.
19*25202Skarels  *
20*25202Skarels  * revision 1.3
21*25202Skarels  * date: 84/07/09 14:17:34;  author: walsh;  state: Exp;  lines added/del: 2/1
22*25202Skarels  * Added ACK-delay timer to debugging printf arrays.
23*25202Skarels  *
24*25202Skarels  * revision 1.2
25*25202Skarels  * date: 84/07/06 09:49:07;  author: root;  state: Exp;  lines added/del: 1/1
26*25202Skarels  * This version seems to run bug-free.
27*25202Skarels  *
28*25202Skarels  * revision 1.1
29*25202Skarels  * date: 84/06/26 14:16:59;  author: walsh;  state: Exp;
30*25202Skarels  * Initial revision
31*25202Skarels  */
32*25202Skarels 
33*25202Skarels 
34*25202Skarels #ifdef RDP
35*25202Skarels #include "../h/param.h"
36*25202Skarels #include "../h/dir.h"
37*25202Skarels #include "../h/user.h"
38*25202Skarels #include "../h/kernel.h"
39*25202Skarels #include "../h/inode.h"
40*25202Skarels #include "../h/mbuf.h"
41*25202Skarels #include "../h/socket.h"
42*25202Skarels #include "../h/socketvar.h"
43*25202Skarels 
44*25202Skarels #include "../net/if.h"
45*25202Skarels #include "../net/route.h"
46*25202Skarels 
47*25202Skarels #include "../bbnnet/in.h"
48*25202Skarels #include "../bbnnet/in_var.h"
49*25202Skarels #include "../bbnnet/net.h"
50*25202Skarels #include "../bbnnet/in_pcb.h"
51*25202Skarels #include "../bbnnet/ip.h"
52*25202Skarels #include "../bbnnet/rdp.h"
53*25202Skarels 
54*25202Skarels #ifdef RDPDEBUG
55*25202Skarels char *rdpstates[RDP_NSTATES] =
56*25202Skarels {
57*25202Skarels     "RDP_sSAME",
58*25202Skarels 	"RDP_sUNOPENED",
59*25202Skarels 	"RDP_sLISTEN",
60*25202Skarels 	"RDP_sSYNSENT",
61*25202Skarels 	"RDP_sLSYNRCVD",
62*25202Skarels 	"RDP_sSYNRCVD",
63*25202Skarels 	"RDP_sESTAB",
64*25202Skarels 	"RDP_sCLOSEWAIT",
65*25202Skarels 	"RDP_sCLOSED"
66*25202Skarels } ;
67*25202Skarels 
68*25202Skarels char *rdpinputs[RDP_NINPUTS] =
69*25202Skarels {
70*25202Skarels     "RDP_iCONNECT",
71*25202Skarels 	"RDP_iLISTEN",
72*25202Skarels 	"RDP_iNETR",
73*25202Skarels 	"RDP_iUCLOSE",
74*25202Skarels 	"RDP_iTIMER",
75*25202Skarels 	"RDP_iRCV",
76*25202Skarels 	"RDP_iSEND"
77*25202Skarels } ;
78*25202Skarels 
79*25202Skarels char *rdptimers[RDP_NTIMERS] =
80*25202Skarels {
81*25202Skarels     "RDP_tCLOSEWAIT",
82*25202Skarels 	"RDP_tRTTL",
83*25202Skarels 	"RDP_tRXMIT",
84*25202Skarels 	"RDP_tACKDELAY",
85*25202Skarels 	"RDP_tNULL"
86*25202Skarels } ;
87*25202Skarels #endif
88*25202Skarels 
89*25202Skarels #ifdef KERNEL
90*25202Skarels extern int	rdp_unop_connect();	/* RDP_sUNOPENED x RDP_iCONNECT */
91*25202Skarels extern int	rdp_unop_listen();	/* RDP_sUNOPENED x RDP_iLISTEN */
92*25202Skarels extern int	rdp_unop_netr();	/* RDP_sUNOPENED x RDP_iNETR */
93*25202Skarels extern int	rdp_unop_close();	/* RDP_sUNOPENED x RDP_iUCLOSE */
94*25202Skarels 
95*25202Skarels extern int	rdp_lis_listen();	/* RDP_sLISTEN x RDP_iLISTEN */
96*25202Skarels extern int	rdp_lis_netr();	/* RDP_sLISTEN x RDP_iNETR */
97*25202Skarels extern int	rdp_lis_close();	/* RDP_sLISTEN x RDP_iCLOSE */
98*25202Skarels 
99*25202Skarels extern int	rdp_synsent_netr();	/* RDP_sSYNSENT x RDP_iNETR */
100*25202Skarels extern int	rdp_synsent_close();	/* RDP_sSYNSENT x RDP_iUCLOSE */
101*25202Skarels extern int	rdp_synsent_timer();	/* RDP_sSYNSENT x RDP_iTIMER */
102*25202Skarels 
103*25202Skarels extern int	rdp_lsynrcvd_netr();	/* RDP_sLSYNRCVD x RDP_iNETR */
104*25202Skarels extern int	rdp_lsynrcvd_close();	/* RDP_sLSYNRCVD x RDP_iUCLOSE */
105*25202Skarels extern int	rdp_lsynrcvd_timer();	/* RDP_sLSYNRCVD x RDP_iTIMER */
106*25202Skarels 
107*25202Skarels extern int	rdp_synrcvd_netr();	/* RDP_sSYNRCVD x RDP_iNETR */
108*25202Skarels extern int	rdp_synrcvd_close();	/* RDP_sSYNRCVD x RDP_iUCLOSE */
109*25202Skarels extern int	rdp_synrcvd_timer();	/* RDP_sSYNRCVD x RDP_iTIMER */
110*25202Skarels 
111*25202Skarels extern int	rdp_estab_netr();	/* RDP_sESTAB x RDP_iNETR */
112*25202Skarels extern int	rdp_estab_close();	/* RDP_sESTAB x RDP_iUCLOSE */
113*25202Skarels extern int	rdp_estab_timer();	/* RDP_sESTAB x RDP_iTIMER */
114*25202Skarels extern int	rdp_estab_rcv();	/* RDP_sESTAB x RDP_iRCV */
115*25202Skarels extern int	rdp_estab_send();	/* RDP_sESTAB x RDP_iSEND */
116*25202Skarels 
117*25202Skarels extern int	rdp_closew_netr();	/* RDP_sCLOSEWAIT x RDP_iNETR */
118*25202Skarels extern int	rdp_closew_close();	/* RDP_sCLOSEWAIT x RDP_iUCLOSE */
119*25202Skarels extern int	rdp_closew_timer();	/* RDP_sCLOSEWAIT x RDP_iTIMER */
120*25202Skarels extern int	rdp_closew_rcv();	/* RDP_sCLOSEWAIT x RDP_iRCV */
121*25202Skarels 
122*25202Skarels #define illegal	0
123*25202Skarels 
124*25202Skarels int (*rdp_action_table[RDP_NSTATES][RDP_NINPUTS])() =
125*25202Skarels {
126*25202Skarels     {
127*25202Skarels 	illegal,		/* to avoid off-by-1 error because SAME is 0 */
128*25202Skarels 	illegal,
129*25202Skarels 	illegal,
130*25202Skarels 	illegal,
131*25202Skarels 	illegal,
132*25202Skarels 	illegal,
133*25202Skarels 	illegal
134*25202Skarels     }
135*25202Skarels     ,
136*25202Skarels 
137*25202Skarels     {
138*25202Skarels 	rdp_unop_connect,
139*25202Skarels 	rdp_unop_listen,
140*25202Skarels 	rdp_unop_netr,
141*25202Skarels 	rdp_unop_close,
142*25202Skarels 	illegal,
143*25202Skarels 	illegal,
144*25202Skarels 	illegal
145*25202Skarels     }
146*25202Skarels     ,
147*25202Skarels 
148*25202Skarels     {
149*25202Skarels 	illegal,
150*25202Skarels 	rdp_lis_listen,
151*25202Skarels 	rdp_lis_netr,
152*25202Skarels 	rdp_lis_close,
153*25202Skarels 	illegal,
154*25202Skarels 	illegal,
155*25202Skarels 	illegal
156*25202Skarels     }
157*25202Skarels     ,
158*25202Skarels 
159*25202Skarels     {
160*25202Skarels 	illegal,
161*25202Skarels 	illegal,
162*25202Skarels 	rdp_synsent_netr,
163*25202Skarels 	rdp_synsent_close,
164*25202Skarels 	rdp_synsent_timer,
165*25202Skarels 	illegal,
166*25202Skarels 	illegal
167*25202Skarels     }
168*25202Skarels     ,
169*25202Skarels 
170*25202Skarels     {
171*25202Skarels 	illegal,
172*25202Skarels 	illegal,
173*25202Skarels 	rdp_lsynrcvd_netr,
174*25202Skarels 	rdp_lsynrcvd_close,
175*25202Skarels 	rdp_lsynrcvd_timer,
176*25202Skarels 	illegal,
177*25202Skarels 	illegal
178*25202Skarels     }
179*25202Skarels     ,
180*25202Skarels 
181*25202Skarels     {
182*25202Skarels 	illegal,
183*25202Skarels 	illegal,
184*25202Skarels 	rdp_synrcvd_netr,
185*25202Skarels 	rdp_synrcvd_close,
186*25202Skarels 	rdp_synrcvd_timer,
187*25202Skarels 	illegal,
188*25202Skarels 	illegal
189*25202Skarels     }
190*25202Skarels     ,
191*25202Skarels 
192*25202Skarels     {
193*25202Skarels 	illegal,
194*25202Skarels 	illegal,
195*25202Skarels 	rdp_estab_netr,
196*25202Skarels 	rdp_estab_close,
197*25202Skarels 	rdp_estab_timer,
198*25202Skarels 	rdp_estab_rcv,
199*25202Skarels 	rdp_estab_send
200*25202Skarels     }
201*25202Skarels     ,
202*25202Skarels 
203*25202Skarels     {
204*25202Skarels 	illegal,
205*25202Skarels 	illegal,
206*25202Skarels 	rdp_closew_netr,
207*25202Skarels 	rdp_closew_close,
208*25202Skarels 	rdp_closew_timer,
209*25202Skarels 	rdp_closew_rcv,
210*25202Skarels 	illegal
211*25202Skarels     }
212*25202Skarels } ;
213*25202Skarels #endif
214*25202Skarels #endif
215