From 76322a79dee0dccfd10612a88df1395ca2dc4ce9 Mon Sep 17 00:00:00 2001 From: Mathieu Lacage Date: Wed, 21 Feb 2007 17:06:19 +0100 Subject: [PATCH] fix queue tracing --- samples/main-serial-net-device-if.cc | 52 ++++++++-------- samples/ns-2/simple.tcl.cc | 6 +- src/node/drop-tail.cc | 63 +++++++------------ src/node/drop-tail.h | 12 ++-- src/node/queue.cc | 92 +++++++++++++--------------- src/node/queue.h | 16 ++--- 6 files changed, 113 insertions(+), 128 deletions(-) diff --git a/samples/main-serial-net-device-if.cc b/samples/main-serial-net-device-if.cc index 641809f05..202e43945 100644 --- a/samples/main-serial-net-device-if.cc +++ b/samples/main-serial-net-device-if.cc @@ -44,27 +44,27 @@ class Logger : public TraceWriter{ public: Logger () { - NS_DEBUG_UNCOND("**** Logger()") - }; + NS_DEBUG_UNCOND("**** Logger()"); + } Logger (std::string const &filename) { - NS_DEBUG_UNCOND("**** Logger(string const &)") + NS_DEBUG_UNCOND("**** Logger(string const &)"); Open(filename); - }; + } Logger (char const *filename) : m_tracer(filename) { - NS_DEBUG_UNCOND("**** Logger(char const *)") + NS_DEBUG_UNCOND("**** Logger(char const *)"); Open(filename); - }; + } - ~Logger () {}; + ~Logger () {} - void Log (const char *s, const Packet &p) + void Log (std::string const &name, const Packet &p) { - NS_DEBUG_UNCOND("**** LogEnque ("<< s << &p << ")") - m_filestr << s << &p << std::endl; + NS_DEBUG_UNCOND("**** LogEnque ("<< name << " " << &p << ")"); + m_filestr << name << " " << &p << std::endl; } protected: @@ -73,7 +73,7 @@ protected: int main (int argc, char *argv[]) { - NS_DEBUG_UNCOND("Serial Net Device Test") + NS_DEBUG_UNCOND("Serial Net Device Test"); TraceContainer traceContainerA; TraceContainer traceContainerB; @@ -94,7 +94,8 @@ int main (int argc, char *argv[]) MacAddress addra("00:00:00:00:00:01"); SerialNetDevice neta(&a, addra); - DropTailQueue dtqa (traceContainerA); + DropTailQueue dtqa ("a"); + dtqa.RegisterTraces (traceContainerA); neta.AddQueue(&dtqa); neta.SetName("a.eth0"); @@ -102,7 +103,8 @@ int main (int argc, char *argv[]) MacAddress addrb("00:00:00:00:00:02"); SerialNetDevice netb(&b, addrb); - DropTailQueue dtqb (traceContainerB); + DropTailQueue dtqb ("b"); + dtqb.RegisterTraces (traceContainerB); netb.AddQueue(&dtqb); netb.SetName("b.eth0"); @@ -113,10 +115,10 @@ int main (int argc, char *argv[]) ch.Attach(&netb); // Some simple prints to see whether it is working - NS_DEBUG_UNCOND("neta.GetMtu() <= " << neta.GetMtu()) - NS_DEBUG_UNCOND("netb.GetMtu() <= " << netb.GetMtu()) - NS_DEBUG_UNCOND("neta.GetAddress() <= " << neta.GetAddress()) - NS_DEBUG_UNCOND("netb.GetAddress() <= " << netb.GetAddress()) + NS_DEBUG_UNCOND("neta.GetMtu() <= " << neta.GetMtu()); + NS_DEBUG_UNCOND("netb.GetMtu() <= " << netb.GetMtu()); + NS_DEBUG_UNCOND("neta.GetAddress() <= " << neta.GetAddress()); + NS_DEBUG_UNCOND("netb.GetAddress() <= " << netb.GetAddress()); // Note: InternetNode constructor instantiates multiple Layer-3 // protocols and registers them with the L3Demux object. @@ -134,7 +136,7 @@ int main (int argc, char *argv[]) // ii) add the Ipv4ArpInterface object to the InternetNode's internal // vector of Ipv4Interfaces (keyed off of ifIndex) - NS_DEBUG_UNCOND("Adding ARP Interface to InternetNode a") + NS_DEBUG_UNCOND("Adding ARP Interface to InternetNode a"); ArpIpv4Interface* arpipv4interfacep = new ArpIpv4Interface(&a, &neta); uint32_t indexA = (&a)->GetIpv4 ()->AddInterface (arpipv4interfacep); NS_DEBUG_UNCOND("Adding Interface " << indexA); @@ -142,16 +144,16 @@ int main (int argc, char *argv[]) // iii) give the interface an IP address - NS_DEBUG_UNCOND("Giving IP address to ARP Interface") + NS_DEBUG_UNCOND("Giving IP address to ARP Interface"); arpipv4interfacep->SetAddress(Ipv4Address("10.1.1.1")); arpipv4interfacep->SetNetworkMask(Ipv4Mask("255.255.255.0")); // iv) set the interface's state to "UP" - NS_DEBUG_UNCOND("Setting ARP interface to UP") + NS_DEBUG_UNCOND("Setting ARP interface to UP"); arpipv4interfacep->SetUp(); - NS_DEBUG_UNCOND("Adding ARP Interface to InternetNode b") + NS_DEBUG_UNCOND("Adding ARP Interface to InternetNode b"); ArpIpv4Interface* arpipv4interfacepb = new ArpIpv4Interface(&b, &netb); uint32_t indexB = (&b)->GetIpv4 ()->AddInterface (arpipv4interfacepb); NS_DEBUG_UNCOND("Adding Interface " << indexB); @@ -159,25 +161,25 @@ int main (int argc, char *argv[]) // iii) give the interface an IP address - NS_DEBUG_UNCOND("Giving IP address to ARP Interface") + NS_DEBUG_UNCOND("Giving IP address to ARP Interface"); arpipv4interfacepb->SetAddress(Ipv4Address("10.1.1.2")); arpipv4interfacepb->SetNetworkMask(Ipv4Mask("255.255.255.0")); // iv) set the interface's state to "UP" - NS_DEBUG_UNCOND("Setting ARP interface to UP") + NS_DEBUG_UNCOND("Setting ARP interface to UP"); arpipv4interfacepb->SetUp(); Logger logger("serial-net-test.log"); traceContainerA.SetCallback ("Queue::Enque", - MakeCallback (&Logger::Log, &logger)); + MakeCallback (&Logger::Log, &logger)); // create a packet on one node and send it through, reading it // on the other node Packet p; - NS_DEBUG_UNCOND("Sending Packet " << &p) + NS_DEBUG_UNCOND("Sending Packet " << &p); arpipv4interfacep->Send(p, Ipv4Address("10.1.1.2")); //neta.Send(p, MacAddress()); // Test that all-zero's MacAddress used diff --git a/samples/ns-2/simple.tcl.cc b/samples/ns-2/simple.tcl.cc index 2cf2bd720..c8685df4a 100644 --- a/samples/ns-2/simple.tcl.cc +++ b/samples/ns-2/simple.tcl.cc @@ -133,7 +133,8 @@ AddDuplexLink( SerialChannel* channel = new SerialChannel(); qName = name + "::Queue A"; - DropTailQueue* dtqa = new DropTailQueue(qName, traceContainer); + DropTailQueue* dtqa = new DropTailQueue(qName); + dtqa->RegisterTraces (traceContainer); SerialNetDevice* neta = new SerialNetDevice(a, macaddra); neta->AddQueue(dtqa); @@ -147,7 +148,8 @@ AddDuplexLink( interfA->SetUp (); qName = name + "::Queue B"; - DropTailQueue* dtqb = new DropTailQueue(qName, traceContainer); + DropTailQueue* dtqb = new DropTailQueue(qName); + dtqb->RegisterTraces (traceContainer); SerialNetDevice* netb = new SerialNetDevice(b, macaddrb); netb->AddQueue(dtqb); diff --git a/src/node/drop-tail.cc b/src/node/drop-tail.cc index cc667bd77..22101d45a 100644 --- a/src/node/drop-tail.cc +++ b/src/node/drop-tail.cc @@ -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; } diff --git a/src/node/drop-tail.h b/src/node/drop-tail.h index 42b092a9e..0551deb33 100644 --- a/src/node/drop-tail.h +++ b/src/node/drop-tail.h @@ -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 m_packets; diff --git a/src/node/queue.cc b/src/node/queue.cc index 21604f9e5..f36630c30 100644 --- a/src/node/queue.cc +++ b/src/node/queue.cc @@ -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 + " + "; - 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 + " - "; - m_traceDeque (buffer.c_str(), static_cast(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 "; - m_traceEnque (buffer.c_str(), p); + NS_DEBUG("Queue::Drop (): m_traceDrop (p)"); + m_traceDrop (m_name, p); } }; // namespace ns3 diff --git a/src/node/queue.h b/src/node/queue.h index 9fb493fa9..a61189c62 100644 --- a/src/node/queue.h +++ b/src/node/queue.h @@ -25,6 +25,7 @@ #ifndef QUEUE_H #define QUEUE_H +#include #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 m_traceEnque; + CallbackTracer m_traceDeque; + CallbackTracer 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 m_traceEnque; - CallbackTracer m_traceDeque; - CallbackTracer m_traceDrop; #if 0 // Static methods to manage queue default