lte rlc um: Do not use a PacketTag to store the arrival time
This commit is contained in:
@@ -88,18 +88,13 @@ LteRlcUm::DoTransmitPdcpPdu (Ptr<Packet> p)
|
||||
|
||||
if (m_txBufferSize + p->GetSize () <= m_maxTxBufferSize)
|
||||
{
|
||||
/** Store arrival time */
|
||||
RlcTag timeTag (Simulator::Now ());
|
||||
p->AddPacketTag (timeTag);
|
||||
|
||||
/** Store PDCP PDU */
|
||||
|
||||
LteRlcSduStatusTag tag;
|
||||
tag.SetStatus (LteRlcSduStatusTag::FULL_SDU);
|
||||
p->AddPacketTag (tag);
|
||||
|
||||
NS_LOG_LOGIC ("Tx Buffer: New packet added");
|
||||
m_txBuffer.push_back (p);
|
||||
m_txBuffer.push_back (TxPdu (p, Simulator::Now ()));
|
||||
m_txBufferSize += p->GetSize ();
|
||||
NS_LOG_LOGIC ("NumOfBuffers = " << m_txBuffer.size() );
|
||||
NS_LOG_LOGIC ("txBufferSize = " << m_txBufferSize);
|
||||
@@ -153,13 +148,15 @@ LteRlcUm::DoNotifyTxOpportunity (LteMacSapUser::TxOpportunityParameters txOpPara
|
||||
return;
|
||||
}
|
||||
|
||||
Ptr<Packet> firstSegment = m_txBuffer.begin ()->m_pdu->Copy ();
|
||||
Time firstSegmentTime = m_txBuffer.begin ()->m_waitingSince;
|
||||
|
||||
NS_LOG_LOGIC ("SDUs in TxBuffer = " << m_txBuffer.size ());
|
||||
NS_LOG_LOGIC ("First SDU buffer = " << *(m_txBuffer.begin()));
|
||||
NS_LOG_LOGIC ("First SDU size = " << (*(m_txBuffer.begin()))->GetSize ());
|
||||
NS_LOG_LOGIC ("First SDU buffer = " << firstSegment);
|
||||
NS_LOG_LOGIC ("First SDU size = " << firstSegment->GetSize ());
|
||||
NS_LOG_LOGIC ("Next segment size = " << nextSegmentSize);
|
||||
NS_LOG_LOGIC ("Remove SDU from TxBuffer");
|
||||
Ptr<Packet> firstSegment = (*(m_txBuffer.begin ()))->Copy ();
|
||||
m_txBufferSize -= (*(m_txBuffer.begin()))->GetSize ();
|
||||
m_txBufferSize -= firstSegment->GetSize ();
|
||||
NS_LOG_LOGIC ("txBufferSize = " << m_txBufferSize );
|
||||
m_txBuffer.erase (m_txBuffer.begin ());
|
||||
|
||||
@@ -209,12 +206,12 @@ LteRlcUm::DoNotifyTxOpportunity (LteMacSapUser::TxOpportunityParameters txOpPara
|
||||
{
|
||||
firstSegment->AddPacketTag (oldTag);
|
||||
|
||||
m_txBuffer.insert (m_txBuffer.begin (), firstSegment);
|
||||
m_txBufferSize += (*(m_txBuffer.begin()))->GetSize ();
|
||||
m_txBuffer.insert (m_txBuffer.begin (), TxPdu (firstSegment, firstSegmentTime));
|
||||
m_txBufferSize += m_txBuffer.begin()->m_pdu->GetSize ();
|
||||
|
||||
NS_LOG_LOGIC (" TX buffer: Give back the remaining segment");
|
||||
NS_LOG_LOGIC (" TX buffers = " << m_txBuffer.size ());
|
||||
NS_LOG_LOGIC (" Front buffer size = " << (*(m_txBuffer.begin()))->GetSize ());
|
||||
NS_LOG_LOGIC (" Front buffer size = " << m_txBuffer.begin()->m_pdu->GetSize ());
|
||||
NS_LOG_LOGIC (" txBufferSize = " << m_txBufferSize );
|
||||
}
|
||||
else
|
||||
@@ -275,8 +272,8 @@ LteRlcUm::DoNotifyTxOpportunity (LteMacSapUser::TxOpportunityParameters txOpPara
|
||||
NS_LOG_LOGIC (" SDUs in TxBuffer = " << m_txBuffer.size ());
|
||||
if (m_txBuffer.size () > 0)
|
||||
{
|
||||
NS_LOG_LOGIC (" First SDU buffer = " << *(m_txBuffer.begin()));
|
||||
NS_LOG_LOGIC (" First SDU size = " << (*(m_txBuffer.begin()))->GetSize ());
|
||||
NS_LOG_LOGIC (" First SDU buffer = " << m_txBuffer.begin()->m_pdu);
|
||||
NS_LOG_LOGIC (" First SDU size = " << m_txBuffer.begin()->m_pdu->GetSize ());
|
||||
}
|
||||
NS_LOG_LOGIC (" Next segment size = " << nextSegmentSize);
|
||||
|
||||
@@ -305,15 +302,16 @@ LteRlcUm::DoNotifyTxOpportunity (LteMacSapUser::TxOpportunityParameters txOpPara
|
||||
NS_LOG_LOGIC (" SDUs in TxBuffer = " << m_txBuffer.size ());
|
||||
if (m_txBuffer.size () > 0)
|
||||
{
|
||||
NS_LOG_LOGIC (" First SDU buffer = " << *(m_txBuffer.begin()));
|
||||
NS_LOG_LOGIC (" First SDU size = " << (*(m_txBuffer.begin()))->GetSize ());
|
||||
NS_LOG_LOGIC (" First SDU buffer = " << m_txBuffer.begin()->m_pdu);
|
||||
NS_LOG_LOGIC (" First SDU size = " << m_txBuffer.begin()->m_pdu->GetSize ());
|
||||
}
|
||||
NS_LOG_LOGIC (" Next segment size = " << nextSegmentSize);
|
||||
NS_LOG_LOGIC (" Remove SDU from TxBuffer");
|
||||
|
||||
// (more segments)
|
||||
firstSegment = (*(m_txBuffer.begin ()))->Copy ();
|
||||
m_txBufferSize -= (*(m_txBuffer.begin()))->GetSize ();
|
||||
firstSegment = m_txBuffer.begin ()->m_pdu->Copy ();
|
||||
firstSegmentTime = m_txBuffer.begin ()->m_waitingSince;
|
||||
m_txBufferSize -= firstSegment->GetSize ();
|
||||
m_txBuffer.erase (m_txBuffer.begin ());
|
||||
NS_LOG_LOGIC (" txBufferSize = " << m_txBufferSize );
|
||||
}
|
||||
@@ -379,7 +377,7 @@ LteRlcUm::DoNotifyTxOpportunity (LteMacSapUser::TxOpportunityParameters txOpPara
|
||||
|
||||
// Sender timestamp
|
||||
RlcTag rlcTag (Simulator::Now ());
|
||||
packet->ReplacePacketTag (rlcTag);
|
||||
packet->AddByteTag (rlcTag, 1, rlcHeader.GetSerializedSize ());
|
||||
m_txPdu (m_rnti, m_lcid, packet->GetSize ());
|
||||
|
||||
// Send RLC PDU to MAC layer
|
||||
@@ -414,8 +412,10 @@ LteRlcUm::DoReceivePdu (LteMacSapUser::ReceivePduParameters rxPduParams)
|
||||
// Receiver timestamp
|
||||
RlcTag rlcTag;
|
||||
Time delay;
|
||||
NS_ASSERT_MSG (rxPduParams.p->PeekPacketTag (rlcTag), "RlcTag is missing");
|
||||
rxPduParams.p->RemovePacketTag (rlcTag);
|
||||
|
||||
bool ret = rxPduParams.p->FindFirstMatchingByteTag (rlcTag);
|
||||
NS_ASSERT_MSG (ret, "RlcTag is missing");
|
||||
|
||||
delay = Simulator::Now() - rlcTag.GetSenderTimestamp ();
|
||||
m_rxPdu (m_rnti, m_lcid, rxPduParams.p->GetSize (), delay.GetNanoSeconds ());
|
||||
|
||||
@@ -1123,10 +1123,7 @@ LteRlcUm::DoReportBufferStatus (void)
|
||||
|
||||
if (! m_txBuffer.empty ())
|
||||
{
|
||||
RlcTag holTimeTag;
|
||||
NS_ASSERT_MSG (m_txBuffer.front ()->PeekPacketTag (holTimeTag), "RlcTag is missing");
|
||||
m_txBuffer.front ()->PeekPacketTag (holTimeTag);
|
||||
holDelay = Simulator::Now () - holTimeTag.GetSenderTimestamp ();
|
||||
holDelay = Simulator::Now () - m_txBuffer.front().m_waitingSince;
|
||||
|
||||
queueSize = m_txBufferSize + 2 * m_txBuffer.size (); // Data in tx queue + estimated headers size
|
||||
}
|
||||
|
||||
@@ -97,7 +97,28 @@ private:
|
||||
private:
|
||||
uint32_t m_maxTxBufferSize; ///< maximum transmit buffer status
|
||||
uint32_t m_txBufferSize; ///< transmit buffer size
|
||||
std::vector < Ptr<Packet> > m_txBuffer; ///< Transmission buffer
|
||||
/**
|
||||
* \brief Store an incoming (from layer above us) PDU, waiting to transmit it
|
||||
*/
|
||||
struct TxPdu
|
||||
{
|
||||
/**
|
||||
* \brief TxPdu default constructor
|
||||
* \param pdu the PDU
|
||||
* \param time the arrival time
|
||||
*/
|
||||
TxPdu (const Ptr<Packet> &pdu, const Time &time) :
|
||||
m_pdu (pdu),
|
||||
m_waitingSince (time)
|
||||
{ }
|
||||
|
||||
TxPdu () = delete;
|
||||
|
||||
Ptr<Packet> m_pdu; ///< PDU
|
||||
Time m_waitingSince; ///< Layer arrival time
|
||||
};
|
||||
|
||||
std::vector < TxPdu > m_txBuffer; ///< Transmission buffer
|
||||
std::map <uint16_t, Ptr<Packet> > m_rxBuffer; ///< Reception buffer
|
||||
std::vector < Ptr<Packet> > m_reasBuffer; ///< Reassembling buffer
|
||||
|
||||
|
||||
Reference in New Issue
Block a user