static void PrintSizeVsRange (int argc, char *argv[]) { double targetPsr = 0.05; struct PsrExperiment::Input input; CommandLine cmd; cmd.AddValue ("TxPowerLevel", "The power level index to use to send each packet", input.txPowerLevel); cmd.AddValue ("TxMode", "The mode to use to send each packet", input.txMode); cmd.AddValue ("NPackets", "The number of packets to send", input.nPackets); cmd.AddValue ("TargetPsr", "The psr needed to assume that we are within range", targetPsr); cmd.Parse (argc, argv); for (input.packetSize = 10; input.packetSize < 3000; input.packetSize += 40) { double precision = 0.1; double low = 1.0; double high = 200.0; while (high - low > precision) { double middle = low + (high - low) / 2; struct PsrExperiment::Output output; PsrExperiment experiment; input.distance = middle; output = experiment.Run (input); double psr = CalcPsr (output, input); if (psr >= targetPsr) { low = middle; } else { high = middle; } } std::cout << input.packetSize << " " << input.distance << std::endl; } }
static void PrintPsrVsCollisionInterval (int argc, char *argv[]) { CollisionExperiment::Input input; input.nPackets = 100; CommandLine cmd; cmd.AddValue ("NPackets", "The number of packets to send for each transmitter", input.nPackets); cmd.AddValue ("xA", "the position of transmitter A", input.xA); cmd.AddValue ("xB", "the position of transmitter B", input.xB); for (uint32_t i = 0; i < 100; i += 1) { CollisionExperiment experiment; CollisionExperiment::Output output; input.interval = MicroSeconds (i); output = experiment.Run (input); double perA = (output.receivedA + 0.0) / (input.nPackets + 0.0); double perB = (output.receivedB + 0.0) / (input.nPackets + 0.0); std::cout << i << " " << perA << " " << perB << std::endl; } for (uint32_t i = 100; i < 4000; i += 50) { CollisionExperiment experiment; CollisionExperiment::Output output; input.interval = MicroSeconds (i); output = experiment.Run (input); double perA = (output.receivedA + 0.0) / (input.nPackets + 0.0); double perB = (output.receivedB + 0.0) / (input.nPackets + 0.0); std::cout << i << " " << perA << " " << perB << std::endl; } }
static void PrintPsrVsDistance (int argc, char *argv[]) { struct PsrExperiment::Input input; CommandLine cmd; cmd.AddValue ("TxPowerLevel", "The power level index to use to send each packet", input.txPowerLevel); cmd.AddValue ("TxMode", "The mode to use to send each packet", input.txMode); cmd.AddValue ("NPackets", "The number of packets to send", input.nPackets); cmd.AddValue ("PacketSize", "The size of each packet sent", input.packetSize); cmd.Parse (argc, argv); for (input.distance = 1.0; input.distance < 165; input.distance += 2.0) { std::cout << input.distance; PsrExperiment experiment; struct PsrExperiment::Output output; input.txMode = "OfdmRate6Mbps"; output = experiment.Run (input); std::cout << " " << CalcPsr (output, input); input.txMode = "OfdmRate9Mbps"; output = experiment.Run (input); std::cout << " " << CalcPsr (output, input); input.txMode = "OfdmRate12Mbps"; output = experiment.Run (input); std::cout << " " << CalcPsr (output, input); input.txMode = "OfdmRate18Mbps"; output = experiment.Run (input); std::cout << " " << CalcPsr (output, input); input.txMode = "OfdmRate24Mbps"; output = experiment.Run (input); std::cout << " " << CalcPsr (output, input); input.txMode = "OfdmRate36Mbps"; output = experiment.Run (input); std::cout << " " << CalcPsr (output, input); input.txMode = "OfdmRate48Mbps"; output = experiment.Run (input); std::cout << " " << CalcPsr (output, input); input.txMode = "OfdmRate54Mbps"; output = experiment.Run (input); std::cout << " " << CalcPsr (output, input); std::cout << std::endl; } }
bool AodvExample::Configure (int argc, char **argv) { // Enable AODV logs by default. Comment this if too noisy // LogComponentEnable("AodvRoutingProtocol", LOG_LEVEL_ALL); SeedManager::SetSeed (12345); CommandLine cmd; cmd.AddValue ("pcap", "Write PCAP traces.", pcap); cmd.AddValue ("printRoutes", "Print routing table dumps.", printRoutes); cmd.AddValue ("size", "Number of nodes.", size); cmd.AddValue ("time", "Simulation time, s.", totalTime); cmd.AddValue ("step", "Grid step, m", step); cmd.Parse (argc, argv); return true; }
int main (int argc, char *argv[]) { std::cout << std::endl; std::cout << "Hasher" << std::endl; bool timing = false; DictFiles files; CommandLine cmd; cmd.Usage ("Find hash collisions in the dictionary."); cmd.AddValue ("dict", "Dictionary file to hash", MakeCallback(&DictFiles::Add, &files)); cmd.AddValue ("time", "Run timing test", timing); cmd.Parse (argc, argv); Dictionary dict; dict.Add ( Collider ("FNV1a", Hasher ( Create<Hash::Function::Fnv1a> () ), Collider::Bits32)); dict.Add ( Collider ("FNV1a", Hasher ( Create<Hash::Function::Fnv1a> () ), Collider::Bits64)); dict.Add ( Collider ("Murmur3", Hasher ( Create<Hash::Function::Murmur3> () ), Collider::Bits32)); dict.Add ( Collider ("Murmur3", Hasher ( Create<Hash::Function::Murmur3> () ), Collider::Bits64)); files.ReadInto (dict); dict.Report (); if (timing) { dict.Time (); } // if (timing) } // main
static void PrintPsr (int argc, char *argv[]) { PsrExperiment experiment; struct PsrExperiment::Input input; CommandLine cmd; cmd.AddValue ("Distance", "The distance between two phys", input.distance); cmd.AddValue ("PacketSize", "The size of each packet sent", input.packetSize); cmd.AddValue ("TxMode", "The mode to use to send each packet", input.txMode); cmd.AddValue ("NPackets", "The number of packets to send", input.nPackets); cmd.AddValue ("TxPowerLevel", "The power level index to use to send each packet", input.txPowerLevel); cmd.Parse (argc, argv); struct PsrExperiment::Output output; output = experiment.Run (input); double psr = output.received; psr /= input.nPackets; std::cout << psr << std::endl; }
int main(int argc, char* argv[]) { std::string fof = "fof.txt"; std::string dropFileName = "drops.txt"; std::string topologyFile = "src/ndnSIM/examples/topologies/topo-tree.txt"; std::string appDelayFile = "app-delays-trace.txt"; std::string rateTraceFile = "rate-trace.txt"; std::string percentage = "1.0"; std::string frequency = "1"; int simulationTime = 1000; CommandLine cmd; cmd.AddValue("fof", "forwarder overhead file", fof); cmd.AddValue("time", "simulation time argument", simulationTime); cmd.AddValue("top", "topology file", topologyFile); cmd.AddValue("drop", "bead drop file", dropFileName); cmd.AddValue("appd", "app delay file", appDelayFile); cmd.AddValue("rate", "rate trace file", rateTraceFile); cmd.AddValue("percentage", "bead percentage", percentage); cmd.AddValue("freq", "bead frequency", frequency); cmd.Parse(argc, argv); delayFile.open(fof); dropFile.open(dropFileName); AnnotatedTopologyReader topologyReader("", 1); topologyReader.SetFileName(topologyFile); topologyReader.Read(); ndn::StackHelper ndnHelper; ndnHelper.InstallAll(); // Getting containers for the consumer/producer Ptr<Node> consumers[4] = {Names::Find<Node>("leaf-1"), Names::Find<Node>("leaf-2"), Names::Find<Node>("leaf-3"), Names::Find<Node>("leaf-4")}; Ptr<Node> routers[2] = {Names::Find<Node>("rtr-1"), Names::Find<Node>("rtr-2")}; // Ptr<Node> producers[2] = {Names::Find<Node>("root-1"), Names::Find<Node>("root-2")}; Ptr<Node> producer = Names::Find<Node>("root-1"); // Choosing forwarding strategy ndn::StrategyChoiceHelper::InstallAll("/root", "/localhost/nfd/strategy/best-route"); // Installing global routing interface on all nodes ndn::GlobalRoutingHelper ndnGlobalRoutingHelper; ndnGlobalRoutingHelper.InstallAll(); // Install NDN on routers ndn::StackHelper ndnHelperWithCache; ndnHelperWithCache.SetDefaultRoutes(true); ndnHelperWithCache.SetOldContentStore("ns3::ndn::cs::Freshness::Lru", "MaxSize", "0"); ndnHelperWithCache.InstallCallback(routers[0], (size_t)&ForwardingDelay, 0); ndnHelperWithCache.InstallBeadDropCallback(routers[0], (size_t)&BeadDropCallback, 0); ndnHelperWithCache.SetUseHistory(routers[0], 100); ndnHelperWithCache.InstallCallback(routers[1], (size_t)&ForwardingDelay, 1); ndnHelperWithCache.InstallBeadDropCallback(routers[1], (size_t)&BeadDropCallback, 1); ndnHelperWithCache.SetUseHistory(routers[0], 100); ndn::AppHelper consumerHelper("ns3::ndn::ConsumerCbr"); // Consumer will request /prefix/0, /prefix/1, ... consumerHelper.SetPrefix("/root"); consumerHelper.SetAttribute("Frequency", StringValue("10")); // 10 interests a second consumerHelper.Install(consumers[0]); consumerHelper.Install(consumers[1]); consumerHelper.Install(consumers[2]); ndn::AppHelper producerHelper("ns3::ndn::Producer"); producerHelper.SetAttribute("PayloadSize", StringValue("1024")); producerHelper.SetAttribute("Frequency", StringValue(frequency)); // 1 BEAD every second producerHelper.SetAttribute("Percentage", StringValue(percentage)); // Register /root prefix with global routing controller and // install producer that will satisfy Interests in /root namespace ndnGlobalRoutingHelper.AddOrigins("/root", producer); producerHelper.SetPrefix("/root"); producerHelper.Install(producer).Start(Seconds(0)); producerHelper.Install(producer).Start(Seconds(0)); ndnHelperWithCache.InstallCallback(producer, (size_t)&ForwardingDelay, 2); // ndnGlobalRoutingHelper.AddOrigins("/root/nonbead", producers[1]); // producerHelper.SetPrefix("/root/nonbead"); // producerHelper.Install(producers[1]).Start(Seconds(9)); // Calculate and install FIBs ndn::GlobalRoutingHelper::CalculateRoutes(); Simulator::Stop(Seconds(simulationTime)); ndn::AppDelayTracer::InstallAll(appDelayFile); ndn::L3RateTracer::InstallAll(rateTraceFile, Seconds(0.5)); Simulator::Run(); Simulator::Destroy(); delayFile.flush(); delayFile.close(); dropFile.flush(); dropFile.close(); return 0; }
int main (int argc, char *argv[]) { std::string phyMode ("DsssRate1Mbps"); double rss = -80; // -dBm uint32_t packetSize = 1000; // bytes uint32_t numPackets = 1; double interval = 1.0; // seconds bool verbose = false; CommandLine cmd; cmd.AddValue ("phyMode", "Wifi Phy mode", phyMode); cmd.AddValue ("rss", "received signal strength", rss); cmd.AddValue ("packetSize", "size of application packet sent", packetSize); cmd.AddValue ("numPackets", "number of packets generated", numPackets); cmd.AddValue ("interval", "interval (seconds) between packets", interval); cmd.AddValue ("verbose", "turn on all WifiNetDevice log components", verbose); cmd.Parse (argc, argv); // Convert to time object Time interPacketInterval = Seconds (interval); // disable fragmentation for frames below 2200 bytes Config::SetDefault ("ns3::WifiRemoteStationManager::FragmentationThreshold", StringValue ("2200")); // turn off RTS/CTS for frames below 2200 bytes Config::SetDefault ("ns3::WifiRemoteStationManager::RtsCtsThreshold", StringValue ("2200")); // Fix non-unicast data rate to be the same as that of unicast Config::SetDefault ("ns3::WifiRemoteStationManager::NonUnicastMode", StringValue (phyMode)); NodeContainer c; c.Create (2); // The below set of helpers will help us to put together the wifi NICs we want WifiHelper wifi; if (verbose) { wifi.EnableLogComponents (); // Turn on all Wifi logging } wifi.SetStandard (WIFI_PHY_STANDARD_80211b); YansWifiPhyHelper wifiPhy = YansWifiPhyHelper::Default (); // This is one parameter that matters when using FixedRssLossModel // set it to zero; otherwise, gain will be added wifiPhy.Set ("RxGain", DoubleValue (0) ); // ns-3 supports RadioTap and Prism tracing extensions for 802.11b wifiPhy.SetPcapDataLinkType (YansWifiPhyHelper::DLT_IEEE802_11_RADIO); YansWifiChannelHelper wifiChannel; wifiChannel.SetPropagationDelay ("ns3::ConstantSpeedPropagationDelayModel"); // The below FixedRssLossModel will cause the rss to be fixed regardless // of the distance between the two stations, and the transmit power wifiChannel.AddPropagationLoss ("ns3::FixedRssLossModel","Rss",DoubleValue (rss)); wifiPhy.SetChannel (wifiChannel.Create ()); // Add a non-QoS upper mac, and disable rate control NqosWifiMacHelper wifiMac = NqosWifiMacHelper::Default (); wifi.SetRemoteStationManager ("ns3::ConstantRateWifiManager", "DataMode",StringValue (phyMode), "ControlMode",StringValue (phyMode)); // Set it to adhoc mode wifiMac.SetType ("ns3::AdhocWifiMac"); NetDeviceContainer devices = wifi.Install (wifiPhy, wifiMac, c); // Note that with FixedRssLossModel, the positions below are not // used for received signal strength. MobilityHelper mobility; Ptr<ListPositionAllocator> positionAlloc = CreateObject<ListPositionAllocator> (); positionAlloc->Add (Vector (0.0, 0.0, 0.0)); positionAlloc->Add (Vector (5.0, 0.0, 0.0)); mobility.SetPositionAllocator (positionAlloc); mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel"); mobility.Install (c); InternetStackHelper internet; internet.Install (c); Ipv4AddressHelper ipv4; NS_LOG_INFO ("Assign IP Addresses."); ipv4.SetBase ("10.1.1.0", "255.255.255.0"); Ipv4InterfaceContainer i = ipv4.Assign (devices); TypeId tid = TypeId::LookupByName ("ns3::UdpSocketFactory"); Ptr<Socket> recvSink = Socket::CreateSocket (c.Get (0), tid); InetSocketAddress local = InetSocketAddress (Ipv4Address::GetAny (), 80); recvSink->Bind (local); recvSink->SetRecvCallback (MakeCallback (&ReceivePacket)); Ptr<Socket> source = Socket::CreateSocket (c.Get (1), tid); InetSocketAddress remote = InetSocketAddress (Ipv4Address ("255.255.255.255"), 80); source->SetAllowBroadcast (true); source->Connect (remote); // Tracing wifiPhy.EnablePcap ("wifi-simple-adhoc", devices); // Output what we are doing NS_LOG_UNCOND ("Testing " << numPackets << " packets sent with receiver rss " << rss ); Simulator::ScheduleWithContext (source->GetNode ()->GetId (), Seconds (1.0), &GenerateTraffic, source, packetSize, numPackets, interPacketInterval); Simulator::Run (); Simulator::Destroy (); return 0; }
int main(int argc, char* argv[]) { // setting default parameters for PointToPoint links and channels Config::SetDefault("ns3::PointToPointNetDevice::DataRate", StringValue("10Mbps")); Config::SetDefault("ns3::PointToPointChannel::Delay", StringValue("1ms")); Config::SetDefault("ns3::DropTailQueue::MaxPackets", StringValue("100")); uint64_t catalogCardinality = 0; // Estimated Content Catalog Cardinality. double cacheToCatalogRatio = 0.01; // Cache to Catalog Ratio per each node. uint32_t lambda = 1; // Request rate per each client. double alpha = 1; // Zipf's Exponent double plateau = 0; // q parameter for the ZipfMandelbrot distribution std::string simType = ""; // Simulation Type Description uint32_t simDuration = 100; uint32_t numReqTot = 10000; // Total number of requests inside the simulation. // Read optional command-line parameters CommandLine cmd; cmd.AddValue ("catalogCardinality", "Estimated Content Catalog Cardinality.", catalogCardinality); cmd.AddValue ("cacheToCatalogRatio", "Cache to Catalog Ratio per each node.", cacheToCatalogRatio); cmd.AddValue ("lambda", "Request rate per each client.", lambda); cmd.AddValue ("alpha", "Zipf's Exponent", alpha); cmd.AddValue ("plateau", "q parameter for the ZipfMandelbrot distribution", plateau); cmd.AddValue ("simType", "Simulation Type Description", simType); cmd.AddValue ("simDuration", "Length of the simulation, in seconds.", simDuration); cmd.AddValue ("numReqTot", "Total number of requests during the simulation", numReqTot); cmd.Parse (argc, argv); std::string catalogCardinalityStr, lambdaStr, alphaStr, plateauStr,reqStr; std::stringstream ss; ss << catalogCardinality; catalogCardinalityStr = ss.str(); ss.str(""); ss << lambda; lambdaStr = ss.str(); ss.str(""); ss << alpha; alphaStr = ss.str(); ss.str(""); ss << plateau; plateauStr = ss.str(); ss.str(""); ss << numReqTot; reqStr = ss.str(); ss.str(""); // ********** Getting the simulation run ********** uint64_t simRun = SeedManager::GetRun(); uint64_t simRunOut = simRun - 1; std::string simRunStr; ss << simRun; simRunStr = ss.str(); ss.str(""); //NS_LOG_UNCOND("M=" << catalogCardinality << "\nC=" << cacheToCatalogRatio << "\nL=" << lambda // << "\nT=" << simType << "\nA=" << alpha << "\nR=" << simRun); // ********** Calculate the Cache Size per each cache *********** uint32_t cacheSize = round((double)catalogCardinality * cacheToCatalogRatio); ss << cacheSize; std::string cacheSizeStr = ss.str(); ss.str(""); // Creating nodes NodeContainer nodes; //nodes.Create(3); nodes.Create(1); // Connecting nodes using two links //PointToPointHelper p2p; //p2p.Install(nodes.Get(0), nodes.Get(1)); //p2p.Install(nodes.Get(1), nodes.Get(2)); // Install NDN stack on all nodes ndn::StackHelper ndnHelper; ndnHelper.SetDefaultRoutes(true); //ndnHelper.InstallAll(); //ndnHelper.SetOldContentStore("ns3::ndn::cs::Nocache"); //ndnHelper.Install(nodes.Get(0)); // Consumer //ndnHelper.Install(nodes.Get(2)); // Producer ndnHelper.SetOldContentStore("ns3::ndn::cs::Lru", "MaxSize", cacheSizeStr); //ndnHelper.Install(nodes.Get(1)); // Router ndnHelper.Install(nodes.Get(0)); // Router // Choosing forwarding strategy ndn::StrategyChoiceHelper::InstallAll("/prefix", "/localhost/nfd/strategy/broadcast"); // Installing applications // Consumer ndn::AppHelper consumerHelper("ns3::ndn::ConsumerZipfMandelbrot"); // Consumer will request /prefix/0, /prefix/1, ... consumerHelper.SetPrefix("/prefix"); consumerHelper.SetAttribute ("Frequency", StringValue(lambdaStr)); // lambda Interest per second consumerHelper.SetAttribute ("NumberOfContents", StringValue (catalogCardinalityStr)); consumerHelper.SetAttribute ("Randomize", StringValue ("exponential")); consumerHelper.SetAttribute ("q", StringValue (plateauStr)); // q paremeter consumerHelper.SetAttribute ("s", StringValue (alphaStr)); // Zipf's exponent consumerHelper.Install(nodes.Get(0)); // first node // Producer ndn::AppHelper producerHelper("ns3::ndn::Producer"); // Producer will reply to all requests starting with /prefix producerHelper.SetPrefix("/prefix"); producerHelper.SetAttribute("PayloadSize", StringValue("1024")); //producerHelper.Install(nodes.Get(2)); // last node producerHelper.Install(nodes.Get(0)); // last node Simulator::Stop (Seconds (simDuration)); Simulator::Run(); Simulator::Destroy(); return 0; }
int main (int argc, char *argv[]) { // // Users may find it convenient to turn on explicit debugging // for selected modules; the below lines suggest how to do this // #if 0 LogComponentEnable ("UdpEchoExample", LOG_LEVEL_INFO); LogComponentEnable ("UdpEchoClientApplication", LOG_LEVEL_ALL); LogComponentEnable ("UdpEchoServerApplication", LOG_LEVEL_ALL); #endif // // Allow the user to override any of the defaults and the above Bind() at // run-time, via command-line arguments // bool useV6 = false; Address serverAddress; CommandLine cmd; cmd.AddValue ("useIpv6", "Use Ipv6", useV6); cmd.Parse (argc, argv); // // Explicitly create the nodes required by the topology (shown above). // NS_LOG_INFO ("Create nodes."); NodeContainer n; n.Create (4); InternetStackHelper internet; internet.Install (n); NS_LOG_INFO ("Create channels."); // // Explicitly create the channels required by the topology (shown above). // CsmaHelper csma; csma.SetChannelAttribute ("DataRate", DataRateValue (DataRate (5000000))); csma.SetChannelAttribute ("Delay", TimeValue (MilliSeconds (2))); csma.SetDeviceAttribute ("Mtu", UintegerValue (1400)); NetDeviceContainer d = csma.Install (n); // // We've got the "hardware" in place. Now we need to add IP addresses. // NS_LOG_INFO ("Assign IP Addresses."); if (useV6 == false) { Ipv4AddressHelper ipv4; ipv4.SetBase ("10.1.1.0", "255.255.255.0"); Ipv4InterfaceContainer i = ipv4.Assign (d); serverAddress = Address(i.GetAddress (1)); } else { Ipv6AddressHelper ipv6; ipv6.SetBase ("2001:0000:f00d:cafe::", Ipv6Prefix (64)); Ipv6InterfaceContainer i6 = ipv6.Assign (d); serverAddress = Address(i6.GetAddress (1,1)); } NS_LOG_INFO ("Create Applications."); // // Create a UdpEchoServer application on node one. // uint16_t port = 9; // well-known echo port number UdpEchoServerHelper server (port); ApplicationContainer apps = server.Install (n.Get (1)); apps.Start (Seconds (1.0)); apps.Stop (Seconds (10.0)); // // Create a UdpEchoClient application to send UDP datagrams from node zero to // node one. // uint32_t packetSize = 1024; uint32_t maxPacketCount = 1; Time interPacketInterval = Seconds (1.); UdpEchoClientHelper client (serverAddress, port); client.SetAttribute ("MaxPackets", UintegerValue (maxPacketCount)); client.SetAttribute ("Interval", TimeValue (interPacketInterval)); client.SetAttribute ("PacketSize", UintegerValue (packetSize)); apps = client.Install (n.Get (0)); apps.Start (Seconds (2.0)); apps.Stop (Seconds (10.0)); #if 0 // // Users may find it convenient to initialize echo packets with actual data; // the below lines suggest how to do this // client.SetFill (apps.Get (0), "Hello World"); client.SetFill (apps.Get (0), 0xa5, 1024); uint8_t fill[] = { 0, 1, 2, 3, 4, 5, 6}; client.SetFill (apps.Get (0), fill, sizeof(fill), 1024); #endif AsciiTraceHelper ascii; csma.EnableAsciiAll (ascii.CreateFileStream ("udp-echo.tr")); csma.EnablePcapAll ("udp-echo", false); // // Now, do the actual simulation. // NS_LOG_INFO ("Run Simulation."); Simulator::Run (); Simulator::Destroy (); NS_LOG_INFO ("Done."); }
int main (int argc, char *argv[]) { uint32_t packetSize = 1000; // Application bytes per packet double interval = 1.0; // Time between events uint32_t generationSize = 5; // RLNC generation size double errorRate = 0.3; // Error rate for all the links Time interPacketInterval = Seconds (interval); CommandLine cmd; cmd.AddValue ("packetSize", "Size of application packet sent", packetSize); cmd.AddValue ("interval", "Interval (seconds) between packets", interval); cmd.AddValue ("generationSize", "Set the generation size to use", generationSize); cmd.AddValue ("errorRate", "Packet erasure rate for the links", errorRate); cmd.Parse (argc, argv); Time::SetResolution (Time::NS); // Set the basic helper for a single link PointToPointHelper pointToPoint; // Two receivers against a centralized hub. Note: DO NOT CHANGE THIS LINE PointToPointStarHelper star (2, pointToPoint); // Set error model for the net devices Config::SetDefault ("ns3::RateErrorModel::ErrorUnit", StringValue ("ERROR_UNIT_PACKET")); Ptr<RateErrorModel> error_model = CreateObject<RateErrorModel> (); error_model->SetAttribute ("ErrorRate", DoubleValue (errorRate)); star.GetSpokeNode (0)->GetDevice (0)-> SetAttribute ("ReceiveErrorModel", PointerValue (error_model)); star.GetSpokeNode (1)->GetDevice (0)-> SetAttribute ("ReceiveErrorModel", PointerValue (error_model)); error_model->Enable (); // Setting IP protocol stack InternetStackHelper internet; star.InstallStack(internet); // Set IP addresses star.AssignIpv4Addresses (Ipv4AddressHelper ("10.1.1.0", "255.255.255.0")); // Creation of RLNC encoder and decoder objects rlnc_encoder::factory encoder_factory(generationSize, packetSize); rlnc_decoder::factory decoder_factory(generationSize, packetSize); // The member build function creates differents instances of each object KodoSimulation kodoSimulator(encoder_factory.build(), decoder_factory.build(), decoder_factory.build()); // Setting up application sockets for receivers and senders uint16_t port = 80; TypeId tid = TypeId::LookupByName ("ns3::UdpSocketFactory"); InetSocketAddress local = InetSocketAddress (Ipv4Address::GetAny (), port); // Receivers Ptr<Socket> recvSink1 = Socket::CreateSocket (star.GetSpokeNode (0), tid); recvSink1->Bind (local); recvSink1->SetRecvCallback (MakeCallback (&KodoSimulation::ReceivePacket1, &kodoSimulator)); Ptr<Socket> recvSink2 = Socket::CreateSocket (star.GetSpokeNode (1), tid); recvSink2->Bind (local); recvSink2->SetRecvCallback (MakeCallback (&KodoSimulation::ReceivePacket2, &kodoSimulator)); // Sender Ptr<Socket> source = Socket::CreateSocket (star.GetHub (), tid); InetSocketAddress remote = InetSocketAddress (Ipv4Address ("255.255.255.255"), port); source->SetAllowBroadcast (true); source->Connect (remote); // Turn on global static routing so we can actually be routed across the star Ipv4GlobalRoutingHelper::PopulateRoutingTables (); // Do pcap tracing on all point-to-point devices on all nodes pointToPoint.EnablePcapAll ("star"); Simulator::ScheduleWithContext (source->GetNode ()->GetId (), Seconds (1.0), &KodoSimulation::GenerateTraffic, &kodoSimulator, source, interPacketInterval); Simulator::Run (); Simulator::Destroy (); return 0; }
int main (int argc, char *argv[]) { std::string mode = "ConfigureLocal"; std::string tapName = "thetap"; CommandLine cmd; cmd.AddValue ("mode", "Mode setting of TapBridge", mode); cmd.AddValue ("tapName", "Name of the OS tap device", tapName); cmd.Parse (argc, argv); GlobalValue::Bind ("SimulatorImplementationType", StringValue ("ns3::RealtimeSimulatorImpl")); GlobalValue::Bind ("ChecksumEnabled", BooleanValue (true)); // // The topology has a Wifi network of four nodes on the left side. We'll make // node zero the AP and have the other three will be the STAs. // NodeContainer nodesLeft; nodesLeft.Create (4); YansWifiPhyHelper wifiPhy = YansWifiPhyHelper::Default (); YansWifiChannelHelper wifiChannel = YansWifiChannelHelper::Default (); wifiPhy.SetChannel (wifiChannel.Create ()); Ssid ssid = Ssid ("left"); WifiHelper wifi = WifiHelper::Default (); NqosWifiMacHelper wifiMac = NqosWifiMacHelper::Default (); wifi.SetRemoteStationManager ("ns3::ArfWifiManager"); wifiMac.SetType ("ns3::ApWifiMac", "Ssid", SsidValue (ssid)); NetDeviceContainer devicesLeft = wifi.Install (wifiPhy, wifiMac, nodesLeft.Get (0)); wifiMac.SetType ("ns3::StaWifiMac", "Ssid", SsidValue (ssid), "ActiveProbing", BooleanValue (false)); devicesLeft.Add (wifi.Install (wifiPhy, wifiMac, NodeContainer (nodesLeft.Get (1), nodesLeft.Get (2), nodesLeft.Get (3)))); MobilityHelper mobility; mobility.Install (nodesLeft); InternetStackHelper internetLeft; internetLeft.Install (nodesLeft); Ipv4AddressHelper ipv4Left; ipv4Left.SetBase ("10.1.1.0", "255.255.255.0"); Ipv4InterfaceContainer interfacesLeft = ipv4Left.Assign (devicesLeft); TapBridgeHelper tapBridge (interfacesLeft.GetAddress (1)); tapBridge.SetAttribute ("Mode", StringValue (mode)); tapBridge.SetAttribute ("DeviceName", StringValue (tapName)); tapBridge.Install (nodesLeft.Get (0), devicesLeft.Get (0)); // // Now, create the right side. // NodeContainer nodesRight; nodesRight.Create (4); CsmaHelper csmaRight; csmaRight.SetChannelAttribute ("DataRate", DataRateValue (5000000)); csmaRight.SetChannelAttribute ("Delay", TimeValue (MilliSeconds (2))); NetDeviceContainer devicesRight = csmaRight.Install (nodesRight); InternetStackHelper internetRight; internetRight.Install (nodesRight); Ipv4AddressHelper ipv4Right; ipv4Right.SetBase ("10.1.3.0", "255.255.255.0"); Ipv4InterfaceContainer interfacesRight = ipv4Right.Assign (devicesRight); // // Stick in the point-to-point line between the sides. // PointToPointHelper p2p; p2p.SetDeviceAttribute ("DataRate", StringValue ("512kbps")); p2p.SetChannelAttribute ("Delay", StringValue ("10ms")); NodeContainer nodes = NodeContainer (nodesLeft.Get (3), nodesRight.Get (0)); NetDeviceContainer devices = p2p.Install (nodes); Ipv4AddressHelper ipv4; ipv4.SetBase ("10.1.2.0", "255.255.255.192"); Ipv4InterfaceContainer interfaces = ipv4.Assign (devices); // // Simulate some CBR traffic over the point-to-point link // uint16_t port = 9; // Discard port (RFC 863) OnOffHelper onoff ("ns3::UdpSocketFactory", InetSocketAddress (interfaces.GetAddress (1), port)); onoff.SetConstantRate (DataRate ("500kb/s")); ApplicationContainer apps = onoff.Install (nodesLeft.Get (3)); apps.Start (Seconds (1.0)); // Create a packet sink to receive these packets PacketSinkHelper sink ("ns3::UdpSocketFactory", InetSocketAddress (Ipv4Address::GetAny (), port)); apps = sink.Install (nodesRight.Get (0)); apps.Start (Seconds (1.0)); wifiPhy.EnablePcapAll ("tap-wifi-dumbbell"); csmaRight.EnablePcapAll ("tap-wifi-dumbbell", false); Ipv4GlobalRoutingHelper::PopulateRoutingTables (); Simulator::Stop (Seconds (60.)); Simulator::Run (); Simulator::Destroy (); }
int main (int argc, char *argv[]) { // // Set up some default values for the simulation. // Config::SetDefault ("ns3::OnOffApplication::PacketSize", UintegerValue (137)); // ??? try and stick 15kb/s into the data rate Config::SetDefault ("ns3::OnOffApplication::DataRate", StringValue ("14kb/s")); // // Default number of nodes in the star. Overridable by command line argument. // uint32_t nSpokes = 8; CommandLine cmd; cmd.AddValue ("nSpokes", "Number of nodes to place in the star", nSpokes); cmd.Parse (argc, argv); NS_LOG_INFO ("Build star topology."); PointToPointHelper pointToPoint; pointToPoint.SetDeviceAttribute ("DataRate", StringValue ("5Mbps")); pointToPoint.SetChannelAttribute ("Delay", StringValue ("2ms")); PointToPointStarHelper star (nSpokes, pointToPoint); NS_LOG_INFO ("Install internet stack on all nodes."); InternetStackHelper internet; star.InstallStack (internet); NS_LOG_INFO ("Assign IP Addresses."); star.AssignIpv4Addresses (Ipv4AddressHelper ("10.1.1.0", "255.255.255.0")); NS_LOG_INFO ("Create applications."); // // Create a packet sink on the star "hub" to receive packets. // uint16_t port = 50000; Address hubLocalAddress (InetSocketAddress (Ipv4Address::GetAny (), port)); PacketSinkHelper packetSinkHelper ("ns3::TcpSocketFactory", hubLocalAddress); ApplicationContainer hubApp = packetSinkHelper.Install (star.GetHub ()); hubApp.Start (Seconds (1.0)); hubApp.Stop (Seconds (10.0)); // // Create OnOff applications to send TCP to the hub, one on each spoke node. // OnOffHelper onOffHelper ("ns3::TcpSocketFactory", Address ()); onOffHelper.SetAttribute ("OnTime", StringValue ("ns3::ConstantRandomVariable[Constant=1]")); onOffHelper.SetAttribute ("OffTime", StringValue ("ns3::ConstantRandomVariable[Constant=0]")); ApplicationContainer spokeApps; for (uint32_t i = 0; i < star.SpokeCount (); ++i) { AddressValue remoteAddress (InetSocketAddress (star.GetHubIpv4Address (i), port)); onOffHelper.SetAttribute ("Remote", remoteAddress); spokeApps.Add (onOffHelper.Install (star.GetSpokeNode (i))); } spokeApps.Start (Seconds (1.0)); spokeApps.Stop (Seconds (10.0)); NS_LOG_INFO ("Enable static global routing."); // // Turn on global static routing so we can actually be routed across the star. // Ipv4GlobalRoutingHelper::PopulateRoutingTables (); NS_LOG_INFO ("Enable pcap tracing."); // // Do pcap tracing on all point-to-point devices on all nodes. // pointToPoint.EnablePcapAll ("star"); NS_LOG_INFO ("Run Simulation."); Simulator::Run (); Simulator::Destroy (); NS_LOG_INFO ("Done."); return 0; }
int main (int argc, char *argv[]) { uint32_t packetSize = 1000; // Application bytes per packet double interval = 1.0; // Time between events uint32_t generationSize = 3; // RLNC generation size double errorRateEncoderRecoder = 0.4; // Error rate for encoder-recoder link double errorRateRecoderDecoder = 0.2; // Error rate for recoder-decoder link bool recodingFlag = true; // Flag to control recoding Time interPacketInterval = Seconds (interval); CommandLine cmd; cmd.AddValue ("packetSize", "Size of application packet sent", packetSize); cmd.AddValue ("interval", "Interval (seconds) between packets", interval); cmd.AddValue ("generationSize", "Set the generation size to use", generationSize); cmd.AddValue ("errorRateEncoderRecoder", "Packet erasure rate for the encoder-recoder link", errorRateEncoderRecoder); cmd.AddValue ("errorRateRecoderDecoder", "Packet erasure rate for the recoder-decoder link", errorRateRecoderDecoder); cmd.AddValue ("recodingFlag", "Enable packet recoding", recodingFlag); cmd.Parse (argc, argv); Time::SetResolution (Time::NS); // Set the basic helper for a single link PointToPointHelper pointToPoint; // Create node containers NodeContainer nodes; nodes.Create (3); NodeContainer encoderRecoder = NodeContainer (nodes.Get (0), nodes.Get (1)); NodeContainer recoderDecoder = NodeContainer (nodes.Get (1), nodes.Get (2)); // Internet stack for the nodes InternetStackHelper internet; internet.Install (nodes); // Create net device containers NetDeviceContainer encoderRecoderDevs = pointToPoint.Install (encoderRecoder); NetDeviceContainer recoderDecoderDevs = pointToPoint.Install (recoderDecoder); NetDeviceContainer devices = NetDeviceContainer (encoderRecoderDevs, recoderDecoderDevs); // Set IP addresses Ipv4AddressHelper ipv4("10.1.1.0", "255.255.255.0"); ipv4.Assign (devices); // Turn on global static routing so we can actually be routed across the hops Ipv4GlobalRoutingHelper::PopulateRoutingTables (); // Do pcap tracing on all point-to-point devices on all nodes. File naming // convention is: multihop-[NODE_NUMBER]-[DEVICE_NUMBER].pcap pointToPoint.EnablePcapAll ("multihop"); // Set error model for the net devices Config::SetDefault ("ns3::RateErrorModel::ErrorUnit", StringValue ("ERROR_UNIT_PACKET")); Ptr<RateErrorModel> errorEncoderRecoder = CreateObject<RateErrorModel> (); errorEncoderRecoder->SetAttribute ("ErrorRate", DoubleValue (errorRateEncoderRecoder)); devices.Get (1)->SetAttribute ("ReceiveErrorModel", PointerValue (errorEncoderRecoder)); Ptr<RateErrorModel> errorRecoderDecoder = CreateObject<RateErrorModel> (); errorRecoderDecoder->SetAttribute ("ErrorRate", DoubleValue (errorRateRecoderDecoder)); devices.Get (3)->SetAttribute ("ReceiveErrorModel", PointerValue (errorRecoderDecoder)); errorEncoderRecoder->Enable (); errorRecoderDecoder->Enable (); // Creation of RLNC encoder and decoder objects rlnc_encoder::factory encoder_factory(generationSize, packetSize); rlnc_decoder::factory decoder_factory(generationSize, packetSize); // The member build function creates differents instances of each object KodoSimulation kodoSimulator(encoder_factory.build(), decoder_factory.build(), decoder_factory.build(), recodingFlag); // Setting up application sockets for recoder and decoder uint16_t port = 80; TypeId tid = TypeId::LookupByName ("ns3::UdpSocketFactory"); // Get node Ipv4 addresses Ipv4Address recoderAddress = nodes.Get (1)->GetObject<Ipv4>()-> GetAddress(1,0).GetLocal(); Ipv4Address decoderAddress = nodes.Get (2)->GetObject<Ipv4>()-> GetAddress(1,0).GetLocal(); // Socket connection addresses InetSocketAddress recoderSocketAddress = InetSocketAddress (recoderAddress, port); InetSocketAddress decoderSocketAddress = InetSocketAddress (decoderAddress, port); // Socket bind address InetSocketAddress local = InetSocketAddress (Ipv4Address::GetAny(), port); // Encoder Ptr<Socket> encoderSocket = Socket::CreateSocket (nodes.Get (0), tid); encoderSocket->Connect (recoderSocketAddress); // Recoder Ptr<Socket> recoderSocket = Socket::CreateSocket (nodes.Get (1), tid); recoderSocket->Bind(local); recoderSocket->Connect (decoderSocketAddress); recoderSocket-> SetRecvCallback (MakeCallback (&KodoSimulation::ReceivePacketRecoder, &kodoSimulator)); // Decoder Ptr<Socket> decoderSocket = Socket::CreateSocket (nodes.Get (2), tid); decoderSocket->Bind(local); decoderSocket-> SetRecvCallback (MakeCallback (&KodoSimulation::ReceivePacketDecoder, &kodoSimulator)); // Simulation setup // Schedule encoding process Simulator::ScheduleWithContext (encoderSocket->GetNode ()->GetId (), Seconds (1.0), &KodoSimulation::SendPacketEncoder, &kodoSimulator, encoderSocket, interPacketInterval); Simulator::ScheduleWithContext (recoderSocket->GetNode ()->GetId (), Seconds (1.5), &KodoSimulation::SendPacketRecoder, &kodoSimulator, recoderSocket, interPacketInterval); Simulator::Run (); Simulator::Destroy (); return 0; }
int main (int argc, char *argv[]) { std::string phyMode ("DsssRate1Mbps"); double distance = 500; // m uint32_t packetSize = 1000; // bytes uint32_t numPackets = 1; uint32_t numNodes = 25; // by default, 5x5 uint32_t sinkNode = 0; uint32_t sourceNode = 24; double interval = 1.0; // seconds bool verbose = false; bool tracing = false; CommandLine cmd; cmd.AddValue ("phyMode", "Wifi Phy mode", phyMode); cmd.AddValue ("distance", "distance (m)", distance); cmd.AddValue ("packetSize", "size of application packet sent", packetSize); cmd.AddValue ("numPackets", "number of packets generated", numPackets); cmd.AddValue ("interval", "interval (seconds) between packets", interval); cmd.AddValue ("verbose", "turn on all WifiNetDevice log components", verbose); cmd.AddValue ("tracing", "turn on ascii and pcap tracing", tracing); cmd.AddValue ("numNodes", "number of nodes", numNodes); cmd.AddValue ("sinkNode", "Receiver node number", sinkNode); cmd.AddValue ("sourceNode", "Sender node number", sourceNode); cmd.Parse (argc, argv); // Convert to time object Time interPacketInterval = Seconds (interval); // disable fragmentation for frames below 2200 bytes Config::SetDefault ("ns3::WifiRemoteStationManager::FragmentationThreshold", StringValue ("2200")); // turn off RTS/CTS for frames below 2200 bytes Config::SetDefault ("ns3::WifiRemoteStationManager::RtsCtsThreshold", StringValue ("2200")); // Fix non-unicast data rate to be the same as that of unicast Config::SetDefault ("ns3::WifiRemoteStationManager::NonUnicastMode", StringValue (phyMode)); NodeContainer c; c.Create (numNodes); // The below set of helpers will help us to put together the wifi NICs we want WifiHelper wifi; if (verbose) { wifi.EnableLogComponents (); // Turn on all Wifi logging } YansWifiPhyHelper wifiPhy = YansWifiPhyHelper::Default (); // set it to zero; otherwise, gain will be added wifiPhy.Set ("RxGain", DoubleValue (-10) ); // ns-3 supports RadioTap and Prism tracing extensions for 802.11b wifiPhy.SetPcapDataLinkType (YansWifiPhyHelper::DLT_IEEE802_11_RADIO); YansWifiChannelHelper wifiChannel; wifiChannel.SetPropagationDelay ("ns3::ConstantSpeedPropagationDelayModel"); wifiChannel.AddPropagationLoss ("ns3::FriisPropagationLossModel"); wifiPhy.SetChannel (wifiChannel.Create ()); // Add a non-QoS upper mac, and disable rate control NqosWifiMacHelper wifiMac = NqosWifiMacHelper::Default (); wifi.SetStandard (WIFI_PHY_STANDARD_80211b); wifi.SetRemoteStationManager ("ns3::ConstantRateWifiManager", "DataMode",StringValue (phyMode), "ControlMode",StringValue (phyMode)); // Set it to adhoc mode wifiMac.SetType ("ns3::AdhocWifiMac"); NetDeviceContainer devices = wifi.Install (wifiPhy, wifiMac, c); MobilityHelper mobility; mobility.SetPositionAllocator ("ns3::GridPositionAllocator", "MinX", DoubleValue (0.0), "MinY", DoubleValue (0.0), "DeltaX", DoubleValue (distance), "DeltaY", DoubleValue (distance), "GridWidth", UintegerValue (5), "LayoutType", StringValue ("RowFirst")); mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel"); mobility.Install (c); // Enable OLSR OlsrHelper olsr; Ipv4StaticRoutingHelper staticRouting; Ipv4ListRoutingHelper list; list.Add (staticRouting, 0); list.Add (olsr, 10); InternetStackHelper internet; internet.SetRoutingHelper (list); // has effect on the next Install () internet.Install (c); Ipv4AddressHelper ipv4; NS_LOG_INFO ("Assign IP Addresses."); ipv4.SetBase ("10.1.1.0", "255.255.255.0"); Ipv4InterfaceContainer i = ipv4.Assign (devices); TypeId tid = TypeId::LookupByName ("ns3::UdpSocketFactory"); Ptr<Socket> recvSink = Socket::CreateSocket (c.Get (sinkNode), tid); InetSocketAddress local = InetSocketAddress (Ipv4Address::GetAny (), 80); recvSink->Bind (local); recvSink->SetRecvCallback (MakeCallback (&ReceivePacket)); Ptr<Socket> source = Socket::CreateSocket (c.Get (sourceNode), tid); InetSocketAddress remote = InetSocketAddress (i.GetAddress (sinkNode, 0), 80); source->Connect (remote); if (tracing == true) { AsciiTraceHelper ascii; wifiPhy.EnableAsciiAll (ascii.CreateFileStream ("wifi-simple-adhoc-grid.tr")); wifiPhy.EnablePcap ("wifi-simple-adhoc-grid", devices); // Trace routing tables Ptr<OutputStreamWrapper> routingStream = Create<OutputStreamWrapper> ("wifi-simple-adhoc-grid.routes", std::ios::out); olsr.PrintRoutingTableAllEvery (Seconds (2), routingStream); // To do-- enable an IP-level trace that shows forwarding events only } // Give OLSR time to converge-- 30 seconds perhaps Simulator::Schedule (Seconds (30.0), &GenerateTraffic, source, packetSize, numPackets, interPacketInterval); // Output what we are doing NS_LOG_UNCOND ("Testing from node " << sourceNode << " to " << sinkNode << " with grid distance " << distance); Simulator::Stop (Seconds (32.0)); Simulator::Run (); Simulator::Destroy (); return 0; }
int main (int argc, char *argv[]) { uint32_t nWifis = 2; uint32_t nStas = 2; bool sendIp = true; bool writeMobility = false; CommandLine cmd; cmd.AddValue ("nWifis", "Number of wifi networks", nWifis); cmd.AddValue ("nStas", "Number of stations per wifi network", nStas); cmd.AddValue ("SendIp", "Send Ipv4 or raw packets", sendIp); cmd.AddValue ("writeMobility", "Write mobility trace", writeMobility); cmd.Parse (argc, argv); NodeContainer backboneNodes; NetDeviceContainer backboneDevices; Ipv4InterfaceContainer backboneInterfaces; std::vector<NodeContainer> staNodes; std::vector<NetDeviceContainer> staDevices; std::vector<NetDeviceContainer> apDevices; std::vector<Ipv4InterfaceContainer> staInterfaces; std::vector<Ipv4InterfaceContainer> apInterfaces; InternetStackHelper stack; CsmaHelper csma; Ipv4AddressHelper ip; ip.SetBase ("192.168.0.0", "255.255.255.0"); backboneNodes.Create (nWifis); stack.Install (backboneNodes); backboneDevices = csma.Install (backboneNodes); double wifiX = 0.0; YansWifiPhyHelper wifiPhy = YansWifiPhyHelper::Default (); wifiPhy.SetPcapDataLinkType (YansWifiPhyHelper::DLT_IEEE802_11_RADIO); for (uint32_t i = 0; i < nWifis; ++i) { // calculate ssid for wifi subnetwork std::ostringstream oss; oss << "wifi-default-" << i; Ssid ssid = Ssid (oss.str ()); NodeContainer sta; NetDeviceContainer staDev; NetDeviceContainer apDev; Ipv4InterfaceContainer staInterface; Ipv4InterfaceContainer apInterface; MobilityHelper mobility; BridgeHelper bridge; WifiHelper wifi = WifiHelper::Default (); NqosWifiMacHelper wifiMac = NqosWifiMacHelper::Default (); YansWifiChannelHelper wifiChannel = YansWifiChannelHelper::Default (); wifiPhy.SetChannel (wifiChannel.Create ()); sta.Create (nStas); mobility.SetPositionAllocator ("ns3::GridPositionAllocator", "MinX", DoubleValue (wifiX), "MinY", DoubleValue (0.0), "DeltaX", DoubleValue (5.0), "DeltaY", DoubleValue (5.0), "GridWidth", UintegerValue (1), "LayoutType", StringValue ("RowFirst")); // setup the AP. mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel"); mobility.Install (backboneNodes.Get (i)); wifiMac.SetType ("ns3::ApWifiMac", "Ssid", SsidValue (ssid)); apDev = wifi.Install (wifiPhy, wifiMac, backboneNodes.Get (i)); NetDeviceContainer bridgeDev; bridgeDev = bridge.Install (backboneNodes.Get (i), NetDeviceContainer (apDev, backboneDevices.Get (i))); // assign AP IP address to bridge, not wifi apInterface = ip.Assign (bridgeDev); // setup the STAs stack.Install (sta); mobility.SetMobilityModel ("ns3::RandomWalk2dMobilityModel", "Mode", StringValue ("Time"), "Time", StringValue ("2s"), "Speed", StringValue ("ns3::ConstantRandomVariable[Constant=1.0]"), "Bounds", RectangleValue (Rectangle (wifiX, wifiX+5.0,0.0, (nStas+1)*5.0))); mobility.Install (sta); wifiMac.SetType ("ns3::StaWifiMac", "Ssid", SsidValue (ssid), "ActiveProbing", BooleanValue (false)); staDev = wifi.Install (wifiPhy, wifiMac, sta); staInterface = ip.Assign (staDev); // save everything in containers. staNodes.push_back (sta); apDevices.push_back (apDev); apInterfaces.push_back (apInterface); staDevices.push_back (staDev); staInterfaces.push_back (staInterface); wifiX += 20.0; } Address dest; std::string protocol; if (sendIp) { dest = InetSocketAddress (staInterfaces[1].GetAddress (1), 1025); protocol = "ns3::UdpSocketFactory"; } else { PacketSocketAddress tmp; tmp.SetSingleDevice (staDevices[0].Get (0)->GetIfIndex ()); tmp.SetPhysicalAddress (staDevices[1].Get (0)->GetAddress ()); tmp.SetProtocol (0x807); dest = tmp; protocol = "ns3::PacketSocketFactory"; } OnOffHelper onoff = OnOffHelper (protocol, dest); onoff.SetConstantRate (DataRate ("500kb/s")); ApplicationContainer apps = onoff.Install (staNodes[0].Get (0)); apps.Start (Seconds (0.5)); apps.Stop (Seconds (3.0)); wifiPhy.EnablePcap ("wifi-wired-bridging", apDevices[0]); wifiPhy.EnablePcap ("wifi-wired-bridging", apDevices[1]); if (writeMobility) { AsciiTraceHelper ascii; MobilityHelper::EnableAsciiAll (ascii.CreateFileStream ("wifi-wired-bridging.mob")); } Simulator::Stop (Seconds (5.0)); Simulator::Run (); Simulator::Destroy (); }
int main (int argc, char *argv[]) { #ifdef NS3_MPI // Distributed simulation setup MpiInterface::Enable (&argc, &argv); GlobalValue::Bind ("SimulatorImplementationType", StringValue ("ns3::DistributedSimulatorImpl")); LogComponentEnable ("BriteMPITest", LOG_LEVEL_ALL); LogComponentEnable ("TcpSocketBase", LOG_LEVEL_INFO); uint32_t systemId = MpiInterface::GetSystemId (); uint32_t systemCount = MpiInterface::GetSize (); // Check for valid distributed parameters. // For just this particular example, must have 2 and only 2 Logical Processors (LPs) NS_ASSERT_MSG (systemCount == 2, "This demonstration requires 2 and only 2 logical processors."); // BRITE needs a configuration file to build its graph. By default, this // example will use the TD_ASBarabasi_RTWaxman.conf file. There are many others // which can be found in the BRITE/conf_files directory std::string confFile = "src/brite/examples/conf_files/TD_ASBarabasi_RTWaxman.conf"; bool tracing = false; bool nix = false; CommandLine cmd; cmd.AddValue ("confFile", "BRITE conf file", confFile); cmd.AddValue ("tracing", "Enable or disable ascii tracing", tracing); cmd.AddValue ("nix", "Enable or disable nix-vector routing", nix); cmd.Parse (argc,argv); // Invoke the BriteTopologyHelper and pass in a BRITE // configuration file and a seed file. This will use // BRITE to build a graph from which we can build the ns-3 topology BriteTopologyHelper bth (confFile); PointToPointHelper p2p; Ipv4StaticRoutingHelper staticRouting; Ipv4GlobalRoutingHelper globalRouting; Ipv4ListRoutingHelper listRouting; Ipv4NixVectorHelper nixRouting; InternetStackHelper stack; if (nix) { listRouting.Add (staticRouting, 0); listRouting.Add (nixRouting, 10); } else { listRouting.Add (staticRouting, 0); listRouting.Add (globalRouting, 10); } stack.SetRoutingHelper (listRouting); Ipv4AddressHelper address; address.SetBase ("10.0.0.0", "255.255.255.252"); //build topology as normal but also pass systemCount bth.BuildBriteTopology (stack, systemCount); bth.AssignIpv4Addresses (address); NS_LOG_LOGIC ("Number of AS created " << bth.GetNAs ()); uint16_t port = 5001; NodeContainer client; NodeContainer server; //For this example will use AS 0 and AS 1 which will be on seperate systems //due to the mod divide used to assign AS to system. //GetSystemNumberForAs (uint32_t) can be used to determine which system an //AS is assigned to NS_LOG_LOGIC ("AS 0 has been assigned to system " << bth.GetSystemNumberForAs (0)); NS_LOG_LOGIC ("As 1 has been assigned to system " << bth.GetSystemNumberForAs (1)); //install client node on last leaf node of AS 0 client.Add (CreateObject<Node> (0)); stack.Install (client); int numLeafNodesInAsZero = bth.GetNLeafNodesForAs (0); client.Add (bth.GetLeafNodeForAs (0, numLeafNodesInAsZero - 1)); //install server node on last leaf node on AS 1 server.Add (CreateObject<Node> (1)); stack.Install (server); int numLeafNodesInAsOne = bth.GetNLeafNodesForAs (1); server.Add (bth.GetLeafNodeForAs (1, numLeafNodesInAsOne - 1)); p2p.SetDeviceAttribute ("DataRate", StringValue ("5Mbps")); p2p.SetChannelAttribute ("Delay", StringValue ("2ms")); NetDeviceContainer p2pClientDevices; NetDeviceContainer p2pServerDevices; p2pClientDevices = p2p.Install (client); p2pServerDevices = p2p.Install (server); address.SetBase ("10.1.0.0", "255.255.0.0"); Ipv4InterfaceContainer clientInterfaces; clientInterfaces = address.Assign (p2pClientDevices); address.SetBase ("10.2.0.0", "255.255.0.0"); Ipv4InterfaceContainer serverInterfaces; serverInterfaces = address.Assign (p2pServerDevices); if (!nix) { Ipv4GlobalRoutingHelper::PopulateRoutingTables (); } //only has two systems in this example. Install applications only on nodes in my system //Moved here to get totalRX at end ApplicationContainer sinkApps; if (systemId == 1) { Address sinkLocalAddress (InetSocketAddress (Ipv4Address::GetAny (), port)); PacketSinkHelper packetSinkHelper ("ns3::TcpSocketFactory", sinkLocalAddress); sinkApps.Add (packetSinkHelper.Install (server.Get (0))); sinkApps.Start (Seconds (0.0)); sinkApps.Stop (Seconds (10.0)); } if (systemId == 0) { OnOffHelper clientHelper ("ns3::TcpSocketFactory", Address ()); clientHelper.SetAttribute ("OnTime", StringValue ("ns3::ConstantRandomVariable[Constant=1]")); clientHelper.SetAttribute ("OffTime", StringValue ("ns3::ConstantRandomVariable[Constant=0]")); ApplicationContainer clientApps; AddressValue remoteAddress (InetSocketAddress (serverInterfaces.GetAddress (0), port)); clientHelper.SetAttribute ("Remote", remoteAddress); clientApps.Add (clientHelper.Install (client.Get (0))); clientApps.Start (Seconds (1.0)); // Start 1 second after sink clientApps.Stop (Seconds (9.0)); // Stop before the sink } if (!nix) { Ipv4GlobalRoutingHelper::PopulateRoutingTables (); } if (tracing) { AsciiTraceHelper ascii; p2p.EnableAsciiAll (ascii.CreateFileStream ("briteLeaves.tr")); } // Run the simulator Simulator::Stop (Seconds (200.0)); Simulator::Run (); Simulator::Destroy (); if (systemId == 1) { Ptr<PacketSink> sink1 = DynamicCast<PacketSink> (sinkApps.Get (0)); NS_LOG_DEBUG ("Total Bytes Received: " << sink1->GetTotalRx ()); } MpiInterface::Disable (); return 0; #else NS_FATAL_ERROR ("Can't use distributed simulator without MPI compiled in"); #endif }
int main(int argc, char* argv[]) { // setting default parameters for Wifi // enable rts cts all the time. Config::SetDefault ("ns3::WifiRemoteStationManager::RtsCtsThreshold", StringValue ("0")); // disable fragmentation Config::SetDefault ("ns3::WifiRemoteStationManager::FragmentationThreshold", StringValue ("2200")); Config::SetDefault("ns3::WifiRemoteStationManager::NonUnicastMode", StringValue("OfdmRate24Mbps")); // setting default parameters for PointToPoint links and channels Config::SetDefault("ns3::PointToPointNetDevice::DataRate", StringValue("1Mbps")); Config::SetDefault("ns3::PointToPointChannel::Delay", StringValue("10ms")); Config::SetDefault("ns3::DropTailQueue::MaxPackets", StringValue("20")); std::uint32_t max_routers = 1; std::string cSize = "100"; std::string cSplit = "75"; // Read optional command-line parameters (e.g., enable visualizer with ./waf --run=<> --visualize CommandLine cmd; cmd.AddValue("cSize", "Cache Size", cSize); cmd.AddValue("cSplit", "Cache Split", cSplit); cmd.AddValue("routers", "number of routers", max_routers); cmd.Parse(argc, argv); Packet::EnablePrinting (); // Wifi config WifiHelper wifi = WifiHelper::Default (); // Nodes NodeContainer sta_consumers; NodeContainer sta_mobile_consumers; NodeContainer ap; NodeContainer routers; NodeContainer producers; // ?? NetDeviceContainer staDevs; PacketSocketHelper packetSocket; // 5 stationary consumers, 5 mobile, 4 APs and 1 router sta_consumers.Create(3*max_routers); sta_mobile_consumers.Create(7*max_routers); ap.Create (5*max_routers); routers.Create(max_routers); producers.Create(1); // give packet socket powers to nodes. packetSocket.Install(sta_mobile_consumers); packetSocket.Install(sta_consumers); packetSocket.Install (ap); // Wifi Config NqosWifiMacHelper wifiMac = NqosWifiMacHelper::Default (); YansWifiPhyHelper wifiPhy = YansWifiPhyHelper::Default (); YansWifiChannelHelper wifiChannel = YansWifiChannelHelper::Default (); wifiPhy.SetChannel (wifiChannel.Create ()); wifiPhy.Set("TxPowerStart", DoubleValue(5)); wifiPhy.Set("TxPowerEnd", DoubleValue(5)); Ssid ssid = Ssid ("wifi-default"); wifi.SetRemoteStationManager ("ns3::ArfWifiManager"); // setup stas. wifiMac.SetType ("ns3::StaWifiMac", "Ssid", SsidValue (ssid), "ActiveProbing", BooleanValue (false)); // install wifi wifi.Install(wifiPhy, wifiMac, sta_mobile_consumers); wifi.Install(wifiPhy, wifiMac, sta_consumers); // setup ap. wifiMac.SetType ("ns3::ApWifiMac", "Ssid", SsidValue (ssid)); wifi.Install (wifiPhy, wifiMac, ap); // Mobility config -- Change max_routers value to change size of sim int number_rows = sqrt(max_routers); int x = 0; int y = 0; int pos_counter = 0; Ptr<UniformRandomVariable> randomizerX = CreateObject<UniformRandomVariable>(); Ptr<UniformRandomVariable> randomizerY = CreateObject<UniformRandomVariable>(); MobilityHelper stationary_mobility; stationary_mobility.SetMobilityModel("ns3::ConstantPositionMobilityModel"); MobilityHelper mobility; mobility.SetMobilityModel("ns3::GaussMarkovMobilityModel", "Bounds", BoxValue(Box (0, number_rows*10, 0, number_rows*10, 0, 0)), "TimeStep", TimeValue(Seconds(1))); // Place router in center of box randomizerX->SetAttribute("Min", DoubleValue(5)); randomizerX->SetAttribute("Max", DoubleValue(5)); randomizerY->SetAttribute("Min", DoubleValue(5)); randomizerY->SetAttribute("Max", DoubleValue(5)); stationary_mobility.SetPositionAllocator("ns3::RandomBoxPositionAllocator", "X", PointerValue(randomizerX), "Y", PointerValue(randomizerY)); // Install on routers stationary_mobility.Install(producers.Get(0)); // p2p helper PointToPointHelper p2p; // for each row for (int i=0; i < number_rows; i++) { x = i * 10 + 5; // for each column for (int j=0; j < number_rows; j++) { y = j * 10 + 5; // Place router in center of box randomizerX->SetAttribute("Min", DoubleValue(x)); randomizerX->SetAttribute("Max", DoubleValue(x)); randomizerY->SetAttribute("Min", DoubleValue(y)); randomizerY->SetAttribute("Max", DoubleValue(y)); stationary_mobility.SetPositionAllocator("ns3::RandomBoxPositionAllocator", "X", PointerValue(randomizerX), "Y", PointerValue(randomizerY)); // Install on routers stationary_mobility.Install(routers.Get(pos_counter)); // Set box (center +/-5) randomizerX->SetAttribute("Min", DoubleValue(x-5)); randomizerX->SetAttribute("Max", DoubleValue(x+5)); randomizerY->SetAttribute("Min", DoubleValue(y-5)); randomizerY->SetAttribute("Max", DoubleValue(y+5)); // Connect router to previous if not 1 if (pos_counter == 0) { p2p.Install(routers.Get(0), producers.Get(0)); } else // Otherwise connect to router behind you { p2p.Install(routers.Get(pos_counter), routers.Get(pos_counter-1)); } // APs for (int k=0; k < 5; k++) { stationary_mobility.SetPositionAllocator("ns3::RandomBoxPositionAllocator", "X", PointerValue(randomizerX), "Y", PointerValue(randomizerY)); stationary_mobility.Install(ap.Get(pos_counter * 5 + k)); p2p.Install(routers.Get(pos_counter), ap.Get(pos_counter * 5 + k)); } // Consumers (stationary) for (int l=0; l < 3; l++) { stationary_mobility.SetPositionAllocator("ns3::RandomBoxPositionAllocator", "X", PointerValue(randomizerX), "Y", PointerValue(randomizerY)); stationary_mobility.Install(sta_consumers.Get(pos_counter * 3 + l)); } // Consumers (Mobile) for (int m=0; m < 7; m++) { mobility.SetPositionAllocator("ns3::RandomBoxPositionAllocator", "X", PointerValue(randomizerX), "Y", PointerValue(randomizerY)); mobility.Install(sta_mobile_consumers.Get(pos_counter * 7 + m)); } // Keep track of overall position pos_counter++; } } // Install NDN stack on all nodes ndn::StackHelper ndnHelper; ndnHelper.SetDefaultRoutes(true); ndnHelper.SetOldContentStore("ns3::ndn::cs::Splitcache", "NormalPolicy", "ns3::ndn::cs::Lru", "SpecialPolicy", "ns3::ndn::cs::Lfu", "TotalCacheSize", cSize, "Configure", cSplit); // Percentage Special^ //ndnHelper.SetOldContentStore("ns3::ndn::cs::Lru"); ndnHelper.Install(ap); ndnHelper.Install(routers); ndnHelper.SetOldContentStore("ns3::ndn::cs::Nocache"); ndnHelper.Install(sta_consumers); ndnHelper.Install(sta_mobile_consumers); ndnHelper.Install(producers); // Choosing forwarding strategy ndn::StrategyChoiceHelper::Install(sta_consumers, "/", "/localhost/nfd/strategy/best-route"); ndn::StrategyChoiceHelper::Install(sta_mobile_consumers, "/", "/localhost/nfd/strategy/best-route"); ndn::StrategyChoiceHelper::Install(ap, "/", "/localhost/nfd/strategy/best-route"); ndn::StrategyChoiceHelper::Install(routers, "/", "/localhost/nfd/strategy/best-route"); ndn::StrategyChoiceHelper::Install(producers, "/", "/localhost/nfd/strategy/best-route"); // Installing applications // Consumer (basic and special data) ndn::AppHelper consumerHelper("ns3::ndn::ConsumerZipfMandelbrot"); consumerHelper.SetAttribute("NumberOfContents", StringValue("100")); // 10 different contents // Consumer will request /prefix/0, /prefix/1, ... // Basic consumers request basic data (and pumpkin spice coffee) consumerHelper.SetPrefix("data/basic"); consumerHelper.SetAttribute("Frequency", StringValue("10")); // 1 interests a second consumerHelper.Install(sta_consumers); // Mobile consumers request special data only consumerHelper.SetPrefix("data/special"); consumerHelper.SetAttribute("Frequency", StringValue("10")); // 2 interests a second consumerHelper.Install(sta_mobile_consumers); // Producer ndn::AppHelper producerHelper("ns3::ndn::Producer"); // Producer will reply to all requests starting with /prefix producerHelper.SetPrefix("/data"); producerHelper.SetAttribute("PayloadSize", StringValue("1024")); producerHelper.SetAttribute("Freshness", TimeValue(Seconds(-1.0))); // unlimited freshness producerHelper.Install(producers); // Tracers 'n stuff //AthstatsHelper athstats; //athstats.EnableAthstats("athstats-sta", sta_mobile_consumers); //athstats.EnableAthstats("athstats-sta", sta_consumers); //athstats.EnableAthstats ("athstats-ap", ap); ndn::AppDelayTracer::Install(sta_consumers, "app-delays-trace-stationary-03.txt"); ndn::AppDelayTracer::Install(sta_mobile_consumers, "app-delays-trace-mobile-03.txt"); ndn::CsTracer::Install(ap, "cs-trace-ap-03.txt", Seconds(1)); ndn::CsTracer::Install(routers, "cs-trace-routers-03.txt", Seconds(1)); // 10 min Simulator::Stop(Seconds(600.0)); Simulator::Run(); Simulator::Destroy(); return 0; }
int main (int argc, char *argv[]) { uint32_t nEnbPerFloor = 1; uint32_t nUe = 1; uint32_t nFloors = 0; double simTime = 1.0; CommandLine cmd; cmd.AddValue ("nEnb", "Number of eNodeBs per floor", nEnbPerFloor); cmd.AddValue ("nUe", "Number of UEs", nUe); cmd.AddValue ("nFloors", "Number of floors, 0 for Friis propagation model", nFloors); cmd.AddValue ("simTime", "Total duration of the simulation (in seconds)", simTime); cmd.Parse (argc, argv); ConfigStore inputConfig; inputConfig.ConfigureDefaults (); // parse again so you can override default values from the command line cmd.Parse (argc, argv); // Geometry of the scenario (in meters) // Assume squared building double nodeHeight = 1.5; double roomHeight = 3; double roomLength = 8; uint32_t nRooms = std::ceil (std::sqrt (nEnbPerFloor)); uint32_t nEnb; Ptr<LteHelper> lteHelper = CreateObject<LteHelper> (); //lteHelper->EnableLogComponents (); //LogComponentEnable ("BuildingsPropagationLossModel", LOG_LEVEL_ALL); if (nFloors == 0) { lteHelper->SetAttribute ("PathlossModel", StringValue ("ns3::FriisPropagationLossModel")); nEnb = nEnbPerFloor; } else { lteHelper->SetAttribute ("PathlossModel", StringValue ("ns3::HybridBuildingsPropagationLossModel")); nEnb = nFloors * nEnbPerFloor; } // Create Nodes: eNodeB and UE NodeContainer enbNodes; std::vector<NodeContainer> ueNodes; enbNodes.Create (nEnb); for (uint32_t i = 0; i < nEnb; i++) { NodeContainer ueNode; ueNode.Create (nUe); ueNodes.push_back (ueNode); } MobilityHelper mobility; mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel"); std::vector<Vector> enbPosition; Ptr<ListPositionAllocator> positionAlloc = CreateObject<ListPositionAllocator> (); Ptr<Building> building; if (nFloors == 0) { // Position of eNBs uint32_t plantedEnb = 0; for (uint32_t row = 0; row < nRooms; row++) { for (uint32_t column = 0; column < nRooms && plantedEnb < nEnbPerFloor; column++, plantedEnb++) { Vector v (roomLength * (column + 0.5), roomLength * (row + 0.5), nodeHeight); positionAlloc->Add (v); enbPosition.push_back (v); mobility.Install (ueNodes.at(plantedEnb)); } } mobility.SetPositionAllocator (positionAlloc); mobility.Install (enbNodes); BuildingsHelper::Install (enbNodes); // Position of UEs attached to eNB for (uint32_t i = 0; i < nEnb; i++) { Ptr<UniformRandomVariable> posX = CreateObject<UniformRandomVariable> (); posX->SetAttribute ("Min", DoubleValue (enbPosition.at(i).x - roomLength * 0.5)); posX->SetAttribute ("Max", DoubleValue (enbPosition.at(i).x + roomLength * 0.5)); Ptr<UniformRandomVariable> posY = CreateObject<UniformRandomVariable> (); posY->SetAttribute ("Min", DoubleValue (enbPosition.at(i).y - roomLength * 0.5)); posY->SetAttribute ("Max", DoubleValue (enbPosition.at(i).y + roomLength * 0.5)); positionAlloc = CreateObject<ListPositionAllocator> (); for (uint32_t j = 0; j < nUe; j++) { positionAlloc->Add (Vector (posX->GetValue (), posY->GetValue (), nodeHeight)); mobility.SetPositionAllocator (positionAlloc); } mobility.Install (ueNodes.at(i)); BuildingsHelper::Install (ueNodes.at(i)); } } else { building = CreateObject<Building> (); building->SetBoundaries (Box (0.0, nRooms * roomLength, 0.0, nRooms * roomLength, 0.0, nFloors* roomHeight)); building->SetBuildingType (Building::Residential); building->SetExtWallsType (Building::ConcreteWithWindows); building->SetNFloors (nFloors); building->SetNRoomsX (nRooms); building->SetNRoomsY (nRooms); mobility.Install (enbNodes); BuildingsHelper::Install (enbNodes); uint32_t plantedEnb = 0; for (uint32_t floor = 0; floor < nFloors; floor++) { uint32_t plantedEnbPerFloor = 0; for (uint32_t row = 0; row < nRooms; row++) { for (uint32_t column = 0; column < nRooms && plantedEnbPerFloor < nEnbPerFloor; column++, plantedEnb++, plantedEnbPerFloor++) { Vector v (roomLength * (column + 0.5), roomLength * (row + 0.5), nodeHeight + roomHeight * floor); positionAlloc->Add (v); enbPosition.push_back (v); Ptr<MobilityModel> mmEnb = enbNodes.Get (plantedEnb)->GetObject<MobilityModel> (); mmEnb->SetPosition (v); // Positioning UEs attached to eNB mobility.Install (ueNodes.at(plantedEnb)); BuildingsHelper::Install (ueNodes.at(plantedEnb)); for (uint32_t ue = 0; ue < nUe; ue++) { Ptr<MobilityModel> mmUe = ueNodes.at(plantedEnb).Get (ue)->GetObject<MobilityModel> (); Vector vUe (v.x, v.y, v.z); mmUe->SetPosition (vUe); } } } } } // Create Devices and install them in the Nodes (eNB and UE) NetDeviceContainer enbDevs; std::vector<NetDeviceContainer> ueDevs; enbDevs = lteHelper->InstallEnbDevice (enbNodes); for (uint32_t i = 0; i < nEnb; i++) { NetDeviceContainer ueDev = lteHelper->InstallUeDevice (ueNodes.at(i)); ueDevs.push_back (ueDev); lteHelper->Attach (ueDev, enbDevs.Get (i)); enum EpsBearer::Qci q = EpsBearer::GBR_CONV_VOICE; EpsBearer bearer (q); lteHelper->ActivateDataRadioBearer (ueDev, bearer); } BuildingsHelper::MakeMobilityModelConsistent (); Simulator::Stop (Seconds (simTime)); lteHelper->EnableTraces (); Simulator::Run (); /*GtkConfigStore config; config.ConfigureAttributes ();*/ Simulator::Destroy (); return 0; }
int main (int argc, char** argv) { bool verbose = false; CommandLine cmd; cmd.AddValue ("verbose", "turn on log components", verbose); cmd.Parse (argc, argv); if (verbose) { LogComponentEnable ("Ipv6L3Protocol", LOG_LEVEL_ALL); LogComponentEnable ("Icmpv6L4Protocol", LOG_LEVEL_ALL); LogComponentEnable ("Ipv6StaticRouting", LOG_LEVEL_ALL); LogComponentEnable ("Ipv6Interface", LOG_LEVEL_ALL); LogComponentEnable ("Ping6Application", LOG_LEVEL_ALL); } NS_LOG_INFO ("Create nodes."); Ptr<Node> n0 = CreateObject<Node> (); Ptr<Node> r = CreateObject<Node> (); Ptr<Node> n1 = CreateObject<Node> (); NodeContainer net1 (n0, r); NodeContainer net2 (r, n1); NodeContainer all (n0, r, n1); NS_LOG_INFO ("Create IPv6 Internet Stack"); InternetStackHelper internetv6; internetv6.Install (all); NS_LOG_INFO ("Create channels."); CsmaHelper csma; csma.SetChannelAttribute ("DataRate", DataRateValue (5000000)); csma.SetChannelAttribute ("Delay", TimeValue (MilliSeconds (2))); NetDeviceContainer d1 = csma.Install (net1); NetDeviceContainer d2 = csma.Install (net2); NS_LOG_INFO ("Create networks and assign IPv6 Addresses."); Ipv6AddressHelper ipv6; ipv6.SetBase (Ipv6Address ("2001:1::"), Ipv6Prefix (64)); Ipv6InterfaceContainer i1 = ipv6.Assign (d1); i1.SetForwarding (1, true); i1.SetDefaultRouteInAllNodes (1); ipv6.SetBase (Ipv6Address ("2001:2::"), Ipv6Prefix (64)); Ipv6InterfaceContainer i2 = ipv6.Assign (d2); i2.SetForwarding (0, true); i2.SetDefaultRouteInAllNodes (0); Ipv6StaticRoutingHelper routingHelper; Ptr<OutputStreamWrapper> routingStream = Create<OutputStreamWrapper> (&std::cout); routingHelper.PrintRoutingTableAt (Seconds (0), n0, routingStream); /* Create a Ping6 application to send ICMPv6 echo request from n0 to n1 via r */ uint32_t packetSize = 4096; uint32_t maxPacketCount = 5; Time interPacketInterval = Seconds (1.0); Ping6Helper ping6; ping6.SetLocal (i1.GetAddress (0, 1)); ping6.SetRemote (i2.GetAddress (1, 1)); ping6.SetAttribute ("MaxPackets", UintegerValue (maxPacketCount)); ping6.SetAttribute ("Interval", TimeValue (interPacketInterval)); ping6.SetAttribute ("PacketSize", UintegerValue (packetSize)); ApplicationContainer apps = ping6.Install (net1.Get (0)); apps.Start (Seconds (2.0)); apps.Stop (Seconds (20.0)); AsciiTraceHelper ascii; csma.EnableAsciiAll (ascii.CreateFileStream ("fragmentation-ipv6.tr")); csma.EnablePcapAll (std::string ("fragmentation-ipv6"), true); NS_LOG_INFO ("Run Simulation."); Simulator::Run (); Simulator::Destroy (); NS_LOG_INFO ("Done."); }