[BUG 2247] Disabled Fast Retransmit after RTO
This commit is contained in:
@@ -78,6 +78,7 @@ Bugs fixed
|
||||
- Bug 2242 - Mobility of both sender PHY and receiver PHY set to sender mobility in lr-wpan-phy-test.cc example.
|
||||
- Bug 2243 - TCP Socket Fork() fails to copy some parameters, causing connections to close prematurely on retransmit
|
||||
- Bug 2246 - Some DSR LogComponents and classes are not defined in a unique way.
|
||||
- Bug 2247 - Disabled Fast retransmit after an RTO
|
||||
- Bug 2254 - Ipv[4,6]RawSocket can return the wrong number of bytes sent.
|
||||
- Bug 2255 - Ipv6RawSocket does not call data sent callbacks.
|
||||
- Bug 2257 - Ipv[4,6]InterfaceContainer::Add are not consistent
|
||||
|
||||
@@ -269,8 +269,7 @@ TcpSocketBase::TcpSocketBase (void)
|
||||
m_node (0),
|
||||
m_tcp (0),
|
||||
m_rtt (0),
|
||||
m_nextTxSequence (0),
|
||||
// Change this for non-zero initial sequence number
|
||||
m_nextTxSequence (0), // Change this for non-zero initial sequence number
|
||||
m_highTxMark (0),
|
||||
m_state (CLOSED),
|
||||
m_errno (ERROR_NOTERROR),
|
||||
@@ -292,7 +291,7 @@ TcpSocketBase::TcpSocketBase (void)
|
||||
m_timestampEnabled (true),
|
||||
m_timestampToEcho (0),
|
||||
m_sendPendingDataEvent (),
|
||||
m_recover (0),
|
||||
m_recover (0), // Set to the initial sequence number
|
||||
m_retxThresh (3),
|
||||
m_limitedTx (false),
|
||||
m_congestionControl (0),
|
||||
@@ -1420,14 +1419,7 @@ TcpSocketBase::ReceivedAck (Ptr<Packet> packet, const TcpHeader& tcpHeader)
|
||||
}
|
||||
else if (m_tcb->m_congState == TcpSocketState::CA_DISORDER)
|
||||
{
|
||||
if (m_dupAckCount < m_retxThresh && m_limitedTx)
|
||||
{
|
||||
// RFC3042 Limited transmit: Send a new packet for each duplicated ACK before fast retransmit
|
||||
NS_LOG_INFO ("Limited transmit");
|
||||
uint32_t sz = SendDataPacket (m_nextTxSequence, m_tcb->m_segmentSize, true);
|
||||
m_nextTxSequence += sz;
|
||||
}
|
||||
else if (m_dupAckCount == m_retxThresh)
|
||||
if ((m_dupAckCount == m_retxThresh) && ((m_highRxAckMark - 1) > m_recover))
|
||||
{
|
||||
// triple duplicate ack triggers fast retransmit (RFC2582 sec.3 bullet #1)
|
||||
NS_LOG_DEBUG (TcpSocketState::TcpCongStateName[m_tcb->m_congState] <<
|
||||
@@ -1444,10 +1436,12 @@ TcpSocketBase::ReceivedAck (Ptr<Packet> packet, const TcpHeader& tcpHeader)
|
||||
m_tcb->m_ssThresh << " at fast recovery seqnum " << m_recover);
|
||||
DoRetransmit ();
|
||||
}
|
||||
else
|
||||
else if (m_limitedTx)
|
||||
{
|
||||
NS_FATAL_ERROR ("m_dupAckCount > m_retxThresh and we still are "
|
||||
"in DISORDER state");
|
||||
// RFC3042 Limited transmit: Send a new packet for each duplicated ACK before fast retransmit
|
||||
NS_LOG_INFO ("Limited transmit");
|
||||
uint32_t sz = SendDataPacket (m_nextTxSequence, m_tcb->m_segmentSize, true);
|
||||
m_nextTxSequence += sz;
|
||||
}
|
||||
}
|
||||
else if (m_tcb->m_congState == TcpSocketState::CA_RECOVERY)
|
||||
@@ -2751,6 +2745,7 @@ TcpSocketBase::ReTxTimeout ()
|
||||
return;
|
||||
}
|
||||
|
||||
m_recover = m_highTxMark;
|
||||
Retransmit ();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user