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