williamr@2
|
1 |
/* TCP_FSM.H
|
williamr@2
|
2 |
*
|
williamr@2
|
3 |
* Portions copyright (c) 1997-1999 Symbian Ltd. All rights reserved.
|
williamr@2
|
4 |
*/
|
williamr@2
|
5 |
|
williamr@2
|
6 |
/*
|
williamr@2
|
7 |
* Copyright (c) 1982, 1986 Regents of the University of California.
|
williamr@2
|
8 |
* All rights reserved. The Berkeley software License Agreement
|
williamr@2
|
9 |
* specifies the terms and conditions for redistribution.
|
williamr@2
|
10 |
*/
|
williamr@2
|
11 |
|
williamr@2
|
12 |
/** @file
|
williamr@2
|
13 |
@publishedAll
|
williamr@2
|
14 |
@released
|
williamr@2
|
15 |
*/
|
williamr@2
|
16 |
|
williamr@2
|
17 |
/*
|
williamr@2
|
18 |
* TCP FSM state definitions.
|
williamr@2
|
19 |
* Per RFC793, September, 1981.
|
williamr@2
|
20 |
*/
|
williamr@2
|
21 |
|
williamr@2
|
22 |
#ifndef _NETINET_TCP_FSM_H
|
williamr@2
|
23 |
#define _NETINET_TCP_FSM_H
|
williamr@2
|
24 |
|
williamr@2
|
25 |
#ifdef __cplusplus
|
williamr@2
|
26 |
extern "C" {
|
williamr@2
|
27 |
#endif
|
williamr@2
|
28 |
|
williamr@2
|
29 |
#define TCP_NSTATES 11
|
williamr@2
|
30 |
|
williamr@2
|
31 |
#define TCPS_CLOSED 0 /* closed */
|
williamr@2
|
32 |
#define TCPS_LISTEN 1 /* listening for connection */
|
williamr@2
|
33 |
#define TCPS_SYN_SENT 2 /* active, have sent syn */
|
williamr@2
|
34 |
#define TCPS_SYN_RECEIVED 3 /* have send and received syn */
|
williamr@2
|
35 |
/**
|
williamr@2
|
36 |
states < TCPS_ESTABLISHED are those where connections not established
|
williamr@2
|
37 |
*/
|
williamr@2
|
38 |
#define TCPS_ESTABLISHED 4 /* established */
|
williamr@2
|
39 |
#define TCPS_CLOSE_WAIT 5 /* rcvd fin, waiting for close */
|
williamr@2
|
40 |
|
williamr@2
|
41 |
/**
|
williamr@2
|
42 |
states > TCPS_CLOSE_WAIT are those where user has closed
|
williamr@2
|
43 |
*/
|
williamr@2
|
44 |
#define TCPS_FIN_WAIT_1 6 /* have closed, sent fin */
|
williamr@2
|
45 |
#define TCPS_CLOSING 7 /* closed xchd FIN; await FIN ACK */
|
williamr@2
|
46 |
#define TCPS_LAST_ACK 8 /* had fin and close; await FIN ACK */
|
williamr@2
|
47 |
|
williamr@2
|
48 |
/**
|
williamr@2
|
49 |
states > TCPS_CLOSE_WAIT && < TCPS_FIN_WAIT_2 await ACK of FIN
|
williamr@2
|
50 |
*/
|
williamr@2
|
51 |
#define TCPS_FIN_WAIT_2 9 /* have closed, fin is acked */
|
williamr@2
|
52 |
#define TCPS_TIME_WAIT 10 /* in 2*msl quiet wait after close */
|
williamr@2
|
53 |
|
williamr@2
|
54 |
#define TCPS_HAVERCVDSYN(s) ((s) >= TCPS_SYN_RECEIVED)
|
williamr@2
|
55 |
#define TCPS_HAVERCVDFIN(s) ((s) >= TCPS_TIME_WAIT)
|
williamr@2
|
56 |
|
williamr@2
|
57 |
#ifdef TCPOUTFLAGS
|
williamr@2
|
58 |
/**
|
williamr@2
|
59 |
Flags used when sending segments in tcp_output.
|
williamr@2
|
60 |
Basic flags (TH_RST,TH_ACK,TH_SYN,TH_FIN) are totally
|
williamr@2
|
61 |
determined by state, with the proviso that TH_FIN is sent only
|
williamr@2
|
62 |
if all data queued for output is included in the segment.
|
williamr@2
|
63 |
*/
|
williamr@2
|
64 |
const u_char tcp_outflags[TCP_NSTATES] = {
|
williamr@2
|
65 |
TH_RST|TH_ACK, 0, TH_SYN, TH_SYN|TH_ACK,
|
williamr@2
|
66 |
TH_ACK, TH_ACK,
|
williamr@2
|
67 |
TH_FIN|TH_ACK, TH_FIN|TH_ACK, TH_FIN|TH_ACK, TH_ACK, TH_ACK,
|
williamr@2
|
68 |
};
|
williamr@2
|
69 |
#endif
|
williamr@2
|
70 |
|
williamr@2
|
71 |
#ifdef TCPSTATES
|
williamr@2
|
72 |
|
williamr@2
|
73 |
const char *tcpstates[] = {
|
williamr@2
|
74 |
"CLOSED", "LISTEN", "SYN_SENT", "SYN_RCVD",
|
williamr@2
|
75 |
"ESTABLISHED", "CLOSE_WAIT", "FIN_WAIT_1", "CLOSING",
|
williamr@2
|
76 |
"LAST_ACK", "FIN_WAIT_2", "TIME_WAIT",
|
williamr@2
|
77 |
};
|
williamr@2
|
78 |
#endif
|
williamr@2
|
79 |
|
williamr@2
|
80 |
#ifdef __cplusplus
|
williamr@2
|
81 |
}
|
williamr@2
|
82 |
#endif
|
williamr@2
|
83 |
|
williamr@2
|
84 |
#endif /* _NETINET_TCP_FSM_H */
|