]>
git.saurik.com Git - apple/xnu.git/blob - bsd/netinet/tcp_fsm.h
   2  * Copyright (c) 2000 Apple Computer, Inc. All rights reserved. 
   4  * @APPLE_LICENSE_HEADER_START@ 
   6  * The contents of this file constitute Original Code as defined in and 
   7  * are subject to the Apple Public Source License Version 1.1 (the 
   8  * "License").  You may not use this file except in compliance with the 
   9  * License.  Please obtain a copy of the License at 
  10  * http://www.apple.com/publicsource and read it before using this file. 
  12  * This Original Code and all software distributed under the License are 
  13  * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER 
  14  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, 
  15  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, 
  16  * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the 
  17  * License for the specific language governing rights and limitations 
  20  * @APPLE_LICENSE_HEADER_END@ 
  23  * Copyright (c) 1982, 1986, 1993 
  24  *      The Regents of the University of California.  All rights reserved. 
  26  * Redistribution and use in source and binary forms, with or without 
  27  * modification, are permitted provided that the following conditions 
  29  * 1. Redistributions of source code must retain the above copyright 
  30  *    notice, this list of conditions and the following disclaimer. 
  31  * 2. Redistributions in binary form must reproduce the above copyright 
  32  *    notice, this list of conditions and the following disclaimer in the 
  33  *    documentation and/or other materials provided with the distribution. 
  34  * 3. All advertising materials mentioning features or use of this software 
  35  *    must display the following acknowledgement: 
  36  *      This product includes software developed by the University of 
  37  *      California, Berkeley and its contributors. 
  38  * 4. Neither the name of the University nor the names of its contributors 
  39  *    may be used to endorse or promote products derived from this software 
  40  *    without specific prior written permission. 
  42  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 
  43  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
  44  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
  45  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 
  46  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 
  47  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 
  48  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 
  49  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 
  50  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 
  51  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 
  54  *      @(#)tcp_fsm.h   8.1 (Berkeley) 6/10/93 
  57 #ifndef _NETINET_TCP_FSM_H_ 
  58 #define _NETINET_TCP_FSM_H_ 
  61  * TCP FSM state definitions. 
  62  * Per RFC793, September, 1981. 
  65 #define TCP_NSTATES     11 
  67 #define TCPS_CLOSED             0       /* closed */ 
  68 #define TCPS_LISTEN             1       /* listening for connection */ 
  69 #define TCPS_SYN_SENT           2       /* active, have sent syn */ 
  70 #define TCPS_SYN_RECEIVED       3       /* have send and received syn */ 
  71 /* states < TCPS_ESTABLISHED are those where connections not established */ 
  72 #define TCPS_ESTABLISHED        4       /* established */ 
  73 #define TCPS_CLOSE_WAIT         5       /* rcvd fin, waiting for close */ 
  74 /* states > TCPS_CLOSE_WAIT are those where user has closed */ 
  75 #define TCPS_FIN_WAIT_1         6       /* have closed, sent fin */ 
  76 #define TCPS_CLOSING            7       /* closed xchd FIN; await FIN ACK */ 
  77 #define TCPS_LAST_ACK           8       /* had fin and close; await FIN ACK */ 
  78 /* states > TCPS_CLOSE_WAIT && < TCPS_FIN_WAIT_2 await ACK of FIN */ 
  79 #define TCPS_FIN_WAIT_2         9       /* have closed, fin is acked */ 
  80 #define TCPS_TIME_WAIT          10      /* in 2*msl quiet wait after close */ 
  82 /* for KAME src sync over BSD*'s */ 
  83 #define TCP6_NSTATES            TCP_NSTATES 
  84 #define TCP6S_CLOSED            TCPS_CLOSED 
  85 #define TCP6S_LISTEN            TCPS_LISTEN 
  86 #define TCP6S_SYN_SENT          TCPS_SYN_SENT 
  87 #define TCP6S_SYN_RECEIVED      TCPS_SYN_RECEIVED 
  88 #define TCP6S_ESTABLISHED       TCPS_ESTABLISHED 
  89 #define TCP6S_CLOSE_WAIT        TCPS_CLOSE_WAIT 
  90 #define TCP6S_FIN_WAIT_1        TCPS_FIN_WAIT_1 
  91 #define TCP6S_CLOSING           TCPS_CLOSING 
  92 #define TCP6S_LAST_ACK          TCPS_LAST_ACK 
  93 #define TCP6S_FIN_WAIT_2        TCPS_FIN_WAIT_2 
  94 #define TCP6S_TIME_WAIT         TCPS_TIME_WAIT 
  96 #define TCPS_HAVERCVDSYN(s)     ((s) >= TCPS_SYN_RECEIVED) 
  97 #define TCPS_HAVEESTABLISHED(s) ((s) >= TCPS_ESTABLISHED) 
  98 #define TCPS_HAVERCVDFIN(s)     ((s) >= TCPS_TIME_WAIT) 
 102  * Flags used when sending segments in tcp_output. 
 103  * Basic flags (TH_RST,TH_ACK,TH_SYN,TH_FIN) are totally 
 104  * determined by state, with the proviso that TH_FIN is sent only 
 105  * if all data queued for output is included in the segment. 
 107 static u_char   tcp_outflags
[TCP_NSTATES
] = { 
 108         TH_RST
|TH_ACK
,          /* 0, CLOSED */ 
 110         TH_SYN
,                 /* 2, SYN_SENT */ 
 111         TH_SYN
|TH_ACK
,          /* 3, SYN_RECEIVED */ 
 112         TH_ACK
,                 /* 4, ESTABLISHED */ 
 113         TH_ACK
,                 /* 5, CLOSE_WAIT */ 
 114         TH_FIN
|TH_ACK
,          /* 6, FIN_WAIT_1 */ 
 115         TH_FIN
|TH_ACK
,          /* 7, CLOSING */ 
 116         TH_FIN
|TH_ACK
,          /* 8, LAST_ACK */ 
 117         TH_ACK
,                 /* 9, FIN_WAIT_2 */ 
 118         TH_ACK
,                 /* 10, TIME_WAIT */ 
 123 int     tcp_acounts
[TCP_NSTATES
][PRU_NREQ
]; 
 127 char *tcpstates
[] = { 
 128         "CLOSED",       "LISTEN",       "SYN_SENT",     "SYN_RCVD", 
 129         "ESTABLISHED",  "CLOSE_WAIT",   "FIN_WAIT_1",   "CLOSING", 
 130         "LAST_ACK",     "FIN_WAIT_2",   "TIME_WAIT",