WifiMacQueue now supports head pushing

This commit is contained in:
Mirko Banchi
2010-02-03 20:34:49 +01:00
parent f3822fc131
commit e6b1539f7b
4 changed files with 34 additions and 6 deletions

View File

@@ -687,4 +687,16 @@ EdcaTxopN::SetMsduAggregator (Ptr<MsduAggregator> aggr)
m_aggregator = aggr;
}
void
EdcaTxopN::PushFront (Ptr<const Packet> packet, const WifiMacHeader &hdr)
{
NS_LOG_FUNCTION (this << packet << &hdr);
WifiMacTrailer fcs;
uint32_t fullPacketSize = hdr.GetSerializedSize () + packet->GetSize () + fcs.GetSerializedSize ();
WifiRemoteStation *station = GetStation (hdr.GetAddr1 ());
station->PrepareForQueue (packet, fullPacketSize);
m_queue->PushFront (packet, hdr);
StartAccessIfNeeded ();
}
} //namespace ns3

View File

@@ -130,6 +130,7 @@ public:
void Queue (Ptr<const Packet> packet, const WifiMacHeader &hdr);
void SetMsduAggregator (Ptr<MsduAggregator> aggr);
void PushFront (Ptr<const Packet> packet, const WifiMacHeader &hdr);
private:
/**

View File

@@ -111,18 +111,19 @@ WifiMacQueue::Cleanup (void)
Time now = Simulator::Now ();
uint32_t n = 0;
PacketQueueI end = m_queue.begin ();
for (PacketQueueI i = m_queue.begin (); i != m_queue.end (); i++)
for (PacketQueueI i = m_queue.begin (); i != m_queue.end ();)
{
if (i->tstamp + m_maxDelay > now)
{
end = i;
break;
i++;
}
else
{
i = m_queue.erase (i);
n++;
}
n++;
}
m_size -= n;
m_queue.erase (m_queue.begin (), end);
}
Ptr<const Packet>
@@ -260,4 +261,17 @@ WifiMacQueue::Remove (Ptr<const Packet> packet)
return false;
}
void
WifiMacQueue::PushFront (Ptr<const Packet> packet, const WifiMacHeader &hdr)
{
Cleanup ();
if (m_size == m_maxSize)
{
return;
}
Time now = Simulator::Now ();
m_queue.push_front (Item (packet, hdr, now));
m_size++;
}
} // namespace ns3

View File

@@ -61,6 +61,7 @@ public:
Time GetMaxDelay (void) const;
void Enqueue (Ptr<const Packet> packet, const WifiMacHeader &hdr);
void PushFront (Ptr<const Packet> packet, const WifiMacHeader &hdr);
Ptr<const Packet> Dequeue (WifiMacHeader *hdr);
Ptr<const Packet> Peek (WifiMacHeader *hdr);
/**