fix queue tracing
This commit is contained in:
@@ -25,48 +25,37 @@ NS_DEBUG_COMPONENT_DEFINE ("DropTailQueue");
|
||||
namespace ns3 {
|
||||
|
||||
DropTailQueue::DropTailQueue () :
|
||||
m_packets (),
|
||||
m_maxPackets(DTQ_NPACKETS_MAX_DEFAULT)
|
||||
Queue (""),
|
||||
m_packets (),
|
||||
m_maxPackets(DTQ_NPACKETS_MAX_DEFAULT)
|
||||
{
|
||||
NS_DEBUG(
|
||||
"DropTailQueue::DropTailQueue ()")
|
||||
NS_DEBUG("DropTailQueue::DropTailQueue ()");
|
||||
}
|
||||
|
||||
DropTailQueue::DropTailQueue (TraceContainer &traceContainer) :
|
||||
|
||||
DropTailQueue::DropTailQueue (std::string const&name)
|
||||
: Queue (name),
|
||||
m_packets(),
|
||||
m_maxPackets(DTQ_NPACKETS_MAX_DEFAULT)
|
||||
{
|
||||
NS_DEBUG(
|
||||
"DropTailQueue::DropTailQueue (" << &traceContainer << ")")
|
||||
|
||||
RegisterTraces(traceContainer);
|
||||
}
|
||||
|
||||
DropTailQueue::DropTailQueue (
|
||||
std::string &name,
|
||||
TraceContainer &traceContainer)
|
||||
:
|
||||
m_packets(),
|
||||
m_maxPackets(DTQ_NPACKETS_MAX_DEFAULT)
|
||||
{
|
||||
NS_DEBUG(
|
||||
"DropTailQueue::DropTailQueue (" << &traceContainer << ")")
|
||||
|
||||
m_name = name;
|
||||
RegisterTraces(traceContainer);
|
||||
NS_DEBUG("DropTailQueue::DropTailQueue");
|
||||
}
|
||||
|
||||
DropTailQueue::~DropTailQueue ()
|
||||
{
|
||||
NS_DEBUG(
|
||||
"DropTailQueue::~DropTailQueue ()")
|
||||
NS_DEBUG("DropTailQueue::~DropTailQueue ()");
|
||||
}
|
||||
|
||||
void
|
||||
DropTailQueue::RegisterTraces (TraceContainer &traceContainer)
|
||||
{
|
||||
Queue::QueueRegisterTraces (traceContainer);
|
||||
}
|
||||
|
||||
void
|
||||
DropTailQueue::SetMaxPackets (uint32_t npackets)
|
||||
{
|
||||
NS_DEBUG(
|
||||
"DropTailQueue::SetMaxPackets (" << npackets << ")")
|
||||
NS_DEBUG("DropTailQueue::SetMaxPackets (" << npackets << ")");
|
||||
|
||||
m_maxPackets = npackets;
|
||||
}
|
||||
@@ -74,8 +63,7 @@ DropTailQueue::SetMaxPackets (uint32_t npackets)
|
||||
uint32_t
|
||||
DropTailQueue::GetMaxPackets (void)
|
||||
{
|
||||
NS_DEBUG(
|
||||
"DropTailQueue::GetMaxPackets () <= " << m_maxPackets)
|
||||
NS_DEBUG("DropTailQueue::GetMaxPackets () <= " << m_maxPackets);
|
||||
|
||||
return m_maxPackets;
|
||||
}
|
||||
@@ -83,13 +71,11 @@ DropTailQueue::GetMaxPackets (void)
|
||||
bool
|
||||
DropTailQueue::DoEnque (const Packet& p)
|
||||
{
|
||||
NS_DEBUG(
|
||||
"DropTailQueue::DoEnque (" << &p << ")")
|
||||
NS_DEBUG("DropTailQueue::DoEnque (" << &p << ")");
|
||||
|
||||
if (m_nPackets >= m_maxPackets)
|
||||
if (GetNPackets () >= m_maxPackets)
|
||||
{
|
||||
NS_DEBUG(
|
||||
"DropTailQueue::DoEnque (): Queue full -- droppping pkt")
|
||||
NS_DEBUG("DropTailQueue::DoEnque (): Queue full -- droppping pkt");
|
||||
Drop (p);
|
||||
return false;
|
||||
}
|
||||
@@ -101,21 +87,18 @@ DropTailQueue::DoEnque (const Packet& p)
|
||||
bool
|
||||
DropTailQueue::DoDeque (Packet& p)
|
||||
{
|
||||
NS_DEBUG(
|
||||
"DropTailQueue::DoDeque (" << &p << ")")
|
||||
NS_DEBUG("DropTailQueue::DoDeque (" << &p << ")");
|
||||
|
||||
if (m_packets.empty())
|
||||
{
|
||||
NS_DEBUG(
|
||||
"DropTailQueue::DoDeque (): Queue empty")
|
||||
NS_DEBUG("DropTailQueue::DoDeque (): Queue empty")
|
||||
return false;
|
||||
}
|
||||
|
||||
p = m_packets.front ();
|
||||
m_packets.pop ();
|
||||
|
||||
NS_DEBUG(
|
||||
"DropTailQueue::DoDeque (): Popped " << &p << " <= true")
|
||||
NS_DEBUG("DropTailQueue::DoDeque (): Popped " << &p << " <= true")
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -26,23 +26,25 @@
|
||||
|
||||
namespace ns3 {
|
||||
|
||||
class TraceContainer;
|
||||
|
||||
const int DTQ_NPACKETS_MAX_DEFAULT = 100;
|
||||
|
||||
class DropTailQueue : public Queue {
|
||||
public:
|
||||
DropTailQueue ();
|
||||
DropTailQueue (std::string const &name);
|
||||
|
||||
DropTailQueue (TraceContainer &traceContainer);
|
||||
DropTailQueue (std::string &name, TraceContainer &traceContainer);
|
||||
void RegisterTraces (TraceContainer &traceContainer);
|
||||
|
||||
virtual ~DropTailQueue();
|
||||
|
||||
void SetMaxPackets (uint32_t npackets);
|
||||
uint32_t GetMaxPackets (void);
|
||||
|
||||
protected:
|
||||
bool DoEnque (const Packet& p);
|
||||
bool DoDeque (Packet &p);
|
||||
private:
|
||||
virtual bool DoEnque (const Packet& p);
|
||||
virtual bool DoDeque (Packet &p);
|
||||
|
||||
private:
|
||||
std::queue<Packet> m_packets;
|
||||
|
||||
@@ -24,31 +24,31 @@ NS_DEBUG_COMPONENT_DEFINE ("Queue");
|
||||
|
||||
namespace ns3 {
|
||||
|
||||
Queue::Queue() :
|
||||
Queue::Queue(std::string const &name) :
|
||||
m_nBytes(0),
|
||||
m_nTotalReceivedBytes(0),
|
||||
m_nPackets(0),
|
||||
m_nTotalReceivedPackets(0),
|
||||
m_nTotalDroppedBytes(0),
|
||||
m_nTotalDroppedPackets(0)
|
||||
m_nTotalDroppedPackets(0),
|
||||
m_name (name)
|
||||
{
|
||||
NS_DEBUG("Queue::Queue ()")
|
||||
NS_DEBUG("Queue::Queue ()");
|
||||
}
|
||||
|
||||
Queue::~Queue()
|
||||
{
|
||||
NS_DEBUG("Queue::~Queue ()")
|
||||
NS_DEBUG("Queue::~Queue ()");
|
||||
}
|
||||
|
||||
bool
|
||||
bool
|
||||
Queue::Enque (const Packet& p)
|
||||
{
|
||||
NS_DEBUG("Queue::Enque (" << &p << ")")
|
||||
NS_DEBUG("Queue::Enque (" << &p << ")");
|
||||
|
||||
NS_DEBUG("Queue::Enque (): m_traceEnque (p)")
|
||||
NS_DEBUG("Queue::Enque (): m_traceEnque (p)");
|
||||
|
||||
std::string buffer = m_name + " + <timestamp> ";
|
||||
m_traceEnque (buffer.c_str(), p);
|
||||
m_traceEnque (m_name, p);
|
||||
|
||||
bool retval = DoEnque (p);
|
||||
if (retval)
|
||||
@@ -59,10 +59,10 @@ Queue::Enque (const Packet& p)
|
||||
return retval;
|
||||
}
|
||||
|
||||
bool
|
||||
bool
|
||||
Queue::Deque (Packet &p)
|
||||
{
|
||||
NS_DEBUG("Queue::Deque (" << &p << ")")
|
||||
NS_DEBUG("Queue::Deque (" << &p << ")");
|
||||
|
||||
bool retval = DoDeque (p);
|
||||
|
||||
@@ -74,100 +74,95 @@ Queue::Deque (Packet &p)
|
||||
NS_ASSERT (m_nBytes >= 0);
|
||||
NS_ASSERT (m_nPackets >= 0);
|
||||
|
||||
NS_DEBUG("Queue::Deque (): m_traceDeque (p)")
|
||||
NS_DEBUG("Queue::Deque (): m_traceDeque (p)");
|
||||
|
||||
std::string buffer = m_name + " - <timestamp> ";
|
||||
m_traceDeque (buffer.c_str(), static_cast<const Packet &>(p));
|
||||
const Packet packet = p;
|
||||
m_traceDeque (m_name, packet);
|
||||
}
|
||||
|
||||
return retval;
|
||||
}
|
||||
|
||||
void
|
||||
void
|
||||
Queue::DequeAll (void)
|
||||
{
|
||||
NS_DEBUG("Queue::DequeAll ()")
|
||||
NS_DEBUG("Queue::DequeAll ()");
|
||||
|
||||
NS_ASSERT (!"Don't know what to do with dequeued packets!");
|
||||
}
|
||||
|
||||
uint32_t
|
||||
uint32_t
|
||||
Queue::GetNPackets (void)
|
||||
{
|
||||
NS_DEBUG("Queue::GetNPackets () <= " << m_nPackets)
|
||||
NS_DEBUG("Queue::GetNPackets () <= " << m_nPackets);
|
||||
|
||||
return m_nPackets;
|
||||
}
|
||||
|
||||
uint32_t
|
||||
uint32_t
|
||||
Queue::GetNBytes (void)
|
||||
{
|
||||
NS_DEBUG("Queue::GetNBytes () <= " << m_nBytes)
|
||||
NS_DEBUG("Queue::GetNBytes () <= " << m_nBytes);
|
||||
|
||||
return m_nBytes;
|
||||
}
|
||||
|
||||
|
||||
bool
|
||||
bool
|
||||
Queue::IsEmpty (void)
|
||||
{
|
||||
NS_DEBUG("Queue::IsEmpty () <= " << (m_nPackets == 0))
|
||||
NS_DEBUG("Queue::IsEmpty () <= " << (m_nPackets == 0));
|
||||
return m_nPackets == 0;
|
||||
}
|
||||
|
||||
void
|
||||
Queue::RegisterTraces (TraceContainer &container)
|
||||
void
|
||||
Queue::QueueRegisterTraces (TraceContainer &container)
|
||||
{
|
||||
NS_DEBUG("Queue::RegisterTraces (" << &container << ")")
|
||||
NS_DEBUG("Queue::RegisterTraces (" << &container << ")");
|
||||
|
||||
container.RegisterCallback (
|
||||
std::string(m_name + "::Queue::Enque"),
|
||||
&m_traceEnque);
|
||||
container.RegisterCallback (
|
||||
std::string(m_name + "::Queue::Deque"),
|
||||
&m_traceDeque);
|
||||
container.RegisterCallback (
|
||||
std::string(m_name + "::Queue::Drop"),
|
||||
&m_traceDrop);
|
||||
container.RegisterCallback ("Queue::Enque",
|
||||
&m_traceEnque);
|
||||
container.RegisterCallback ("Queue::Deque",
|
||||
&m_traceDeque);
|
||||
container.RegisterCallback ("Queue::Drop",
|
||||
&m_traceDrop);
|
||||
}
|
||||
|
||||
uint32_t
|
||||
uint32_t
|
||||
Queue::GetTotalReceivedBytes (void)
|
||||
{
|
||||
NS_DEBUG(
|
||||
"Queue::GetTotalReceivedBytes () <= " << m_nTotalReceivedBytes)
|
||||
NS_DEBUG("Queue::GetTotalReceivedBytes () <= " << m_nTotalReceivedBytes);
|
||||
|
||||
return m_nTotalReceivedBytes;
|
||||
}
|
||||
|
||||
uint32_t
|
||||
uint32_t
|
||||
Queue::GetTotalReceivedPackets (void)
|
||||
{
|
||||
NS_DEBUG(
|
||||
"Queue::GetTotalReceivedPackets () <= " << m_nTotalReceivedPackets)
|
||||
NS_DEBUG("Queue::GetTotalReceivedPackets () <= " << m_nTotalReceivedPackets);
|
||||
|
||||
return m_nTotalReceivedPackets;
|
||||
}
|
||||
|
||||
uint32_t
|
||||
uint32_t
|
||||
Queue:: GetTotalDroppedBytes (void)
|
||||
{
|
||||
NS_DEBUG(
|
||||
"Queue::GetTotalDroppedBytes () <= " << m_nTotalDroppedBytes
|
||||
)
|
||||
);
|
||||
return m_nTotalDroppedBytes;
|
||||
}
|
||||
|
||||
uint32_t
|
||||
uint32_t
|
||||
Queue::GetTotalDroppedPackets (void)
|
||||
{
|
||||
NS_DEBUG(
|
||||
"Queue::GetTotalDroppedPackets () <= " << m_nTotalDroppedPackets)
|
||||
"Queue::GetTotalDroppedPackets () <= " << m_nTotalDroppedPackets);
|
||||
|
||||
return m_nTotalDroppedPackets;
|
||||
}
|
||||
|
||||
void
|
||||
void
|
||||
Queue::ResetStatistics (void)
|
||||
{
|
||||
NS_DEBUG("Queue::ResetStatistics ()")
|
||||
@@ -181,14 +176,13 @@ Queue::ResetStatistics (void)
|
||||
void
|
||||
Queue::Drop (const Packet& p)
|
||||
{
|
||||
NS_DEBUG("Queue::Drop (" << &p << ")")
|
||||
NS_DEBUG("Queue::Drop (" << &p << ")");
|
||||
|
||||
m_nTotalDroppedPackets++;
|
||||
m_nTotalDroppedBytes += p.GetSize ();
|
||||
|
||||
NS_DEBUG("Queue::Drop (): m_traceDrop (p)")
|
||||
std::string buffer = m_name + " d <timestamp> ";
|
||||
m_traceEnque (buffer.c_str(), p);
|
||||
NS_DEBUG("Queue::Drop (): m_traceDrop (p)");
|
||||
m_traceDrop (m_name, p);
|
||||
}
|
||||
|
||||
}; // namespace ns3
|
||||
|
||||
@@ -25,6 +25,7 @@
|
||||
#ifndef QUEUE_H
|
||||
#define QUEUE_H
|
||||
|
||||
#include <string>
|
||||
#include "ns3/packet.h"
|
||||
#include "ns3/callback-tracer.h"
|
||||
#include "ns3/trace-container.h"
|
||||
@@ -34,7 +35,7 @@ namespace ns3 {
|
||||
class Queue
|
||||
{
|
||||
public:
|
||||
Queue ();
|
||||
Queue (std::string const &name);
|
||||
virtual ~Queue ();
|
||||
|
||||
bool Enque (const Packet& p);
|
||||
@@ -46,8 +47,6 @@ public:
|
||||
|
||||
bool IsEmpty (void);
|
||||
|
||||
void RegisterTraces (TraceContainer &container);
|
||||
|
||||
uint32_t GetTotalReceivedBytes (void);
|
||||
uint32_t GetTotalReceivedPackets (void);
|
||||
uint32_t GetTotalDroppedBytes (void);
|
||||
@@ -86,6 +85,12 @@ private:
|
||||
protected:
|
||||
// called by subclasses to notify parent of packet drops.
|
||||
void Drop (const Packet& p);
|
||||
void QueueRegisterTraces (TraceContainer &container);
|
||||
|
||||
private:
|
||||
CallbackTracer<std::string const &, const Packet &> m_traceEnque;
|
||||
CallbackTracer<std::string const &, const Packet &> m_traceDeque;
|
||||
CallbackTracer<std::string const &, const Packet &> m_traceDrop;
|
||||
|
||||
uint32_t m_nBytes;
|
||||
uint32_t m_nTotalReceivedBytes;
|
||||
@@ -93,12 +98,9 @@ protected:
|
||||
uint32_t m_nTotalReceivedPackets;
|
||||
uint32_t m_nTotalDroppedBytes;
|
||||
uint32_t m_nTotalDroppedPackets;
|
||||
|
||||
std::string m_name;
|
||||
|
||||
private:
|
||||
CallbackTracer<const char *, const Packet &> m_traceEnque;
|
||||
CallbackTracer<const char *, const Packet &> m_traceDeque;
|
||||
CallbackTracer<const char *, const Packet &> m_traceDrop;
|
||||
|
||||
#if 0
|
||||
// Static methods to manage queue default
|
||||
|
||||
Reference in New Issue
Block a user