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

(-)a/src/internet/model/tcp-socket-base.cc (-1 / +9 lines)
 Lines 1415-1420   TcpSocketBase::ReceivedAck (Ptr<Packet> packet, const TcpHeader& tcpHeader) Link Here 
1415
                         m_dupAckCount << " dup ACKs");
1415
                         m_dupAckCount << " dup ACKs");
1416
          m_tcb->m_congState = TcpSocketState::CA_DISORDER;
1416
          m_tcb->m_congState = TcpSocketState::CA_DISORDER;
1417
1417
1418
          if (m_limitedTx && m_txBuffer->SizeFromSequence (m_nextTxSequence) > 0)
1419
            {
1420
              // RFC3042 Limited transmit: Send a new packet for each duplicated ACK before fast retransmit
1421
              NS_LOG_INFO ("Limited transmit");
1422
              uint32_t sz = SendDataPacket (m_nextTxSequence, m_tcb->m_segmentSize, true);
1423
              m_nextTxSequence += sz;
1424
            }
1425
1418
          NS_LOG_DEBUG ("OPEN -> DISORDER");
1426
          NS_LOG_DEBUG ("OPEN -> DISORDER");
1419
        }
1427
        }
1420
      else if (m_tcb->m_congState == TcpSocketState::CA_DISORDER)
1428
      else if (m_tcb->m_congState == TcpSocketState::CA_DISORDER)
 Lines 1436-1442   TcpSocketBase::ReceivedAck (Ptr<Packet> packet, const TcpHeader& tcpHeader) Link Here 
1436
                           m_tcb->m_ssThresh << " at fast recovery seqnum " << m_recover);
1444
                           m_tcb->m_ssThresh << " at fast recovery seqnum " << m_recover);
1437
              DoRetransmit ();
1445
              DoRetransmit ();
1438
            }
1446
            }
1439
          else if (m_limitedTx)
1447
          else if (m_limitedTx && m_txBuffer->SizeFromSequence (m_nextTxSequence) > 0)
1440
            {
1448
            {
1441
              // RFC3042 Limited transmit: Send a new packet for each duplicated ACK before fast retransmit
1449
              // RFC3042 Limited transmit: Send a new packet for each duplicated ACK before fast retransmit
1442
              NS_LOG_INFO ("Limited transmit");
1450
              NS_LOG_INFO ("Limited transmit");
(-)a/src/internet/test/tcp-fast-retr-test.cc (-12 / +4 lines)
 Lines 167-175   TcpFastRetrTest::Tx (const Ptr<const Packet> p, const TcpHeader &h, SocketWho wh Link Here 
167
          m_rcvNextExpAck -= GetSegSize (SENDER);
167
          m_rcvNextExpAck -= GetSegSize (SENDER);
168
        }
168
        }
169
169
170
      if (m_rcvNextExpAck.GetValue () == 50001)
170
      if (m_rcvNextExpAck.GetValue () >= 50001)
171
        {
171
        {
172
          m_rcvNextExpAck += 1;
172
          m_rcvNextExpAck = 50002;
173
        }
173
        }
174
174
175
      NS_TEST_ASSERT_MSG_EQ (h.GetAckNumber (), m_rcvNextExpAck,
175
      NS_TEST_ASSERT_MSG_EQ (h.GetAckNumber (), m_rcvNextExpAck,
 Lines 189-206   TcpFastRetrTest::Tx (const Ptr<const Packet> p, const TcpHeader &h, SocketWho wh Link Here 
189
            case 1:
189
            case 1:
190
              m_rcvNextExpAck += GetSegSize (SENDER);
190
              m_rcvNextExpAck += GetSegSize (SENDER);
191
              break;
191
              break;
192
            case 50002:
193
              break;
192
            default:
194
            default:
193
              m_rcvNextExpAck += GetSegSize (SENDER) * GetDelAckCount (SENDER);
195
              m_rcvNextExpAck += GetSegSize (SENDER) * GetDelAckCount (SENDER);
194
195
              // FIN seq
196
              if (m_rcvNextExpAck.GetValue () == 50001)
197
                {
198
                  m_rcvNextExpAck += 1;
199
                }
200
              else if (m_rcvNextExpAck.GetValue () > 50002)
201
                {
202
                  m_rcvNextExpAck = 50002;
203
                }
204
            }
196
            }
205
        }
197
        }
206
    }
198
    }

Return to bug 2247