From 0638daed2c7a10d56fc9aa8a55bcf83c36350027 Mon Sep 17 00:00:00 2001 From: Natale Patriciello Date: Fri, 3 Feb 2017 14:02:45 +0100 Subject: [PATCH] tcp: ns3-tcp-loss updated Before this patch, the test failed. The reason is in the following trace: Expected 49153 > 50000 [ACK] Seq=33001 Ack=1 Win=32768 received: 49153 > 50000 [ACK] Seq=33001 Ack=1 Win=32768 Expected 49153 > 50000 [ACK] Seq=34001 Ack=1 Win=32768 received: 49153 > 50000 [ACK] Seq=34001 Ack=1 Win=32768 Expected 49153 > 50000 [ACK] Seq=35001 Ack=1 Win=32768 received: 49153 > 50000 [ACK] Seq=15001 Ack=1 Win=32768 Expected 49153 > 50000 [ACK] Seq=15001 Ack=1 Win=32768 received: 49153 > 50000 [ACK] Seq=35001 Ack=1 Win=32768 Expected 49153 > 50000 [ACK] Seq=36001 Ack=1 Win=32768 received: 49153 > 50000 [ACK] Seq=36001 Ack=1 Win=32768 Expected 49153 > 50000 [ACK] Seq=37001 Ack=1 Win=32768 received: 49153 > 50000 [ACK] Seq=37001 Ack=1 Win=32768 The old implementation expected this sequences: 33001, 34001, 35001, 15001, while the new one expects 33001, 34001, 15001, 35001. Thanks to the SACK informations we can sent the (lost) 15001 one round before. --- src/test/ns3tcp/ns3tcp-loss-test-suite.cc | 83 ++++++++++-------- ...ns3tcp-loss-NewReno1-response-vectors.pcap | Bin 16216 -> 16216 bytes ...ns3tcp-loss-NewReno2-response-vectors.pcap | Bin 16296 -> 16296 bytes ...ns3tcp-loss-NewReno3-response-vectors.pcap | Bin 16376 -> 16376 bytes ...ns3tcp-loss-NewReno4-response-vectors.pcap | Bin 16456 -> 16456 bytes ...s3tcp-loss-Westwood2-response-vectors.pcap | Bin 16296 -> 16296 bytes ...s3tcp-loss-Westwood3-response-vectors.pcap | Bin 16376 -> 16376 bytes ...s3tcp-loss-Westwood4-response-vectors.pcap | Bin 16456 -> 16456 bytes ...p-loss-WestwoodPlus2-response-vectors.pcap | Bin 16296 -> 16296 bytes ...p-loss-WestwoodPlus3-response-vectors.pcap | Bin 16376 -> 16376 bytes ...p-loss-WestwoodPlus4-response-vectors.pcap | Bin 16456 -> 16456 bytes 11 files changed, 47 insertions(+), 36 deletions(-) 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 8742169c034bfeca43a5d6c3bf8abd3c266ce0e7..b0e06acbdbb1b7ad978141967f0a8e8a8158b3ee 100644 GIT binary patch delta 1414 zcmXZcT})eb7{~Dg|5EzOOMz18009}44rELjYuAIjSOUdkGG7t~@xlugA)1&-g0L*{ zLIW&Qm!FACi5KdYFq$QLVTO`jEODk%W8%dU#HyK2bCSxkp)>lM?MaRtMyCm zkgj4w-H>*|i4QY2rt4`ZLOiZDFg|)3 z89&09xD>I?%-0^}BaVsXJ&HCs=HWjcP2-g#Uac4PH#&O4`%{gy73KKxD*B>~*~Ivm z!&QtllOMHB^&fsEk2vOTc|e!&gT8}n&w#Wpvil{#n{DL0m7wU$~MeX3C3>$bF9tQTLl^r%>;E?7#o7T(#r zX6aJvh<<7dYqvFVXrhhY+c^`Q#4X(Epr>}O_$WQ$0&cY1#v3;BKkb;?w$TK>_m)u> zJ3ccy!24@Pqa9q)w$XBjqpnWQq=U1<^wEMD%<;U7kuL6}(>9BnWt#6~MM~Vt<6g|I zXqRKIzvR|5o}YJX9fQ~0^2Z!==U2BTaOSaFS&TK8>mcT6GtQlKb5_T=6P(3;%walS zFoTgE^5eGYsPig*jJ{J|&Ew@ay~^X6PrZuvIOg#!ucqy_=JmzL|(pC<6` zxKG($a{JhcXUIKHKF;DQ=5QY){p9y?zL+Vx+h?0Q=h%tk%rVDKVC)+qElrPpFeQ7Crvhew-pDj%n>%acCv|g;gsxOg$u<*{S z&zERo&@tY(OO(aiS4wm+=qQ(@w^Q_Vn%-~{_i+u=33^J=8;;>Fu3#d`-w!S&ZS%u| zQ9kJ$8a?fpcfK>4#?~#Pb-Y*Vl0W5`#kflon0m#fEbd)!=>V@^cWKmSmwt0;8E1ye N^a#KI*rVi7)Bo6c#1jAj delta 1380 zcmYk+U1(cn90u@{yiJpwoTN?Kq{)eGZEO0G*w3|^o#WmjZn8GKk%1T8iWl>XHofpp zYKlX}i_)qvo(*in1jP%ttT2&bT@mp@Tr0Z~FGA|T;s;rCqk_^dRD5Q8;nnZt5P1Gy zN$EoA!i^c-xqlfsJ&PGVge_fSoti!gk1vEAouaqsCsa2i_UJi7ip$@7P%sou8zJ21 z`}gUjU!p=+Y1$vcE-g_jAkiBLVJRS;!wuL9WFKHQWHHaT`38yGbc;qCnBFKcLvwVU z-fFb)Y-0p^P&(iBVltS;USkN?f-HvKr>BDq53vZk8j|9<>l(I03Kf2~npjMT;dGIf zo20YvX_(Df+-_oeGgF(HPG_hYeqa!@;c>BF5h#Y0SPRyn7FJm2`?Ha8c)~$krBh+X zN2K$cw_vqoQHe0Ug=sBpoi0)<%26fUSct0s{Ekj!-H6AOIC#~KxtKzU-`k3DL{Y|@ z67w`?N^$-xFN&tZl*!S@xdM8Q?$K*;DTbfdQH?9{>yi%pAthEm)3JQyHdR0BNVRfB zadzLz>CiH*&}5qw2Q>q8Z3@vg=C`qJYPNIeG}kW0oe%sdwkz@Gw|>;xC)`d=)5d=H zBlGa#^Sx*Qh5tQQkDjkQ8Gzj}fx7kxRy(*nx=TN%R;Lta|JJb3$-X;SPbd5BWIbIx z0-EoVqHo24jV>kbe(iwo5hX6}IxtO7H91kF`?eD`y7rjvlV3o8zD*TBf}{jPI4=wSVd`*Q-Q-j|&@g=NT7#eO%kT3)6Js zLl=tlVAF*f{q#>4GRZ>=^rd(`sx)@89(Ialzv9MnisMi698w%VwI1d8=@Lz+m`_VI z*)PTB3m(k%EAjd}9&FIzn;!TExZb-SOw*Nmo&!~bUeu^#%8Sh4p#^&L4KJ#6_No{5 z5c{~!a~M+C8({treiW$<^+9Zpz&N 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 b314e4a313cbf5cbc5fa35313f7c2455aa475b44..0a0c614b0130cad58743f49ed9c061102c75df36 100644 GIT binary patch delta 1383 zcmXZaKWrOi9LDifm*m`Y)6|#Pah#@Z^Ve~jrcIsJIj483RFG|S5(7izt_;QtMS2)w>-dmpc`MtmTllqfy zik6y|t+M4R5VUoGTNn$vs$&Uz!8g^pU~8Z6^oXs(1y{S+z(YL6#6?^Ak-jyIj@s&C z5uJ;!npiorje$$HlA~l{8GCpz>gZW0qSz%z$5_IY9nn5MMJq(EO+FrC0~2H9V+->( zdE>Tf*u*Xd!sL&UgB7fYLpmDs)WfCmzB`zWg!BTdI2rb|I}y@5csN1tFga0MR>ajd z7O;g4j82k|Ma)n1tznaM7XvZ!qx8cHW~Xemv5Lt_R~;;4`ZE1-7h^H{VF?q{RKaK1#$!xgVZPTQD&tc;I5QS^Ok-eR z;EP`d^e~>&+zf9Jcl0w_SLry*46um}49sx{+`{}dvayCe>|%DFJIv4-D>JTf-x}1* z8Q=JOZBSFQeIL#GN-r>jS!RH-IXW&f1B@n^0T$7kCl?DCSRx;{@D%HqUmzE23$F3% zbyL4C_{Jyinp$4;l}(29;UaI1M_9$Bgr^Sf;P!QP09!b@SjW?(YwUbrDYNVwD_>dKTlUrCe|MSwtMtE4f2^F@#t!G?3U7Lg9l#bIV04ZC zH|UEcY~nr!Zqt92Tr6N68>_An{$WHXtG@A~Gos8*a`|7oNp6aKtfF&^Jgi`PogF+g zx#sA-JL~|C-(?5zZH(P^^evWfFwOhpTWF;meU1hE3mYlN9AsA>@1N62D);~Q{O{+K zS5nB0++z;7h1LfBv4A~n zVAkawulG-UmebWIG)m8NE;c?c=hR!-p{ZXKMm<6zIHOCsZHPbXKYxH z@axTCeTV1&99HmN--q~p#MGDg*faGn&KFI+;rhnW$EH5RkDi-4!TZ0N%6Pu9o(pQv GoBj{9`_+#C delta 1390 zcmX}rJ#1TL6vlCm zX-rE4k8ps`F*|076VmF;4#kw>;GRh}Dh^58DUrZ_)V z@EqG%y2i|G&W~k$j!kqDj=Z#^Qpfx8sPq%g2PCK%B zjXBIXat}TH13Q>ZFo)~(CqWK;f-Q_qlLISQnk5e&&1y9^Ga@Imt~6)JF-IP(<01slP}c zlGI<+>bE~f$@%3Fk3aUy$ir2iU=0hWcxqe}(g76e|jw}C&TMIt6|A(lVyV}+w2VXv5n~+GTmYpSjH|k(atg>^sul= zFR+2eZDz7XFR+I#Ol{K(tYXPwNAU<_JNzdctxTViOpcvMDcR346Q1{T)Xh@=jSFj7 t=Dv$fwBMvYdRVwkeQcninGNn@)?pWPUV3O|(>7OKR&zJPPfN+gmMS{UGurWAhVF1Z7 zNL@g3-3dKGGG-)$>k5g1Aq^8!kz6A-RE#TzN*RnLwg?S9m zl8Xf#j?Gx)FxN46hJ0+GH{&a9n|d&lQVoB{9wuf}a?hID!wNpb4$hq!xr_0zsVCS9 zlW&tZM?M~66N3@*F^8G6VOBjiGdK#ra z&c^H$Tf16`-IFoz>HCKyi?g@+{nk9ak7YdR+G?-yoL%<6&YrP|13bcXlKpSc z7xUP|Cb}N|v4WYK^u;>HH|dWh^ls4?s~Fy*KNirr&3nQ!=I(HRY+%G4S;VwYKGx7k zlIyeoB==33dW04HCz%R7S`TW|%Ld+iH>ihbejd~d{OQ}EmN&D3z2`xFf~)@p^)tR) zn$Y}KHt^;4gg(H#dlUKrciu7-x|0n|ero6){PDohWBm9RL;sF_)6WJHe;fK5|A>Y3 Z7k=?ZNSmo_;PnqfdWgy2rt~5e{U2a9*3bX| delta 1398 zcmX}sF=!iS7{+nim&VFTmZh^L%d(v~v64t~6eo@o%V*_oXd#lqL52>FLZN{a6nQEX zYSbYeJSb|H@)Rm-Z3k7Q&_V~-o(dgQ&lwblZh_jKQ&3a_{ga9g$M3#xc^|#+d+I&u zJ^86@8V~<^N1LXnvT5nSbhL|czayXD(jIR3@9|hN1CH@#;f(GEJheFY1CDxF9CMTp zSZZP;aF55*$(UpO_^w}zLC@IvFrd$Z1-%SJbr`g@G8R>O+}1W$@fjYB+oQunLqmnn zgYt(8Z{Odvf_f10jK51m`XS`06C^{}QEc2&3Cq|%*w?nhm9 z@Oz9+hV>fDSeSCPi#zCxgmsK9T#NnZQ|v{kA9IX9LZ)V>J>{d+pC%6;;1R~-^l2)p z3T{tDM{+zn35nnim~q z&$9+t!!~xYkI4(vzeEmfVh2w!wm|*M`j`7g)$)93vxUZzh zb&>kmKr>AaEMfK%YmjzT!`Ilw!lJ9>W!3<<@EAL|c7=6GhV>N7_#Azyuu>V<`1w=6 zHZ$H^_cH~(pNeSu>bkze$M_0=#rM(?ompDf*J*ZO$<|A3_Nc+m4F4I_=5pcx_x)v0zN_rP4d#RuY~ddE&|IM}OY{L7 z*v2F5WA++zxXFC5iCsLwURIImffi3oE#B zgZkJ)bB!EW!u$&Lv4MR&!lF%%o7Be|o?sX4b#mOIK5pS5b}*eI$13%)j0ZXX#&W0S tzfBI#mD}t~mihxtha8+s*uysF*VqHcRRasIt0UZTUE}y;zh1a={{pP2)x7`! 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 5995a85d49ea9e5a362bded95b8b597ff3b06b99..3d72e12eb6232e561ffcf579b270fba515fd48af 100644 GIT binary patch delta 1385 zcmXZbO=uH&9LDj=xNMx6PMv8prsa^<_PB>bmb-H@Y*Qn$EO$! zy0Ul7mJD9RDn3MYh}<#q@%%yZv533a!o+aL66OzC(jN9CeApCs#FJGl;1)JV==F#t z&M3WN4l7tk-#Gn`(Jy9j9jmy5>cNheu{c3KMkmR~JSGmsrGX_39VH*L=pJTIEMOpH zNfXoP93dBT=nIpNDGZL2ikz-ju&G`h3&j0N;X=^s<*%yEwv=pS2H$EZvHCp%^^&vO+Us7A<( zk&js{V-0sPaEAPO^00&zY@_ci`KQRk0}q({Qsiti7Q<wokJisqSO+MpaFEoj{N#$x=liTR;*X1p4#dMj9C6(W=>GB)S z-qGb1etf3O(3zxi|Gh5Paih{J&+*p}y`r5>DyC}475rz;kVm+B#gMN!y=KUAyyFA> o@Ys;g_~*Zd#Jr@k^xcr#_-(RJ-g-+v{?OCY^JH0(sh>vv2Qu5+IsgCw delta 1421 zcmX}sKTI2U7{+nn5V-yac5GvtKM4sW#v~32Br$jCxdW9joR^uDiM zdE8!k-2Tgo+X(k|>7m=viaV&P+g1s49$PNYU9OnQCbORudBEMpDb0o%CubBE>wj^TURp&#-0!w$W}Pk%FH1sz3u z$P~1-f(KYa^UR5PTC&^1quD@E@vyCJ%wYq|m=01u@}B|S zi)2*8-H4@;Ghw~QN0{xix;yB_x6^L@(3jP7p1tj}6bgkk9kp~HH}O~e3p>MMjm0c2 z;M%D#@Q`yXZfPbGQ7&$_zBBfB~14*7u>)jtl`{%twfYQ;3^&r zWV99y$Q;Zl77Hkk53oLH8()3duKpoMr5Jq}V)k)%0T(fTmOfz)n^?x#e)@2Z{@@Ze zu!!ja>Yq9{Ob*UF!?qE4+NoE=juL~+;XHXTj}@$Abci`zU|zV6C9IJcJj2w-4LraanwRLydFtaT*0F-g1UW8HA6Kx7 zC5(@m>KtJPxPawT-AS|CV9xvBcr>5P>X6ThNmDbU>_XDg7G}pSy}>6qb&);5?{WIF zr9W{KM=r4k_z1_YSbC0Y7)pfo0`Fri#lGN!l+~)){fBW9;PBj0(7m zO?;2D$$+vG8ExYeY$WN$1icxj7uV+M- z$Mg;A-zE>PV-2gAxJmtw$%8qpU>T#g*hSkmKK#Ugq)iUaMVtC~)RO*ZGIFKqKQ7|i RjMd%A?hJnB*Z3!c{{r@g)!hI9 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 68dce709f9f7f16930c7e14906172d07fac59126..1c55fe609e7443433828f48b2561824a44ff5cad 100644 GIT binary patch delta 1359 zcmXZby>Ak69LMp2!7I>*yOt}^C;AN6(&qxu| z)(~7A@tjN?kj13~W$r+5a`J+U@8p3H8s1Ixa&IB5G! zdGFW7>vt{s)6(~A(!}n#CPR!)Xp$RuwXniHz~H1N=0sXrSVv__lO7h(m~^dTgS&$c zhNseUqteGd+L+KZ@v5#xtZ_G0Q*Jd~hPXDZOHMQ82U;548Twd4bK13zE$$vF0s1ra zv5Jj=DnDm3;$SF{ksDo=3+(Ik19WHU>#jwtaW}DxLyQL5Kg({ku#E#Oh3E(Ah1rh< z?2R-+bh)eOU<_aa%h*R76Z7=v=qzYb#0oaCjYAAB(w}#=u*5yU7Mct6m*`^w zd)Po@k@t+~QpJ1h;L)-!;U!b9v5dE9kMu_P&MUeUBlK73V;hGUT&2HE7cDHT(Z>dw zE9}EMX4mQC4H~QL!zv~=*grD7#`oneV;60VZnA%!E*7yArH?Hfq7tLOK^HA--~b&o zH|ZLxyxHVk@or=+%KLI(Vq%N;#~OxW8R_B$R<>37iov)lV@5_wary>bY@)J59}Ae< zqKg(fIKb>K{cZMQePj>&+(w+;d+f&=cCd@#9ro_CA1i2M@PPfh?8YLtu!+hceJo&Z zk3L%H;9$>`hex`Y`@A#ONA~cZ+c@C8k9mK*#tzgx#;r;Oi+BkE{|9?dPls>kw ziAsV#7BF{AA1!onfY~$lpRgb6BYW8AHcr`ZvL9>M!7hdq>`$^ED`;aIy=Q!f6n$)A z6P0uNSiqb~A1!onfY~(tB>gn+pX9yq4igzwVky_lRK^p3@<6_&@}Bc;MSSOZ&!4A? wJjai(6#0zLJ}L4K$A2mEIGy)=|EtIcd>I*&-xzx|Cdo|RbMe|QZ!-)30jP%3T>t<8 delta 1363 zcmXZbJxmjE7{_tK#ZazLxC4&kDDN*V<^8=Jc#Vlet+~yiVB9ZFjEh6lg~b6&Vl)o} zcGjeHa;#-D4&+=JY8?!TLuJOKbn+X@^vQF}@Av%w|0^CA55JUE@l;)W^__BS1?73r zm2^;-O3;>1K||E8mIqyqH27Y^(=J__U5@fO*Dkx=?w!ZouGIN{-R(%cTNgXzNEP!T zNBQ^rf&2)$5)J7R>v8VPVV2p)3$%J2F?)2$U>PeI=+#BlS{`7Uxunsj*N`UOU`n^; zL^GtIJ5txk$GA>@U&}lmG1st)v3~OVbjjfb`e^o(Kj4Um87%i}@^v5~fdNfAjh6eE zW0Q(!92c`x&4?~v%*6|wSgXEj!VjinlyEisOzDfR&qkMSPA?HJ`WSK3CKA1so zi2bpQ>M;9Tx*T8{OIXAvHZT=#SqMAI)uk%G!mcET$seH?=CO`7jEC8O)RxPzAvv5L zF~rB$XpPzO9W&TJYDnc?b=>Yy+S=My?T|bjcf}i}!#LfriGeXXOwbJrSj1~gj?-b1 z4w%O})-XOnhbhhmb5oA;=taAnPq}vnr(LP?Ju}T2O>zd9MRkU=!2>j>$VU&GSjN;W z`P1ZM5wEdh--juRvQ0qRlG A#{d8T 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 c20e01acbaf2619cf4fc55a6e0c5e8894436c218..5b38b8e822081a582b203b08389f20612c5343ec 100644 GIT binary patch delta 1362 zcmXZay=xP37{KvjL1Qj`$+f+vN#9@7>r49H^wM4s9Ac!-G1ASU?cAXWNEd~0;vmmb z&VL}DAPxm%<_c+MhZr|;2)cgybJH*Q$UfNqDoY;7$L2K~-ElMq|K~3R=ER3=Gj9pv}ClfoL~#TU~-tgMj!LO4mOzE7?02&rjIt((8b6I{Rn-uFc)QiETcZs zv4|dX9WycBJ!;A&o?#l?8X0w$Nja)TutSxid8o$>?%TXSmavWujBfJYJKP`7v5GYeZgJmT z-XAOIU?52!bC}(xk2ZSfVrGy24t=z+g-u_5m%c$COIXJSMw9eY^zj_4Si|5R|Jgo$ zJVplt2lO$AS%W^>=%I@llYWXmTG%qVe~Npjx&J=*#)9w7e!Ba`=b$JDhuv@9D)I~; zR2BJve|{?R7vC!(d2AkbA8m!?9fprW@*BUt3P~z`*j@M-lGo`+_wIIebrqa0`H>#` E41v6AF!nn&_$cF#KXeKCLT=bGQb`l1ufs7@8j}3Xb=4sv?UYNMTIOm#wwa2UEGl6 zyMBFA;?uU2Sy!g5q0Y3D&!MOoGfHNsqf)}V*q*V(KSMukNgfL$o7iAIKo5^}<_YUk z#~$`Eqtib{AFCr>?6OYHGS4acSVjk9v+O-$NfArf!Z!LNVVR8PB#*a7zQYFVzvxBi z&(V+4#~$`EGex;J3;*7A!Xy{^Qfe}tK8dlI; zWCSduamJDkmN0gjBfuhROaCn_S-xv`PRg4lTUvY{@ZEogBUt8&u#OGvqlfCOCAB5` z*h3dH%k)?1V+FhDtXRI6pT;GSu!r7G*kYcgpI|Q3R+$S67+cY$iA5Y>3y;n*M}j^! zu#X<9Bv-RaA8Y6)IqD=&(6oo%H*M+h-7%T#9Q$8mE-Yae+h``~rJJY3I-e=RJpF^|8nfxGFPZ~MiRJW3zR@3n}0O=pL$ZDeIX6_JPdDisxHL&;Ax z&MVnj=NG_d*v2oYZ7NBmqf)>J*xY1}H2cTm2K(RQ9I%f5^XwnAk69LMo%S}T2maxE0D&(D-TKVOgbaBx6OwS+UcX;L^1e@wbFRCb>#i?n19CGEmfXNQNe!yf zKWIt`v#1ZLVtcl+z&$-=%B5cw3mtSl4ZkUofGS15A-93BH1KRVEb)LLH<%BY(i&E! z=BW*vk_xJl!xC0eSLp}oU>56Wd$ut)LSLni7CPwS`KT(!h$$5;qA#RM!!tf=N``wL z%UHt}Y9adJpj?EKQo=jb$AZ!qPD){newaSmo^6ap=#SAy3mtSZ5~UyEIk1R6jedmP z8vCP${K33u4Iht(MbixVfH}>S<~aLNpJ4wu`!S1kw9%PVrHzp(`V(}}!V0>c#w6Wo z`k286mN7oXUd&@^hW)6|vVWQm=CF=cjLp%XVIO8aZFIP|F)~komOffoK^J`s?4P59 zMNBQy#}dZp*@t=5m*`^wwFSDE^Q>ZQnf@Yu%%X!fMq>2Qw?co3eQ04BU2LJTOgBy+ zOW43>JSZzM-s@^mt~~E!33NRUSbs;?B8VX4*Ri!Hu`qi zj~PsF(MJng=wfP*{x*FqViOyv@6+Gun8yP58rD(UrGG#lFR_Xa_V3X@q>mM}(WleL z45s(#qlGPWF?B@$fIb$ni4D{Z`iC9!Sm0j6I%+!o1bw{3DmvJIME{sRo}-NwY-8qx zzCj-?Y@v%OlYW9e7O{y9)RVmbW4>p+!aCl2Mo*I6Unl(X;^egZ*I&PU#`n_!`FHZ< zVXvYn4|)}OYIe?d8;X4N&M%)S^4mMlUMrGFc7F4ttjJsM{N|e?Ka;23_kkW+eKh$W Dr}x#k delta 1369 zcmXZazi$#@7{GDlG^IxYIa_+3VzH%`Qv88drPq4c!Gx0B=0IuO9GbdzKwKOgkVF&n z!~|Jg@LU`m8r)0=Jmc1ZoRb^kKXApxZz|I#?=9cwectOmKh=AF>eIupoDL^sFZ^2B zejk*-VO#vLCeiFRV@KHHT#i^$h-lJ|SjvM3lkziSpSTjWrNQ@R)Rd!0LOk4$ zCL|j(CxU@M;H@(yPhz(8qMEod>qO(MC3;MgJ>11E9-tbxq;i%Su!GLn5&E3V8neZj z0b4l4f~JXi&XNW;v5(%^?6f7BbDGq#hA#Hdn4vpO9}lpLp&9xK`ZICaP86ksAI2V| z&v|RMD5V7bS^7A{!YqBAJ~pwBo^DE7X9wrm1=h#9c*xl>%n60v zm}3{Xhx#S@xQl9vonUpWld_aIU(d*&lr5n-`j?pt+t|S&`e@EGSBf3r06i>RroTWR z>)1yZGxPM*mhx+9Qg+hzi67Ip)cCG0G8a}+U*P_@iz7V1@)h=zrjHdIqL1bh{YCoN zLJtR+%~(qQ75`wyKJiOtOIEM&2Fs?rz&$*|E~b|fqGowBtl}X$IGvf1+#f4w=6MfnqK_Vyu50=v1x9DR9%{%n5i9UK*TBU#YzjbVJc5#44f&Oj!*uXCK zQC*{dhd$QO!5)rKzf0ewk8KPU=wk)Vb^6#uA3ZFs(chqpbsV5O*0@LCq>l~kVjoqD j|6rZ>$9;705Jxz@!TT5a5AYp+#^1%F@Ak69LMp2!7I>*yOt}^C;AN6(&qxu| z)(~7A@tjN?kj13~W$r+5a`J+U@8p3H8s1Ixa&IB5G! zdGFW7>vt{s)6(~A(!}n#CPR!)Xp$RuwXniHz~H1N=0sXrSVv__lO7h(m~^dTgS&$c zhNseUqteGd+L+KZ@v5#xtZ_G0Q*Jd~hPXDZOHMQ82U;548Twd4bK13zE$$vF0s1ra zv5Jj=DnDm3;$SF{ksDo=3+(Ik19WHU>#jwtaW}DxLyQL5Kg({ku#E#Oh3E(Ah1rh< z?2R-+bh)eOU<_aa%h*R76Z7=v=qzYb#0oaCjYAAB(w}#=u*5yU7Mct6m*`^w zd)Po@k@t+~QpJ1h;L)-!;U!b9v5dE9kMu_P&MUeUBlK73V;hGUT&2HE7cDHT(Z>dw zE9}EMX4mQC4H~QL!zv~=*grD7#`oneV;60VZnA%!E*7yArH?Hfq7tLOK^HA--~b&o zH|ZLxyxHVk@or=+%KLI(Vq%N;#~OxW8R_B$R<>37iov)lV@5_wary>bY@)J59}Ae< zqKg(fIKb>K{cZMQePj>&+(w+;d+f&=cCd@#9ro_CA1i2M@PPfh?8YLtu!+hceJo&Z zk3L%H;9$>`hex`Y`@A#ONA~cZ+c@C8k9mK*#tzgx#;r;Oi+BkE{|9?dPls>kw ziAsV#7BF{AA1!onfY~$lpRgb6BYW8AHcr`ZvL9>M!7hdq>`$^ED`;aIy=Q!f6n$)A z6P0uNSiqb~A1!onfY~(tB>gn+pX9yq4igzwVky_lRK^p3@<6_&@}Bc;MSSOZ&!4A? wJjai(6#0zLJ}L4K$A2mEIGy)=|EtIcd>I*&-xzx|Cdo|RbMe|QZ!-)30jP%3T>t<8 delta 1363 zcmXZbJxmjE7{_tK#ZazLxC4&kDDN*V<^8=Jc#Vlet+~yiVB9ZFjEh6lg~b6&Vl)o} zcGjeHa;#-D4&+=JY8?!TLuJOKbn+X@^vQF}@Av%w|0^CA55JUE@l;)W^__BS1?73r zm2^;-O3;>1K||E8mIqyqH27Y^(=J__U5@fO*Dkx=?w!ZouGIN{-R(%cTNgXzNEP!T zNBQ^rf&2)$5)J7R>v8VPVV2p)3$%J2F?)2$U>PeI=+#BlS{`7Uxunsj*N`UOU`n^; zL^GtIJ5txk$GA>@U&}lmG1st)v3~OVbjjfb`e^o(Kj4Um87%i}@^v5~fdNfAjh6eE zW0Q(!92c`x&4?~v%*6|wSgXEj!VjinlyEisOzDfR&qkMSPA?HJ`WSK3CKA1so zi2bpQ>M;9Tx*T8{OIXAvHZT=#SqMAI)uk%G!mcET$seH?=CO`7jEC8O)RxPzAvv5L zF~rB$XpPzO9W&TJYDnc?b=>Yy+S=My?T|bjcf}i}!#LfriGeXXOwbJrSj1~gj?-b1 z4w%O})-XOnhbhhmb5oA;=taAnPq}vnr(LP?Ju}T2O>zd9MRkU=!2>j>$VU&GSjN;W z`P1ZM5wEdh--juRvQ0qRlG A#{d8T 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 c20e01acbaf2619cf4fc55a6e0c5e8894436c218..5b38b8e822081a582b203b08389f20612c5343ec 100644 GIT binary patch delta 1362 zcmXZay=xP37{KvjL1Qj`$+f+vN#9@7>r49H^wM4s9Ac!-G1ASU?cAXWNEd~0;vmmb z&VL}DAPxm%<_c+MhZr|;2)cgybJH*Q$UfNqDoY;7$L2K~-ElMq|K~3R=ER3=Gj9pv}ClfoL~#TU~-tgMj!LO4mOzE7?02&rjIt((8b6I{Rn-uFc)QiETcZs zv4|dX9WycBJ!;A&o?#l?8X0w$Nja)TutSxid8o$>?%TXSmavWujBfJYJKP`7v5GYeZgJmT z-XAOIU?52!bC}(xk2ZSfVrGy24t=z+g-u_5m%c$COIXJSMw9eY^zj_4Si|5R|Jgo$ zJVplt2lO$AS%W^>=%I@llYWXmTG%qVe~Npjx&J=*#)9w7e!Ba`=b$JDhuv@9D)I~; zR2BJve|{?R7vC!(d2AkbA8m!?9fprW@*BUt3P~z`*j@M-lGo`+_wIIebrqa0`H>#` E41v6AF!nn&_$cF#KXeKCLT=bGQb`l1ufs7@8j}3Xb=4sv?UYNMTIOm#wwa2UEGl6 zyMBFA;?uU2Sy!g5q0Y3D&!MOoGfHNsqf)}V*q*V(KSMukNgfL$o7iAIKo5^}<_YUk z#~$`Eqtib{AFCr>?6OYHGS4acSVjk9v+O-$NfArf!Z!LNVVR8PB#*a7zQYFVzvxBi z&(V+4#~$`EGex;J3;*7A!Xy{^Qfe}tK8dlI; zWCSduamJDkmN0gjBfuhROaCn_S-xv`PRg4lTUvY{@ZEogBUt8&u#OGvqlfCOCAB5` z*h3dH%k)?1V+FhDtXRI6pT;GSu!r7G*kYcgpI|Q3R+$S67+cY$iA5Y>3y;n*M}j^! zu#X<9Bv-RaA8Y6)IqD=&(6oo%H*M+h-7%T#9Q$8mE-Yae+h``~rJJY3I-e=RJpF^|8nfxGFPZ~MiRJW3zR@3n}0O=pL$ZDeIX6_JPdDisxHL&;Ax z&MVnj=NG_d*v2oYZ7NBmqf)>J*xY1}H2cTm2K(RQ9I%f5^XwnAk69LMo%S}T2maxE0D&(D-TKVOgbaBx6OwS+UcX;L^1e@wbFRCb>#i?n19CGEmfXNQNe!yf zKWIt`v#1ZLVtcl+z&$-=%B5cw3mtSl4ZkUofGS15A-93BH1KRVEb)LLH<%BY(i&E! z=BW*vk_xJl!xC0eSLp}oU>56Wd$ut)LSLni7CPwS`KT(!h$$5;qA#RM!!tf=N``wL z%UHt}Y9adJpj?EKQo=jb$AZ!qPD){newaSmo^6ap=#SAy3mtSZ5~UyEIk1R6jedmP z8vCP${K33u4Iht(MbixVfH}>S<~aLNpJ4wu`!S1kw9%PVrHzp(`V(}}!V0>c#w6Wo z`k286mN7oXUd&@^hW)6|vVWQm=CF=cjLp%XVIO8aZFIP|F)~komOffoK^J`s?4P59 zMNBQy#}dZp*@t=5m*`^wwFSDE^Q>ZQnf@Yu%%X!fMq>2Qw?co3eQ04BU2LJTOgBy+ zOW43>JSZzM-s@^mt~~E!33NRUSbs;?B8VX4*Ri!Hu`qi zj~PsF(MJng=wfP*{x*FqViOyv@6+Gun8yP58rD(UrGG#lFR_Xa_V3X@q>mM}(WleL z45s(#qlGPWF?B@$fIb$ni4D{Z`iC9!Sm0j6I%+!o1bw{3DmvJIME{sRo}-NwY-8qx zzCj-?Y@v%OlYW9e7O{y9)RVmbW4>p+!aCl2Mo*I6Unl(X;^egZ*I&PU#`n_!`FHZ< zVXvYn4|)}OYIe?d8;X4N&M%)S^4mMlUMrGFc7F4ttjJsM{N|e?Ka;23_kkW+eKh$W Dr}x#k delta 1369 zcmXZazi$#@7{GDlG^IxYIa_+3VzH%`Qv88drPq4c!Gx0B=0IuO9GbdzKwKOgkVF&n z!~|Jg@LU`m8r)0=Jmc1ZoRb^kKXApxZz|I#?=9cwectOmKh=AF>eIupoDL^sFZ^2B zejk*-VO#vLCeiFRV@KHHT#i^$h-lJ|SjvM3lkziSpSTjWrNQ@R)Rd!0LOk4$ zCL|j(CxU@M;H@(yPhz(8qMEod>qO(MC3;MgJ>11E9-tbxq;i%Su!GLn5&E3V8neZj z0b4l4f~JXi&XNW;v5(%^?6f7BbDGq#hA#Hdn4vpO9}lpLp&9xK`ZICaP86ksAI2V| z&v|RMD5V7bS^7A{!YqBAJ~pwBo^DE7X9wrm1=h#9c*xl>%n60v zm}3{Xhx#S@xQl9vonUpWld_aIU(d*&lr5n-`j?pt+t|S&`e@EGSBf3r06i>RroTWR z>)1yZGxPM*mhx+9Qg+hzi67Ip)cCG0G8a}+U*P_@iz7V1@)h=zrjHdIqL1bh{YCoN zLJtR+%~(qQ75`wyKJiOtOIEM&2Fs?rz&$*|E~b|fqGowBtl}X$IGvf1+#f4w=6MfnqK_Vyu50=v1x9DR9%{%n5i9UK*TBU#YzjbVJc5#44f&Oj!*uXCK zQC*{dhd$QO!5)rKzf0ewk8KPU=wk)Vb^6#uA3ZFs(chqpbsV5O*0@LCq>l~kVjoqD j|6rZ>$9;705Jxz@!TT5a5AYp+#^1%F@