# HG changeset patch # User Tom Henderson # Date 1348256604 25200 # Node ID 0eda8dc57efffa3dfab35bec4ec59f4af82b4dc8 # Parent 1e5921e6507d87d52dc3b4e127e8c37f61808e44 move ns-2 mobility example to mobility module diff -r 1e5921e6507d -r 0eda8dc57eff examples/mobility/ns2-mobility-trace.cc --- a/examples/mobility/ns2-mobility-trace.cc Fri Sep 21 13:47:41 2012 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,138 +0,0 @@ -/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */ -/* - * Copyright (c) 2007 INRIA - * 2009,2010 Contributors - * - * 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: Martín Giachino - * - * - * This example demonstrates the use of Ns2TransmobilityHelper class to work with mobility. - * - * Detailed example description. - * - * - intended usage: this should be used in order to load ns2 movement trace files into ns3. - * - behavior: - * - Ns2TransmobilityHelperTrace object is created, whith the specified trace file. At this moment, only - * specify the file, and no movements are scheduled. - * - A log file is created, using the log file name argument. - * - A node container is created with the correct node number specified in the command line. - * - Use Install method of Ns2TransmobilityHelperTrace to set mobility to nodes. At this moment, file is - * read line by line, and the movement is scheduled in the simulator. - * - A callback is configured, so each time a node changes its course a log message is printed. - * - expected output: example prints out messages generated by each read line from the ns2 movement trace file. - * For each line, it shows if the line is correct, or of it has errors and in this case it will - * be ignored. - * - * Usage of ns2-mobility-trace: - * - * ./waf --run "examples/mobility/ns2-mobility-trace \ - * --traceFile=/home/mgiachino/ns-3-dev/examples/mobility/default.ns_movements - * --nodeNum=2 --duration=100.0 --logFile=ns2-mobility-trace.log" - * - * NOTE: ns2-traces-file could be an absolute or relative path. You could use the file default.ns_movements - * included in the same directory that the present file. - * NOTE 2: Number of nodes present in the trace file must match with the command line argument. - * Note that you must know it before to be able to load it. - * NOTE 3: Duration must be a positive number. Note that you must know it before to be able to load it. - */ - - -#include -#include -#include - -#include "ns3/core-module.h" -#include "ns3/mobility-module.h" -#include "ns3/mobility-module.h" -#include "ns3/ns2-mobility-helper.h" - -using namespace ns3; - -// Prints actual position and velocity when a course change event occurs -static void -CourseChange (std::ostream *os, std::string foo, Ptr mobility) -{ - Vector pos = mobility->GetPosition (); // Get position - Vector vel = mobility->GetVelocity (); // Get velocity - - // Prints position and velocities - *os << Simulator::Now () << " POS: x=" << pos.x << ", y=" << pos.y - << ", z=" << pos.z << "; VEL:" << vel.x << ", y=" << vel.y - << ", z=" << vel.z << std::endl; -} - -// Example to use ns2 traces file in ns3 -int main (int argc, char *argv[]) -{ - std::string traceFile; - std::string logFile; - - int nodeNum; - double duration; - - // Enable logging from the ns2 helper - LogComponentEnable ("Ns2MobilityHelper",LOG_LEVEL_DEBUG); - - // Parse command line attribute - CommandLine cmd; - cmd.AddValue ("traceFile", "Ns2 movement trace file", traceFile); - cmd.AddValue ("nodeNum", "Number of nodes", nodeNum); - cmd.AddValue ("duration", "Duration of Simulation", duration); - cmd.AddValue ("logFile", "Log file", logFile); - cmd.Parse (argc,argv); - - // Check command line arguments - if (traceFile.empty () || nodeNum <= 0 || duration <= 0 || logFile.empty ()) - { - std::cout << "Usage of " << argv[0] << " :\n\n" - "./waf --run \"ns2-mobility-trace" - " --traceFile=/home/mgiachino/ns-3-dev/examples/mobility/default.ns_movements" - " --nodeNum=2 --duration=100.0 --logFile=main-ns2-mob.log\" \n\n" - "NOTE: ns2-traces-file could be an absolute or relative path. You could use the file default.ns_movements\n" - " included in the same directory that the present file.\n\n" - "NOTE 2: Number of nodes present in the trace file must match with the command line argument and must\n" - " be a positive number. Note that you must know it before to be able to load it.\n\n" - "NOTE 3: Duration must be a positive number. Note that you must know it before to be able to load it.\n\n"; - - return 0; - } - - // Create Ns2MobilityHelper with the specified trace log file as parameter - Ns2MobilityHelper ns2 = Ns2MobilityHelper (traceFile); - - // open log file for output - std::ofstream os; - os.open (logFile.c_str ()); - - - - // Create all nodes. - NodeContainer stas; - stas.Create (nodeNum); - - ns2.Install (); // configure movements for each node, while reading trace file - - // Configure callback for logging - Config::Connect ("/NodeList/*/$ns3::MobilityModel/CourseChange", - MakeBoundCallback (&CourseChange, &os)); - - Simulator::Stop (Seconds (duration)); - Simulator::Run (); - Simulator::Destroy (); - - os.close (); // close log file - return 0; -} diff -r 1e5921e6507d -r 0eda8dc57eff src/mobility/examples/ns2-mobility-trace.cc --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/mobility/examples/ns2-mobility-trace.cc Fri Sep 21 12:43:24 2012 -0700 @@ -0,0 +1,138 @@ +/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */ +/* + * Copyright (c) 2007 INRIA + * 2009,2010 Contributors + * + * 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: Martín Giachino + * + * + * This example demonstrates the use of Ns2TransmobilityHelper class to work with mobility. + * + * Detailed example description. + * + * - intended usage: this should be used in order to load ns2 movement trace files into ns3. + * - behavior: + * - Ns2TransmobilityHelperTrace object is created, whith the specified trace file. At this moment, only + * specify the file, and no movements are scheduled. + * - A log file is created, using the log file name argument. + * - A node container is created with the correct node number specified in the command line. + * - Use Install method of Ns2TransmobilityHelperTrace to set mobility to nodes. At this moment, file is + * read line by line, and the movement is scheduled in the simulator. + * - A callback is configured, so each time a node changes its course a log message is printed. + * - expected output: example prints out messages generated by each read line from the ns2 movement trace file. + * For each line, it shows if the line is correct, or of it has errors and in this case it will + * be ignored. + * + * Usage of ns2-mobility-trace: + * + * ./waf --run "examples/mobility/ns2-mobility-trace \ + * --traceFile=/home/mgiachino/ns-3-dev/examples/mobility/default.ns_movements + * --nodeNum=2 --duration=100.0 --logFile=ns2-mobility-trace.log" + * + * NOTE: ns2-traces-file could be an absolute or relative path. You could use the file default.ns_movements + * included in the same directory that the present file. + * NOTE 2: Number of nodes present in the trace file must match with the command line argument. + * Note that you must know it before to be able to load it. + * NOTE 3: Duration must be a positive number. Note that you must know it before to be able to load it. + */ + + +#include +#include +#include + +#include "ns3/core-module.h" +#include "ns3/mobility-module.h" +#include "ns3/mobility-module.h" +#include "ns3/ns2-mobility-helper.h" + +using namespace ns3; + +// Prints actual position and velocity when a course change event occurs +static void +CourseChange (std::ostream *os, std::string foo, Ptr mobility) +{ + Vector pos = mobility->GetPosition (); // Get position + Vector vel = mobility->GetVelocity (); // Get velocity + + // Prints position and velocities + *os << Simulator::Now () << " POS: x=" << pos.x << ", y=" << pos.y + << ", z=" << pos.z << "; VEL:" << vel.x << ", y=" << vel.y + << ", z=" << vel.z << std::endl; +} + +// Example to use ns2 traces file in ns3 +int main (int argc, char *argv[]) +{ + std::string traceFile; + std::string logFile; + + int nodeNum; + double duration; + + // Enable logging from the ns2 helper + LogComponentEnable ("Ns2MobilityHelper",LOG_LEVEL_DEBUG); + + // Parse command line attribute + CommandLine cmd; + cmd.AddValue ("traceFile", "Ns2 movement trace file", traceFile); + cmd.AddValue ("nodeNum", "Number of nodes", nodeNum); + cmd.AddValue ("duration", "Duration of Simulation", duration); + cmd.AddValue ("logFile", "Log file", logFile); + cmd.Parse (argc,argv); + + // Check command line arguments + if (traceFile.empty () || nodeNum <= 0 || duration <= 0 || logFile.empty ()) + { + std::cout << "Usage of " << argv[0] << " :\n\n" + "./waf --run \"ns2-mobility-trace" + " --traceFile=/home/mgiachino/ns-3-dev/examples/mobility/default.ns_movements" + " --nodeNum=2 --duration=100.0 --logFile=main-ns2-mob.log\" \n\n" + "NOTE: ns2-traces-file could be an absolute or relative path. You could use the file default.ns_movements\n" + " included in the same directory that the present file.\n\n" + "NOTE 2: Number of nodes present in the trace file must match with the command line argument and must\n" + " be a positive number. Note that you must know it before to be able to load it.\n\n" + "NOTE 3: Duration must be a positive number. Note that you must know it before to be able to load it.\n\n"; + + return 0; + } + + // Create Ns2MobilityHelper with the specified trace log file as parameter + Ns2MobilityHelper ns2 = Ns2MobilityHelper (traceFile); + + // open log file for output + std::ofstream os; + os.open (logFile.c_str ()); + + + + // Create all nodes. + NodeContainer stas; + stas.Create (nodeNum); + + ns2.Install (); // configure movements for each node, while reading trace file + + // Configure callback for logging + Config::Connect ("/NodeList/*/$ns3::MobilityModel/CourseChange", + MakeBoundCallback (&CourseChange, &os)); + + Simulator::Stop (Seconds (duration)); + Simulator::Run (); + Simulator::Destroy (); + + os.close (); // close log file + return 0; +} diff -r 1e5921e6507d -r 0eda8dc57eff src/mobility/examples/wscript --- a/src/mobility/examples/wscript Fri Sep 21 13:47:41 2012 +0200 +++ b/src/mobility/examples/wscript Fri Sep 21 12:43:24 2012 -0700 @@ -16,3 +16,6 @@ ['core', 'mobility']) obj.source = 'main-random-walk.cc' + obj = bld.create_ns3_program('ns2-mobility-trace', + ['core', 'mobility']) + obj.source = 'ns2-mobility-trace.cc'