(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
- (OK)(OK) manet-seem-template.cc
- (OK) scratch/manet-docker.cc
- (OK) NS3—NS-3—manet-2015.cc
- (OK)(OK) MPTCP-in-MANET --- MIMP
- (OK)(OK) seem-tools-CLI-manual.sh
- (OK)(OK) seem-tools-auto_create_vm_android.sh
- (OK)(OK) SEEM ALL Testing Results
- (OK)(OK) docker-(centos-quagga-ospf-mdr)--NS3--MANET
- ok
- OK!
- ok
- oK
- ok
- ok
- ok
- OK!
- ok
- OK
- Linux学习----grep及正则表达式
- 高效交换两个数
- github 上传代码
- 复习(数据结构):复杂度
- 4005
- (OK)(OK) manet-seem-template.cc
- 批注:C++设计模式——简单工厂模式:归类
- 1、java基础知识
- UBOOT状态下的显示图片的N种方法
- (OK)(OK) seem-tools-CLI-semi-auto.sh
- Arduino 卡片10舵机初动
- 为什么需要机器学习
- 塔防(TDTK) 鼠标点击平台建塔(Tower)
- (OK)(OK) seem-tools-CLI-manual.sh