lte: (fixes #2308) Replace ByteTag with PacketTag default tip
authorManuel Requena <manuel.requena@cttc.es>
Thu, 19 May 2016 17:06:01 +0200
changeset 12131 6983b3a4ad5f
parent 12130 f64b70f10051
lte: (fixes #2308) Replace ByteTag with PacketTag
src/lte/model/lte-pdcp.cc
src/lte/model/lte-rlc-am.cc
src/lte/model/lte-rlc-tm.cc
src/lte/model/lte-rlc-um.cc
src/lte/model/lte-rlc.cc
--- 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);