Update LteUeMac for sending BSR only when new BSR are received from RLC
authorMarco Miozzo <marco.miozzo@cttc.es>
Thu, 22 Dec 2011 17:56:49 +0100
changeset 8496 8d1759a15c2e
parent 8495 2cd30a9776e0
child 8497 b06cd67bc6ba
Update LteUeMac for sending BSR only when new BSR are received from RLC
src/lte/model/lte-ue-mac.cc
src/lte/model/lte-ue-mac.h
--- a/src/lte/model/lte-ue-mac.cc	Thu Dec 22 17:55:42 2011 +0100
+++ b/src/lte/model/lte-ue-mac.cc	Thu Dec 22 17:56:49 2011 +0100
@@ -180,7 +180,8 @@
 
 LteUeMac::LteUeMac ()
   :  m_bsrPeriodicity (MilliSeconds (1)), // ideal behavior
-  m_bsrLast (MilliSeconds (0))
+  m_bsrLast (MilliSeconds (0)),
+  m_freshUlBsr (false)
   
 {
   NS_LOG_FUNCTION (this);
@@ -270,6 +271,7 @@
     {
       m_ulBsrReceived.insert (std::pair<uint8_t, long uint> (params.lcid, params.txQueueSize + params.retxQueueSize + params.statusPduSize));
     }
+  m_freshUlBsr = true;
 }
 
 
@@ -277,6 +279,10 @@
 LteUeMac::SendReportBufferStatus (void)
 {
   NS_LOG_FUNCTION (this);
+  if (m_ulBsrReceived.size () == 0)
+    {
+      return;  // No BSR report to transmit
+    }
   MacCeListElement_s bsr;
   bsr.m_rnti = m_rnti;
   bsr.m_macCeType = MacCeListElement_s::BSR;
@@ -385,10 +391,11 @@
 LteUeMac::DoSubframeIndication (uint32_t frameNo, uint32_t subframeNo)
 {
   NS_LOG_FUNCTION (this);
-  if (Simulator::Now () >= m_bsrLast + m_bsrPeriodicity)
+  if ((Simulator::Now () >= m_bsrLast + m_bsrPeriodicity) && (m_freshUlBsr==true))
     {
       SendReportBufferStatus ();
       m_bsrLast = Simulator::Now ();
+      m_freshUlBsr = false;
     }
 }
 
--- a/src/lte/model/lte-ue-mac.h	Thu Dec 22 17:55:42 2011 +0100
+++ b/src/lte/model/lte-ue-mac.h	Thu Dec 22 17:56:49 2011 +0100
@@ -103,6 +103,8 @@
   
   Time m_bsrPeriodicity;
   Time m_bsrLast;
+  
+  bool m_freshUlBsr; // true when a BSR has been received in the last TTI
 
 
   uint16_t m_rnti;