From 5206b062a1c6b8ffc7fc7ba1958af2d84e78efba Mon Sep 17 00:00:00 2001 From: Natale Patriciello Date: Fri, 3 Feb 2017 14:02:58 +0100 Subject: [PATCH] tcp: tracing the retransmission after a Timeout --- src/internet/model/tcp-socket-base.cc | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/internet/model/tcp-socket-base.cc b/src/internet/model/tcp-socket-base.cc index 2ac5666c4..4e2acd3b8 100644 --- a/src/internet/model/tcp-socket-base.cc +++ b/src/internet/model/tcp-socket-base.cc @@ -97,7 +97,7 @@ TcpSocketBase::GetTypeId (void) MakeBooleanAccessor (&TcpSocketBase::m_winScalingEnabled), MakeBooleanChecker ()) .AddAttribute ("Sack", "Enable or disable Sack option", - BooleanValue (false), + BooleanValue (true), MakeBooleanAccessor (&TcpSocketBase::m_sackEnabled), MakeBooleanChecker ()) .AddAttribute ("Timestamp", "Enable or disable Timestamp option", @@ -3324,10 +3324,19 @@ TcpSocketBase::DoRetransmit () } // Retransmit a data packet: Call SendDataPacket + SequenceNumber32 oldSequence = m_tcb->m_nextTxSequence; + m_tcb->m_nextTxSequence = m_txBuffer->HeadSequence (); uint32_t sz = SendDataPacket (m_txBuffer->HeadSequence (), m_tcb->m_segmentSize, true); // In case of RTO, advance m_tcb->m_nextTxSequence - m_tcb->m_nextTxSequence = std::max (m_tcb->m_nextTxSequence.Get (), m_txBuffer->HeadSequence () + sz); + if (oldSequence == m_tcb->m_nextTxSequence.Get ()) + { + m_tcb->m_nextTxSequence = std::max (m_tcb->m_nextTxSequence.Get (), m_txBuffer->HeadSequence () + sz); + } + else + { + m_tcb->m_nextTxSequence = oldSequence; + } NS_LOG_DEBUG ("retxing seq " << m_txBuffer->HeadSequence ()); }