src/internet/model/tcp-westwood.cc
changeset 10855 7ef081ddfc7f
parent 10652 dc18deba4502
child 10968 2d29fee2b7b8
--- a/src/internet/model/tcp-westwood.cc	Wed Aug 06 11:00:06 2014 +0200
+++ b/src/internet/model/tcp-westwood.cc	Wed Aug 13 23:46:16 2014 +0200
@@ -56,6 +56,9 @@
       .AddConstructor<TcpWestwood>()
       .AddTraceSource("CongestionWindow", "The TCP connection's congestion window",
                       MakeTraceSourceAccessor(&TcpWestwood::m_cWnd))
+      .AddTraceSource ("SlowStartThreshold",
+                       "TCP slow start threshold (bytes)",
+                       MakeTraceSourceAccessor (&TcpWestwood::m_ssThresh))
       .AddAttribute("FilterType", "Use this to choose no filter or Tustin's approximation filter",
                     EnumValue(TcpWestwood::TUSTIN), MakeEnumAccessor(&TcpWestwood::m_fType),
                     MakeEnumChecker(TcpWestwood::NONE, "None", TcpWestwood::TUSTIN, "Tustin"))
@@ -88,6 +91,7 @@
   m_cWnd(sock.m_cWnd),
   m_ssThresh(sock.m_ssThresh),
   m_initialCWnd(sock.m_initialCWnd),
+  m_initialSsThresh (sock.m_initialSsThresh),
   m_inFastRec(false),
   m_currentBW(sock.m_currentBW),
   m_lastSampleBW(sock.m_lastSampleBW),
@@ -272,7 +276,7 @@
   if (count == 3 && !m_inFastRec)
     {// Triple duplicate ACK triggers fast retransmit
      // Adjust cwnd and ssthresh based on the estimated BW
-      m_ssThresh = m_currentBW * static_cast<double> (m_minRtt.GetSeconds());
+      m_ssThresh = uint32_t(m_currentBW * static_cast<double> (m_minRtt.GetSeconds()));
       if (m_cWnd > m_ssThresh)
         {
           m_cWnd = m_ssThresh;
@@ -380,17 +384,18 @@
 }
 
 void
-TcpWestwood::SetSSThresh (uint32_t threshold)
+TcpWestwood::SetInitialSSThresh (uint32_t threshold)
 {
   NS_LOG_FUNCTION (this);
-  m_ssThresh = threshold;
+  NS_ABORT_MSG_UNLESS (m_state == CLOSED, "TcpWestwood::SetSSThresh() cannot change initial ssThresh after connection started.");
+  m_initialSsThresh = threshold;
 }
 
 uint32_t
-TcpWestwood::GetSSThresh (void) const
+TcpWestwood::GetInitialSSThresh (void) const
 {
   NS_LOG_FUNCTION (this);
-  return m_ssThresh;
+  return m_initialSsThresh;
 }
 
 void
@@ -417,6 +422,7 @@
    * m_segmentSize are set by the attribute system in ns3::TcpSocket.
    */
   m_cWnd = m_initialCWnd * m_segmentSize;
+  m_ssThresh = m_initialSsThresh;
 }
 
 } // namespace ns3