Add timer to send RBS to MAC
authorManuel Requena <manuel.requena@cttc.es>
Fri, 23 Dec 2011 13:48:37 +0100
changeset 8499 c2658133775b
parent 8498 ae294058affc
child 8500 86d777ca8026
Add timer to send RBS to MAC
src/lte/model/lte-rlc-um.cc
src/lte/model/lte-rlc-um.h
--- a/src/lte/model/lte-rlc-um.cc	Thu Dec 22 17:59:54 2011 +0100
+++ b/src/lte/model/lte-rlc-um.cc	Fri Dec 23 13:48:37 2011 +0100
@@ -72,8 +72,7 @@
   NS_LOG_FUNCTION (this);
 
   /** Store arrival time */
-  Time now = Simulator::Now ();
-  RlcTag timeTag (now);
+  RlcTag timeTag (Simulator::Now ());
   p->AddPacketTag (timeTag);
 
   /** Store PDCP PDU */
@@ -89,24 +88,8 @@
   NS_LOG_LOGIC ("txBufferSize = " << m_txBufferSize);
 
   /** Report Buffer Status */
-
-  RlcTag holTimeTag;
-  m_txBuffer.front ()->PeekPacketTag (holTimeTag);
-  Time holDelay = now - holTimeTag.GetSenderTimestamp ();
-
-  LteMacSapProvider::ReportBufferStatusParameters r;
-  r.rnti = m_rnti;
-  r.lcid = m_lcid;
-  r.txQueueSize = m_txBufferSize + 2 * m_txBuffer.size (); // Data in tx queue + estimated headers size
-  r.txQueueHolDelay = holDelay.GetMilliSeconds () ;
-  r.retxQueueSize = 0;
-  r.retxQueueHolDelay = 0;
-  r.statusPduSize = 0;
-
-  NS_LOG_LOGIC ("Send ReportBufferStatus");
-  NS_LOG_LOGIC ("Queue size = " << r.txQueueSize);
-  NS_LOG_LOGIC ("HOL delay = " << r.txQueueHolDelay);
-  m_macSapProvider->ReportBufferStatus (r);
+  DoReportBufferStatus ();
+  m_rbsTimer.Cancel ();
 }
 
 
@@ -373,6 +356,12 @@
   params.lcid = m_lcid;
 
   m_macSapProvider->TransmitPdu (params);
+
+  if (! m_txBuffer.empty ())
+    {
+      m_rbsTimer.Cancel ();
+      m_rbsTimer = Simulator::Schedule (MilliSeconds (10), &LteRlcUm::ExpireRbsTimer, this);
+    }
 }
 
 void
@@ -538,16 +527,7 @@
 {
   NS_LOG_FUNCTION (this);
 
-  LteMacSapProvider::ReportBufferStatusParameters p;
-  p.rnti = m_rnti;
-  p.lcid = m_lcid;
-  p.txQueueSize = 0;
-  p.txQueueHolDelay = 0;
-  p.retxQueueSize = 0;
-  p.retxQueueHolDelay = 0;
-  p.statusPduSize = 0;
-
-  m_macSapProvider->ReportBufferStatus (p);
+  DoReportBufferStatus ();
 }
 
 
@@ -1034,6 +1014,35 @@
 
 
 void
+LteRlcUm::DoReportBufferStatus (void)
+{
+  Time holDelay (0);
+  uint32_t queueSize = 0;
+
+  if (! m_txBuffer.empty ())
+    {
+      RlcTag holTimeTag;
+      m_txBuffer.front ()->PeekPacketTag (holTimeTag);
+      holDelay = Simulator::Now () - holTimeTag.GetSenderTimestamp ();
+
+      queueSize = m_txBufferSize + 2 * m_txBuffer.size (); // Data in tx queue + estimated headers size
+    }
+
+  LteMacSapProvider::ReportBufferStatusParameters r;
+  r.rnti = m_rnti;
+  r.lcid = m_lcid;
+  r.txQueueSize = queueSize;
+  r.txQueueHolDelay = holDelay.GetMilliSeconds () ;
+  r.retxQueueSize = 0;
+  r.retxQueueHolDelay = 0;
+  r.statusPduSize = 0;
+
+  NS_LOG_LOGIC ("Send ReportBufferStatus = " << r.txQueueSize << ", " << r.txQueueHolDelay );
+  m_macSapProvider->ReportBufferStatus (r);
+}
+
+
+void
 LteRlcUm::ExpireReorderingTimer (void)
 {
   NS_LOG_LOGIC ("TODO: Reordering Timer has expired...");
@@ -1068,4 +1077,16 @@
 }
 
 
+void
+LteRlcUm::ExpireRbsTimer (void)
+{
+  NS_LOG_LOGIC ("RBS Timer expires");
+
+  if (! m_txBuffer.empty ())
+    {
+      DoReportBufferStatus ();
+      m_rbsTimer = Simulator::Schedule (MilliSeconds (10), &LteRlcUm::ExpireRbsTimer, this);
+    }
+}
+
 } // namespace ns3
--- a/src/lte/model/lte-rlc-um.h	Thu Dec 22 17:59:54 2011 +0100
+++ b/src/lte/model/lte-rlc-um.h	Fri Dec 23 13:48:37 2011 +0100
@@ -52,13 +52,8 @@
   void Start ();
 
 private:
-  /**
-   * This method will schedule a timeout at WaitReplyTimeout interval
-   * in the future, unless a timer is already running for the cache,
-   * in which case this method does nothing.
-   */
-  void StartReorderingTimer (void);
   void ExpireReorderingTimer (void);
+  void ExpireRbsTimer (void);
 
   bool IsInsideReorderingWindow (uint16_t seqNumber);
 
@@ -67,6 +62,8 @@
 
   void ReassembleAndDeliver (Ptr<Packet> packet);
 
+  void DoReportBufferStatus ();
+
 private:
   uint32_t m_txBufferSize;
   std::vector < Ptr<Packet> > m_txBuffer;       // Transmission buffer
@@ -93,6 +90,7 @@
    * Timers. See section 7.3 in TS 36.322
    */
   EventId m_reorderingTimer;
+  EventId m_rbsTimer;
 
   /**
    * Reassembling state