(OK)(OK) manet-seem-template.cc

来源:互联网 发布:mysql执行sql文件 最快 编辑:程序博客网 时间:2024/05/21 06:55


/* -*-  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> *///// This is an illustration of how one could use virtualization techniques to// allow running applications on virtual machines talking over simulated// networks.//// The actual steps required to configure the virtual machines can be rather// involved, so we don't go into that here.  Please have a look at one of// our HOWTOs on the nsnam wiki for more details about how to get the // system confgured.  For an example, have a look at "HOWTO Use Linux // Containers to set up virtual networks" which uses this code as an // example.//// The configuration you are after is explained in great detail in the // HOWTO, but looks like the following:////  +----------+                           +----------+//  | virtual  |                           | virtual  |//  |  Linux   |                           |  Linux   |//  |   Host   |                           |   Host   |//  |          |                           |          |//  |   eth0   |                           |   eth0   |//  +----------+                           +----------+//       |                                      |//  +----------+                           +----------+//  |  Linux   |                           |  Linux   |//  |  Bridge  |                           |  Bridge  |//  +----------+                           +----------+//       |                                      |//  +------------+                       +-------------+//  | "tap-left" |                       | "tap-right" |//  +------------+                       +-------------+//       |           n0            n1           |//       |       +--------+    +--------+       |//       +-------|  tap   |    |  tap   |-------+//               | bridge |    | bridge |//               +--------+    +--------+//               |  wifi  |    |  wifi  |//               +--------+    +--------+//                   |             |//                 ((*))         ((*))////                       Wifi LAN////                        ((*))//                          |//                     +--------+//                     |  wifi  |//                     +--------+//                     | access |//                     |  point |//                     +--------+//// cp manet-2015.cc /opt/tools/network_simulators/ns3/ns-allinone-3.25/ns-3.25/scratch/// ./waf --run scratch/manet-2015 --vis// rm *.tr *.pcap *.xml#include <iostream>#include <fstream>#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 "ns3/tap-bridge-module.h"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"));  //  // We are interacting with the outside, real, world.  This means we have to   // interact in real-time and therefore means we have to use the real-time  // simulator and take the time to calculate checksums.  //  // if use the two following lines, then, "./waf --run scratch/manet-2015 --vis", can not show the GUI//  GlobalValue::Bind ("SimulatorImplementationType", StringValue ("ns3::RealtimeSimulatorImpl"));//  GlobalValue::Bind ("ChecksumEnabled", BooleanValue (true));  // Set random seed and run number  SeedManager::SetSeed (seed);  SeedManager::SetRun(run);  //  // Create two ghost nodes.  The first will represent the virtual machine host  // on the left side of the network; and the second will represent the VM on   // the right side.  //  // Create notes  NodeContainer nodes;  nodes.Create (numNodes);  //  // We're going to use 802.11 g so set up a wifi helper to reflect that.  //  // Set up physical and mac layers  WifiHelper wifi = WifiHelper::Default ();  wifi.SetStandard (WIFI_PHY_STANDARD_80211g);  wifi.SetRemoteStationManager ("ns3::ArfWifiManager");  //  // No reason for pesky access points, so we'll use an ad-hoc network.  //  NqosWifiMacHelper wifiMac = NqosWifiMacHelper::Default ();  wifiMac.SetType ("ns3::AdhocWifiMac");  //  // Configure the physcial layer.  //  YansWifiChannelHelper wifiChannel = YansWifiChannelHelper::Default ();  YansWifiPhyHelper wifiPhy = YansWifiPhyHelper::Default ();  wifiPhy.SetChannel (wifiChannel.Create ());  //  // Install the wireless devices onto our ghost nodes.  //  NetDeviceContainer devices = wifi.Install (wifiPhy, wifiMac, nodes);  if(enablePcap)  wifiPhy.EnablePcap ("MANET", devices);  // Set up routing and Internet stack  ns3::OlsrHelper olsr;  InternetStackHelper internet;  internet.SetRoutingHelper(olsr);  internet.Install (nodes);  // 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 (nodes.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 (nodes.Get (sourceNode));  apps.Start (Seconds (1));  apps.Stop (Seconds (duration - 1));  //  // We need location information since we are talking about wifi, so add a  // constant position to the ghost nodes.  //  // 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 (nodes);  // Schedule final events and start simulation  // Print simulated time  if(showSimTime)    Simulator::Schedule(Seconds(1), &PrintSeconds);  // Use the TapBridgeHelper to connect to the pre-configured tap devices for   // the left side.  We go with "UseBridge" mode since the CSMA devices support  // promiscuous mode and can therefore make it appear that the bridge is   // extended into ns-3.  The install method essentially bridges the specified  // tap to the specified CSMA device.  //  TapBridgeHelper tapBridge;  tapBridge.SetAttribute ("Mode", StringValue ("UseLocal"));  //tapBridge.SetAttribute ("Mode", StringValue ("UseBridge"));  //tapBridge.SetAttribute ("DeviceName", StringValue ("tap_a_1"));  //tapBridge.Install (nodes.Get (0), devices.Get (0));  //tapBridge.SetAttribute ("DeviceName", StringValue ("tap_a_2"));  //tapBridge.Install (nodes.Get (1), devices.Get (1));  //Add New Lines via sed  //sed -i '266a \\n  tapBridge.Install (nodes.Get (1), devices.Get (1));\n  newline;' manet-seem-template.cc  //  // Run the simulation for ten minutes to give the user time to play around  //  Simulator::Stop(Seconds(duration));  Simulator::Run ();  Simulator::Destroy ();  return 0;}


0 0
原创粉丝点击