fix per Jeffrey Jongeward
[unix-history] / usr / src / sys / netinet / tcp_fsm.h
index 654066c..4f2ce91 100644 (file)
@@ -1,45 +1,52 @@
-/*     tcp_fsm.h       4.6     81/11/18        */
+/*     tcp_fsm.h       4.12    81/12/21        */
 
 /*
  * TCP FSM state definitions.
 
 /*
  * TCP FSM state definitions.
- *
- * 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.
+ * Per RFC793, September, 1981.
  */
 
  */
 
+#define        TCP_NSTATES     11
+
+#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
 /*
 /*
- * States
+ * 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_NSTATES     14
-
-#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 close */
-#define        CLOSING         10              /* closed xchd FIN; await FIN ACK */
-#define        LAST_ACK        11              /* had fin and close; await FIN ACK */
-#define        RCV_WAIT        12              /* waiting for user to drain data */
-#define        CLOSED          13              /* closed */
+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    tcp_acounts[TCP_NSTATES][PRU_NREQ];
 #endif
 
 
 #ifdef KPROF
 int    tcp_acounts[TCP_NSTATES][PRU_NREQ];
 #endif
 
-#ifdef TCPSTATES
+#ifdef TCPSTATES
 char *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"
+       "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
 #endif