Bug-fix UpdateDlRlcBufferInfo of PF and RR schedulers mutual exclusivity of the status and retx queues

This commit is contained in:
mmiozzo
2012-12-11 18:32:51 +01:00
parent 8719871e90
commit d70da38592
2 changed files with 33 additions and 58 deletions

View File

@@ -1970,37 +1970,25 @@ PfFfMacScheduler::UpdateDlRlcBufferInfo (uint16_t rnti, uint8_t lcid, uint16_t s
NS_LOG_INFO (this << " UE " << rnti << " LC " << (uint16_t)lcid << " txqueue " << (*it).second.m_rlcTransmissionQueueSize << " retxqueue " << (*it).second.m_rlcRetransmissionQueueSize << " status " << (*it).second.m_rlcStatusPduSize << " decrease " << size);
// Update queues: RLC tx order Status, ReTx, Tx
// Update status queue
if ((*it).second.m_rlcStatusPduSize <= size)
if (((*it).second.m_rlcStatusPduSize > 0) && (size >= (*it).second.m_rlcStatusPduSize))
{
size -= (*it).second.m_rlcStatusPduSize;
(*it).second.m_rlcStatusPduSize = 0;
(*it).second.m_rlcStatusPduSize = 0;
}
else
else if (((*it).second.m_rlcRetransmissionQueueSize > 0) && (size >= (*it).second.m_rlcRetransmissionQueueSize))
{
(*it).second.m_rlcStatusPduSize -= size;
return;
}
// update retransmission queue
if ((*it).second.m_rlcRetransmissionQueueSize <= size)
{
size -= (*it).second.m_rlcRetransmissionQueueSize;
(*it).second.m_rlcRetransmissionQueueSize = 0;
}
else
else if ((*it).second.m_rlcTransmissionQueueSize > 0)
{
(*it).second.m_rlcRetransmissionQueueSize -= size;
return;
}
// update transmission queue
if ((*it).second.m_rlcTransmissionQueueSize <= size)
{
size -= (*it).second.m_rlcTransmissionQueueSize;
(*it).second.m_rlcTransmissionQueueSize = 0;
}
else
{
(*it).second.m_rlcTransmissionQueueSize -= size;
return;
// update transmission queue
if ((*it).second.m_rlcTransmissionQueueSize <= size)
{
(*it).second.m_rlcTransmissionQueueSize = 0;
}
else
{
(*it).second.m_rlcTransmissionQueueSize -= size;
}
}
}
else

View File

@@ -1761,39 +1761,26 @@ RrFfMacScheduler::UpdateDlRlcBufferInfo (uint16_t rnti, uint8_t lcid, uint16_t s
NS_LOG_INFO (this << " UE " << rnti << " LC " << (uint16_t)lcid << " txqueue " << (*it).m_rlcTransmissionQueueSize << " retxqueue " << (*it).m_rlcRetransmissionQueueSize << " status " << (*it).m_rlcStatusPduSize << " decrease " << size);
// Update queues: RLC tx order Status, ReTx, Tx
// Update status queue
if ((*it).m_rlcStatusPduSize <= size)
{
size -= (*it).m_rlcStatusPduSize;
(*it).m_rlcStatusPduSize = 0;
}
else
{
(*it).m_rlcStatusPduSize -= size;
return;
}
// update retransmission queue
if ((*it).m_rlcRetransmissionQueueSize <= size)
{
size -= (*it).m_rlcRetransmissionQueueSize;
(*it).m_rlcRetransmissionQueueSize = 0;
}
else
{
(*it).m_rlcRetransmissionQueueSize -= size;
return;
}
// update transmission queue
if ((*it).m_rlcTransmissionQueueSize <= size)
{
size -= (*it).m_rlcTransmissionQueueSize;
(*it).m_rlcTransmissionQueueSize = 0;
}
else
{
(*it).m_rlcTransmissionQueueSize -= size;
NS_LOG_DEBUG ("dequeue " << (*it).m_rlcTransmissionQueueSize);
return;
}
if (((*it).m_rlcStatusPduSize > 0) && (size >= (*it).m_rlcStatusPduSize))
{
(*it).m_rlcStatusPduSize = 0;
}
else if (((*it).m_rlcRetransmissionQueueSize > 0) && (size >= (*it).m_rlcRetransmissionQueueSize))
{
(*it).m_rlcRetransmissionQueueSize = 0;
}
else if ((*it).m_rlcTransmissionQueueSize > 0)
{
// update transmission queue
if ((*it).m_rlcTransmissionQueueSize <= size)
{
(*it).m_rlcTransmissionQueueSize = 0;
}
else
{
(*it).m_rlcTransmissionQueueSize -= size;
}
}
return;
}
}