fix queue tracing
authorMathieu Lacage <mathieu.lacage@sophia.inria.fr>
Wed, 21 Feb 2007 17:06:19 +0100
changeset 317 b5959aa4a02f
parent 316 e41511af6a4b
child 318 7069232166d3
fix queue tracing
samples/main-serial-net-device-if.cc
samples/ns-2/simple.tcl.cc
src/node/drop-tail.cc
src/node/drop-tail.h
src/node/queue.cc
src/node/queue.h
--- a/samples/main-serial-net-device-if.cc	Wed Feb 21 16:30:08 2007 +0100
+++ b/samples/main-serial-net-device-if.cc	Wed Feb 21 17:06:19 2007 +0100
@@ -44,27 +44,27 @@
 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 @@
 
 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 @@
   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 @@
   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 @@
   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 @@
   // 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 @@
 
   // 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 @@
 
   // 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
--- a/samples/ns-2/simple.tcl.cc	Wed Feb 21 16:30:08 2007 +0100
+++ b/samples/ns-2/simple.tcl.cc	Wed Feb 21 17:06:19 2007 +0100
@@ -133,7 +133,8 @@
     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 @@
     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);
--- a/src/node/drop-tail.cc	Wed Feb 21 16:30:08 2007 +0100
+++ b/src/node/drop-tail.cc	Wed Feb 21 17:06:19 2007 +0100
@@ -25,48 +25,37 @@
 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 @@
   uint32_t 
 DropTailQueue::GetMaxPackets (void)
 {
-  NS_DEBUG(
-    "DropTailQueue::GetMaxPackets () <= " << m_maxPackets)
+  NS_DEBUG("DropTailQueue::GetMaxPackets () <= " << m_maxPackets);
 
   return m_maxPackets;
 }
@@ -83,13 +71,11 @@
   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 @@
   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;
 }
--- a/src/node/drop-tail.h	Wed Feb 21 16:30:08 2007 +0100
+++ b/src/node/drop-tail.h	Wed Feb 21 17:06:19 2007 +0100
@@ -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;
--- a/src/node/queue.cc	Wed Feb 21 16:30:08 2007 +0100
+++ b/src/node/queue.cc	Wed Feb 21 17:06:19 2007 +0100
@@ -24,31 +24,31 @@
 
 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 @@
   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 @@
       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 @@
 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
--- a/src/node/queue.h	Wed Feb 21 16:30:08 2007 +0100
+++ b/src/node/queue.h	Wed Feb 21 17:06:19 2007 +0100
@@ -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 @@
 class Queue
 {
 public:
-  Queue ();
+  Queue (std::string const &name);
   virtual ~Queue ();
 
   bool Enque (const Packet& p);
@@ -46,8 +47,6 @@
 
   bool IsEmpty (void);
 
-  void RegisterTraces (TraceContainer &container);
-
   uint32_t GetTotalReceivedBytes (void);
   uint32_t GetTotalReceivedPackets (void);
   uint32_t GetTotalDroppedBytes (void);
@@ -86,6 +85,12 @@
 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 @@
   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