traffic-control: Align the implementation of Peek methods to Linux
This commit is contained in:
@@ -474,18 +474,18 @@ CoDelQueueDisc::GetDropNext (void)
|
||||
}
|
||||
|
||||
Ptr<const QueueDiscItem>
|
||||
CoDelQueueDisc::DoPeek (void) const
|
||||
CoDelQueueDisc::DoPeek (void)
|
||||
{
|
||||
NS_LOG_FUNCTION (this);
|
||||
|
||||
if (GetInternalQueue (0)->IsEmpty ())
|
||||
Ptr<const QueueDiscItem> item = PeekDequeued ();
|
||||
|
||||
if (!item)
|
||||
{
|
||||
NS_LOG_LOGIC ("Queue empty");
|
||||
return 0;
|
||||
}
|
||||
|
||||
Ptr<const QueueDiscItem> item = GetInternalQueue (0)->Peek ();
|
||||
|
||||
NS_LOG_LOGIC ("Number packets " << GetInternalQueue (0)->GetNPackets ());
|
||||
NS_LOG_LOGIC ("Number bytes " << GetInternalQueue (0)->GetNBytes ());
|
||||
|
||||
|
||||
@@ -192,7 +192,7 @@ private:
|
||||
*/
|
||||
virtual Ptr<QueueDiscItem> DoDequeue (void);
|
||||
|
||||
virtual Ptr<const QueueDiscItem> DoPeek (void) const;
|
||||
virtual Ptr<const QueueDiscItem> DoPeek (void);
|
||||
virtual bool CheckConfig (void);
|
||||
|
||||
/**
|
||||
|
||||
@@ -295,29 +295,11 @@ FqCoDelQueueDisc::DoDequeue (void)
|
||||
}
|
||||
|
||||
Ptr<const QueueDiscItem>
|
||||
FqCoDelQueueDisc::DoPeek (void) const
|
||||
FqCoDelQueueDisc::DoPeek (void)
|
||||
{
|
||||
NS_LOG_FUNCTION (this);
|
||||
|
||||
Ptr<FqCoDelFlow> flow;
|
||||
|
||||
if (!m_newFlows.empty ())
|
||||
{
|
||||
flow = m_newFlows.front ();
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!m_oldFlows.empty ())
|
||||
{
|
||||
flow = m_oldFlows.front ();
|
||||
}
|
||||
else
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
return flow->GetQueueDisc ()->Peek ();
|
||||
return PeekDequeued ();
|
||||
}
|
||||
|
||||
void
|
||||
|
||||
@@ -151,7 +151,7 @@ private:
|
||||
|
||||
virtual bool DoEnqueue (Ptr<QueueDiscItem> item);
|
||||
virtual Ptr<QueueDiscItem> DoDequeue (void);
|
||||
virtual Ptr<const QueueDiscItem> DoPeek (void) const;
|
||||
virtual Ptr<const QueueDiscItem> DoPeek (void);
|
||||
virtual bool CheckConfig (void);
|
||||
virtual void InitializeParams (void);
|
||||
|
||||
|
||||
@@ -68,7 +68,7 @@ MqQueueDisc::DoDequeue (void)
|
||||
}
|
||||
|
||||
Ptr<const QueueDiscItem>
|
||||
MqQueueDisc::DoPeek (void) const
|
||||
MqQueueDisc::DoPeek (void)
|
||||
{
|
||||
NS_FATAL_ERROR ("MqQueueDisc: DoPeek should never be called");
|
||||
}
|
||||
|
||||
@@ -56,7 +56,7 @@ public:
|
||||
private:
|
||||
virtual bool DoEnqueue (Ptr<QueueDiscItem> item);
|
||||
virtual Ptr<QueueDiscItem> DoDequeue (void);
|
||||
virtual Ptr<const QueueDiscItem> DoPeek (void) const;
|
||||
virtual Ptr<const QueueDiscItem> DoPeek (void);
|
||||
virtual bool CheckConfig (void);
|
||||
virtual void InitializeParams (void);
|
||||
};
|
||||
|
||||
@@ -128,7 +128,7 @@ PfifoFastQueueDisc::DoDequeue (void)
|
||||
}
|
||||
|
||||
Ptr<const QueueDiscItem>
|
||||
PfifoFastQueueDisc::DoPeek (void) const
|
||||
PfifoFastQueueDisc::DoPeek (void)
|
||||
{
|
||||
NS_LOG_FUNCTION (this);
|
||||
|
||||
|
||||
@@ -92,7 +92,7 @@ private:
|
||||
|
||||
virtual bool DoEnqueue (Ptr<QueueDiscItem> item);
|
||||
virtual Ptr<QueueDiscItem> DoDequeue (void);
|
||||
virtual Ptr<const QueueDiscItem> DoPeek (void) const;
|
||||
virtual Ptr<const QueueDiscItem> DoPeek (void);
|
||||
virtual bool CheckConfig (void);
|
||||
virtual void InitializeParams (void);
|
||||
};
|
||||
|
||||
@@ -474,17 +474,18 @@ PieQueueDisc::DoDequeue ()
|
||||
}
|
||||
|
||||
Ptr<const QueueDiscItem>
|
||||
PieQueueDisc::DoPeek () const
|
||||
PieQueueDisc::DoPeek ()
|
||||
{
|
||||
NS_LOG_FUNCTION (this);
|
||||
if (GetInternalQueue (0)->IsEmpty ())
|
||||
|
||||
Ptr<const QueueDiscItem> item = PeekDequeued ();
|
||||
|
||||
if (!item)
|
||||
{
|
||||
NS_LOG_LOGIC ("Queue empty");
|
||||
return 0;
|
||||
}
|
||||
|
||||
Ptr<const QueueDiscItem> item = GetInternalQueue (0)->Peek ();
|
||||
|
||||
NS_LOG_LOGIC ("Number packets " << GetInternalQueue (0)->GetNPackets ());
|
||||
NS_LOG_LOGIC ("Number bytes " << GetInternalQueue (0)->GetNBytes ());
|
||||
|
||||
|
||||
@@ -152,7 +152,7 @@ protected:
|
||||
private:
|
||||
virtual bool DoEnqueue (Ptr<QueueDiscItem> item);
|
||||
virtual Ptr<QueueDiscItem> DoDequeue (void);
|
||||
virtual Ptr<const QueueDiscItem> DoPeek (void) const;
|
||||
virtual Ptr<const QueueDiscItem> DoPeek (void);
|
||||
virtual bool CheckConfig (void);
|
||||
|
||||
/**
|
||||
|
||||
@@ -870,12 +870,43 @@ QueueDisc::Dequeue (void)
|
||||
}
|
||||
|
||||
Ptr<const QueueDiscItem>
|
||||
QueueDisc::Peek (void) const
|
||||
QueueDisc::Peek (void)
|
||||
{
|
||||
NS_LOG_FUNCTION (this);
|
||||
return DoPeek ();
|
||||
}
|
||||
|
||||
Ptr<const QueueDiscItem>
|
||||
QueueDisc::PeekDequeued (void)
|
||||
{
|
||||
NS_LOG_FUNCTION (this);
|
||||
|
||||
if (!m_requeued)
|
||||
{
|
||||
m_requeued = Dequeue ();
|
||||
}
|
||||
return m_requeued;
|
||||
}
|
||||
|
||||
Ptr<QueueDiscItem>
|
||||
QueueDisc::DequeuePeeked (void)
|
||||
{
|
||||
NS_LOG_FUNCTION (this);
|
||||
|
||||
Ptr<QueueDiscItem> item = m_requeued;
|
||||
|
||||
if (item)
|
||||
{
|
||||
m_requeued = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
item = Dequeue ();
|
||||
}
|
||||
|
||||
return item;
|
||||
}
|
||||
|
||||
void
|
||||
QueueDisc::Run (void)
|
||||
{
|
||||
|
||||
@@ -384,7 +384,15 @@ public:
|
||||
* DoPeek function, which must be implemented by derived classes.
|
||||
* \return 0 if the operation was not successful; the item otherwise.
|
||||
*/
|
||||
Ptr<const QueueDiscItem> Peek (void) const;
|
||||
Ptr<const QueueDiscItem> Peek (void);
|
||||
|
||||
/**
|
||||
* Extract from the queue disc the packet that has been dequeued by calling
|
||||
* PeekDequeued.
|
||||
*
|
||||
* \return 0 if the operation was not successful; the item otherwise.
|
||||
*/
|
||||
Ptr<QueueDiscItem> DequeuePeeked (void);
|
||||
|
||||
/**
|
||||
* Modelled after the Linux function __qdisc_run (net/sched/sch_generic.c)
|
||||
@@ -535,6 +543,21 @@ protected:
|
||||
*/
|
||||
bool Mark (Ptr<QueueDiscItem> item, const char* reason);
|
||||
|
||||
/**
|
||||
* Dequeue a packet and retain it in the queue disc as a requeued packet.
|
||||
* The packet is not traced as requeued, nor is the total count of requeued
|
||||
* packets increased. The dequeued packet is not counted in the backlog of
|
||||
* the queue disc and is actually extracted from the queue disc by calling
|
||||
* DequeuePeeked. Queue discs can point their DoPeek method to this one. This
|
||||
* is recommended especially for queue discs for which it is not obvious what
|
||||
* is the next packet that will be dequeued (e.g., queue discs having multiple
|
||||
* internal queues or child queue discs or queue discs that drop packets
|
||||
* after dequeue).
|
||||
*
|
||||
* \return 0 if the operation was not successful; the item otherwise.
|
||||
*/
|
||||
Ptr<const QueueDiscItem> PeekDequeued (void);
|
||||
|
||||
private:
|
||||
/**
|
||||
* \brief Copy constructor
|
||||
@@ -570,7 +593,7 @@ private:
|
||||
* This function returns a copy of the next packet the queue disc will extract.
|
||||
* \return 0 if the operation was not successful; the packet otherwise.
|
||||
*/
|
||||
virtual Ptr<const QueueDiscItem> DoPeek (void) const = 0;
|
||||
virtual Ptr<const QueueDiscItem> DoPeek (void) = 0;
|
||||
|
||||
/**
|
||||
* Check whether the current configuration is correct. Default objects (such
|
||||
|
||||
@@ -885,7 +885,7 @@ RedQueueDisc::DoDequeue (void)
|
||||
}
|
||||
|
||||
Ptr<const QueueDiscItem>
|
||||
RedQueueDisc::DoPeek (void) const
|
||||
RedQueueDisc::DoPeek (void)
|
||||
{
|
||||
NS_LOG_FUNCTION (this);
|
||||
if (GetInternalQueue (0)->IsEmpty ())
|
||||
|
||||
@@ -246,7 +246,7 @@ protected:
|
||||
private:
|
||||
virtual bool DoEnqueue (Ptr<QueueDiscItem> item);
|
||||
virtual Ptr<QueueDiscItem> DoDequeue (void);
|
||||
virtual Ptr<const QueueDiscItem> DoPeek (void) const;
|
||||
virtual Ptr<const QueueDiscItem> DoPeek (void);
|
||||
virtual bool CheckConfig (void);
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user