/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */ /** * Copyright (c) 2011-2015 Regents of the University of California. * * This file is part of ndnSIM. See AUTHORS for complete list of ndnSIM authors and * contributors. * * ndnSIM is free software: you can redistribute it and/or modify it under the terms * of the GNU General Public License as published by the Free Software Foundation, * either version 3 of the License, or (at your option) any later version. * * ndnSIM is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR * PURPOSE. See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along with * ndnSIM, e.g., in COPYING.md file. If not, see . **/ // ndn-congestion-topo-plugin.cpp #include "ns3/core-module.h" #include "ns3/network-module.h" #include "ns3/ndnSIM-module.h" #include "../extensions/mircc-strategy.hpp" namespace ns3 { /** * This scenario simulates a grid topology (using topology reader module) * * /------\ /------\ * | Src1 |<--+ +-->| Dst1 | * \------/ \ / \------/ * \ / * +-->/------\ "bottleneck" /------\<-+ * | Rtr1 |<===============>| Rtr2 | * +-->\------/ \------/<-+ * * To run scenario and see what is happening, use the following command: * * NS_LOG=ndn.Consumer:ndn.Producer ./waf --run=ndn-congestion-topo-plugin */ int main(int argc, char* argv[]) { CommandLine cmd; cmd.Parse(argc, argv); AnnotatedTopologyReader topologyReader("", 25); topologyReader.SetFileName("topologies/topo-4-node.txt"); topologyReader.Read(); // Install NDN stack on all nodes ndn::StackHelper ndnHelper; ndnHelper.setPolicy("nfd::cs::lru"); ndnHelper.setCsSize(10000); ndnHelper.InstallAll(); // Choosing forwarding strategy ndn::StrategyChoiceHelper::InstallAll("/"); //ndn::StrategyChoiceHelper::InstallAll("/prefix"); //ndn::StrategyChoiceHelper::InstallAll("/prefix", "/localhost/nfd/strategy/best-route-strategy"); // Installing global routing interface on all nodes ndn::GlobalRoutingHelper ndnGlobalRoutingHelper; ndnGlobalRoutingHelper.InstallAll(); // Getting containers for the consumer/producer Ptr consumer1 = Names::Find("Src1"); Ptr producer1 = Names::Find("Dst1"); ndn::AppHelper consumerHelper("ns3::ndn::ConsumerMIRCC"); //ndn::AppHelper consumerHelper("ns3::ndn::ConsumerCbr"); consumerHelper.SetAttribute("MaxSeq", StringValue("10000000")); // 100 interests a second consumerHelper.SetAttribute("start_ms", StringValue("1000")); // 100 interests a second // on the first consumer node install a Consumer application // that will express interests in /dst1 namespace consumerHelper.SetPrefix("/dst1"); consumerHelper.Install(consumer1); ndn::AppHelper producerHelper("ns3::ndn::Producer"); producerHelper.SetAttribute("PayloadSize", StringValue("1024")); // Register /dst1 prefix with global routing controller and // install producer that will satisfy Interests in /dst1 namespace ndnGlobalRoutingHelper.AddOrigins("/dst1", producer1); producerHelper.SetPrefix("/dst1"); producerHelper.Install(producer1); // Calculate and install FIBs ndn::GlobalRoutingHelper::CalculateRoutes(); Simulator::Stop(Seconds(3.0)); ndn::L3RateTracer::InstallAll("out1.txt",Seconds(0.5)); ndn::AppDelayTracer::InstallAll("out2.txt"); L2RateTracer::InstallAll("out3",Seconds(1)); Simulator::Run(); Simulator::Destroy(); return 0; } } // namespace ns3 int main(int argc, char* argv[]) { return ns3::main(argc, argv); }