src/internet-stack/tcp-typedefs.h
changeset 3260 8c0ab08144e6
parent 2224 6f97d21a99c2
child 3643 7afa66c2b291
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/internet-stack/tcp-typedefs.h	Mon Jun 09 15:40:22 2008 -0700
@@ -0,0 +1,111 @@
+/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2007 Georgia Tech Research Corporation
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: Raj Bhattacharjea <raj.b@gatech.edu>
+ * typedefs for tcp state machine
+ */ 
+
+#include <vector>
+#include <map>
+#include "sequence-number.h"
+
+#ifndef TCP_TYPEDEFS_H
+#define TCP_TYPEDEFS_H
+
+namespace ns3 {
+
+typedef enum { MAX_FLAGS = 0x40 } TCPMaxFlags_t;  // Flags are 6 bits
+
+typedef enum {
+  CLOSED,       // 0
+  LISTEN,       // 1
+  SYN_SENT,     // 2
+  SYN_RCVD,     // 3
+  ESTABLISHED,  // 4
+  CLOSE_WAIT,   // 5
+  LAST_ACK,     // 6
+  FIN_WAIT_1,   // 7
+  FIN_WAIT_2,   // 8
+  CLOSING,      // 9
+  TIMED_WAIT,   // 10
+  LAST_STATE } States_t;
+
+typedef enum {
+  APP_LISTEN,   // 0
+  APP_CONNECT,  // 1
+  APP_SEND,     // 2
+  SEQ_RECV,     // 3
+  APP_CLOSE,    // 4
+  TIMEOUT,      // 5
+  ACK_RX,       // 6
+  SYN_RX,       // 7
+  SYN_ACK_RX,   // 8
+  FIN_RX,       // 9
+  FIN_ACK_RX,   // 10
+  RST_RX,       // 11
+  BAD_FLAGS,    // 12
+  LAST_EVENT } Events_t;
+
+typedef enum {
+  NO_ACT,       // 0
+  ACK_TX,       // 1
+  ACK_TX_1,     // ACK response to syn
+  RST_TX,       // 2
+  SYN_TX,       // 3
+  SYN_ACK_TX,   // 4
+  FIN_TX,       // 5
+  FIN_ACK_TX,   // 6
+  NEW_ACK,      // 7
+  NEW_SEQ_RX,   // 8
+  RETX,         // 9
+  TX_DATA,      // 10
+  PEER_CLOSE,   // 11
+  APP_CLOSED,   // 12
+  CANCEL_TM,    // 13
+  APP_NOTIFY,   // 14 - Notify app that connection failed
+  SERV_NOTIFY,  // 15 - Notify server tcp that connection completed
+  LAST_ACTION } Actions_t;
+
+class SA  // State/Action pair
+{
+public:
+  SA () : state (LAST_STATE), action (LAST_ACTION) { }
+  SA (States_t s, Actions_t a) : state (s), action (a) { }
+public:
+  States_t  state;
+  Actions_t action;
+};
+typedef std::vector<SA>  StateActionVec_t;
+typedef std::vector<StateActionVec_t> StateActions_t;  // One per current state
+typedef std::vector<Events_t> EventVec_t;      // For flag events lookup
+
+//type for managing buffered out of sequence data
+typedef std::map<SequenceNumber, Ptr<Packet> > UnAckData_t;
+
+class TcpStateMachine {
+  public:
+    TcpStateMachine ();
+    SA Lookup (States_t, Events_t);
+    Events_t FlagsEvent (uint8_t); // Lookup event from flags
+
+  public:
+    StateActions_t aT; // Action table
+    EventVec_t     eV; // Flags event lookup  
+};
+
+}//namespace ns3
+#endif //TCP_TYPEDEFS_H