merge
authorGustavo J. A. M. Carneiro <gjc@inescporto.pt>
Sun Apr 06 19:54:39 2008 +0100 (22 months ago)
changeset 28830b4cb407bb9e
parent 2882 542f4d57464b
parent 2880 ce64dffad49f
child 2884 635509281306
merge
     1.1 --- a/examples/tcp-large-transfer.cc	Sun Apr 06 19:22:39 2008 +0100
     1.2 +++ b/examples/tcp-large-transfer.cc	Sun Apr 06 19:54:39 2008 +0100
     1.3 @@ -75,7 +75,7 @@
     1.4  
     1.5  void CloseConnection (Ptr<Socket> localSocket)
     1.6  {
     1.7 -  //localSocket->Close ();
     1.8 +  localSocket->Close ();
     1.9  }
    1.10  
    1.11  void StartFlow(Ptr<Socket> localSocket, uint32_t nBytes, 
     2.1 --- a/src/internet-node/tcp-socket.cc	Sun Apr 06 19:22:39 2008 +0100
     2.2 +++ b/src/internet-node/tcp-socket.cc	Sun Apr 06 19:54:39 2008 +0100
     2.3 @@ -43,6 +43,7 @@
     2.4    TcpSocket::TcpSocket ()
     2.5    : m_skipRetxResched (false),
     2.6      m_dupAckCount (0),
     2.7 +    m_delAckCount (0),
     2.8      m_endPoint (0),
     2.9      m_node (0),
    2.10      m_tcp (0),
    2.11 @@ -73,6 +74,9 @@
    2.12    : Socket(sock), //copy the base class callbacks
    2.13      m_skipRetxResched (sock.m_skipRetxResched),
    2.14      m_dupAckCount (sock.m_dupAckCount),
    2.15 +    m_delAckCount (0),
    2.16 +    m_delAckMaxCount (sock.m_delAckMaxCount),
    2.17 +    m_delAckTimout (sock.m_delAckTimout),
    2.18      m_endPoint (0),
    2.19      m_node (sock.m_node),
    2.20      m_tcp (sock.m_tcp),
    2.21 @@ -160,6 +164,8 @@
    2.22    m_initialCWnd = t->GetDefaultInitialCwnd ();
    2.23    m_cnTimeout = Seconds (t->GetDefaultConnTimeout ());
    2.24    m_cnCount = t->GetDefaultConnCount ();
    2.25 +  m_delAckTimout = Seconds(t->GetDefaultDelAckTimeout ());
    2.26 +  m_delAckMaxCount = t->GetDefaultDelAckCount ();
    2.27  }
    2.28  
    2.29  void 
    2.30 @@ -1034,10 +1040,24 @@
    2.31                 << "       flags " << tcpHeader.GetFlags ());
    2.32      }
    2.33    // Now send a new ack packet acknowledging all received and delivered data
    2.34 +  if(++m_delAckCount >= m_delAckMaxCount)
    2.35 +  {
    2.36 +    m_delAckEvent.Cancel();
    2.37 +    m_delAckCount = 0;
    2.38 +    SendEmptyPacket (TcpHeader::ACK);
    2.39 +  }
    2.40 +  else
    2.41 +  {
    2.42 +    m_delAckEvent = Simulator::Schedule (m_delAckTimout, &TcpSocket::DelAckTimeout, this);
    2.43 +  }
    2.44 +}
    2.45 +
    2.46 +void TcpSocket::DelAckTimeout ()
    2.47 +{
    2.48 +  m_delAckCount = 0;
    2.49    SendEmptyPacket (TcpHeader::ACK);
    2.50  }
    2.51  
    2.52 -
    2.53  void TcpSocket::CommonNewAck (SequenceNumber ack, bool skipTimer)
    2.54  { // CommonNewAck is called only for "New" (non-duplicate) acks
    2.55    // and MUST be called by any subclass, from the NewAck function
     3.1 --- a/src/internet-node/tcp-socket.h	Sun Apr 06 19:22:39 2008 +0100
     3.2 +++ b/src/internet-node/tcp-socket.h	Sun Apr 06 19:54:39 2008 +0100
     3.3 @@ -101,6 +101,7 @@
     3.4    // XXX This should be virtual and overridden
     3.5    void DupAck (const TcpHeader& t, uint32_t count); 
     3.6    void ReTxTimeout ();
     3.7 +  void DelAckTimeout ();
     3.8    void LastAckTimeout ();
     3.9    void Retransmit ();
    3.10    void CommonNewAck (SequenceNumber seq, bool skipTimer = false);
    3.11 @@ -110,6 +111,11 @@
    3.12    EventId m_retxEvent;
    3.13    EventId m_lastAckEvent;
    3.14  
    3.15 +  EventId m_delAckEvent;
    3.16 +  uint32_t m_delAckCount;
    3.17 +  uint32_t m_delAckMaxCount;
    3.18 +  Time m_delAckTimout;
    3.19 +
    3.20    Ipv4EndPoint *m_endPoint;
    3.21    Ptr<Node> m_node;
    3.22    Ptr<TcpL4Protocol> m_tcp;
    3.23 @@ -118,10 +124,6 @@
    3.24    //these two are so that the socket/endpoint cloning works
    3.25    Ipv4Address m_localAddress;
    3.26    uint16_t m_localPort;
    3.27 -  //XXX Dead code?
    3.28 -  Callback<void, Ptr<Socket>, uint32_t, const Address &> m_dummyRxCallback;
    3.29 -  Callback<void, Ptr<Socket>, uint8_t const*, uint32_t, const Address &> 
    3.30 -    m_rxCallback;
    3.31    enum SocketErrno m_errno;
    3.32    bool m_shutdownSend;
    3.33    bool m_shutdownRecv;
     4.1 --- a/src/node/tcp.cc	Sun Apr 06 19:22:39 2008 +0100
     4.2 +++ b/src/node/tcp.cc	Sun Apr 06 19:54:39 2008 +0100
     4.3 @@ -19,6 +19,7 @@
     4.4   */
     4.5  #include "tcp.h"
     4.6  #include "ns3/uinteger.h"
     4.7 +#include "ns3/double.h"
     4.8  
     4.9  namespace ns3 {
    4.10  
    4.11 @@ -69,6 +70,16 @@
    4.12                     Uinteger (6),
    4.13                     MakeUintegerAccessor (&Tcp::m_defaultConnCount),
    4.14                     MakeUintegerChecker<uint32_t> ())
    4.15 +    .AddAttribute ("TcpDefaultDelAckTimeout",
    4.16 +                   "Default timeout value for TCP delayed acks, in seconds",
    4.17 +                   Double (0.2),
    4.18 +                   MakeDoubleAccessor (&Tcp::m_defaultDelAckTimeout),
    4.19 +                   MakeDoubleChecker<double> ())
    4.20 +    .AddAttribute ("TcpDefaultDelAckCount",
    4.21 +                   "Default number of packets to wait before sending a TCP ack",
    4.22 +                   Uinteger (2),
    4.23 +                   MakeUintegerAccessor (&Tcp::m_defaultDelAckCount),
    4.24 +                   MakeUintegerChecker<uint32_t> ())
    4.25       ;
    4.26    return tid;
    4.27  }
    4.28 @@ -114,4 +125,16 @@
    4.29    return m_defaultConnCount;
    4.30  }
    4.31  
    4.32 +double
    4.33 +Tcp::GetDefaultDelAckTimeout (void) const
    4.34 +{
    4.35 +  return m_defaultDelAckTimeout;
    4.36 +}
    4.37 +
    4.38 +uint32_t
    4.39 +Tcp::GetDefaultDelAckCount (void) const
    4.40 +{
    4.41 +  return m_defaultDelAckCount;
    4.42 +}
    4.43 +
    4.44  } // namespace ns3
     5.1 --- a/src/node/tcp.h	Sun Apr 06 19:22:39 2008 +0100
     5.2 +++ b/src/node/tcp.h	Sun Apr 06 19:54:39 2008 +0100
     5.3 @@ -55,15 +55,20 @@
     5.4    uint32_t GetDefaultInitialCwnd (void) const;
     5.5    uint32_t GetDefaultConnTimeout (void) const;
     5.6    uint32_t GetDefaultConnCount (void) const;
     5.7 +  double   GetDefaultDelAckTimeout (void) const;
     5.8 +  uint32_t GetDefaultDelAckCount (void) const;
     5.9 +
    5.10  private:
    5.11 -  uint32_t  m_defaultSegSize;  
    5.12 -  uint32_t  m_defaultAdvWin;   
    5.13 -  uint32_t  m_defaultSsThresh; 
    5.14 -  uint32_t  m_defaultTxBuffer; 
    5.15 -  uint32_t  m_defaultRxBuffer; 
    5.16 -  uint32_t  m_defaultInitialCwnd; 
    5.17 -  uint32_t  m_defaultConnTimeout;  
    5.18 -  uint32_t  m_defaultConnCount;  
    5.19 +  uint32_t  m_defaultSegSize;
    5.20 +  uint32_t  m_defaultAdvWin; 
    5.21 +  uint32_t  m_defaultSsThresh;
    5.22 +  uint32_t  m_defaultTxBuffer;
    5.23 +  uint32_t  m_defaultRxBuffer;
    5.24 +  uint32_t  m_defaultInitialCwnd;
    5.25 +  uint32_t  m_defaultConnTimeout;
    5.26 +  uint32_t  m_defaultConnCount;
    5.27 +  double    m_defaultDelAckTimeout;
    5.28 +  uint32_t  m_defaultDelAckCount;
    5.29  
    5.30  };
    5.31