00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #include <vector>
00023 #include <map>
00024 #include "sequence-number.h"
00025
00026 #ifndef TCP_TYPEDEFS_H
00027 #define TCP_TYPEDEFS_H
00028
00029 namespace ns3 {
00030
00031 typedef enum { MAX_FLAGS = 0x40 } TCPMaxFlags_t;
00032
00033 typedef enum {
00034 CLOSED,
00035 LISTEN,
00036 SYN_SENT,
00037 SYN_RCVD,
00038 ESTABLISHED,
00039 CLOSE_WAIT,
00040 LAST_ACK,
00041 FIN_WAIT_1,
00042 FIN_WAIT_2,
00043 CLOSING,
00044 TIMED_WAIT,
00045 LAST_STATE } States_t;
00046
00047 typedef enum {
00048 APP_LISTEN,
00049 APP_CONNECT,
00050 APP_SEND,
00051 SEQ_RECV,
00052 APP_CLOSE,
00053 TIMEOUT,
00054 ACK_RX,
00055 SYN_RX,
00056 SYN_ACK_RX,
00057 FIN_RX,
00058 FIN_ACK_RX,
00059 RST_RX,
00060 BAD_FLAGS,
00061 LAST_EVENT } Events_t;
00062
00063 typedef enum {
00064 NO_ACT,
00065 ACK_TX,
00066 ACK_TX_1,
00067 RST_TX,
00068 SYN_TX,
00069 SYN_ACK_TX,
00070 FIN_TX,
00071 FIN_ACK_TX,
00072 NEW_ACK,
00073 NEW_SEQ_RX,
00074 RETX,
00075 TX_DATA,
00076 PEER_CLOSE,
00077 APP_CLOSED,
00078 CANCEL_TM,
00079 APP_NOTIFY,
00080 SERV_NOTIFY,
00081 LAST_ACTION } Actions_t;
00082
00083 class SA
00084 {
00085 public:
00086 SA () : state (LAST_STATE), action (LAST_ACTION) { }
00087 SA (States_t s, Actions_t a) : state (s), action (a) { }
00088 public:
00089 States_t state;
00090 Actions_t action;
00091 };
00092 typedef std::vector<SA> StateActionVec_t;
00093 typedef std::vector<StateActionVec_t> StateActions_t;
00094 typedef std::vector<Events_t> EventVec_t;
00095
00096
00097 typedef std::map<SequenceNumber, Ptr<Packet> > UnAckData_t;
00098
00099 class TcpStateMachine {
00100 public:
00101 TcpStateMachine ();
00102 SA Lookup (States_t, Events_t);
00103 Events_t FlagsEvent (uint8_t);
00104
00105 public:
00106 StateActions_t aT;
00107 EventVec_t eV;
00108 };
00109
00110 }
00111 #endif //TCP_TYPEDEFS_H