traffic-control: Align the implementation of Peek methods to Linux

This commit is contained in:
Stefano Avallone
2018-03-03 10:54:57 +01:00
parent 8d5e9bb5c6
commit 1ffbf707d5
14 changed files with 77 additions and 40 deletions

View File

@@ -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 ());

View File

@@ -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);
/**

View File

@@ -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

View File

@@ -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);

View File

@@ -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");
}

View File

@@ -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);
};

View File

@@ -128,7 +128,7 @@ PfifoFastQueueDisc::DoDequeue (void)
}
Ptr<const QueueDiscItem>
PfifoFastQueueDisc::DoPeek (void) const
PfifoFastQueueDisc::DoPeek (void)
{
NS_LOG_FUNCTION (this);

View File

@@ -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);
};

View File

@@ -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 ());

View File

@@ -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);
/**

View File

@@ -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)
{

View File

@@ -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

View File

@@ -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 ())

View File

@@ -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);
/**