Enabling app-layer tracing
Network-layer tracing is not working yet (needs a couple of attributes
to be implemented)
diff --git a/examples/abilene-topology.cc b/examples/abilene-topology.cc
index c0c1f16..8c83930 100644
--- a/examples/abilene-topology.cc
+++ b/examples/abilene-topology.cc
@@ -26,25 +26,27 @@
#include "ns3/point-to-point-grid.h"
#include "ns3/ipv4-global-routing-helper.h"
#include "ns3/animation-interface.h"
-#include "ns3/ccnx-l3-protocol.h"
+// #include "ns3/ccnx-l3-protocol.h"
#include <iostream>
#include <sstream>
#include "ns3/annotated-topology-reader.h"
#include "../utils/spring-mobility-helper.h"
+#include "ns3/config-store.h"
+
using namespace ns3;
using namespace std;
NS_LOG_COMPONENT_DEFINE ("CcnxAbileneTopology");
-int transmittedInterests = 0;
-int receivedInterests = 0;
-int droppedInterests = 0;
+// int transmittedInterests = 0;
+// int receivedInterests = 0;
+// int droppedInterests = 0;
-int transmittedData = 0;
-int receivedData = 0;
-int droppedData = 0;
+// int transmittedData = 0;
+// int receivedData = 0;
+// int droppedData = 0;
void PrintTime ()
{
@@ -69,49 +71,118 @@
}
}
-static void OnTransmittedInterest (std::string context, Ptr<const CcnxInterestHeader> header,
- Ptr<Ccnx> ccnx, Ptr<const CcnxFace> face)
+
+struct AggregateTrace
{
- transmittedInterests++;
+ AggregateTrace ()
+ : m_transmittedInterests (0)
+ , m_transmittedData (0)
+ , m_receivedInterests (0)
+ , m_receivedNacks (0)
+ , m_receivedData (0)
+ {
+ }
+
+ void
+ TransmittedInterests (std::string context,
+ Ptr<const CcnxInterestHeader>, Ptr<CcnxApp>, Ptr<CcnxFace>)
+ {
+ m_transmittedInterests++;
+ }
+
+ void
+ TransmittedData (std::string context,
+ Ptr<const CcnxContentObjectHeader>, Ptr<const Packet>,
+ Ptr<CcnxApp>, Ptr<CcnxFace>)
+ {
+ m_transmittedData++;
+ }
+
+ void
+ ReceivedInterests (std::string context,
+ Ptr<const CcnxInterestHeader>,
+ Ptr<CcnxApp>, Ptr<CcnxFace>)
+ {
+ m_receivedInterests++;
+ }
+
+ void
+ ReceivedNacks (std::string context,
+ Ptr<const CcnxInterestHeader>,
+ Ptr<CcnxApp>, Ptr<CcnxFace>)
+ {
+ m_receivedNacks++;
+ }
+
+ void
+ ReceivedData (std::string context,
+ Ptr<const CcnxContentObjectHeader>, Ptr<const Packet>,
+ Ptr<CcnxApp>, Ptr<CcnxFace>)
+ {
+ m_receivedData++;
+ }
+
+ uint64_t m_transmittedInterests;
+ uint64_t m_transmittedData;
+ uint64_t m_receivedInterests;
+ uint64_t m_receivedNacks;
+ uint64_t m_receivedData;
+};
+
+ostream&
+operator << (ostream &os, const AggregateTrace &trace)
+{
+ os << ">> (i): " << trace.m_transmittedInterests << "\n";
+ os << ">> (d): " << trace.m_transmittedData << "\n";
+ os << "<< (i): " << trace.m_receivedInterests << "\n";
+ os << "<< (d): " << trace.m_receivedData << "\n";
+ os << "<< (n): " << trace.m_receivedNacks << "\n";
+ return os;
}
-static void OnReceivedInterest (std::string context, Ptr<const CcnxInterestHeader> header,
- Ptr<Ccnx> ccnx, Ptr<const CcnxFace> face)
-{
- receivedInterests++;
-}
+// static void OnTransmittedInterest (std::string context, Ptr<const CcnxInterestHeader> header,
+// Ptr<Ccnx> ccnx, Ptr<const CcnxFace> face)
+// {
+// transmittedInterests++;
+// }
-static void OnDroppedInterest (std::string context, Ptr<const CcnxInterestHeader> header, CcnxL3Protocol::DropReason reason,
- Ptr<Ccnx> ccnx, Ptr<const CcnxFace> face)
-{
- droppedInterests++;
-}
+// static void OnReceivedInterest (std::string context, Ptr<const CcnxInterestHeader> header,
+// Ptr<Ccnx> ccnx, Ptr<const CcnxFace> face)
+// {
+// receivedInterests++;
+// }
-static void OnTransmittedData (std::string context, Ptr<const CcnxContentObjectHeader> header, Ptr<const Packet> packet,
- CcnxL3Protocol::ContentObjectSource source, Ptr<Ccnx> ccnx, Ptr<const CcnxFace> face)
-{
- transmittedData++;
-}
+// static void OnDroppedInterest (std::string context, Ptr<const CcnxInterestHeader> header, CcnxL3Protocol::DropReason reason,
+// Ptr<Ccnx> ccnx, Ptr<const CcnxFace> face)
+// {
+// droppedInterests++;
+// }
-static void OnReceivedData (std::string context, Ptr<const CcnxContentObjectHeader> header, Ptr<const Packet> packet,
- Ptr<Ccnx> ccnx, Ptr<const CcnxFace> face)
-{
- receivedData++;
-}
+// static void OnTransmittedData (std::string context, Ptr<const CcnxContentObjectHeader> header, Ptr<const Packet> packet,
+// CcnxL3Protocol::ContentObjectSource source, Ptr<Ccnx> ccnx, Ptr<const CcnxFace> face)
+// {
+// transmittedData++;
+// }
-static void OnDroppedData (std::string context, Ptr<const CcnxContentObjectHeader> header, Ptr<const Packet> packet,
- CcnxL3Protocol::DropReason reason, Ptr<Ccnx> ccnx, Ptr<const CcnxFace> face )
-{
- droppedData++;
-}
+// static void OnReceivedData (std::string context, Ptr<const CcnxContentObjectHeader> header, Ptr<const Packet> packet,
+// Ptr<Ccnx> ccnx, Ptr<const CcnxFace> face)
+// {
+// receivedData++;
+// }
+
+// static void OnDroppedData (std::string context, Ptr<const CcnxContentObjectHeader> header, Ptr<const Packet> packet,
+// CcnxL3Protocol::DropReason reason, Ptr<Ccnx> ccnx, Ptr<const CcnxFace> face )
+// {
+// droppedData++;
+// }
int
main (int argc, char *argv[])
{
- Packet::EnableChecking();
- Packet::EnablePrinting();
+ // Packet::EnableChecking();
+ // Packet::EnablePrinting();
string input ("./src/NDNabstraction/examples/abilene-topology.txt");
-
+
Time finishTime = Seconds (20.0);
string animationFile;
string strategy = "ns3::CcnxFloodingStrategy";
@@ -121,6 +192,9 @@
cmd.AddValue ("strategy", "CCNx forwarding strategy", strategy);
cmd.Parse (argc, argv);
+ ConfigStore config;
+ config.ConfigureDefaults ();
+
// ------------------------------------------------------------
// -- Read topology data.
// --------------------------------------------
@@ -137,13 +211,6 @@
return -1;
}
- int droppedInterests[nodes.GetN()];
- int congestedInterests[nodes.GetN()];
- int sentInterests[nodes.GetN()];
- (void)droppedInterests;
- (void)sentInterests;
- (void)congestedInterests;
-
SpringMobilityHelper::InstallSprings (reader.LinksBegin (), reader.LinksEnd ());
// InternetStackHelper stack;
@@ -168,8 +235,8 @@
CcnxConsumerHelper consumerHelper ("/5");
ApplicationContainer consumers = consumerHelper.Install (Names::Find<Node> ("/abilene", "ATLAng"));
- CcnxProducerHelper producerHelper ("/5",1024);
- ApplicationContainer producers = producerHelper.Install (Names::Find<Node> ("/abilene", "IPLSng"));
+ // CcnxProducerHelper producerHelper ("/5",1024);
+ // ApplicationContainer producers = producerHelper.Install (Names::Find<Node> ("/abilene", "IPLSng"));
// // Populate FIB based on IPv4 global routing controller
// ccnxHelper.InstallFakeGlobalRoutes ();
@@ -178,7 +245,7 @@
// Simulator::Schedule (Seconds (1.0), PrintFIBs);
// PrintFIBs ();
- Simulator::Schedule (Seconds (10.0), PrintTime);
+ // Simulator::Schedule (Seconds (10.0), PrintTime);
Simulator::Stop (finishTime);
@@ -189,38 +256,50 @@
anim->SetMobilityPollInterval (Seconds (1));
}
- NS_LOG_INFO ("Configure Tracing.");
- // first, pcap tracing in non-promiscuous mode
- //ccnxHelper.EnablePcapAll ("csma-ping", false);
- // then, print what the packet sink receives.
- //Config::ConnectWithoutContext ("/NodeList/3/ApplicationList/0/$ns3::PacketSink/Rx",
- // MakeCallback (&SinkRx));
- // finally, print the ping rtts.
- //Packet::EnablePrinting ();
- Config::Connect("/NodeList/*/ns3::CcnxL3Protocol/TransmittedInterestTrace",
- MakeCallback (&OnTransmittedInterest));
- Config::Connect ("/NodeList/*/ns3::CcnxL3Protocol/ReceivedInterestTrace",
- MakeCallback (&OnReceivedInterest));
- Config::Connect ("/NodeList/*/ns3::CcnxL3Protocol/DroppedInterestTrace",
- MakeCallback (&OnDroppedInterest));
-
- Config::Connect ("/NodeList/*/ns3::CcnxL3Protocol/ReceivedDataTrace",
- MakeCallback (&OnReceivedData));
- Config::Connect ("/NodeList/*/ns3::CcnxL3Protocol/TransmittedDataTrace",
- MakeCallback (&OnTransmittedData));
- Config::Connect ("/NodeList/*/ns3::CcnxL3Protocol/DroppedDataTrace",
- MakeCallback (&OnDroppedData));
+ // NS_LOG_INFO ("Configure Tracing.");
+ AggregateTrace trace;
+ Config::Connect ("/NodeList/*/ApplicationList/*/$ns3::CcnxConsumer/TransmittedInterests",
+ MakeCallback (&AggregateTrace::TransmittedInterests, &trace));
+ Config::Connect ("/NodeList/*/ApplicationList/*/$ns3::CcnxConsumer/ReceivedNacks",
+ MakeCallback (&AggregateTrace::ReceivedNacks, &trace));
+
+ Config::Connect ("/NodeList/*/ApplicationList/*/$ns3::CcnxProducer/ReceivedInterests",
+ MakeCallback (&AggregateTrace::ReceivedInterests, &trace));
+
+ Config::Connect ("/NodeList/*/ApplicationList/*/$ns3::CcnxProducer/TransmittedContentObjects",
+ MakeCallback (&AggregateTrace::TransmittedData, &trace));
+
+ Config::Connect ("/NodeList/*/ApplicationList/*/$ns3::CcnxConsumer/ReceivedContentObjects",
+ MakeCallback (&AggregateTrace::ReceivedData, &trace));
+
+ // Config::Connect("/NodeList/*/ns3::CcnxL3Protocol/TransmittedInterestTrace",
+ // MakeCallback (&OnTransmittedInterest));
+ // Config::Connect ("/NodeList/*/ns3::CcnxL3Protocol/ReceivedInterestTrace",
+ // MakeCallback (&OnReceivedInterest));
+ // Config::Connect ("/NodeList/*/ns3::CcnxL3Protocol/DroppedInterestTrace",
+ // MakeCallback (&OnDroppedInterest));
+
+ // Config::Connect ("/NodeList/*/ns3::CcnxL3Protocol/ReceivedDataTrace",
+ // MakeCallback (&OnReceivedData));
+ // Config::Connect ("/NodeList/*/ns3::CcnxL3Protocol/TransmittedDataTrace",
+ // MakeCallback (&OnTransmittedData));
+ // Config::Connect ("/NodeList/*/ns3::CcnxL3Protocol/DroppedDataTrace",
+ // MakeCallback (&OnDroppedData));
+
+ config.ConfigureAttributes ();
+
NS_LOG_INFO ("Run Simulation.");
Simulator::Run ();
Simulator::Destroy ();
NS_LOG_INFO ("Done.");
- NS_LOG_INFO("Total received interests = " << receivedInterests);
- NS_LOG_INFO("Total transmitted interests = " << transmittedInterests);
- NS_LOG_INFO("Total dropped interests = " << droppedInterests);
- NS_LOG_INFO("Total received data = " << receivedData);
- NS_LOG_INFO("Total transmitted data = " << transmittedData);
- NS_LOG_INFO("Total dropped data = " << droppedData);
+ // NS_LOG_INFO("Total received interests = " << receivedInterests);
+ // NS_LOG_INFO("Total transmitted interests = " << transmittedInterests);
+ // NS_LOG_INFO("Total dropped interests = " << droppedInterests);
+ // NS_LOG_INFO("Total received data = " << receivedData);
+ // NS_LOG_INFO("Total transmitted data = " << transmittedData);
+ // NS_LOG_INFO("Total dropped data = " << droppedData);
+ NS_LOG_INFO (trace);
return 0;
}