src/helper/csma-helper.cc
changeset 2789 47e92324cf4b
parent 2780 306f665014b6
child 2799 17660e306cab
--- a/src/helper/csma-helper.cc	Fri Mar 28 13:40:08 2008 -0700
+++ b/src/helper/csma-helper.cc	Fri Mar 28 16:58:44 2008 -0700
@@ -11,8 +11,6 @@
 namespace ns3 {
 
 CsmaHelper::CsmaHelper ()
-  : m_pcap (false), 
-    m_ascii (false)
 {
   m_queueFactory.SetTypeId ("ns3::DropTailQueue");
   m_deviceFactory.SetTypeId ("ns3::CsmaNetDevice");
@@ -46,27 +44,92 @@
 }
 
 void 
+CsmaHelper::EnablePcap (std::string filename, uint32_t nodeid, uint32_t deviceid)
+{
+  std::ostringstream oss;
+  oss << filename << "-" << nodeid << "-" << deviceid;
+  Ptr<PcapWriter> pcap = Create<PcapWriter> ();
+  pcap->Open (oss.str ());
+  pcap->WriteEthernetHeader ();
+  oss.str ("");
+  oss << "/NodeList/" << nodeid << "/DeviceList/" << deviceid << "/$ns3::CsmaNetDevice/Rx";
+  Config::ConnectWithoutContext (oss.str (), MakeBoundCallback (&CsmaHelper::RxEvent, pcap));
+  oss.str ("");
+  oss << "/NodeList/" << nodeid << "/DeviceList/" << deviceid << "/$ns3::CsmaNetDevice/TxQueue/Enqueue";
+  Config::ConnectWithoutContext (oss.str (), MakeBoundCallback (&CsmaHelper::EnqueueEvent, pcap));
+}
+void 
+CsmaHelper::EnablePcap (std::string filename, NetDeviceContainer d)
+{
+  for (NetDeviceContainer::Iterator i = d.Begin (); i != d.End (); ++i)
+    {
+      Ptr<NetDevice> dev = *i;
+      EnablePcap (filename, dev->GetNode ()->GetId (), dev->GetIfIndex ());
+    }
+}
+void
+CsmaHelper::EnablePcap (std::string filename, NodeContainer n)
+{
+  NetDeviceContainer devs;
+  for (NodeContainer::Iterator i = n.Begin (); i != n.End (); ++i)
+    {
+      Ptr<Node> node = *i;
+      for (uint32_t j = 0; j < node->GetNDevices (); ++j)
+	{
+	  devs.Add (node->GetDevice (j));
+	}
+    }
+  EnablePcap (filename, devs);
+}
+
+void
 CsmaHelper::EnablePcap (std::string filename)
 {
-  m_pcap = true;
-  m_pcapFilename = filename;
-}
-void 
-CsmaHelper::DisablePcap (void)
-{
-  m_pcap = false;
+  EnablePcap (filename, NodeContainer::GetGlobal ());
 }
 
 void 
+CsmaHelper::EnableAscii (std::ostream &os, uint32_t nodeid, uint32_t deviceid)
+{
+  Packet::EnableMetadata ();
+  std::ostringstream oss;
+  oss << "/NodeList/" << nodeid << "/DeviceList/" << deviceid << "/$ns3::CsmaNetDevice/Rx";
+  Config::Connect (oss.str (), MakeBoundCallback (&CsmaHelper::AsciiEvent, &os));
+  oss.str ("");
+  oss << "/NodeList/" << nodeid << "/DeviceList/" << deviceid << "/$ns3::CsmaNetDevice/TxQueue/Enqueue";
+  Config::Connect (oss.str (), MakeBoundCallback (&CsmaHelper::AsciiEvent, &os));
+  oss.str ("");
+  oss << "/NodeList/" << nodeid << "/DeviceList/" << deviceid << "/$ns3::CsmaNetDevice/TxQueue/Dequeue";
+  Config::Connect (oss.str (), MakeBoundCallback (&CsmaHelper::AsciiEvent, &os));
+}
+void 
+CsmaHelper::EnableAscii (std::ostream &os, NetDeviceContainer d)
+{
+  for (NetDeviceContainer::Iterator i = d.Begin (); i != d.End (); ++i)
+    {
+      Ptr<NetDevice> dev = *i;
+      EnableAscii (os, dev->GetNode ()->GetId (), dev->GetIfIndex ());
+    }
+}
+void
+CsmaHelper::EnableAscii (std::ostream &os, NodeContainer n)
+{
+  NetDeviceContainer devs;
+  for (NodeContainer::Iterator i = n.Begin (); i != n.End (); ++i)
+    {
+      Ptr<Node> node = *i;
+      for (uint32_t j = 0; j < node->GetNDevices (); ++j)
+	{
+	  devs.Add (node->GetDevice (j));
+	}
+    }
+  EnableAscii (os, devs);
+}
+
+void
 CsmaHelper::EnableAscii (std::ostream &os)
 {
-  m_ascii = true;
-  m_asciiOs = &os;
-}
-void 
-CsmaHelper::DisableAscii (void)
-{
-  m_ascii = false;
+  EnableAscii (os, NodeContainer::GetGlobal ());
 }
 
 
@@ -90,31 +153,6 @@
       Ptr<Queue> queue = m_queueFactory.Create<Queue> ();
       device->AddQueue (queue);
       device->Attach (channel);
-      if (m_pcap)
-	{
-	  std::ostringstream oss;
-	  oss << m_pcapFilename << "-" << node->GetId () << "-" << device->GetIfIndex ();
-	  std::string filename = oss.str ();
-	  Ptr<PcapWriter> pcap = Create<PcapWriter> ();
-	  pcap->Open (filename);
-	  pcap->WriteEthernetHeader ();
-	  device->TraceConnectWithoutContext ("Rx", MakeBoundCallback (&CsmaHelper::RxEvent, pcap));
-	  queue->TraceConnectWithoutContext ("Enqueue", MakeBoundCallback (&CsmaHelper::EnqueueEvent, pcap));
-	}
-      if (m_ascii)
-	{
-	  Packet::EnableMetadata ();
-	  std::ostringstream oss;
-	  oss << "/NodeList/" << node->GetId () << "/DeviceList/" << device->GetIfIndex () << "/Rx";
-	  Config::Connect (oss.str (), MakeBoundCallback (&CsmaHelper::AsciiEvent, m_asciiOs));
-	  oss.str ("");
-	  oss << "/NodeList/" << node->GetId () << "/DeviceList/" << device->GetIfIndex () << "/TxQueue/Enqueue";
-	  Config::Connect (oss.str (), MakeBoundCallback (&CsmaHelper::AsciiEvent, m_asciiOs));
-	  oss.str ("");
-	  oss << "/NodeList/" << node->GetId () << "/DeviceList/" << device->GetIfIndex () << "/TxQueue/Dequeue";
-	  Config::Connect (oss.str (), MakeBoundCallback (&CsmaHelper::AsciiEvent, m_asciiOs));
-	  
-	}
       container.Add (device);
     }
   return container;