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