diff --git a/src/test/ns3tcp/ns3tcp-loss-test-suite.cc b/src/test/ns3tcp/ns3tcp-loss-test-suite.cc index c07986231..35607e4c1 100644 --- a/src/test/ns3tcp/ns3tcp-loss-test-suite.cc +++ b/src/test/ns3tcp/ns3tcp-loss-test-suite.cc @@ -69,7 +69,9 @@ class Ns3TcpLossTestCase : public TestCase public: Ns3TcpLossTestCase (); Ns3TcpLossTestCase (std::string tcpModel, uint32_t testCase); - virtual ~Ns3TcpLossTestCase () {} + virtual ~Ns3TcpLossTestCase () + { + } private: virtual void DoSetup (void); @@ -91,8 +93,8 @@ private: void Ipv4L3Tx (std::string context, Ptr packet, Ptr ipv4, uint32_t interface); void CwndTracer (uint32_t oldval, uint32_t newval); void WriteUntilBufferFull (Ptr localSocket, uint32_t txSpace); - void StartFlow (Ptr localSocket, - Ipv4Address servAddress, + void StartFlow (Ptr localSocket, + Ipv4Address servAddress, uint16_t servPort); }; @@ -132,16 +134,16 @@ Ns3TcpLossTestCase::DoSetup (void) // std::ostringstream oss; oss << "ns3tcp-loss-" << m_tcpModel << m_testCase << "-response-vectors.pcap"; - m_pcapFilename = CreateDataDirFilename(oss.str ()); + m_pcapFilename = CreateDataDirFilename (oss.str ()); if (m_writeVectors) { - m_pcapFile.Open (m_pcapFilename, std::ios::out|std::ios::binary); + m_pcapFile.Open (m_pcapFilename, std::ios::out | std::ios::binary); m_pcapFile.Init (PCAP_LINK_TYPE, PCAP_SNAPLEN); } else { - m_pcapFile.Open (m_pcapFilename, std::ios::in|std::ios::binary); + m_pcapFile.Open (m_pcapFilename, std::ios::in | std::ios::binary); NS_ABORT_MSG_UNLESS (m_pcapFile.GetDataLinkType () == PCAP_LINK_TYPE, "Wrong response vectors in directory: opening " << m_pcapFilename); @@ -161,9 +163,9 @@ Ns3TcpLossTestCase::Ipv4L3Tx (std::string context, Ptr packet, Ptr // We're not testing IP so remove and toss the header. In order to do this, // though, we need to copy the packet since we have a const version. // - Ptr p = packet->Copy (); + Ptr received = packet->Copy (); Ipv4Header ipHeader; - p->RemoveHeader (ipHeader); + received->RemoveHeader (ipHeader); // // What is left is the TCP header and any data that may be sent. We aren't @@ -179,10 +181,9 @@ Ns3TcpLossTestCase::Ipv4L3Tx (std::string context, Ptr packet, Ptr int64_t tMicroSeconds = tNow.GetMicroSeconds (); - m_pcapFile.Write (uint32_t (tMicroSeconds / 1000000), - uint32_t (tMicroSeconds % 1000000), - p - ); + m_pcapFile.Write (uint32_t (tMicroSeconds / 1000000), + uint32_t (tMicroSeconds % 1000000), + received); } else { @@ -190,16 +191,24 @@ Ns3TcpLossTestCase::Ipv4L3Tx (std::string context, Ptr packet, Ptr // Read the TCP under test expected response from the expected vector // file and see if it still does the right thing. // - uint8_t expected[PCAP_SNAPLEN]; + uint8_t expectedBuffer[PCAP_SNAPLEN]; uint32_t tsSec, tsUsec, inclLen, origLen, readLen; - m_pcapFile.Read (expected, sizeof(expected), tsSec, tsUsec, inclLen, origLen, readLen); + m_pcapFile.Read (expectedBuffer, sizeof(expectedBuffer), tsSec, tsUsec, inclLen, origLen, readLen); - NS_LOG_DEBUG ("read " << readLen); + NS_LOG_INFO ("read " << readLen << " bytes"); uint8_t *actual = new uint8_t[readLen]; - p->CopyData (actual, readLen); + received->CopyData (actual, readLen); - int result = memcmp (actual, expected, readLen); + int result = memcmp (actual, expectedBuffer, readLen); + + TcpHeader expectedHeader, receivedHeader; + Ptr expected = Create (expectedBuffer, readLen); + + expected->RemoveHeader (expectedHeader); + received->RemoveHeader (receivedHeader); + + NS_LOG_DEBUG ("Expected " << expectedHeader << " received: " << receivedHeader); delete [] actual; @@ -218,7 +227,7 @@ Ns3TcpLossTestCase::CwndTracer (uint32_t oldval, uint32_t newval) { if (m_writeLogging) { - *(m_osw->GetStream ()) << "Moving cwnd from " << oldval << " to " << newval + *(m_osw->GetStream ()) << "Moving cwnd from " << oldval << " to " << newval << " at time " << Simulator::Now ().GetSeconds () << " seconds" << std::endl; } @@ -226,7 +235,7 @@ Ns3TcpLossTestCase::CwndTracer (uint32_t oldval, uint32_t newval) //////////////////////////////////////////////////////////////////// // Implementing an "application" to send bytes over a TCP connection -void +void Ns3TcpLossTestCase::WriteUntilBufferFull (Ptr localSocket, uint32_t txSpace) { while (m_currentTxBytes < m_totalTxBytes) @@ -240,10 +249,10 @@ Ns3TcpLossTestCase::WriteUntilBufferFull (Ptr localSocket, uint32_t txSp if (txAvail == 0) { return; - }; + } if (m_writeLogging) { - std::clog << "Submitting " << toWrite + std::clog << "Submitting " << toWrite << " bytes to TCP socket" << std::endl; } int amountSent = localSocket->Send (0, toWrite, 0); @@ -254,7 +263,7 @@ Ns3TcpLossTestCase::WriteUntilBufferFull (Ptr localSocket, uint32_t txSp { if (m_writeLogging) { - std::clog << "Close socket at " + std::clog << "Close socket at " << Simulator::Now ().GetSeconds () << std::endl; } localSocket->Close (); @@ -262,14 +271,14 @@ Ns3TcpLossTestCase::WriteUntilBufferFull (Ptr localSocket, uint32_t txSp } } -void +void Ns3TcpLossTestCase::StartFlow (Ptr localSocket, Ipv4Address servAddress, uint16_t servPort) { if (m_writeLogging) { - std::clog << "Starting flow at time " + std::clog << "Starting flow at time " << Simulator::Now ().GetSeconds () << std::endl; } localSocket->Connect (InetSocketAddress (servAddress, servPort)); // connect @@ -291,21 +300,23 @@ Ns3TcpLossTestCase::DoRun (void) // s1-----------------r1-----------------k1 // // Example corresponding to simulations in the paper "Simulation-based - // Comparisons of Tahoe, Reno, and SACK TCP + // Comparisons of Tahoe, Reno, and SACK TCP + + Config::SetDefault ("ns3::TcpSocketBase::Sack", BooleanValue (false)); std::ostringstream tcpModel; tcpModel << "ns3::Tcp" << m_tcpModel; - if (m_tcpModel.compare("WestwoodPlus") == 0) + if (m_tcpModel.compare ("WestwoodPlus") == 0) { - Config::SetDefault("ns3::TcpL4Protocol::SocketType", - TypeIdValue (TcpWestwood::GetTypeId())); - Config::SetDefault("ns3::TcpWestwood::ProtocolType", - EnumValue(TcpWestwood::WESTWOODPLUS)); + Config::SetDefault ("ns3::TcpL4Protocol::SocketType", + TypeIdValue (TcpWestwood::GetTypeId ())); + Config::SetDefault ("ns3::TcpWestwood::ProtocolType", + EnumValue (TcpWestwood::WESTWOODPLUS)); } else { - Config::SetDefault ("ns3::TcpL4Protocol::SocketType", - StringValue (tcpModel.str ())); + Config::SetDefault ("ns3::TcpL4Protocol::SocketType", + StringValue (tcpModel.str ())); } Config::SetDefault ("ns3::TcpSocket::SegmentSize", UintegerValue (1000)); @@ -374,10 +385,10 @@ Ns3TcpLossTestCase::DoRun (void) // registering callbacks in function StarFlow(). Ptr localSocket = Socket::CreateSocket (s1r1.Get (0), TcpSocketFactory::GetTypeId ()); localSocket->Bind (); - Simulator::ScheduleNow (&Ns3TcpLossTestCase::StartFlow, - this, - localSocket, - ipInterfs.GetAddress (1), + Simulator::ScheduleNow (&Ns3TcpLossTestCase::StartFlow, + this, + localSocket, + ipInterfs.GetAddress (1), servPort); Config::Connect ("/NodeList/0/$ns3::Ipv4L3Protocol/Tx", diff --git a/src/test/ns3tcp/response-vectors/ns3tcp-loss-NewReno1-response-vectors.pcap b/src/test/ns3tcp/response-vectors/ns3tcp-loss-NewReno1-response-vectors.pcap index 8742169c0..b0e06acbd 100644 Binary files a/src/test/ns3tcp/response-vectors/ns3tcp-loss-NewReno1-response-vectors.pcap and b/src/test/ns3tcp/response-vectors/ns3tcp-loss-NewReno1-response-vectors.pcap differ diff --git a/src/test/ns3tcp/response-vectors/ns3tcp-loss-NewReno2-response-vectors.pcap b/src/test/ns3tcp/response-vectors/ns3tcp-loss-NewReno2-response-vectors.pcap index b314e4a31..0a0c614b0 100644 Binary files a/src/test/ns3tcp/response-vectors/ns3tcp-loss-NewReno2-response-vectors.pcap and b/src/test/ns3tcp/response-vectors/ns3tcp-loss-NewReno2-response-vectors.pcap differ diff --git a/src/test/ns3tcp/response-vectors/ns3tcp-loss-NewReno3-response-vectors.pcap b/src/test/ns3tcp/response-vectors/ns3tcp-loss-NewReno3-response-vectors.pcap index e9e4bd8fd..312837afe 100644 Binary files a/src/test/ns3tcp/response-vectors/ns3tcp-loss-NewReno3-response-vectors.pcap and b/src/test/ns3tcp/response-vectors/ns3tcp-loss-NewReno3-response-vectors.pcap differ diff --git a/src/test/ns3tcp/response-vectors/ns3tcp-loss-NewReno4-response-vectors.pcap b/src/test/ns3tcp/response-vectors/ns3tcp-loss-NewReno4-response-vectors.pcap index 5995a85d4..3d72e12eb 100644 Binary files a/src/test/ns3tcp/response-vectors/ns3tcp-loss-NewReno4-response-vectors.pcap and b/src/test/ns3tcp/response-vectors/ns3tcp-loss-NewReno4-response-vectors.pcap differ diff --git a/src/test/ns3tcp/response-vectors/ns3tcp-loss-Westwood2-response-vectors.pcap b/src/test/ns3tcp/response-vectors/ns3tcp-loss-Westwood2-response-vectors.pcap index 68dce709f..1c55fe609 100644 Binary files a/src/test/ns3tcp/response-vectors/ns3tcp-loss-Westwood2-response-vectors.pcap and b/src/test/ns3tcp/response-vectors/ns3tcp-loss-Westwood2-response-vectors.pcap differ diff --git a/src/test/ns3tcp/response-vectors/ns3tcp-loss-Westwood3-response-vectors.pcap b/src/test/ns3tcp/response-vectors/ns3tcp-loss-Westwood3-response-vectors.pcap index c20e01acb..5b38b8e82 100644 Binary files a/src/test/ns3tcp/response-vectors/ns3tcp-loss-Westwood3-response-vectors.pcap and b/src/test/ns3tcp/response-vectors/ns3tcp-loss-Westwood3-response-vectors.pcap differ diff --git a/src/test/ns3tcp/response-vectors/ns3tcp-loss-Westwood4-response-vectors.pcap b/src/test/ns3tcp/response-vectors/ns3tcp-loss-Westwood4-response-vectors.pcap index 84c31c900..1d3c91e17 100644 Binary files a/src/test/ns3tcp/response-vectors/ns3tcp-loss-Westwood4-response-vectors.pcap and b/src/test/ns3tcp/response-vectors/ns3tcp-loss-Westwood4-response-vectors.pcap differ diff --git a/src/test/ns3tcp/response-vectors/ns3tcp-loss-WestwoodPlus2-response-vectors.pcap b/src/test/ns3tcp/response-vectors/ns3tcp-loss-WestwoodPlus2-response-vectors.pcap index 68dce709f..1c55fe609 100644 Binary files a/src/test/ns3tcp/response-vectors/ns3tcp-loss-WestwoodPlus2-response-vectors.pcap and b/src/test/ns3tcp/response-vectors/ns3tcp-loss-WestwoodPlus2-response-vectors.pcap differ diff --git a/src/test/ns3tcp/response-vectors/ns3tcp-loss-WestwoodPlus3-response-vectors.pcap b/src/test/ns3tcp/response-vectors/ns3tcp-loss-WestwoodPlus3-response-vectors.pcap index c20e01acb..5b38b8e82 100644 Binary files a/src/test/ns3tcp/response-vectors/ns3tcp-loss-WestwoodPlus3-response-vectors.pcap and b/src/test/ns3tcp/response-vectors/ns3tcp-loss-WestwoodPlus3-response-vectors.pcap differ diff --git a/src/test/ns3tcp/response-vectors/ns3tcp-loss-WestwoodPlus4-response-vectors.pcap b/src/test/ns3tcp/response-vectors/ns3tcp-loss-WestwoodPlus4-response-vectors.pcap index 84c31c900..1d3c91e17 100644 Binary files a/src/test/ns3tcp/response-vectors/ns3tcp-loss-WestwoodPlus4-response-vectors.pcap and b/src/test/ns3tcp/response-vectors/ns3tcp-loss-WestwoodPlus4-response-vectors.pcap differ