X-Git-Url: https://git.subgeniuskitty.com/unix-history/.git/blobdiff_plain/2434e4620a86ec33649e4d90bcb740c56640b405..423e92eee4fa5c99e5bdf44c0dd420d9d50ec2d8:/usr/src/sys/netinet/tcp_fsm.h diff --git a/usr/src/sys/netinet/tcp_fsm.h b/usr/src/sys/netinet/tcp_fsm.h index 20db16b890..4f2ce911c1 100644 --- a/usr/src/sys/netinet/tcp_fsm.h +++ b/usr/src/sys/netinet/tcp_fsm.h @@ -1,73 +1,52 @@ -/* tcp_fsm.h 4.4 81/11/08 */ +/* tcp_fsm.h 4.12 81/12/21 */ /* - * TCP FSM definitions. - * - * The TCP is conceptually a finite state machine with 13 states - * and 9 inputs. The states and inputs are defined here, as well - * as an array which is used in network profiling to keep event - * counters on the state transitions. The actual state transitions - * occur on input to the tcp machine (tcp_input.c) and when user - * requests are made (tcp_states.c). - * - * This TCP machine has two more states than suggested in RFC 793, - * the extra states being L_SYN_RCVD and RCV_WAIT. - * - * EXPLAIN THE EXTRA STATES!!! + * TCP FSM state definitions. + * Per RFC793, September, 1981. */ -/* - * States - */ -#define TCP_NSTATES 14 +#define TCP_NSTATES 11 -#define EFAILEC -1 /* new state for failure, internally */ -#define SAME 0 /* no state change, internally */ -#define LISTEN 1 /* listening for connection */ -#define SYN_SENT 2 /* active, have sent syn */ -#define SYN_RCVD 3 -#define L_SYN_RCVD 4 -#define ESTAB 5 /* established */ -#define FIN_W1 6 /* have closed and sent fin */ -#define FIN_W2 7 /* have closed and rcvd ack of fin */ -#define TIME_WAIT 8 /* in 2*msl quiet wait after close */ -#define CLOSE_WAIT 9 /* rcvd fin, waiting for UCLOSE */ -#define CLOSING 10 /* closed xchd FIN; await FIN ACK */ -#define LAST_ACK 11 /* had fin and UCLOSE; await FIN ACK */ -#define RCV_WAIT 12 /* waiting for user to drain data */ -#define CLOSED 13 /* closed */ +#define TCPS_CLOSED 0 /* closed */ +#define TCPS_LISTEN 1 /* listening for connection */ +#define TCPS_SYN_SENT 2 /* active, have sent syn */ +#define TCPS_SYN_RECEIVED 3 /* have send and received syn */ +/* states < TCPS_ESTABLISHED are those where connections not established */ +#define TCPS_ESTABLISHED 4 /* established */ +#define TCPS_CLOSE_WAIT 5 /* rcvd fin, waiting for close */ +/* states > TCPS_CLOSE_WAIT are those where user has closed */ +#define TCPS_FIN_WAIT_1 6 /* have closed, sent fin */ +#define TCPS_CLOSING 7 /* closed xchd FIN; await FIN ACK */ +#define TCPS_LAST_ACK 8 /* had fin and close; await FIN ACK */ +/* states > TCPS_CLOSE_WAIT && < TCPS_FIN_WAIT_2 await ACK of FIN */ +#define TCPS_FIN_WAIT_2 9 /* have closed, fin is acked */ +#define TCPS_TIME_WAIT 10 /* in 2*msl quiet wait after close */ +#define TCPS_HAVERCVDSYN(s) ((s) >= TCPS_SYN_RECEIVED) +#define TCPS_HAVERCVDFIN(s) ((s) >= TCPS_TIME_WAIT) + +#ifdef TCPOUTFLAGS /* - * Inputs to fsm. + * Flags used when sending segments in tcp_output. + * Basic flags (TH_RST,TH_ACK,TH_SYN,TH_FIN) are totally + * determined by state, with the proviso that TH_FIN is sent only + * if all data queued for output is included in the segment. */ -#define TCP_NINPUTS 10 - -#define IUOPENA 0 /* active open by user */ -#define INRECV 1 /* segment received from net */ -#define IUOPENR 2 /* passive open by user */ -#define IUCLOSE 3 /* close by user */ -#define ISTIMER 4 /* tcp timer expired */ -#define IURECV 5 /* user read data; adjust window */ -#define IUSEND 6 /* user sending data */ -#define IUABORT 7 /* user aborts connection */ -#define INCLEAR 8 /* network clear */ -#define INSEND 9 /* send by tcp to remote peer */ +u_char tcp_outflags[TCP_NSTATES] = { + TH_RST|TH_ACK, 0, TH_SYN, TH_SYN|TH_ACK, + TH_ACK, TH_ACK, + TH_FIN|TH_ACK, TH_FIN|TH_ACK, TH_FIN|TH_ACK, TH_ACK, TH_ACK, +}; +#endif #ifdef KPROF -int acounts[TCP_NSTATES][TCP_NINPUTS]; +int tcp_acounts[TCP_NSTATES][PRU_NREQ]; #endif -#ifdef TCPSTATES +#ifdef TCPSTATES char *tcpstates[] = { - "SAME", "LISTEN", "SYN_SENT", "SYN_RCVD", - "L_SYN_RCVD", "ESTAB", "FIN_W1", "FIN_W2", - "TIME_WAIT", "CLOSE_WAIT", "CLOSING", "LAST_ACK", - "RCV_WAIT", "CLOSED" -}; -char *tcpinputs[] = { - "BAD", "UOPENA", "NRECV", "UOPENR", - "UCLOSE", "STIMER", "URECV", "USEND", - "UABORT", "NCLEAR", "NSEND", + "CLOSED", "LISTEN", "SYN_SENT", "SYN_RCVD", + "ESTABLISHED", "CLOSE_WAIT", "FIN_WAIT_1", "CLOSING", + "LAST_ACK", "FIN_WAIT_2", "TIME_WAIT", }; -char *tcptimers[] = { "INIT", "REXMT", "REXMTTL", "PERSIST", "FINACK" }; #endif