|
Lines 291-297
TcpSocketBase::TcpSocketBase (void)
|
Link Here
|
|---|
|
| 291 |
m_timestampEnabled (true), |
291 |
m_timestampEnabled (true), |
| 292 |
m_timestampToEcho (0), |
292 |
m_timestampToEcho (0), |
| 293 |
m_sendPendingDataEvent (), |
293 |
m_sendPendingDataEvent (), |
| 294 |
m_recover (0), |
294 |
m_recover (0), // Set to the initial sequence number |
| 295 |
m_retxThresh (3), |
295 |
m_retxThresh (3), |
| 296 |
m_limitedTx (false), |
296 |
m_limitedTx (false), |
| 297 |
m_congestionControl (0), |
297 |
m_congestionControl (0), |
|
Lines 1429-1442
TcpSocketBase::ReceivedAck (Ptr<Packet> packet, const TcpHeader& tcpHeader)
|
Link Here
|
|---|
|
| 1429 |
} |
1429 |
} |
| 1430 |
else if (m_tcb->m_congState == TcpSocketState::CA_DISORDER) |
1430 |
else if (m_tcb->m_congState == TcpSocketState::CA_DISORDER) |
| 1431 |
{ |
1431 |
{ |
| 1432 |
if (m_dupAckCount < m_retxThresh && m_limitedTx) |
1432 |
if ((m_dupAckCount == m_retxThresh) && ((m_highRxAckMark - 1) > m_recover)) |
| 1433 |
{ |
|
|
| 1434 |
// RFC3042 Limited transmit: Send a new packet for each duplicated ACK before fast retransmit |
| 1435 |
NS_LOG_INFO ("Limited transmit"); |
| 1436 |
uint32_t sz = SendDataPacket (m_nextTxSequence, m_tcb->m_segmentSize, true); |
| 1437 |
m_nextTxSequence += sz; |
| 1438 |
} |
| 1439 |
else if (m_dupAckCount == m_retxThresh) |
| 1440 |
{ |
1433 |
{ |
| 1441 |
// triple duplicate ack triggers fast retransmit (RFC2582 sec.3 bullet #1) |
1434 |
// triple duplicate ack triggers fast retransmit (RFC2582 sec.3 bullet #1) |
| 1442 |
NS_LOG_DEBUG (TcpSocketState::TcpCongStateName[m_tcb->m_congState] << |
1435 |
NS_LOG_DEBUG (TcpSocketState::TcpCongStateName[m_tcb->m_congState] << |
|
Lines 1453-1462
TcpSocketBase::ReceivedAck (Ptr<Packet> packet, const TcpHeader& tcpHeader)
|
Link Here
|
|---|
|
| 1453 |
m_tcb->m_ssThresh << " at fast recovery seqnum " << m_recover); |
1446 |
m_tcb->m_ssThresh << " at fast recovery seqnum " << m_recover); |
| 1454 |
DoRetransmit (); |
1447 |
DoRetransmit (); |
| 1455 |
} |
1448 |
} |
| 1456 |
else |
1449 |
else if (m_limitedTx) |
| 1457 |
{ |
1450 |
{ |
| 1458 |
NS_FATAL_ERROR ("m_dupAckCount > m_retxThresh and we still are " |
1451 |
// RFC3042 Limited transmit: Send a new packet for each duplicated ACK before fast retransmit |
| 1459 |
"in DISORDER state"); |
1452 |
NS_LOG_INFO ("Limited transmit"); |
|
|
1453 |
uint32_t sz = SendDataPacket (m_nextTxSequence, m_tcb->m_segmentSize, true); |
| 1454 |
m_nextTxSequence += sz; |
| 1460 |
} |
1455 |
} |
| 1461 |
} |
1456 |
} |
| 1462 |
else if (m_tcb->m_congState == TcpSocketState::CA_RECOVERY) |
1457 |
else if (m_tcb->m_congState == TcpSocketState::CA_RECOVERY) |
|
Lines 2760-2765
TcpSocketBase::ReTxTimeout ()
|
Link Here
|
|---|
|
| 2760 |
return; |
2755 |
return; |
| 2761 |
} |
2756 |
} |
| 2762 |
|
2757 |
|
|
|
2758 |
m_recover = m_highTxMark; |
| 2763 |
Retransmit (); |
2759 |
Retransmit (); |
| 2764 |
} |
2760 |
} |
| 2765 |
|
2761 |
|