diff --git a/src/lte/model/lte-ue-mac.cc b/src/lte/model/lte-ue-mac.cc index 634cbc9b5..a359bba4d 100644 --- a/src/lte/model/lte-ue-mac.cc +++ b/src/lte/model/lte-ue-mac.cc @@ -258,7 +258,7 @@ LteUeMac::DoReportBufferStatus (LteMacSapProvider::ReportBufferStatusParameters { NS_LOG_FUNCTION (this); - std::map ::iterator it; + std::map ::iterator it; it = m_ulBsrReceived.find (params.lcid); @@ -269,7 +269,7 @@ LteUeMac::DoReportBufferStatus (LteMacSapProvider::ReportBufferStatusParameters } else { - m_ulBsrReceived.insert (std::pair (params.lcid, params.txQueueSize + params.retxQueueSize + params.statusPduSize)); + m_ulBsrReceived.insert (std::pair (params.lcid, params.txQueueSize + params.retxQueueSize + params.statusPduSize)); } m_freshUlBsr = true; } @@ -287,7 +287,7 @@ LteUeMac::SendReportBufferStatus (void) bsr.m_rnti = m_rnti; bsr.m_macCeType = MacCeListElement_s::BSR; // BSR - std::map ::iterator it; + std::map ::iterator it; NS_ASSERT_MSG (m_ulBsrReceived.size () <=4, " Too many LCs (max is 4)"); for (it = m_ulBsrReceived.begin (); it != m_ulBsrReceived.end (); it++) @@ -351,9 +351,9 @@ LteUeMac::DoReceiveIdealControlMessage (Ptr msg) { Ptr msg2 = DynamicCast (msg); UlDciListElement_s dci = msg2->GetDci (); - std::map ::iterator itBsr; + std::map ::iterator itBsr; NS_ASSERT_MSG (m_ulBsrReceived.size () <=4, " Too many LCs (max is 4)"); - int activeLcs = 0; + uint16_t activeLcs = 0; for (itBsr = m_ulBsrReceived.begin (); itBsr != m_ulBsrReceived.end (); itBsr++) { if ((*itBsr).second > 0) @@ -375,7 +375,14 @@ LteUeMac::DoReceiveIdealControlMessage (Ptr msg) { NS_LOG_FUNCTION (this << "\t" << dci.m_tbSize / m_macSapUserMap.size () << " bytes to LC " << (uint16_t)(*it).first << " queue " << (*itBsr).second); (*it).second->NotifyTxOpportunity (dci.m_tbSize / activeLcs); - (*itBsr).second -= dci.m_tbSize / activeLcs; + if ((*itBsr).second >= dci.m_tbSize / activeLcs) + { + (*itBsr).second -= dci.m_tbSize / activeLcs; + } + else + { + (*itBsr).second = 0; + } } } diff --git a/src/lte/model/lte-ue-mac.h b/src/lte/model/lte-ue-mac.h index da6b8e8d8..f6ee7d392 100644 --- a/src/lte/model/lte-ue-mac.h +++ b/src/lte/model/lte-ue-mac.h @@ -99,7 +99,7 @@ private: LteUePhySapProvider* m_uePhySapProvider; LteUePhySapUser* m_uePhySapUser; - std::map m_ulBsrReceived; // BSR received from RLC (BSR up to now) + std::map m_ulBsrReceived; // BSR received from RLC (BSR up to now) Time m_bsrPeriodicity; Time m_bsrLast;