From a6f644d659222548eecd08ee6c7d5faa62dc48f2 Mon Sep 17 00:00:00 2001 From: sourabhjains Date: Mon, 19 Mar 2018 22:39:53 +0530 Subject: [PATCH] Add iperf3 Support --- example/dce-iperf.cc | 120 ++++++++++++++++++++++++++++--------------- model/libc-ns3.h | 1 + 2 files changed, 81 insertions(+), 40 deletions(-) diff --git a/example/dce-iperf.cc b/example/dce-iperf.cc index deffc8c7..b4edc67b 100644 --- a/example/dce-iperf.cc +++ b/example/dce-iperf.cc @@ -8,6 +8,11 @@ #include "ns3/constant-position-mobility-model.h" #include "ccnx/misc-tools.h" +/** + * Comment to use iperf2 instead + */ +#define IPERF3 + using namespace ns3; NS_LOG_COMPONENT_DEFINE ("DceIperf"); // =========================================================================== @@ -45,13 +50,18 @@ int main (int argc, char *argv[]) NodeContainer nodes; nodes.Create (2); + // Provide tmp directory to iperf3 to create stream + #ifdef IPERF3 + UtilsEnsureDirectoryExists (UtilsGetAbsRealFilePath (nodes.Get (0)->GetId (), "/tmp")); + UtilsEnsureDirectoryExists (UtilsGetAbsRealFilePath (nodes.Get (1)->GetId (), "/tmp")); + #endif + PointToPointHelper pointToPoint; pointToPoint.SetDeviceAttribute ("DataRate", StringValue ("5Mbps")); pointToPoint.SetChannelAttribute ("Delay", StringValue ("1ms")); - NetDeviceContainer devices, devices2; + NetDeviceContainer devices; devices = pointToPoint.Install (nodes); - devices2 = pointToPoint.Install (nodes); DceManagerHelper dceManager; dceManager.SetTaskManagerAttribute ("FiberManagerType", StringValue ("UcontextFiberManager")); @@ -92,8 +102,6 @@ int main (int argc, char *argv[]) Ipv4AddressHelper address; address.SetBase ("10.1.1.0", "255.255.255.252"); Ipv4InterfaceContainer interfaces = address.Assign (devices); - address.SetBase ("10.1.2.0", "255.255.255.252"); - interfaces = address.Assign (devices2); // setup ip routes Ipv4GlobalRoutingHelper::PopulateRoutingTables (); @@ -110,42 +118,74 @@ int main (int argc, char *argv[]) dce.SetStackSize (1 << 20); - // Launch iperf client on node 0 - dce.SetBinary ("iperf"); - dce.ResetArguments (); - dce.ResetEnvironment (); - dce.AddArgument ("-c"); - dce.AddArgument ("10.1.1.2"); - dce.AddArgument ("-i"); - dce.AddArgument ("1"); - dce.AddArgument ("--time"); - dce.AddArgument ("10"); - if (useUdp) - { - dce.AddArgument ("-u"); - dce.AddArgument ("-b"); - dce.AddArgument (bandWidth); - } - - apps = dce.Install (nodes.Get (0)); - apps.Start (Seconds (0.7)); - apps.Stop (Seconds (20)); - - // Launch iperf server on node 1 - dce.SetBinary ("iperf"); - dce.ResetArguments (); - dce.ResetEnvironment (); - dce.AddArgument ("-s"); - dce.AddArgument ("-P"); - dce.AddArgument ("1"); - if (useUdp) - { - dce.AddArgument ("-u"); - } - - apps = dce.Install (nodes.Get (1)); - - pointToPoint.EnablePcapAll ("iperf-" + stack, false); + #ifdef IPERF3 + dce.SetBinary ("iperf3"); + dce.ResetArguments (); + dce.ResetEnvironment (); + dce.AddArgument ("-c"); + dce.AddArgument ("10.1.1.2"); + dce.AddArgument ("--interval=1"); + dce.AddArgument ("--time=10"); + dce.AddArgument ("--verbose"); + dce.AddArgument ("--json"); + dce.AddArgument ("--logfile=client.res"); + + apps = dce.Install (nodes.Get (0)); + apps.Start (Seconds (3.0)); + apps.Stop (Seconds(20)); + + dce.SetBinary ("iperf3"); + dce.ResetArguments (); + dce.ResetEnvironment (); + dce.AddArgument ("--verbose"); + dce.AddArgument ("--json"); + dce.AddArgument ("--logfile=server.res"); + dce.AddArgument ("--bind=10.1.1.2"); + dce.AddArgument ("--server"); + + if (useUdp) { + dce.AddArgument ("--udp"); + } + + apps = dce.Install (nodes.Get (1)); + + #else + // Launch iperf client on node 0 + dce.SetBinary ("iperf"); + dce.ResetArguments (); + dce.ResetEnvironment (); + dce.AddArgument ("-c"); + dce.AddArgument ("10.1.1.2"); + dce.AddArgument ("-i"); + dce.AddArgument ("1"); + dce.AddArgument ("--time"); + dce.AddArgument ("10"); + if (useUdp) + { + dce.AddArgument ("-u"); + dce.AddArgument ("-b"); + dce.AddArgument (bandWidth); + } + apps = dce.Install (nodes.Get (0)); + apps.Start (Seconds (0.7)); + apps.Stop (Seconds (20)); + + // Launch iperf server on node 1 + dce.SetBinary ("iperf"); + dce.ResetArguments (); + dce.ResetEnvironment (); + dce.AddArgument ("-s"); + dce.AddArgument ("-P"); + dce.AddArgument ("1"); + if (useUdp) + { + dce.AddArgument ("-u"); + } + + apps = dce.Install (nodes.Get (1)); + #endif + + pointToPoint.EnablePcapAll ("iperf-" + stack, false); apps.Start (Seconds (0.6)); diff --git a/model/libc-ns3.h b/model/libc-ns3.h index 3294921f..6e2eaa80 100644 --- a/model/libc-ns3.h +++ b/model/libc-ns3.h @@ -383,6 +383,7 @@ DCE (open64) DCE (unlinkat) // TIME.H +NATIVE (clock) // without this iperf3 crash with code 127 DCE (nanosleep) DCE (asctime) NATIVE (asctime_r)