View | Details | Raw Unified | Return to bug 2247
Collapse All | Expand All

(-)i/src/internet/model/tcp-socket-base.cc (-12 / +8 lines)
 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

Return to bug 2247