From dff5e13d774fbd3aade494165e39bb2138081d79 Mon Sep 17 00:00:00 2001 From: Brett Levasseur Date: Tue, 10 Dec 2013 18:11:08 +0100 Subject: [PATCH] TS36.322 5.2.2.3 consider the AMD PDU with SN=VT(S) - 1 for retransmission --- src/lte/model/lte-rlc-am.cc | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/src/lte/model/lte-rlc-am.cc b/src/lte/model/lte-rlc-am.cc index e5fa81c1a..c9a338d78 100644 --- a/src/lte/model/lte-rlc-am.cc +++ b/src/lte/model/lte-rlc-am.cc @@ -1727,6 +1727,27 @@ LteRlcAm::ExpirePollRetransmitTimer (void) NS_LOG_LOGIC ("statusPduRequested = " << m_statusPduRequested); DoReportBufferStatus (); + + + if ( m_txonBufferSize == 0 && m_retxBufferSize == 0 ) + { + NS_LOG_INFO ("txonBuffer and retxBuffer empty. Move PDUs up to = " << m_vtS.GetValue () - 1 << " to retxBuffer"); + uint16_t sn = 0; + for ( sn = m_vtA.GetValue(); sn < m_vtS.GetValue (); sn++ ) + { + bool pduAvailable = m_txedBuffer[ sn ]->GetSize () > 0; + + if ( pduAvailable ) + { + m_retxBuffer.at (sn).m_pdu = m_txedBuffer.at (sn)->Copy (); + m_retxBuffer.at (sn).m_retxCount = 0; + m_retxBufferSize += m_retxBuffer.at (sn).m_pdu->GetSize (); + + m_txedBufferSize -= m_txedBuffer.at (sn)->GetSize (); + m_txedBuffer.at (sn) = 0; + } + } + } }