BSD 4_3_Reno release
[unix-history] / usr / src / sys / netinet / tcp_fsm.h
index d87c693..2b205b1 100644 (file)
@@ -1,4 +1,24 @@
-/*     tcp_fsm.h       4.7     81/11/24        */
+/*
+ * Copyright (c) 1982, 1986 Regents of the University of California.
+ * All rights reserved.
+ *
+ * Redistribution is only permitted until one year after the first shipment
+ * of 4.4BSD by the Regents.  Otherwise, redistribution and use in source and
+ * binary forms are permitted provided that: (1) source distributions retain
+ * this entire copyright notice and comment, and (2) distributions including
+ * binaries display the following acknowledgement:  This product includes
+ * software developed by the University of California, Berkeley and its
+ * contributors'' in the documentation or other materials provided with the
+ * distribution and in all advertising materials mentioning features or use
+ * of this software.  Neither the name of the University nor the names of
+ * its contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ * THIS SOFTWARE IS PROVIDED AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ *     @(#)tcp_fsm.h   7.4 (Berkeley) 6/28/90
+ */
 
 /*
  * TCP FSM state definitions.
 
 /*
  * TCP FSM state definitions.
 #define        TCPS_CLOSED             0       /* closed */
 #define        TCPS_LISTEN             1       /* listening for connection */
 #define        TCPS_SYN_SENT           2       /* active, have sent syn */
 #define        TCPS_CLOSED             0       /* closed */
 #define        TCPS_LISTEN             1       /* listening for connection */
 #define        TCPS_SYN_SENT           2       /* active, have sent syn */
-#define        TCPS_SYN_RCVD           3       /* have send and received 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_ESTABLISHED        4       /* established */
-#define        TCPS_FIN_WAIT_1         5       /* have closed, sent fin */
-#define        TCPS_FIN_WAIT_2         6       /* have closed, fin is acked */
-#define        TCPS_TIME_WAIT          7       /* in 2*msl quiet wait after close */
-#define        TCPS_CLOSE_WAIT         8       /* rcvd fin, waiting for close */
-#define        TCPS_CLOSING            9       /* closed xchd FIN; await FIN ACK */
-#define        TCPS_LAST_ACK           10      /* had fin and close; await FIN ACK */
+#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_RCVD)
+#define        TCPS_HAVERCVDSYN(s)     ((s) >= TCPS_SYN_RECEIVED)
 #define        TCPS_HAVERCVDFIN(s)     ((s) >= TCPS_TIME_WAIT)
 
 #define        TCPS_HAVERCVDFIN(s)     ((s) >= TCPS_TIME_WAIT)
 
+#ifdef TCPOUTFLAGS
+/*
+ * 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.
+ */
+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[] = {
        "CLOSED",       "LISTEN",       "SYN_SENT",     "SYN_RCVD",
 char *tcpstates[] = {
        "CLOSED",       "LISTEN",       "SYN_SENT",     "SYN_RCVD",
-       "ESTABLISHED",  "FIN_WAIT1",    "FIN_WAIT2",    "TIME_WAIT",
-       "CLOSE_WAIT",   "CLOSING",      "LAST_ACK",
+       "ESTABLISHED",  "CLOSE_WAIT",   "FIN_WAIT_1",   "CLOSING",
+       "LAST_ACK",     "FIN_WAIT_2",   "TIME_WAIT",
 };
 #endif
 };
 #endif