Adding IPv4 rate tracer
diff --git a/examples/congestion-zoom.cc b/examples/congestion-zoom.cc
index 087a266..35b3c0c 100644
--- a/examples/congestion-zoom.cc
+++ b/examples/congestion-zoom.cc
@@ -126,7 +126,7 @@
     
     CcnxAppHelper consumerHelper ("ns3::CcnxConsumerWindow");
     consumerHelper.SetPrefix ("/" + lexical_cast<string> (server->GetId ()));
-    consumerHelper.SetAttribute ("Size", StringValue ("100.0"));
+    consumerHelper.SetAttribute ("Size", StringValue ("2.0"));
 
     CcnxAppHelper producerHelper ("ns3::CcnxProducer");
     producerHelper.SetPrefix ("/" + lexical_cast<string> (server->GetId ()));
@@ -145,6 +145,26 @@
   {
     ApplicationContainer apps;
 
+    Ptr<Node> client = Names::Find<Node> (prefix, lexical_cast<string> ("client"));
+    Ptr<Node> server = Names::Find<Node> (prefix, lexical_cast<string> ("server"));
+
+    Ptr<Ipv4> ipv4 = client->GetObject<Ipv4> ();
+
+    // to make sure we don't reuse the same port numbers for different flows, just make all port numbers unique
+    PacketSinkHelper consumerHelper ("ns3::TcpSocketFactory",
+                                     InetSocketAddress (Ipv4Address::GetAny (), 1024));
+
+    BulkSendHelper producerHelper ("ns3::TcpSocketFactory",
+                                   InetSocketAddress (ipv4->GetAddress (1, 0).GetLocal (), 1024));
+    // cout << "SendTo: " <<  ipv4->GetAddress (1, 0).GetLocal () << endl;
+    producerHelper.SetAttribute ("MaxBytes", UintegerValue (2081040)); // equal to 2001 ccnx packets
+
+    apps.Add
+      (consumerHelper.Install (client));
+
+    apps.Add
+      (producerHelper.Install (server));
+    
     // uint32_t streamId = 0;
     // const static uint32_t base_port = 10;
     // for (list<tuple<uint32_t,uint32_t> >::iterator i = m_pairs.begin (); i != m_pairs.end (); i++)
@@ -221,7 +241,7 @@
   {
     experiment.ConfigureTopology ();
     experiment.InstallCcnxStack ();
-    ApplicationContainer apps = experiment.AddCcnxApplications ();
+    experiment.AddCcnxApplications ();
 
     // for (uint32_t i = 0; i < apps.GetN () / 2; i++) 
     //   {
@@ -232,42 +252,43 @@
     CcnxTraceHelper traceHelper;
     traceHelper.EnableRateL3All (prefix + "rate-trace.log");
     // traceHelper.EnableSeqsAppAll ("ns3::CcnxConsumerCbr", prefix + "consumers-seqs.log");
-    traceHelper.EnableSeqsAppAll ("ns3::CcnxConsumerWindow", prefix + "consumers-seqs.log");
-    traceHelper.EnableWindowsAll (prefix + "windows.log");
+    // traceHelper.EnableSeqsAppAll ("ns3::CcnxConsumerWindow", prefix + "consumers-seqs.log");
+    // traceHelper.EnableWindowsAll (prefix + "windows.log");
 
     // config.ConfigureAttributes ();
     experiment.Run (Seconds (50.0));
     // experiment.reader->SavePositions ("pos.log");
   }
 
-  // cout << "TCP experiment\n";
-  // // TCP
-  // {
-  //   experiment.ConfigureTopology ();
-  //   experiment.InstallIpStack ();
-  //   ApplicationContainer apps = experiment.AddTcpApplications ();
+  cout << "TCP experiment\n";
+  // TCP
+  {
+    experiment.ConfigureTopology ();
+    experiment.InstallIpStack ();
+    experiment.AddTcpApplications ();
 
-  //   CcnxTraceHelper traceHelper;
-  //   traceHelper.EnableIpv4SeqsAppAll (prefix + "tcp-consumers-seqs.log");
-  //   traceHelper.EnableWindowsTcpAll (prefix + "tcp-windows.log");
+    CcnxTraceHelper traceHelper;
+    traceHelper.EnableIpv4RateL3All (prefix + "ipv4-rate-trace.log");
+    // traceHelper.EnableIpv4SeqsAppAll (prefix + "tcp-consumers-seqs.log");
+    // traceHelper.EnableWindowsTcpAll (prefix + "tcp-windows.log");
 
-  //   for (uint32_t i = 0; i < apps.GetN () / 2; i++) 
-  //     {
-  //       apps.Get (i*2)->SetStartTime (Seconds (1+i));
+    // for (uint32_t i = 0; i < apps.GetN () / 2; i++) 
+    //   {
+    //     apps.Get (i*2)->SetStartTime (Seconds (1+i));
 
-  //       apps.Get (i*2 + 1)->SetStartTime (Seconds (1+i));
+    //     apps.Get (i*2 + 1)->SetStartTime (Seconds (1+i));
 
-  //       // cout << "Node: " << apps.Get (i*2 + 1)->GetNode ()->GetId () << "\n";
-  //       // care only about BulkSender
-  //       Simulator::Schedule (Seconds (1+i+0.01),
-  //                            &CcnxTraceHelper::TcpConnect, &traceHelper, apps.Get (i*2)->GetNode ());
+    //     // cout << "Node: " << apps.Get (i*2 + 1)->GetNode ()->GetId () << "\n";
+    //     // care only about BulkSender
+    //     Simulator::Schedule (Seconds (1+i+0.01),
+    //                          &CcnxTraceHelper::TcpConnect, &traceHelper, apps.Get (i*2)->GetNode ());
 
-  //       Simulator::Schedule (Seconds (1+i+0.01),
-  //                            &CcnxTraceHelper::TcpConnect, &traceHelper, apps.Get (i*2 + 1)->GetNode ());
-  //     }
+    //     Simulator::Schedule (Seconds (1+i+0.01),
+    //                          &CcnxTraceHelper::TcpConnect, &traceHelper, apps.Get (i*2 + 1)->GetNode ());
+    //   }
 
-  //   experiment.Run (Seconds (50.0));
-  // }
+    experiment.Run (Seconds (50.0));
+  }
 
   return 0;
 }