void AodvExample::InstallInternetStack () { AodvHelper aodv; // you can configure AODV attributes here using aodv.Set(name, value) InternetStackHelper stack; stack.SetRoutingHelper (aodv); // has effect on the next Install () stack.Install (nodes); Ipv4AddressHelper address; address.SetBase ("10.0.0.0", "255.0.0.0"); interfaces = address.Assign (devices); if (printRoutes) { Ptr<OutputStreamWrapper> routingStream = Create<OutputStreamWrapper> ("aodv.routes", std::ios::out); aodv.PrintRoutingTableAllAt (Seconds (8), routingStream); } }
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 ("SimpleGlobalRoutingExample", LOG_LEVEL_INFO); #endif // Set up some default values for the simulation. Use the Config::SetDefault ("ns3::OnOffApplication::PacketSize", UintegerValue (210)); Config::SetDefault ("ns3::OnOffApplication::DataRate", StringValue ("448kb/s")); //DefaultValue::Bind ("DropTailQueue::m_maxPackets", 30); // Allow the user to override any of the defaults and the above // DefaultValue::Bind ()s at run-time, via command-line arguments CommandLine cmd; cmd.Parse (argc, argv); // Here, we will explicitly create four nodes. In more sophisticated // topologies, we could configure a node factory. NS_LOG_INFO ("Create nodes."); NodeContainer c; c.Create (5); NodeContainer n02 = NodeContainer (c.Get (0), c.Get (2)); NodeContainer n12 = NodeContainer (c.Get (1), c.Get (2)); NodeContainer n32 = NodeContainer (c.Get (3), c.Get (2)); NodeContainer n34 = NodeContainer (c.Get (3), c.Get (4)); // Enable OLSR NS_LOG_INFO ("Enabling OLSR Routing."); 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); // We create the channels first without any IP addressing information NS_LOG_INFO ("Create channels."); PointToPointHelper p2p; p2p.SetDeviceAttribute ("DataRate", StringValue ("5Mbps")); p2p.SetChannelAttribute ("Delay", StringValue ("2ms")); NetDeviceContainer nd02 = p2p.Install (n02); NetDeviceContainer nd12 = p2p.Install (n12); p2p.SetDeviceAttribute ("DataRate", StringValue ("1500kbps")); p2p.SetChannelAttribute ("Delay", StringValue ("10ms")); NetDeviceContainer nd32 = p2p.Install (n32); NetDeviceContainer nd34 = p2p.Install (n34); // Later, we add IP addresses. NS_LOG_INFO ("Assign IP Addresses."); Ipv4AddressHelper ipv4; ipv4.SetBase ("10.1.1.0", "255.255.255.0"); Ipv4InterfaceContainer i02 = ipv4.Assign (nd02); ipv4.SetBase ("10.1.2.0", "255.255.255.0"); Ipv4InterfaceContainer i12 = ipv4.Assign (nd12); ipv4.SetBase ("10.1.3.0", "255.255.255.0"); Ipv4InterfaceContainer i32 = ipv4.Assign (nd32); ipv4.SetBase ("10.1.4.0", "255.255.255.0"); Ipv4InterfaceContainer i34 = ipv4.Assign (nd34); // Create the OnOff application to send UDP datagrams of size // 210 bytes at a rate of 448 Kb/s from n0 to n4 NS_LOG_INFO ("Create Applications."); uint16_t port = 9; // Discard port (RFC 863) OnOffHelper onoff ("ns3::UdpSocketFactory", InetSocketAddress (i34.GetAddress (1), port)); onoff.SetConstantRate (DataRate ("448kb/s")); ApplicationContainer apps = onoff.Install (c.Get (0)); apps.Start (Seconds (1.0)); apps.Stop (Seconds (10.0)); // Create a packet sink to receive these packets PacketSinkHelper sink ("ns3::UdpSocketFactory", InetSocketAddress (Ipv4Address::GetAny (), port)); apps = sink.Install (c.Get (3)); apps.Start (Seconds (1.0)); apps.Stop (Seconds (10.0)); // Create a similar flow from n3 to n1, starting at time 1.1 seconds onoff.SetAttribute ("Remote", AddressValue (InetSocketAddress (i12.GetAddress (0), port))); apps = onoff.Install (c.Get (3)); apps.Start (Seconds (1.1)); apps.Stop (Seconds (10.0)); // Create a packet sink to receive these packets apps = sink.Install (c.Get (1)); apps.Start (Seconds (1.1)); apps.Stop (Seconds (10.0)); AsciiTraceHelper ascii; p2p.EnableAsciiAll (ascii.CreateFileStream ("simple-point-to-point-olsr.tr")); p2p.EnablePcapAll ("simple-point-to-point-olsr"); Simulator::Stop (Seconds (30)); NS_LOG_INFO ("Run Simulation."); Simulator::Run (); Simulator::Destroy (); NS_LOG_INFO ("Done."); 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[]) { #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 }