(OK) NS3—NS-3—manet-2015.cc

来源:互联网 发布:淘宝密码忘了无法显示 编辑:程序博客网 时间:2024/05/17 07:20


/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- *//* * Copyright (c) 2005,2006,2007 INRIA * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation; * * This program 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 this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA * * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr> */#include "ns3/core-module.h"#include "ns3/network-module.h"#include "ns3/applications-module.h"#include "ns3/mobility-module.h"#include "ns3/stats-module.h"#include "ns3/wifi-module.h"#include "ns3/internet-module.h"#include "ns3/olsr-module.h"#include "ns3/netanim-module.h"#include <iostream>NS_LOG_COMPONENT_DEFINE ("MANET");using namespace ns3;// Simulation parametersint nodeSpacing = 100; // metersint cols = 5;int numNodes = 25;int sourceNode = 0;int destinationNode = 24;int packetRate = 20; // packet per secondint packetSize = 500; // bytesbool enablePcap = true;bool showSimTime = true;int duration = 600; // secondsint seed = 1;int run = 1;// To show simulated time. Sent to STDERR to separation// from other output (e.g., visualization trace)void PrintSeconds(void) {std::cerr << Simulator::Now() << std::endl;Simulator::Schedule(Seconds(1), &PrintSeconds);}void RouteChange(std::string source, uint32_t size) {std::cout << "Routechange at " << source << ", new size: " << size << std::endl;}int main (int argc, char *argv[]){  LogComponentEnable ("MANET", LOG_LEVEL_INFO);  // Obtain command line arguments  CommandLine cmd;  cmd.AddValue ("cols", "Columns of nodes", cols);  cmd.AddValue ("numnodes", "Number of nodes", numNodes);  cmd.AddValue ("spacing", "Spacing between neighbouring nodes", nodeSpacing);  cmd.AddValue ("duration", "Duration of simulation", duration);  cmd.AddValue ("seed", "Random seed for simulation", seed);  cmd.AddValue ("run", "Simulation run", run);  cmd.AddValue ("packetrate", "Packets transmitted per second", packetRate);  cmd.AddValue ("packetsize", "Packet size", packetSize);  cmd.AddValue ("sourcenode", "Number of source node", sourceNode);  cmd.AddValue ("destinationnode", "Number of destination node", destinationNode);  cmd.AddValue ("showtime", "Whether or not to show simulation as simulation progresses (default = true)", showSimTime);  cmd.Parse (argc,argv);  int rows = ((int) numNodes / cols) + 1;  // Set default parameter values  Config::SetDefault("ns3::WifiRemoteStationManager::FragmentationThreshold", StringValue ("2200"));  Config::SetDefault ("ns3::WifiRemoteStationManager::RtsCtsThreshold", StringValue ("2200"));  // Set random seed and run number  SeedManager::SetSeed (seed);  SeedManager::SetRun(run);  // Create notes  NodeContainer c;  c.Create (numNodes);  // Set up physical and mac layers  WifiHelper wifi = WifiHelper::Default ();  wifi.SetStandard (WIFI_PHY_STANDARD_80211g);  wifi.SetRemoteStationManager ("ns3::ArfWifiManager");  NqosWifiMacHelper wifiMac = NqosWifiMacHelper::Default ();  wifiMac.SetType ("ns3::AdhocWifiMac");  YansWifiPhyHelper wifiPhy = YansWifiPhyHelper::Default ();  YansWifiChannelHelper wifiChannel = YansWifiChannelHelper::Default ();  YansWifiPhyHelper phy = wifiPhy;  phy.SetChannel (wifiChannel.Create ());  NetDeviceContainer devices = wifi.Install (phy, wifiMac, c);  if(enablePcap)  wifiPhy.EnablePcap ("MANET", devices);  // Set up routing and Internet stack  ns3::OlsrHelper olsr;  InternetStackHelper internet;  internet.SetRoutingHelper(olsr);  internet.Install (c);  // Assign addresses  Ipv4AddressHelper address;  address.SetBase ("10.0.0.0", "255.255.255.0");  Ipv4InterfaceContainer interfaces = address.Assign (devices);  // Server/Receiver  UdpServerHelper server (4000);  ApplicationContainer apps = server.Install (c.Get(destinationNode));  apps.Start (Seconds (1));  apps.Stop (Seconds (duration - 1));  // Client/Sender  UdpClientHelper client (interfaces.GetAddress (destinationNode), 4000);  client.SetAttribute ("MaxPackets", UintegerValue (100000000));  client.SetAttribute ("Interval", TimeValue (Seconds(1 / ((double) packetRate))));  client.SetAttribute ("PacketSize", UintegerValue (packetSize));  apps = client.Install (c.Get (sourceNode));  apps.Start (Seconds (1));  apps.Stop (Seconds (duration - 1));  // Set up mobility  MobilityHelper mobility;  mobility.SetPositionAllocator (  "ns3::GridPositionAllocator",  "MinX", DoubleValue (1.0),  "MinY", DoubleValue (1.0),  "DeltaX", DoubleValue (nodeSpacing),  "DeltaY", DoubleValue (nodeSpacing),  "GridWidth", UintegerValue (cols));  mobility.SetMobilityModel (  "ns3::RandomWalk2dMobilityModel",  "Bounds", RectangleValue (Rectangle (0,(cols * nodeSpacing) + 1, 0,(rows * nodeSpacing) + 1)),  "Speed", StringValue("ns3::UniformRandomVariable[Min=5.0,Max=10.0]"),  "Distance", DoubleValue(30));  mobility.Install (c);  // Schedule final events and start simulation  // Print simulated time  if(showSimTime)    Simulator::Schedule(Seconds(1), &PrintSeconds);  Simulator::Stop(Seconds(duration));  Simulator::Run ();  Simulator::Destroy ();  return 0;}




0 0