--- a/src/lte/model/lte-pdcp.cc Thu May 19 00:57:32 2016 +0200
+++ b/src/lte/model/lte-pdcp.cc Thu May 19 17:06:01 2016 +0200
@@ -188,7 +188,7 @@
// Sender timestamp
PdcpTag pdcpTag (Simulator::Now ());
- p->AddByteTag (pdcpTag);
+ p->AddPacketTag (pdcpTag);
m_txPdu (m_rnti, m_lcid, p->GetSize ());
LteRlcSapProvider::TransmitPdcpPduParameters params;
@@ -207,10 +207,9 @@
// Receiver timestamp
PdcpTag pdcpTag;
Time delay;
- if (p->FindFirstMatchingByteTag (pdcpTag))
- {
- delay = Simulator::Now() - pdcpTag.GetSenderTimestamp ();
- }
+ NS_ASSERT_MSG (p->PeekPacketTag (pdcpTag), "PdcpTag is missing");
+ p->RemovePacketTag (pdcpTag);
+ delay = Simulator::Now() - pdcpTag.GetSenderTimestamp ();
m_rxPdu(m_rnti, m_lcid, p->GetSize (), delay.GetNanoSeconds ());
LtePdcpHeader pdcpHeader;
--- a/src/lte/model/lte-rlc-am.cc Thu May 19 00:57:32 2016 +0200
+++ b/src/lte/model/lte-rlc-am.cc Thu May 19 17:06:01 2016 +0200
@@ -256,6 +256,12 @@
NS_LOG_LOGIC ("RLC header: " << rlcAmHeader);
packet->AddHeader (rlcAmHeader);
+ // Sender timestamp
+ RlcTag rlcTag (Simulator::Now ());
+ NS_ASSERT_MSG (!packet->PeekPacketTag (rlcTag), "RlcTag is present");
+ packet->AddPacketTag (rlcTag);
+ m_txPdu (m_rnti, m_lcid, packet->GetSize ());
+
// Send RLC PDU to MAC layer
LteMacSapProvider::TransmitPduParameters params;
params.pdu = packet;
@@ -336,7 +342,13 @@
packet->AddHeader (rlcAmHeader);
NS_LOG_LOGIC ("new AM RLC header: " << rlcAmHeader);
-
+
+ // Sender timestamp
+ RlcTag rlcTag (Simulator::Now ());
+ NS_ASSERT_MSG (packet->PeekPacketTag (rlcTag), "RlcTag is missing");
+ packet->ReplacePacketTag (rlcTag);
+ m_txPdu (m_rnti, m_lcid, packet->GetSize ());
+
// Send RLC PDU to MAC layer
LteMacSapProvider::TransmitPduParameters params;
params.pdu = packet;
@@ -615,7 +627,8 @@
// FIRST SEGMENT
LteRlcSduStatusTag tag;
- (*it)->RemovePacketTag (tag);
+ NS_ASSERT_MSG ((*it)->PeekPacketTag (tag), "LteRlcSduStatusTag is missing");
+ (*it)->PeekPacketTag (tag);
if ( (tag.GetStatus () == LteRlcSduStatusTag::FULL_SDU) ||
(tag.GetStatus () == LteRlcSduStatusTag::FIRST_SEGMENT)
)
@@ -626,20 +639,27 @@
{
framingInfo |= LteRlcAmHeader::NO_FIRST_BYTE;
}
- (*it)->AddPacketTag (tag);
// Add all SDUs (in DataField) to the Packet
while (it < dataField.end ())
{
NS_LOG_LOGIC ("Adding SDU/segment to packet, length = " << (*it)->GetSize ());
- packet->AddAtEnd (*it);
+ NS_ASSERT_MSG ((*it)->PeekPacketTag (tag), "LteRlcSduStatusTag is missing");
+ (*it)->RemovePacketTag (tag);
+ if (packet->GetSize () > 0)
+ {
+ packet->AddAtEnd (*it);
+ }
+ else
+ {
+ packet = (*it);
+ }
it++;
}
// LAST SEGMENT (Note: There could be only one and be the first one)
it--;
- (*it)->RemovePacketTag (tag);
if ( (tag.GetStatus () == LteRlcSduStatusTag::FULL_SDU) ||
(tag.GetStatus () == LteRlcSduStatusTag::LAST_SEGMENT) )
{
@@ -649,7 +669,6 @@
{
framingInfo |= LteRlcAmHeader::NO_LAST_BYTE;
}
- (*it)->AddPacketTag (tag);
// Set the FramingInfo flag after the calculation
rlcAmHeader.SetFramingInfo (framingInfo);
@@ -707,7 +726,7 @@
// Sender timestamp
RlcTag rlcTag (Simulator::Now ());
- packet->AddByteTag (rlcTag);
+ packet->ReplacePacketTag (rlcTag);
m_txPdu (m_rnti, m_lcid, packet->GetSize ());
// Send RLC PDU to MAC layer
@@ -736,10 +755,9 @@
// Receiver timestamp
RlcTag rlcTag;
Time delay;
- if (p->FindFirstMatchingByteTag (rlcTag))
- {
- delay = Simulator::Now() - rlcTag.GetSenderTimestamp ();
- }
+ NS_ASSERT_MSG (p->PeekPacketTag (rlcTag), "RlcTag is missing");
+ p->RemovePacketTag (rlcTag);
+ delay = Simulator::Now() - rlcTag.GetSenderTimestamp ();
m_rxPdu (m_rnti, m_lcid, p->GetSize (), delay.GetNanoSeconds ());
// Get RLC header parameters
--- a/src/lte/model/lte-rlc-tm.cc Thu May 19 00:57:32 2016 +0200
+++ b/src/lte/model/lte-rlc-tm.cc Thu May 19 17:06:01 2016 +0200
@@ -140,7 +140,7 @@
// Sender timestamp
RlcTag rlcTag (Simulator::Now ());
- packet->AddByteTag (rlcTag);
+ packet->ReplacePacketTag (rlcTag);
m_txPdu (m_rnti, m_lcid, packet->GetSize ());
// Send RLC PDU to MAC layer
@@ -174,10 +174,9 @@
// Receiver timestamp
RlcTag rlcTag;
Time delay;
- if (p->FindFirstMatchingByteTag (rlcTag))
- {
- delay = Simulator::Now() - rlcTag.GetSenderTimestamp ();
- }
+ NS_ASSERT_MSG (p->PeekPacketTag (rlcTag), "RlcTag is missing");
+ p->RemovePacketTag (rlcTag);
+ delay = Simulator::Now() - rlcTag.GetSenderTimestamp ();
m_rxPdu (m_rnti, m_lcid, p->GetSize (), delay.GetNanoSeconds ());
// 5.1.1.2 Receive operations
@@ -198,6 +197,7 @@
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 ();
--- a/src/lte/model/lte-rlc-um.cc Thu May 19 00:57:32 2016 +0200
+++ b/src/lte/model/lte-rlc-um.cc Thu May 19 17:06:01 2016 +0200
@@ -331,7 +331,8 @@
// FIRST SEGMENT
LteRlcSduStatusTag tag;
- (*it)->RemovePacketTag (tag);
+ NS_ASSERT_MSG ((*it)->PeekPacketTag (tag), "LteRlcSduStatusTag is missing");
+ (*it)->PeekPacketTag (tag);
if ( (tag.GetStatus () == LteRlcSduStatusTag::FULL_SDU) ||
(tag.GetStatus () == LteRlcSduStatusTag::FIRST_SEGMENT) )
{
@@ -341,19 +342,26 @@
{
framingInfo |= LteRlcHeader::NO_FIRST_BYTE;
}
- (*it)->AddPacketTag (tag);
while (it < dataField.end ())
{
NS_LOG_LOGIC ("Adding SDU/segment to packet, length = " << (*it)->GetSize ());
- packet->AddAtEnd (*it);
+ NS_ASSERT_MSG ((*it)->PeekPacketTag (tag), "LteRlcSduStatusTag is missing");
+ (*it)->RemovePacketTag (tag);
+ if (packet->GetSize () > 0)
+ {
+ packet->AddAtEnd (*it);
+ }
+ else
+ {
+ packet = (*it);
+ }
it++;
}
// LAST SEGMENT (Note: There could be only one and be the first one)
it--;
- (*it)->RemovePacketTag (tag);
if ( (tag.GetStatus () == LteRlcSduStatusTag::FULL_SDU) ||
(tag.GetStatus () == LteRlcSduStatusTag::LAST_SEGMENT) )
{
@@ -363,7 +371,6 @@
{
framingInfo |= LteRlcHeader::NO_LAST_BYTE;
}
- (*it)->AddPacketTag (tag);
rlcHeader.SetFramingInfo (framingInfo);
@@ -372,7 +379,7 @@
// Sender timestamp
RlcTag rlcTag (Simulator::Now ());
- packet->AddByteTag (rlcTag);
+ packet->ReplacePacketTag (rlcTag);
m_txPdu (m_rnti, m_lcid, packet->GetSize ());
// Send RLC PDU to MAC layer
@@ -406,10 +413,9 @@
// Receiver timestamp
RlcTag rlcTag;
Time delay;
- if (p->FindFirstMatchingByteTag (rlcTag))
- {
- delay = Simulator::Now() - rlcTag.GetSenderTimestamp ();
- }
+ NS_ASSERT_MSG (p->PeekPacketTag (rlcTag), "RlcTag is missing");
+ p->RemovePacketTag (rlcTag);
+ delay = Simulator::Now() - rlcTag.GetSenderTimestamp ();
m_rxPdu (m_rnti, m_lcid, p->GetSize (), delay.GetNanoSeconds ());
// 5.1.2.2 Receive operations
@@ -1117,6 +1123,7 @@
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 ();
--- a/src/lte/model/lte-rlc.cc Thu May 19 00:57:32 2016 +0200
+++ b/src/lte/model/lte-rlc.cc Thu May 19 17:06:01 2016 +0200
@@ -219,10 +219,9 @@
// RLC Performance evaluation
RlcTag rlcTag;
Time delay;
- if (p->FindFirstMatchingByteTag(rlcTag))
- {
- delay = Simulator::Now() - rlcTag.GetSenderTimestamp ();
- }
+ NS_ASSERT_MSG (p->PeekPacketTag (rlcTag), "RlcTag is missing");
+ p->RemovePacketTag (rlcTag);
+ delay = Simulator::Now() - rlcTag.GetSenderTimestamp ();
NS_LOG_LOGIC (" RNTI=" << m_rnti
<< " LCID=" << (uint32_t) m_lcid
<< " size=" << p->GetSize ()
@@ -243,7 +242,7 @@
// RLC Performance evaluation
RlcTag tag (Simulator::Now());
- params.pdu->AddByteTag (tag);
+ params.pdu->AddPacketTag (tag);
NS_LOG_LOGIC (" RNTI=" << m_rnti
<< " LCID=" << (uint32_t) m_lcid
<< " size=" << bytes);