fix queue tracing

This commit is contained in:
Mathieu Lacage
2007-02-21 17:06:19 +01:00
parent d2064f1190
commit 76322a79de
6 changed files with 113 additions and 128 deletions

View File

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

View File

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

View File

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

View File

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