Project

General

Profile

Statistics
| Revision:

root / lab4 / .minix-src / include / netinet / tcp_fsm.h @ 13

History | View | Annotate | Download (3.79 KB)

1
/*        $NetBSD: tcp_fsm.h,v 1.15 2005/12/10 23:36:23 elad Exp $        */
2

    
3
/*
4
 * Copyright (c) 1982, 1986, 1993
5
 *        The Regents of the University of California.  All rights reserved.
6
 *
7
 * Redistribution and use in source and binary forms, with or without
8
 * modification, are permitted provided that the following conditions
9
 * are met:
10
 * 1. Redistributions of source code must retain the above copyright
11
 *    notice, this list of conditions and the following disclaimer.
12
 * 2. Redistributions in binary form must reproduce the above copyright
13
 *    notice, this list of conditions and the following disclaimer in the
14
 *    documentation and/or other materials provided with the distribution.
15
 * 3. Neither the name of the University nor the names of its contributors
16
 *    may be used to endorse or promote products derived from this software
17
 *    without specific prior written permission.
18
 *
19
 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
20
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
23
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
24
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
25
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
26
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
27
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
28
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
29
 * SUCH DAMAGE.
30
 *
31
 *        @(#)tcp_fsm.h        8.1 (Berkeley) 6/10/93
32
 */
33

    
34
#ifndef _NETINET_TCP_FSM_H_
35
#define _NETINET_TCP_FSM_H_
36

    
37
/*
38
 * TCP FSM state definitions.
39
 * Per RFC793, September, 1981.
40
 */
41

    
42
#define        TCP_NSTATES        11
43

    
44
#define        TCPS_CLOSED                0        /* closed */
45
#define        TCPS_LISTEN                1        /* listening for connection */
46
#define        TCPS_SYN_SENT                2        /* active, have sent syn */
47
#define        TCPS_SYN_RECEIVED        3        /* have send and received syn */
48
/* states < TCPS_ESTABLISHED are those where connections not established */
49
#define        TCPS_ESTABLISHED        4        /* established */
50
#define        TCPS_CLOSE_WAIT                5        /* rcvd fin, waiting for close */
51
/* states > TCPS_CLOSE_WAIT are those where user has closed */
52
#define        TCPS_FIN_WAIT_1                6        /* have closed, sent fin */
53
#define        TCPS_CLOSING                7        /* closed xchd FIN; await ACK */
54
#define        TCPS_LAST_ACK                8        /* had fin and close; await FIN ACK */
55
/* states > TCPS_CLOSE_WAIT && < TCPS_FIN_WAIT_2 await ACK of FIN */
56
#define        TCPS_FIN_WAIT_2                9        /* have closed, fin is acked */
57
#define        TCPS_TIME_WAIT                10        /* in 2*msl quiet wait after close */
58

    
59
#define        TCPS_HAVERCVDSYN(s)        ((s) >= TCPS_SYN_RECEIVED)
60
#define        TCPS_HAVEESTABLISHED(s)        ((s) >= TCPS_ESTABLISHED)
61
#define        TCPS_HAVERCVDFIN(s) \
62
    ((s) == TCPS_CLOSE_WAIT || ((s) >= TCPS_CLOSING && (s) != TCPS_FIN_WAIT_2))
63

    
64
#ifdef        TCPOUTFLAGS
65
/*
66
 * Flags used when sending segments in tcp_output.
67
 * Basic flags (TH_RST,TH_ACK,TH_SYN,TH_FIN) are totally
68
 * determined by state, with the proviso that TH_FIN is sent only
69
 * if all data queued for output is included in the segment.
70
 */
71
const u_char        tcp_outflags[TCP_NSTATES] = {
72
        TH_RST|TH_ACK,        /* CLOSED */
73
        0,                /* LISTEN */
74
        TH_SYN,                /* SYN_SENT */
75
        TH_SYN|TH_ACK,        /* SYN_RCVD */
76
        TH_ACK,                /* ESTABLISHED */
77
        TH_ACK,                /* CLOSE_WAIT */
78
        TH_FIN|TH_ACK,        /* FIN_WAIT_1 */
79
        TH_FIN|TH_ACK,        /* CLOSING */
80
        TH_FIN|TH_ACK,        /* LAST_ACK */
81
        TH_ACK,                /* FIN_WAIT_2 */
82
        TH_ACK,                /* TIME_WAIT */
83
};
84
#endif
85

    
86
#ifdef KPROF
87
int        tcp_acounts[TCP_NSTATES][PRU_NREQ];
88
#endif
89

    
90
#ifdef        TCPSTATES
91
const char * const tcpstates[] = {
92
        "CLOSED",        "LISTEN",        "SYN_SENT",        "SYN_RCVD",
93
        "ESTABLISHED",        "CLOSE_WAIT",        "FIN_WAIT_1",        "CLOSING",
94
        "LAST_ACK",        "FIN_WAIT_2",        "TIME_WAIT",
95
};
96
#elif defined(_KERNEL)
97
extern const char * const tcpstates[];
98
#endif
99

    
100
#endif /* !_NETINET_TCP_FSM_H_ */