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



    /* -*-  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 parameters
    int nodeSpacing = 100; // meters
    int cols = 5;
    int numNodes = 25;
    int sourceNode = 0;
    int destinationNode = 24;
    int packetRate = 20; // packet per second
    int packetSize = 500; // bytes
    bool enablePcap = true;
    bool showSimTime = true;
    int duration = 600; // seconds
    int 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));
      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;
    }


  • 相关阅读:
    读书笔记:7个示例科普CPU Cache
    no such partition grub rescue>
    这些个云盘
    原版win7镜像IE主页被篡改?
    JS判断访问设备、客户端操作系统类型
    floodlight make the VMs can not getDHCP IP address
    MPI之聚合通信-Scatter,Gather,Allgather
    MPI 环境搭建问题-运行程序闪退
    【算法、递归回溯解决数独】
    算法【最大子序列问题】
  • 原文地址:https://www.cnblogs.com/ztguang/p/12646336.html
Copyright © 2020-2023  润新知