Lines 1700-1706
TcpSocketBase::ReceivedAck (Ptr<Packet> packet, const TcpHeader& tcpHeader)
|
Link Here
|
---|
|
1700 |
|
1700 |
|
1701 |
// RFC 6675 Section 5: 2nd, 3rd paragraph and point (A), (B) implementation |
1701 |
// RFC 6675 Section 5: 2nd, 3rd paragraph and point (A), (B) implementation |
1702 |
// are inside the function ProcessAck |
1702 |
// are inside the function ProcessAck |
1703 |
ProcessAck (ackNumber, scoreboardUpdated, oldHeadSequence); |
1703 |
ProcessAck (ackNumber, scoreboardUpdated, oldHeadSequence, packet->GetSize ()); |
1704 |
|
1704 |
|
1705 |
// If there is any data piggybacked, store it into m_rxBuffer |
1705 |
// If there is any data piggybacked, store it into m_rxBuffer |
1706 |
if (packet->GetSize () > 0) |
1706 |
if (packet->GetSize () > 0) |
Lines 1715-1721
TcpSocketBase::ReceivedAck (Ptr<Packet> packet, const TcpHeader& tcpHeader)
|
Link Here
|
---|
|
1715 |
|
1715 |
|
1716 |
void |
1716 |
void |
1717 |
TcpSocketBase::ProcessAck (const SequenceNumber32 &ackNumber, bool scoreboardUpdated, |
1717 |
TcpSocketBase::ProcessAck (const SequenceNumber32 &ackNumber, bool scoreboardUpdated, |
1718 |
const SequenceNumber32 &oldHeadSequence) |
1718 |
const SequenceNumber32 &oldHeadSequence, uint32_t size) |
1719 |
{ |
1719 |
{ |
1720 |
NS_LOG_FUNCTION (this << ackNumber << scoreboardUpdated); |
1720 |
NS_LOG_FUNCTION (this << ackNumber << scoreboardUpdated); |
1721 |
// RFC 6675, Section 5, 2nd paragraph: |
1721 |
// RFC 6675, Section 5, 2nd paragraph: |
Lines 1742-1751
TcpSocketBase::ProcessAck (const SequenceNumber32 &ackNumber, bool scoreboardUpd
|
Link Here
|
---|
|
1742 |
* HighData (m_highTxMark) |
1742 |
* HighData (m_highTxMark) |
1743 |
*/ |
1743 |
*/ |
1744 |
|
1744 |
|
1745 |
bool isDupack = m_sackEnabled ? |
1745 |
bool isDupack = scoreboardUpdated; |
1746 |
scoreboardUpdated |
1746 |
|
1747 |
: ackNumber == oldHeadSequence && |
1747 |
if (!m_sackEnabled) |
1748 |
ackNumber < m_tcb->m_highTxMark; |
1748 |
{ |
|
|
1749 |
// SYN and FIN are both OFF thanks to the state processing |
1750 |
isDupack = UnAckDataCount () > 0 && // condition (a) |
1751 |
size == 0 && // condition (b) |
1752 |
ackNumber == oldHeadSequence && // condition (d) |
1753 |
ackNumber < m_tcb->m_highTxMark; // safety consideration |
1754 |
} |
1749 |
|
1755 |
|
1750 |
NS_LOG_DEBUG ("ACK of " << ackNumber << |
1756 |
NS_LOG_DEBUG ("ACK of " << ackNumber << |
1751 |
" SND.UNA=" << oldHeadSequence << |
1757 |
" SND.UNA=" << oldHeadSequence << |