--- 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