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