From 733c4ece17ee8fbe42db34836c0d206b8910c773 Mon Sep 17 00:00:00 2001 From: Tommaso Pecorella Date: Mon, 26 Jan 2015 09:14:26 +0100 Subject: [PATCH] TCP comparison example enhancements --- examples/tcp/tcp-variants-comparison.cc | 58 ++++++++++++++++++++++++- 1 file changed, 57 insertions(+), 1 deletion(-) diff --git a/examples/tcp/tcp-variants-comparison.cc b/examples/tcp/tcp-variants-comparison.cc index 671775fad..138de556e 100644 --- a/examples/tcp/tcp-variants-comparison.cc +++ b/examples/tcp/tcp-variants-comparison.cc @@ -56,8 +56,12 @@ NS_LOG_COMPONENT_DEFINE ("TcpVariantsComparison"); bool firstCwnd = true; bool firstSshThr = true; +bool firstRtt = true; +bool firstRto = true; Ptr cWndStream; Ptr ssThreshStream; +Ptr rttStream; +Ptr rtoStream; uint32_t cWndValue; uint32_t ssThreshValue; @@ -96,6 +100,28 @@ SsThreshTracer (uint32_t oldval, uint32_t newval) } } +static void +RttTracer (Time oldval, Time newval) +{ + if (firstRtt) + { + *rttStream->GetStream () << "0.0 " << oldval.GetSeconds () << std::endl; + firstRtt = false; + } + *rttStream->GetStream () << Simulator::Now ().GetSeconds () << " " << newval.GetSeconds () << std::endl; +} + +static void +RtoTracer (Time oldval, Time newval) +{ + if (firstRto) + { + *rtoStream->GetStream () << "0.0 " << oldval.GetSeconds () << std::endl; + firstRto = false; + } + *rtoStream->GetStream () << Simulator::Now ().GetSeconds () << " " << newval.GetSeconds () << std::endl; +} + static void TraceCwnd (std::string cwnd_tr_file_name) @@ -110,7 +136,23 @@ TraceSsThresh (std::string ssthresh_tr_file_name) { AsciiTraceHelper ascii; ssThreshStream = ascii.CreateFileStream (ssthresh_tr_file_name.c_str ()); - Config::ConnectWithoutContext ("/NodeList/1/$ns3::TcpL4Protocol/SocketList/0/SlowStartThreshold",MakeCallback (&SsThreshTracer)); + Config::ConnectWithoutContext ("/NodeList/1/$ns3::TcpL4Protocol/SocketList/0/SlowStartThreshold", MakeCallback (&SsThreshTracer)); +} + +static void +TraceRtt (std::string rtt_tr_file_name) +{ + AsciiTraceHelper ascii; + rttStream = ascii.CreateFileStream (rtt_tr_file_name.c_str ()); + Config::ConnectWithoutContext ("/NodeList/1/$ns3::TcpL4Protocol/SocketList/0/RTT", MakeCallback (&RttTracer)); +} + +static void +TraceRto (std::string rto_tr_file_name) +{ + AsciiTraceHelper ascii; + rtoStream = ascii.CreateFileStream (rto_tr_file_name.c_str ()); + Config::ConnectWithoutContext ("/NodeList/1/$ns3::TcpL4Protocol/SocketList/0/RTO", MakeCallback (&RtoTracer)); } int main (int argc, char *argv[]) @@ -124,6 +166,8 @@ int main (int argc, char *argv[]) std::string tr_file_name = ""; std::string cwnd_tr_file_name = ""; std::string ssthresh_tr_file_name = ""; + std::string rtt_tr_file_name = ""; + std::string rto_tr_file_name = ""; double data_mbytes = 0; uint32_t mtu_bytes = 400; uint16_t num_flows = 1; @@ -142,6 +186,8 @@ int main (int argc, char *argv[]) cmd.AddValue ("tr_name", "Name of output trace file", tr_file_name); cmd.AddValue ("cwnd_tr_name", "Name of output trace file", cwnd_tr_file_name); cmd.AddValue ("ssthresh_tr_name", "Name of output trace file", ssthresh_tr_file_name); + cmd.AddValue ("rtt_tr_name", "Name of output trace file", rtt_tr_file_name); + cmd.AddValue ("rto_tr_name", "Name of output trace file", rto_tr_file_name); cmd.AddValue ("data", "Number of Megabytes of data to transmit", data_mbytes); cmd.AddValue ("mtu", "Size of IP packets to send in bytes", mtu_bytes); cmd.AddValue ("num_flows", "Number of flows", num_flows); @@ -312,6 +358,16 @@ int main (int argc, char *argv[]) Simulator::Schedule (Seconds (0.00001), &TraceSsThresh, ssthresh_tr_file_name); } + if (rtt_tr_file_name.compare ("") != 0) + { + Simulator::Schedule (Seconds (0.00001), &TraceRtt, rtt_tr_file_name); + } + + if (rto_tr_file_name.compare ("") != 0) + { + Simulator::Schedule (Seconds (0.00001), &TraceRto, rto_tr_file_name); + } + } UnReLink.EnablePcapAll ("TcpVariantsComparison", true);