diff --git a/src/lte/examples/lena-cqi-threshold.cc b/src/lte/examples/lena-cqi-threshold.cc index a5f53a480..047da76af 100644 --- a/src/lte/examples/lena-cqi-threshold.cc +++ b/src/lte/examples/lena-cqi-threshold.cc @@ -25,10 +25,10 @@ #include "ns3/lte-module.h" #include "ns3/config-store.h" //#include "ns3/gtk-config-store.h" + using namespace ns3; // position functions insipred by /examples/wireless/wifi-ap.cc - static void SetPosition (Ptr node, Vector position) { @@ -79,16 +79,9 @@ int main (int argc, char *argv[]) Ptr lena = CreateObject (); lena->SetAttribute ("PathlossModel", StringValue ("ns3::FriisSpectrumPropagationLossModel")); + // Uncomment to enable logging //lena->EnableLogComponents (); - // LogComponentEnable ("LtePhy", LOG_LEVEL_ALL); - LogComponentEnable ("LteEnbPhy", LOG_LEVEL_ALL); - // LogComponentEnable ("LteUePhy", LOG_LEVEL_ALL); - LogComponentEnable ("PfFfMacScheduler", LOG_LEVEL_ALL); - LogComponentEnable ("RrFfMacScheduler", LOG_LEVEL_ALL); - LogComponentEnable ("LenaHelper", LOG_LEVEL_ALL); - LogComponentEnable ("BuildingsPropagationLossModel", LOG_LEVEL_ALL); - // Create Nodes: eNodeB and UE NodeContainer enbNodes; NodeContainer ueNodes; diff --git a/src/lte/examples/lena-fading.cc b/src/lte/examples/lena-fading.cc index 2cdc75a9d..d7d60e388 100644 --- a/src/lte/examples/lena-fading.cc +++ b/src/lte/examples/lena-fading.cc @@ -48,13 +48,10 @@ int main (int argc, char *argv[]) //cmd.Parse (argc, argv); Ptr lena = CreateObject (); - + // Uncomment to enable logging //lena->EnableLogComponents (); - LogComponentEnable ("LenaHelper", LOG_LEVEL_ALL); - LogComponentEnable ("TraceFadingLossModel", LOG_LEVEL_ALL); - lena->SetAttribute ("FadingModel", StringValue ("ns3::TraceFadingLossModel")); std::ifstream ifTraceFile; @@ -97,8 +94,6 @@ int main (int argc, char *argv[]) // Create Devices and install them in the Nodes (eNB and UE) NetDeviceContainer enbDevs; NetDeviceContainer ueDevs; - //lena->SetSchedulerType ("ns3::RrFfMacScheduler"); - lena->SetSchedulerType ("ns3::PfFfMacScheduler"); enbDevs = lena->InstallEnbDevice (enbNodes); ueDevs = lena->InstallUeDevice (ueNodes); diff --git a/src/lte/examples/epc-gtpu-tunnel-example.cc b/src/lte/examples/lena-gtpu-tunnel.cc similarity index 100% rename from src/lte/examples/epc-gtpu-tunnel-example.cc rename to src/lte/examples/lena-gtpu-tunnel.cc diff --git a/src/lte/examples/inter-cell-interference.cc b/src/lte/examples/lena-intercell-interference.cc similarity index 95% rename from src/lte/examples/inter-cell-interference.cc rename to src/lte/examples/lena-intercell-interference.cc index b161da18a..b99f0e2dc 100644 --- a/src/lte/examples/inter-cell-interference.cc +++ b/src/lte/examples/lena-intercell-interference.cc @@ -32,6 +32,11 @@ using namespace ns3; +/** + * This simulation script creates two eNodeBs and drops randomly several UEs in + * a disc around them (same number on both). The number of UEs , the radius of + * that disc and the distance between the eNodeBs can be configured. + */ int main (int argc, char *argv[]) { double enbDist = 100.0; diff --git a/src/lte/examples/lena-extract-pathloss.cc b/src/lte/examples/lena-pathloss-traces.cc similarity index 99% rename from src/lte/examples/lena-extract-pathloss.cc rename to src/lte/examples/lena-pathloss-traces.cc index 6bdee2541..db1f6d0ed 100644 --- a/src/lte/examples/lena-extract-pathloss.cc +++ b/src/lte/examples/lena-pathloss-traces.cc @@ -127,9 +127,6 @@ UplinkGlobalPathlossDatabase::UpdatePathloss (std::string context, } - - - int main (int argc, char *argv[]) { double enbDist = 20.0; @@ -214,8 +211,6 @@ int main (int argc, char *argv[]) ue2mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel"); ue2mobility.Install (ueNodes2); - - // Create Devices and install them in the Nodes (eNB and UE) NetDeviceContainer enbDevs; NetDeviceContainer ueDevs1; diff --git a/src/lte/examples/lena-runtime-profiler.cc b/src/lte/examples/lena-profiling.cc similarity index 97% rename from src/lte/examples/lena-runtime-profiler.cc rename to src/lte/examples/lena-profiling.cc index b3389b83e..bff661964 100644 --- a/src/lte/examples/lena-runtime-profiler.cc +++ b/src/lte/examples/lena-profiling.cc @@ -23,12 +23,11 @@ #include "ns3/mobility-module.h" #include "ns3/lte-module.h" #include "ns3/config-store.h" -//#include "ns3/gtk-config-store.h" #include - #include #include #include +//#include "ns3/gtk-config-store.h" using namespace ns3; using std::vector; diff --git a/src/lte/examples/lena-rlc-calculator.cc b/src/lte/examples/lena-rlc-traces.cc similarity index 95% rename from src/lte/examples/lena-rlc-calculator.cc rename to src/lte/examples/lena-rlc-traces.cc index b47f919e0..8aa1c54d7 100644 --- a/src/lte/examples/lena-rlc-calculator.cc +++ b/src/lte/examples/lena-rlc-traces.cc @@ -46,6 +46,7 @@ int main (int argc, char *argv[]) lena->SetAttribute ("PathlossModel", StringValue ("ns3::FriisSpectrumPropagationLossModel")); // Enable LTE log components //lena->EnableLogComponents (); + lena->EnableRlcTraces(); // Create Nodes: eNodeB and UE NodeContainer enbNodes; @@ -74,13 +75,13 @@ int main (int argc, char *argv[]) EpsBearer bearer (q); lena->ActivateEpsBearer (ueDevs, bearer, LteTft::Default ()); - Simulator::Stop (Seconds (0.2)); + Simulator::Stop (Seconds (2)); lena->EnableMacTraces (); lena->EnableRlcTraces (); - double distance_temp [] = { 10000,10000,10000}; //{10000, 10000, 10000}; + double distance_temp [] = { 10000,10000,10000}; std::vector userDistance; userDistance.assign (distance_temp, distance_temp + 3); for (int i = 0; i < 3; i++) @@ -97,7 +98,5 @@ int main (int argc, char *argv[]) Simulator::Destroy (); - // Generate RLC output - return 0; } diff --git a/src/lte/examples/lena-epc-first.cc b/src/lte/examples/lena-simple-epc.cc similarity index 90% rename from src/lte/examples/lena-epc-first.cc rename to src/lte/examples/lena-simple-epc.cc index 55775bf76..0607b6d62 100644 --- a/src/lte/examples/lena-epc-first.cc +++ b/src/lte/examples/lena-simple-epc.cc @@ -31,21 +31,23 @@ #include "ns3/config-store.h" //#include "ns3/gtk-config-store.h" +using namespace ns3; + /** * Sample simulation script for LTE+EPC. It instantiates several eNodeB, * attaches one UE per eNodeB starts a flow for each UE to and from a remote host. * It also starts yet another flow between each UE pair. */ - -using namespace ns3; NS_LOG_COMPONENT_DEFINE ("EpcFirstExample"); int main (int argc, char *argv[]) { uint16_t numberOfNodes = 2; - uint32_t simTime = 4; - double distance = 10.0; + uint32_t simTime = 5; + double distance = 60.0; + // Inter packet interval in ms + double interPacketInterval = 1; // Command line arguments CommandLine cmd; @@ -146,8 +148,14 @@ main (int argc, char *argv[]) serverApps = ulPacketSinkHelper.Install (remoteHost); serverApps = packetSinkHelper.Install (ueNodes.Get(u)); UdpClientHelper dlClient (ueIpIface.GetAddress (u), dlPort); + dlClient.SetAttribute ("Interval", TimeValue (MilliSeconds(interPacketInterval))); + dlClient.SetAttribute ("MaxPackets", UintegerValue(1000000)); UdpClientHelper ulClient (remoteHostAddr, ulPort); + ulClient.SetAttribute ("Interval", TimeValue (MilliSeconds(interPacketInterval))); + ulClient.SetAttribute ("MaxPackets", UintegerValue(1000000)); UdpClientHelper client (ueIpIface.GetAddress (u), otherPort); + client.SetAttribute ("Interval", TimeValue (MilliSeconds(interPacketInterval))); + client.SetAttribute ("MaxPackets", UintegerValue(1000000)); clientApps = dlClient.Install (remoteHost); clientApps = ulClient.Install (ueNodes.Get(u)); if (u+1 < ueNodes.GetN ()) @@ -162,9 +170,9 @@ main (int argc, char *argv[]) } serverApps.Start (Seconds (0.01)); clientApps.Start (Seconds (0.01)); - - // Enable PCAP tracing - p2ph.EnablePcapAll("lena-epc-first"); + lteHelper->EnableTraces (); + // Uncomment to enable PCAP tracing + //p2ph.EnablePcapAll("lena-epc-first"); Simulator::Stop(Seconds(simTime)); Simulator::Run(); diff --git a/src/lte/examples/lena-first-sim.cc b/src/lte/examples/lena-simple.cc similarity index 84% rename from src/lte/examples/lena-first-sim.cc rename to src/lte/examples/lena-simple.cc index 5effc1d4d..ad27f0012 100644 --- a/src/lte/examples/lena-first-sim.cc +++ b/src/lte/examples/lena-simple.cc @@ -25,6 +25,7 @@ #include "ns3/lte-module.h" #include "ns3/config-store.h" //#include "ns3/gtk-config-store.h" + using namespace ns3; int main (int argc, char *argv[]) @@ -41,21 +42,14 @@ int main (int argc, char *argv[]) ConfigStore inputConfig; inputConfig.ConfigureDefaults (); - // parse again so you can override default values from the command line + // Parse again so you can override default values from the command line cmd.Parse (argc, argv); Ptr lena = CreateObject (); + // Uncomment to enable logging //lena->EnableLogComponents (); - // LogComponentEnable ("LtePhy", LOG_LEVEL_ALL); - LogComponentEnable ("LteEnbPhy", LOG_LEVEL_ALL); - // LogComponentEnable ("LteUePhy", LOG_LEVEL_ALL); -// LogComponentEnable ("PfFfMacScheduler", LOG_LEVEL_ALL); - LogComponentEnable ("LenaHelper", LOG_LEVEL_ALL); - LogComponentEnable ("BuildingsPropagationLossModel", LOG_LEVEL_ALL); - LogComponentEnable ("BuildingsPropagationLossModel", LOG_LEVEL_ALL); - // Create Nodes: eNodeB and UE NodeContainer enbNodes; NodeContainer ueNodes; @@ -72,8 +66,9 @@ int main (int argc, char *argv[]) // Create Devices and install them in the Nodes (eNB and UE) NetDeviceContainer enbDevs; NetDeviceContainer ueDevs; + // Default scheduler is PF, uncomment to use RR //lena->SetSchedulerType ("ns3::RrFfMacScheduler"); - lena->SetSchedulerType ("ns3::PfFfMacScheduler"); + enbDevs = lena->InstallEnbDevice (enbNodes); ueDevs = lena->InstallUeDevice (ueNodes); diff --git a/src/lte/examples/profiling-reference.cc b/src/lte/examples/profiling-reference.cc deleted file mode 100644 index f6fad1def..000000000 --- a/src/lte/examples/profiling-reference.cc +++ /dev/null @@ -1,135 +0,0 @@ -/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */ -/* - * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC) - * - * 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: Jaume Nin - */ - - -#include "ns3/core-module.h" -#include "ns3/network-module.h" -#include "ns3/mobility-module.h" -#include "ns3/lte-module.h" -#include "ns3/config-store.h" -//#include "ns3/gtk-config-store.h" - -#include -#include -#include - -using namespace ns3; -using std::vector; - -int main (int argc, char *argv[]) -{ - double radius = 0.0; - uint32_t nEnb = 1; - uint32_t nUe = 1; - double enbDist = 100; - CommandLine cmd; - - cmd.AddValue ("nEnb", "Number of eNodeBs", nEnb); - cmd.AddValue ("nUe", "Number of UEs", nUe); - cmd.AddValue ("radius", "the radius of the disc where UEs are placed around an eNB", radius); - cmd.Parse (argc, argv); - - ConfigStore inputConfig; - inputConfig.ConfigureDefaults (); - - // parse again so you can override default values from the command line - cmd.Parse (argc, argv); - - // determine the string tag that identifies this simulation run - // this tag is then appended to all filenames - - IntegerValue runValue; - GlobalValue::GetValueByName ("RngRun", runValue); - -// std::ostringstream tag; -/* tag << "_enbDist" << std::setw(3) << std::setfill ('0') << std::fixed << std::setprecision (0) << enbDist - << "_radius" << std::setw(3) << std::setfill ('0') << std::fixed << std::setprecision (0) << radius - << "_nUe" << std::setw(3) << std::setfill('0') << nUe - << "_rngRun" << std::setw(3) << std::setfill('0') << runValue.Get () ; -*/ - Ptr lena = CreateObject (); - lena->EnableLogComponents (); - - // Create Nodes: eNodeB and UE - NodeContainer enbNodes; - vector ueNodes; - - enbNodes.Create (nEnb); - for (uint32_t i = 0; i < nEnb; i++) - { - NodeContainer ueNode; - ueNode.Create (nUe); - ueNodes.push_back (ueNode); - } - - // Position of eNBs - Ptr positionAlloc = CreateObject (); - for (uint32_t i = 0; i < nEnb; i++) - { - positionAlloc->Add (Vector (enbDist * i, enbDist * i, 0.0)); - } - - MobilityHelper enbMobility; - enbMobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel"); - enbMobility.SetPositionAllocator (positionAlloc); - enbMobility.Install (enbNodes); - - // Position of UEs attached to eNB - vector ueMobility; - for (uint32_t i = 0; i < nEnb; i++) - { - MobilityHelper ueMob; - ueMob.SetPositionAllocator ("ns3::UniformDiscPositionAllocator", - "X", DoubleValue (enbDist * i), - "Y", DoubleValue (enbDist * i), - "rho", DoubleValue (radius)); - ueMob.SetMobilityModel ("ns3::ConstantPositionMobilityModel"); - ueMobility.push_back (ueMob); - ueMobility[i].Install (ueNodes[i]); - } - - // Create Devices and install them in the Nodes (eNB and UE) - NetDeviceContainer enbDevs; - vector ueDevs; - //NetDeviceContainer ueDevs2; - enbDevs = lena->InstallEnbDevice (enbNodes); - for (uint32_t i = 0; i < nEnb; i++) - { - NetDeviceContainer ueDev = lena->InstallUeDevice (ueNodes[i]); - ueDevs.push_back (ueDev); - lena->Attach (ueDev, enbDevs.Get (i)); - enum EpsBearer::Qci q = EpsBearer::GBR_CONV_VOICE; - EpsBearer bearer (q); - lena->ActivateEpsBearer (ueDev, bearer, LteTft::Default ()); - - - } - - Simulator::Stop (Seconds (60)); - //lena->EnableRlcTraces (); - - Simulator::Run (); - - /*GtkConfigStore config; - config.ConfigureAttributes ();*/ - - Simulator::Destroy (); - return 0; -} diff --git a/src/lte/examples/wscript b/src/lte/examples/wscript index de2e72d8f..1d73a54d5 100644 --- a/src/lte/examples/wscript +++ b/src/lte/examples/wscript @@ -1,27 +1,31 @@ ## -*- Mode: python; py-indent-offset: 4; indent-tabs-mode: nil; coding: utf-8; -*- def build(bld): - obj = bld.create_ns3_program('lena-first-sim', + obj = bld.create_ns3_program('lena-cqi-threshold', ['lte']) - obj.source = 'lena-first-sim.cc' - obj = bld.create_ns3_program('inter-cell-interference', - ['lte']) - obj.source = 'inter-cell-interference.cc' - obj = bld.create_ns3_program('lena-rlc-calculator', - ['lte']) - obj.source = 'lena-rlc-calculator.cc' + obj.source = 'lena-cqi-threshold.cc' obj = bld.create_ns3_program('lena-fading', ['lte']) obj.source = 'lena-fading.cc' - obj = bld.create_ns3_program('lena-cqi-threshold', + obj = bld.create_ns3_program('lena-gtpu-tunnel', ['lte']) - obj.source = 'lena-cqi-threshold.cc' - obj = bld.create_ns3_program('lena-runtime-profiler', + obj.source = 'lena-gtpu-tunnel.cc' + obj = bld.create_ns3_program('lena-intercell-interference', ['lte']) - obj.source = 'lena-runtime-profiler.cc' - obj = bld.create_ns3_program('lena-extract-pathloss', + obj.source = 'lena-intercell-interference.cc' + obj = bld.create_ns3_program('lena-pathloss-traces', ['lte']) - obj.source = 'lena-extract-pathloss.cc' - obj = bld.create_ns3_program('lena-epc-first', + obj.source = 'lena-pathloss-traces.cc' + obj = bld.create_ns3_program('lena-profiling', ['lte']) - obj.source = 'lena-epc-first.cc' + obj.source = 'lena-profiling.cc' + obj = bld.create_ns3_program('lena-rlc-traces', + ['lte']) + obj.source = 'lena-rlc-traces.cc' + obj = bld.create_ns3_program('lena-simple', + ['lte']) + obj.source = 'lena-simple.cc' + obj = bld.create_ns3_program('lena-simple-epc', + ['lte']) + obj.source = 'lena-simple-epc.cc' + diff --git a/src/lte/helper/lena-helper.cc b/src/lte/helper/lena-helper.cc index b375d60f1..7ff690fd2 100644 --- a/src/lte/helper/lena-helper.cc +++ b/src/lte/helper/lena-helper.cc @@ -525,6 +525,7 @@ LenaHelper::EnableLogComponents (void) LogComponentEnable ("LteEnbMac", LOG_LEVEL_ALL); LogComponentEnable ("LteUeMac", LOG_LEVEL_ALL); LogComponentEnable ("LteRlc", LOG_LEVEL_ALL); + LogComponentEnable ("LteRlcUm", LOG_LEVEL_ALL); LogComponentEnable ("RrFfMacScheduler", LOG_LEVEL_ALL); LogComponentEnable ("PfFfMacScheduler", LOG_LEVEL_ALL); @@ -537,7 +538,7 @@ LenaHelper::EnableLogComponents (void) LogComponentEnable ("LteSinrChunkProcessor", LOG_LEVEL_ALL); std::string propModelStr = m_dlPathlossModelFactory.GetTypeId ().GetName ().erase (0,5).c_str (); - +/* const char* propModel = m_dlPathlossModelFactory.GetTypeId ().GetName ().erase (0,5).c_str (); if (propModelStr.compare ("RandomPropagationLossModel") || propModelStr.compare ("FriisPropagationLossModel")|| @@ -562,7 +563,7 @@ LenaHelper::EnableLogComponents (void) LogComponentEnable (fadingModel, LOG_LEVEL_ALL); } LogComponentEnable ("SingleModelSpectrumChannel", LOG_LEVEL_ALL); - +*/ LogComponentEnable ("LteNetDevice", LOG_LEVEL_ALL); LogComponentEnable ("LteUeNetDevice", LOG_LEVEL_ALL); LogComponentEnable ("LteEnbNetDevice", LOG_LEVEL_ALL); @@ -571,7 +572,13 @@ LenaHelper::EnableLogComponents (void) LogComponentEnable ("MacStatsCalculator", LOG_LEVEL_ALL); } - +void +LenaHelper::EnableTraces (void) +{ + EnableMacTraces (); + EnableRlcTraces (); + EnablePdcpTraces (); +} void LenaHelper::EnableRlcTraces (void) @@ -580,9 +587,6 @@ LenaHelper::EnableRlcTraces (void) EnableUlRlcTraces (); } - - - uint64_t FindImsiFromEnbRlcPath (std::string path) { @@ -634,7 +638,7 @@ FindImsiFromUeRlcPath (std::string path) { NS_LOG_FUNCTION (path); // Sample path input: - // /NodeList/#NodeId/DeviceList/#DeviceId/LteUeRrc/RlcMap/#LCID/RxPDU + // /NodeList/#NodeId/DeviceList/#DeviceId/LteUeRrc/RadioBearer/#LCID/RxPDU // We retrieve the LteUeNetDevice path std::string lteUeNetDevicePath = path.substr (0, path.find ("/LteUeRrc")); @@ -822,7 +826,7 @@ DlSchedulingCallback (Ptr macStats, void LenaHelper::EnableUlRlcTraces (void) { - Config::Connect ("/NodeList/*/DeviceList/*/LteUeRrc/RlcMap/*/TxPDU", + Config::Connect ("/NodeList/*/DeviceList/*/LteUeRrc/RadioBearerMap/*/LteRlc/TxPDU", MakeBoundCallback (&UlTxPduCallback, m_rlcStats)); Config::Connect ("/NodeList/*/DeviceList/*/LteEnbRrc/UeMap/*/RadioBearerMap/*/LteRlc/RxPDU", MakeBoundCallback (&UlRxPduCallback, m_rlcStats)); diff --git a/src/lte/helper/lena-helper.h b/src/lte/helper/lena-helper.h index 558e4186c..a2ff8bc31 100644 --- a/src/lte/helper/lena-helper.h +++ b/src/lte/helper/lena-helper.h @@ -188,6 +188,11 @@ public: */ void EnableLogComponents (void); + /** + * Enables trace sinks for MAC, RLC and PDCP + */ + void EnableTraces (void); + /** * Enable trace sinks for MAC layer */ diff --git a/src/lte/test/examples-to-run.py b/src/lte/test/examples-to-run.py index afe974267..c4b7324f5 100644 --- a/src/lte/test/examples-to-run.py +++ b/src/lte/test/examples-to-run.py @@ -9,11 +9,11 @@ # # See test.py for more information. cpp_examples = [ - ("lena-first-sim", "True", "True"), - ("inter-cell-interference", "True", "True"), - ("lena-rlc-calculator", "True", "True"), - ("lena-runtime-profiler", "True", "True"), - ("lena-extract-pathloss", "True", "True"), + ("lena-simple", "True", "True"), + ("lena-intercell-interference", "True", "True"), + ("lena-rlc-traces", "True", "True"), + ("lena-profiling", "True", "True"), + ("lena-pathloss-traces", "True", "True"), ("lena-fading", "True", "True"), ] diff --git a/src/lte/test/lte-test-run-time.pl b/src/lte/test/lte-test-run-time.pl index d257c21f2..9b76ed7b0 100755 --- a/src/lte/test/lte-test-run-time.pl +++ b/src/lte/test/lte-test-run-time.pl @@ -12,7 +12,7 @@ print FILE "#sTime\tnFloors\tnEnb\tnUe\trTime\trTDev\n"; my @nUe = ( 1, 5, 10, 15, 20, 25, 30 ); my @nEnb = ( 1, 2, 4, 6, 8, 12, 14, 18, 22 ); my @nFloors = ( 0, 1 ); -my @simTime = ( 1, 5, 10, 20, 30, 40 ); +my @simTime = ( 1, 5); my $traceDirectory = "."; my $traceDirectory = getcwd() . "/"; @@ -28,7 +28,7 @@ foreach my $time (@simTime) my $timeStats = Statistics::Descriptive::Full->new(); for ( my $iteration = 0 ; $iteration < $nIterations ; $iteration++ ) { - my $launch = "time ./waf --run \'lena-runtime-profiler --simTime=$time --nUe=$ue --nEnb=$enb --nFloors=$floor --traceDirectory=$traceDirectory\'"; + my $launch = "time ./waf --run \'lena-profiling --simTime=$time --nUe=$ue --nEnb=$enb --nFloors=$floor --traceDirectory=$traceDirectory\'"; my $out, my $err; print "$launch\n"; capture { system($launch ) } \$out, \$err;