WifiMacQueue now supports head pushing
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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:
|
||||
/**
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user