From e5206e955206e5fab4765b2dd6b2e7b71dfa9641 Mon Sep 17 00:00:00 2001 From: Kirill Andreev Date: Mon, 30 Nov 2009 19:25:04 +0300 Subject: [PATCH] Mesh: added regression tests: peer management, reactive and proactive HWMP --- src/devices/mesh/dot11s/hwmp-protocol.cc | 4 +- .../dot11s/{ => test}/dot11s-test-suite.cc | 8 +- .../hwmp-proactive-regression-test-0-1.pcap | Bin 0 -> 8082 bytes .../hwmp-proactive-regression-test-1-1.pcap | Bin 0 -> 13024 bytes .../hwmp-proactive-regression-test-2-1.pcap | Bin 0 -> 14332 bytes .../hwmp-proactive-regression-test-3-1.pcap | Bin 0 -> 13660 bytes .../hwmp-proactive-regression-test-4-1.pcap | Bin 0 -> 8790 bytes .../dot11s/test/hwmp-proactive-regression.cc | 144 ++++++++++++++++ .../dot11s/test/hwmp-proactive-regression.h | 78 +++++++++ .../hwmp-reactive-regression-test-0-1.pcap | Bin 0 -> 10772 bytes .../hwmp-reactive-regression-test-1-1.pcap | Bin 0 -> 15544 bytes .../hwmp-reactive-regression-test-2-1.pcap | Bin 0 -> 13894 bytes .../hwmp-reactive-regression-test-3-1.pcap | Bin 0 -> 9793 bytes .../hwmp-reactive-regression-test-4-1.pcap | Bin 0 -> 11487 bytes .../hwmp-reactive-regression-test-5-1.pcap | Bin 0 -> 9280 bytes .../dot11s/test/hwmp-reactive-regression.cc | 154 +++++++++++++++++ .../dot11s/test/hwmp-reactive-regression.h | 91 ++++++++++ .../hwmp-simplest-regression-test-0-1.pcap | Bin 0 -> 77039 bytes .../hwmp-simplest-regression-test-1-1.pcap | Bin 0 -> 80402 bytes .../dot11s/test/hwmp-simplest-regression.cc | 155 +++++++++++++++++ .../dot11s/test/hwmp-simplest-regression.h | 89 ++++++++++ ...hwmp-target-flags-regression-test-0-1.pcap | Bin 0 -> 10632 bytes ...hwmp-target-flags-regression-test-1-1.pcap | Bin 0 -> 14952 bytes ...hwmp-target-flags-regression-test-2-1.pcap | Bin 0 -> 13418 bytes ...hwmp-target-flags-regression-test-3-1.pcap | Bin 0 -> 7392 bytes .../test/hwmp-target-flags-regression.cc | 160 ++++++++++++++++++ .../test/hwmp-target-flags-regression.h | 88 ++++++++++ .../dot11s/test/pmp-regression-test-0-1.pcap | Bin 0 -> 851 bytes .../dot11s/test/pmp-regression-test-1-1.pcap | Bin 0 -> 851 bytes .../mesh/dot11s/test/pmp-regression.cc | 121 +++++++++++++ src/devices/mesh/dot11s/test/pmp-regression.h | 62 +++++++ src/devices/mesh/dot11s/test/regression.cc | 40 +++++ src/devices/mesh/dot11s/wscript | 9 +- 33 files changed, 1196 insertions(+), 7 deletions(-) rename src/devices/mesh/dot11s/{ => test}/dot11s-test-suite.cc (98%) create mode 100644 src/devices/mesh/dot11s/test/hwmp-proactive-regression-test-0-1.pcap create mode 100644 src/devices/mesh/dot11s/test/hwmp-proactive-regression-test-1-1.pcap create mode 100644 src/devices/mesh/dot11s/test/hwmp-proactive-regression-test-2-1.pcap create mode 100644 src/devices/mesh/dot11s/test/hwmp-proactive-regression-test-3-1.pcap create mode 100644 src/devices/mesh/dot11s/test/hwmp-proactive-regression-test-4-1.pcap create mode 100644 src/devices/mesh/dot11s/test/hwmp-proactive-regression.cc create mode 100644 src/devices/mesh/dot11s/test/hwmp-proactive-regression.h create mode 100644 src/devices/mesh/dot11s/test/hwmp-reactive-regression-test-0-1.pcap create mode 100644 src/devices/mesh/dot11s/test/hwmp-reactive-regression-test-1-1.pcap create mode 100644 src/devices/mesh/dot11s/test/hwmp-reactive-regression-test-2-1.pcap create mode 100644 src/devices/mesh/dot11s/test/hwmp-reactive-regression-test-3-1.pcap create mode 100644 src/devices/mesh/dot11s/test/hwmp-reactive-regression-test-4-1.pcap create mode 100644 src/devices/mesh/dot11s/test/hwmp-reactive-regression-test-5-1.pcap create mode 100644 src/devices/mesh/dot11s/test/hwmp-reactive-regression.cc create mode 100644 src/devices/mesh/dot11s/test/hwmp-reactive-regression.h create mode 100644 src/devices/mesh/dot11s/test/hwmp-simplest-regression-test-0-1.pcap create mode 100644 src/devices/mesh/dot11s/test/hwmp-simplest-regression-test-1-1.pcap create mode 100644 src/devices/mesh/dot11s/test/hwmp-simplest-regression.cc create mode 100644 src/devices/mesh/dot11s/test/hwmp-simplest-regression.h create mode 100644 src/devices/mesh/dot11s/test/hwmp-target-flags-regression-test-0-1.pcap create mode 100644 src/devices/mesh/dot11s/test/hwmp-target-flags-regression-test-1-1.pcap create mode 100644 src/devices/mesh/dot11s/test/hwmp-target-flags-regression-test-2-1.pcap create mode 100644 src/devices/mesh/dot11s/test/hwmp-target-flags-regression-test-3-1.pcap create mode 100644 src/devices/mesh/dot11s/test/hwmp-target-flags-regression.cc create mode 100644 src/devices/mesh/dot11s/test/hwmp-target-flags-regression.h create mode 100644 src/devices/mesh/dot11s/test/pmp-regression-test-0-1.pcap create mode 100644 src/devices/mesh/dot11s/test/pmp-regression-test-1-1.pcap create mode 100644 src/devices/mesh/dot11s/test/pmp-regression.cc create mode 100644 src/devices/mesh/dot11s/test/pmp-regression.h create mode 100644 src/devices/mesh/dot11s/test/regression.cc diff --git a/src/devices/mesh/dot11s/hwmp-protocol.cc b/src/devices/mesh/dot11s/hwmp-protocol.cc index 5b4d6954f..ae9b39765 100644 --- a/src/devices/mesh/dot11s/hwmp-protocol.cc +++ b/src/devices/mesh/dot11s/hwmp-protocol.cc @@ -985,8 +985,7 @@ HwmpProtocol::RetryPathDiscovery (Mac48Address dst, uint8_t numOfRetry) m_preqTimeouts.erase (i); return; } - numOfRetry++; - if (numOfRetry >= m_dot11MeshHWMPmaxPREQretries) + if (numOfRetry > m_dot11MeshHWMPmaxPREQretries) { QueuedPacket packet = DequeueFirstPacketByDst (dst); //purge queue and delete entry from retryDatabase @@ -1002,6 +1001,7 @@ HwmpProtocol::RetryPathDiscovery (Mac48Address dst, uint8_t numOfRetry) m_preqTimeouts.erase (i); return; } + numOfRetry++; uint32_t originator_seqno = GetNextHwmpSeqno (); uint32_t dst_seqno = m_rtable->LookupReactiveExpired (dst).seqnum; for (HwmpProtocolMacMap::const_iterator i = m_interfaces.begin (); i != m_interfaces.end (); i ++) diff --git a/src/devices/mesh/dot11s/dot11s-test-suite.cc b/src/devices/mesh/dot11s/test/dot11s-test-suite.cc similarity index 98% rename from src/devices/mesh/dot11s/dot11s-test-suite.cc rename to src/devices/mesh/dot11s/test/dot11s-test-suite.cc index 5499d866a..fcca8a33f 100644 --- a/src/devices/mesh/dot11s/dot11s-test-suite.cc +++ b/src/devices/mesh/dot11s/test/dot11s-test-suite.cc @@ -20,10 +20,10 @@ #include "ns3/test.h" #include "ns3/packet.h" #include "ns3/simulator.h" -#include "dot11s-mac-header.h" -#include "hwmp-rtable.h" -#include "peer-link-frame.h" -#include "ie-dot11s-peer-management.h" +#include "../dot11s-mac-header.h" +#include "../hwmp-rtable.h" +#include "../peer-link-frame.h" +#include "../ie-dot11s-peer-management.h" namespace ns3 { namespace dot11s { diff --git a/src/devices/mesh/dot11s/test/hwmp-proactive-regression-test-0-1.pcap b/src/devices/mesh/dot11s/test/hwmp-proactive-regression-test-0-1.pcap new file mode 100644 index 0000000000000000000000000000000000000000..eaa0c63cf1d103a95680959a2425e450a21ee15b GIT binary patch literal 8082 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 literal 0 HcmV?d00001 diff --git a/src/devices/mesh/dot11s/test/hwmp-proactive-regression-test-2-1.pcap b/src/devices/mesh/dot11s/test/hwmp-proactive-regression-test-2-1.pcap new file mode 100644 index 0000000000000000000000000000000000000000..dd04cebe74ad62642987b775918cf7fead77cade GIT binary patch literal 14332 zcmd5>Z;V|<6+g4Pulx4xpSP`sb_I4fiX|9QYD>2vk#<2_3>aH?Embxq8{2BDrCn1n zO^D%{{UAhB*Mvs>Aca=`l|oyAN>@KLX^7GoToa@bK4`)R3yFd$F(i`I-^cjld$ zcXw&RdpEiF{h9ZE=ltfJ^P4mGzIygIkG4?mqb~3_s{E5B%dT1Z#mU`Q(v2N=@7T9f{|=X*Jx4T#S3c(+U_=}SrBA=db&zgX zc%Oq9h}Fv!9jg+bm+Y(ld=ss0C;o#u9)$&l;`7y-`A&b(Z{NY_X1wEbu4e5U%Z|&S z()N818rUu=exrE_g^OaLoYP4zx7mveK7m5KX3MJnE8o1QwpY&qS?e#dNtz46X?(eq(qpIiSp@Y8eu^njA=yS3}qI_7>s zbzjf^+$WT@Z!Eyf?3Im1cU`4qW(3|LHl{A-kr^GjF8s`RW0j(f@Pf}e1-0z;Oh9o~ zZ4(Mwp_6n$sR4CCg>7!rNPvI21@fb{jri^TilPmm%I91yzRV5N7d}li>{gpz&i@BKh6@hW>8*_B zE4qDL(R#e+vu?e!ksqaD+AsuA{f_`pf76qf7|~sTOBdNoTRdag@)DHzW@Ajj9u8;h zp#F$Uw{PsPfJ+1^KED-!OY=K0R!#|oU7Gq0t@79bQOXrs4Q)`Xgh2f7 zViMI!zJ@JdoQ|N5mw`HqORf?;x!evW#LW6SY<#U=d^UoreZ449k9=0qD*TVncw;t7 zgKcQcj5BStwzG{JFEhvN*9=6~A!G?@LS_9bLbwisDq^Jn%lL;ddOcqGbRGu!G)cp> zu?J4^(c7+Hka~E%3(D$zizd^Q&#siQD`^Zy_)bilH9H>N4Q&>lYu|YEZHx-*f#)@0 zotLlN`Ws_K3)nF1;OKwoNF?U(Rgp;({q>o|S$_-u#An?CW+S$eF^QHw^ol?&se=OW zsqwPxG7OYSgua;tb{V95EE7te%G0nQCfbFe^Q&dqM;ObN(B`a@`1*OtIM6WLmc7 ztVpH`9bAeO{Q#Fx?B1$&$vF*5=fsDa(++rSq@ldHOR{pM`+mdGhnIB8d<(oglg&7` z$VK^P`qmCBsVuB4^^FU3lxYwRt@*c@(~=rl=1(UB7VF3;!vXNMHw9pYMurfiU*VDm ziBaD{kHlRYpYhJEpKRx5mJ9q&%X6x8<6r#;{e$b=Ldmv^C(FIpxpA3ffOt#PV+x1# zger79B6&5CHippz18dAOP(zZzGq6?P-|(*3;Xw2<(2cc`|dyU-7^+u+zEtdd#v(2~%si_d7Z%SiZZFJaaZA@U_cOvPx)pUoQ*2V<(H%~?)?yB{w z=X}etY8~YXsIS&+HQ|Y|tBHQ+RFVg-2X?xWo`_ivDrrdWYcU5Pdu&f!W_Utfy#k-DIcAF(!Wg8w3-+H;Qg z@fbU;oc1YR)v@y<+A{3kJsn}^vS#Rak=O+*s$=J8P0O$=zM*3MUw*z%Y_Ce{yx3V4 zZ>lZewfoxzV1>>v$9`?ywf=sM8`V+hvPdyK%{;mnd3FM?e8!uLNsQo#H5Wi`W^=** z-w*!Rs6^>96O^USuyQR2uA=v2xVs;y`l#18|vOCG#n4K)37GU?U zMGO=Gv_=?FWQncH!{Lu6(k?T%fe%xoIF;;wzlappcI`Y`>5BBVfwVhz zjWV-o?CwZ*?ab~ogHC!d&_rnsjDQ11b{52$VQ z@Hc$$>kk1J?{Ii@$2ref^jY`21;+Y(WA_417}Hh7zgqdH$f#~Oc=Xm+id-S3d1p_; z`A@ z9Ce@3?4tMW0MP6XU{i8)$Lt=Du`^R_IOgo6&b9!%f5sl4YtNb86@{BS7dxr5Ex_(> zJPH?it2cMd?qzKKc%9(0?vApFV08{7IAR?@&aP>z$lqdHS67waDBRpRc8xN#Y3v@3 zJ&bpm`2%eIMC^jionzN1Gn>Y)cyl*na&N=L0kL40)Pz{8i#K-};0MzJutF0X&;gvq ICEwir9~7xdtN;K2 literal 0 HcmV?d00001 diff --git a/src/devices/mesh/dot11s/test/hwmp-proactive-regression-test-3-1.pcap b/src/devices/mesh/dot11s/test/hwmp-proactive-regression-test-3-1.pcap new file mode 100644 index 0000000000000000000000000000000000000000..af181764ae3ab86bbf1e545bb30370ebdb975b73 GIT binary patch literal 13660 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 literal 0 HcmV?d00001 diff --git a/src/devices/mesh/dot11s/test/hwmp-proactive-regression.cc b/src/devices/mesh/dot11s/test/hwmp-proactive-regression.cc new file mode 100644 index 000000000..d5f8dd462 --- /dev/null +++ b/src/devices/mesh/dot11s/test/hwmp-proactive-regression.cc @@ -0,0 +1,144 @@ +/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */ +/* + * Copyright (c) 2009 IITP RAS + * + * 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 + * + * Authors: Kirill Andreev + */ + +#include "ns3/mesh-helper.h" +#include "ns3/simulator.h" +#include "ns3/random-variable.h" +#include "ns3/mobility-helper.h" +#include "ns3/double.h" +#include "ns3/uinteger.h" +#include "ns3/string.h" +#include "ns3/yans-wifi-helper.h" +#include "ns3/internet-stack-helper.h" +#include "ns3/ipv4-interface-container.h" +#include "ns3/ipv4-address-helper.h" +#include "ns3/abort.h" +#include "ns3/udp-echo-helper.h" +#include "ns3/mobility-model.h" +#include +#include "hwmp-proactive-regression.h" + +using namespace ns3; + +/// Set to true to rewrite reference traces, leave false to run regression test +const bool WRITE_VECTORS = false; +/// Unique PCAP file name prefix +const char * const PREFIX = "hwmp-proactive-regression-test"; + + +HwmpProactiveRegressionTest::HwmpProactiveRegressionTest () : TestCase ("HWMP proactive regression test"), + m_nodes (0), + m_time (Seconds (5)) +{ +} + +HwmpProactiveRegressionTest::~HwmpProactiveRegressionTest () +{ + delete m_nodes; +} +bool +HwmpProactiveRegressionTest::DoRun () +{ + SeedManager::SetSeed(12345); + CreateNodes (); + CreateDevices (); + InstallApplications (); + + Simulator::Stop (m_time); + Simulator::Run (); + Simulator::Destroy (); + + if (!WRITE_VECTORS) CheckResults (); + + delete m_nodes, m_nodes = 0; + return false; +} +void +HwmpProactiveRegressionTest::CreateNodes () +{ + m_nodes = new NodeContainer; + m_nodes->Create (5); + MobilityHelper mobility; + mobility.SetPositionAllocator ("ns3::GridPositionAllocator", + "MinX", DoubleValue (0.0), + "MinY", DoubleValue (0.0), + "DeltaX", DoubleValue (100), + "DeltaY", DoubleValue (0), + "GridWidth", UintegerValue (5), + "LayoutType", StringValue ("RowFirst")); + mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel"); + mobility.Install (*m_nodes); +} +void +HwmpProactiveRegressionTest::InstallApplications () +{ + UdpEchoServerHelper echoServer (9); + ApplicationContainer serverApps = echoServer.Install (m_nodes->Get (0)); + serverApps.Start (Seconds (0.0)); + serverApps.Stop (m_time); + UdpEchoClientHelper echoClient (m_interfaces.GetAddress (0), 9); + echoClient.SetAttribute ("MaxPackets", UintegerValue (300)); + echoClient.SetAttribute ("Interval", TimeValue (Seconds(0.5))); + echoClient.SetAttribute ("PacketSize", UintegerValue (100)); + ApplicationContainer clientApps = echoClient.Install (m_nodes->Get (4)); + clientApps.Start (Seconds (2.5)); + clientApps.Stop (m_time); +} +void +HwmpProactiveRegressionTest::CreateDevices () +{ + // 1. setup WiFi + YansWifiPhyHelper wifiPhy = YansWifiPhyHelper::Default (); + YansWifiChannelHelper wifiChannel = YansWifiChannelHelper::Default (); + wifiPhy.SetChannel (wifiChannel.Create ()); + // 2. setup mesh + MeshHelper mesh = MeshHelper::Default (); + mesh.SetStackInstaller ("ns3::Dot11sStack", "Root", Mac48AddressValue (Mac48Address ("00:00:00:00:00:0d"))); + mesh.SetMacType ("RandomStart", TimeValue (Seconds(0.1))); + mesh.SetNumberOfInterfaces (1); + NetDeviceContainer meshDevices = mesh.Install (wifiPhy, *m_nodes); + // 3. setup TCP/IP + InternetStackHelper internetStack; + internetStack.Install (*m_nodes); + Ipv4AddressHelper address; + address.SetBase ("10.1.1.0", "255.255.255.0"); + m_interfaces = address.Assign (meshDevices); + // 4. write PCAP if needed + std::string prefix = (WRITE_VECTORS ? NS_TEST_SOURCEDIR : std::string(GetTempDir ())) + PREFIX; + wifiPhy.EnablePcapAll (prefix); +} + +void +HwmpProactiveRegressionTest::CheckResults () +{ + for (int i = 0; i < 5; ++i) + { + std::ostringstream os1, os2; + // File naming conventions are hard-coded here. + os1 << NS_TEST_SOURCEDIR << PREFIX << "-" << i << "-1.pcap"; + os2 << GetTempDir () << PREFIX << "-" << i << "-1.pcap"; + + uint32_t sec(0), usec(0); + bool diff = PcapFile::Diff (os1.str(), os2.str(), sec, usec); // TODO support default PcapWriter snap length here + NS_TEST_EXPECT_MSG_EQ (diff, false, "PCAP traces " << os1.str() << " and " << os2.str() + << " differ starting from " << sec << " s " << usec << " us"); + } +} + diff --git a/src/devices/mesh/dot11s/test/hwmp-proactive-regression.h b/src/devices/mesh/dot11s/test/hwmp-proactive-regression.h new file mode 100644 index 000000000..cd38ce09e --- /dev/null +++ b/src/devices/mesh/dot11s/test/hwmp-proactive-regression.h @@ -0,0 +1,78 @@ +/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */ +/* + * Copyright (c) 2009 IITP RAS + * + * 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 + * + * Authors: Kirill Andreev + */ + +#include "ns3/test.h" +#include "ns3/node-container.h" +#include "ns3/nstime.h" +#include "ns3/ipv4-interface-container.h" +#include "ns3/pcap-file.h" + +using namespace ns3; + +/** + * \ingroup dot11s + * \brief There are 5 stations set into a column, the center station is root. + * Regression test indicates, that traffic goes from the first to the + * last stations without reactive route discovery procedure + * \verbatim + * Src Root Dst + * | |<--------|-------->| | Proactive PREQ + * | |-------->| | | PREP + * | | |<--------| | PREP + * |<--------|-------->|<--------|-------->| Proactive PREQ + * |-------->| | |<--------| PREP + * | |-------->| | | PREP + * | | |<--------| | PREP + * <--------|-------->| | |<--------|--------> Proactive PREQ + * Note, that at this moment all routes are known, and no reactive + * path discovery procedure shall be initiated + * <--------|-------->| | | | ARP request + * |.........|.........|.........|.........| + * | | |<--------|-------->| ARP request + * | | | |<--------| ARP reply + * |.........|.........|.........|.........| + * |<--------| | | | ARP reply + * |-------->| | | | DATA + * ^ Further data is forwarded by proactive path + * \endverbatim + * + */ +class HwmpProactiveRegressionTest : public TestCase +{ +public: + HwmpProactiveRegressionTest (); + virtual ~HwmpProactiveRegressionTest(); + + virtual bool DoRun (); + void CheckResults (); + +private: + /// XXX It is important to have pointers here + NodeContainer * m_nodes; + /// Simulation time + Time m_time; + Ipv4InterfaceContainer m_interfaces; + + void CreateNodes (); + void CreateDevices (); + void InstallApplications (); + void ResetPosition (); +}; + diff --git a/src/devices/mesh/dot11s/test/hwmp-reactive-regression-test-0-1.pcap b/src/devices/mesh/dot11s/test/hwmp-reactive-regression-test-0-1.pcap new file mode 100644 index 0000000000000000000000000000000000000000..8459963684121c8860acfb426d40885330effb08 GIT binary patch literal 10772 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 I%TB=m0pC~^ivR!s literal 0 HcmV?d00001 diff --git a/src/devices/mesh/dot11s/test/hwmp-reactive-regression-test-1-1.pcap b/src/devices/mesh/dot11s/test/hwmp-reactive-regression-test-1-1.pcap new file mode 100644 index 0000000000000000000000000000000000000000..6a66fb7a897c8bc060c30d7117467ae921af3732 GIT binary patch literal 15544 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 Ip%%;iKjM3}y#N3J literal 0 HcmV?d00001 diff --git a/src/devices/mesh/dot11s/test/hwmp-reactive-regression-test-2-1.pcap b/src/devices/mesh/dot11s/test/hwmp-reactive-regression-test-2-1.pcap new file mode 100644 index 0000000000000000000000000000000000000000..19de55c7264109cec230d698ff6a3041f5f216cc GIT binary patch literal 13894 zcmbtbeT-Gb6`%XQ_o4V$K1A4Ewp2kXg@x8d+oEeD#FS#U6f`I%FD*tYn$qk)AfZ{I zNztwCN~@MAWa)=m*4PCK#wzW$T4^PrglMQuY52!AJ2Q9Y&V6U@n|*I@ za_@WW%=?{le&=J(oqKuXmA$)CA|v#1@uCpl4FA#os1VEWozA1(Ur>K-kRJtoZ4qAz z@I5Gezj5-FZMT%~`)ua^ySvtWW^y2&yG+n|G5nPOzFsUy3;KaNR%{buEWXnDMz{K# zP!jNuML()GdJ3bRm_?^syOL-Lq;|G`37Vy#SvCknDpW#CylW;(mOg}5jWIh?ny zz%KO!L-d!3gsDQ&Am`z-b6migR46$)2iMUt`8*^rCKWaWT)-&fN{t#@M$VN8xr+RF zu+br1Aw&Ad7-ex3lMYXfDvo|PzMA|s6D{kvhH)HYzn(~mtX~iOWbVh#2*gcbfzFCJ zQXFV61y}80ag-IMU?_+O(>VY#aao|thlTt5jCEl)C)$A+Ynn2?R5y`qxN*#KnGsi4B#0AV#nXQe?OKmv1^ z$&M$!;&7N64GpTtVNo4>2KY?6LIzLY>2z2hlRjE^{s0n^<-d(lR+(b#L%yowBM8@w ztV}5@n4bQsL%QLO4Xv=%|=b1*282Is>hWfzqXT>{aOjA=NW1v@+bk-WQtU_^uxCtsK+h?DnZ8?@W()#V&L*KryQtjNY`G5 z>W_gCb#h_YfqM3GpgzS={V||X+dgujb`dH;M+{J%@W()hVqn^1V;rarlYu%9mpH0F z1~lsKW(VqH(}22=q55M$qaM4$fjW^;2|BK;KL$D#12fyNaiH!d)ME_Q9|Ib7$wCKe z`%EVT{ut1xUDrEM56l26LB|=G|4~8AhmCZaZaTKCcZil0x@q;Zlvt2YQCpza8M@B< z*h0`6iu~a`>R)3LW?=ampJla31wMVEFXvsf7h;2-?@vS zX2tP2c7hRLa@S6y{;qwUZi5gJ=4QKU*PaQJlkj(VyY}w7LSJnhkc5{LyLKA&m+dlU z;g~yNC8M(_ZU>zK=hR=e*D2KY^=lod?-1&Qxs{&smu-#u$R-Es`u3q9-O5n?Wm}`} z-{3&~@LK3f&{5eY?)?R!q!>U!AU}+>AP}~{AQb!VG%P=YfvPr z=peX%xP(dFX>>LyWWp4=A!(tobTa`)UU`lNi%Ons9`^FfDFnA3|==NS^S*A(; z(YX9xZBWdz?_J^$CgDif{7dZx&9S9aY?VT=c2A=(6?vy5X7%zbXk`W@btg zXmqZ6!I|h7la7a`X{OrreSP9pf;Brib_*46wnhB7ml{gE;;)DV8=pE>CqR#$BF5(%0&#UqW88 zr^HlC8yz<>PZ@2vr|Qt=O~_-~7*G8K{Fh-pohFK7p6bL14m82^5%W|X+AKjXFl~&d zo@=$VaeB&V!*dGtt5#3F40%i&lT+hAVQJ&^l+lKJst#?2AdhKdJk>wlp-s$FW%vh& z%Tsk|SM)e~!$;5-2K!lW=-+_RsB?BWP-P$cdxq-o4!-w5UN*w|+>3}<^VIvca-G%{qgh4EC7 zGA@DIbQl?goZFkY4Ik>)D}N*w{ifd$|8o)g!R;*mUji!I8nR<5&$ot%Rpn^XYx%xv z7SF*WiJLHs&hBp4J(1S>F9(^{+4R?$!aeUg#F>Qs+k2K1^6ZT_=kA z8=3TPpfD$zG5dfNgtTTO8R=lW#$r6*b#&hpF8-c##g=U|_}3%|d*qPu^gdojw^(giXs$LNJ6O z+=p2>mfm@oF_#TK1ar|Y1OYyc*9(^6lTMRQ3M#A#gLUmLDc0zE01{Xz7=to+!Jref z=rr>t&8hu8x4S+5?UW+teQUDu!#vf3S6v3l*25k5N652?w6D^TbRf-V^~ zA+(?vjt*glUHIzKq3MIs>M->`qeU2ZX0!p6iOA& zx$xz03C7<&oWv{~YtP-q2q|Vxt{n<;TUXmrOQ_f3^&?heW31HLkJ2lzX}LSEh;7GP zmPUfJ?u=H#c}QTDLo!d74akh@e(ALRB72T3^pE`h5D*x?@yowl_%R02Q&!vtW#IM5 z@0(rEgN^=_S+qM$XT|-foFnq5F@mG(!L`iq*2~p2`M0=tHonm7kwQ@#=gM_eiKqcP z0tv}nHQ~;?6ME3;zWYGOpk84dLI15@uFi%V5oE@R#5;Q$y@*j}eaus}_7f`BBTv5i zYlrocU%GVdcUUh+bw9ICuK{`g8ldhz3RWC#0e&*~{*GS9(c_y~92Il3?i&j74|du0 zgS_r9)8Wq0#_2r_HJf>y0e;I>1SP{H?p;@rRs4qm+-)bb+;gC1QcWQQe;L&ZFWA8p zF6Lf`!ujbND`^-`e9@d_Zgdq8V^a$0ZwizykTIKjZJT6)%9{d3_C zw2n4&p19Ld0*wVNt1Jtg@&{}Sq*oeXfl`qy@V5`xh@oTiEB(wX+01p!A^u%F4fxlC z95Dat=1LDw{F5WO3#m~V%J4#m!|7cwvRxfUl2mbzg zl6@2f{xok@{&{%yVNPe}tr(pI=ublpxZwl?EavZicqnMNbc^jILiLAHn^JRI_7p?S dW*z`)v|UGl{-UV?rwlW|Vm`MGYCa!B{Xc$BRlWcK literal 0 HcmV?d00001 diff --git a/src/devices/mesh/dot11s/test/hwmp-reactive-regression-test-3-1.pcap b/src/devices/mesh/dot11s/test/hwmp-reactive-regression-test-3-1.pcap new file mode 100644 index 0000000000000000000000000000000000000000..07dfd5dee389bbfa4813a5cbe0f5c2a5ca9708f1 GIT binary patch literal 9793 zcmchcdu$X%9LIlikKVN?Eu}yU^m-;d6iOdFN(zG2P&6V~F@pHK_y`a{NtzG{8jmy@ z0vIboLW6&RkAHwDAgI;EkU)H445^KT@Q;6%s5~MB(Ld__y9OtjySrE4HI9W+P)b?BXP*RKdt^FB>_L)YRorU-$c}bv$&hJ ztDuCC+WGa%p;-u;MTPL`wyT@yez3Wx(?o-^;Rlgtz5GSp6T|=?Wt=b}O4DdSC|{_P zh&};ObEiVZt3pXgxvC1V^m9*fcJ|@myGng_ZXymzP~t1=(?4-s&A_lx^8MT zCeOj=&{LVTRPGur^vnzJVf(NO`QtJ9?CV)7a+Q+ukn1P0w8v0N-C8M~SY|LtK^%u6 zl?yT`JDJWvf|g8*jfhk}Y6zGbbqp$|lrqWm3;3FJ*GY5(quN9gkUrc}`l=(J{I!o6 ztPgk}^3}{cgoz{~(>3HP+&!A>p-iPq(r@w+E8S1Lb{B z8>rF)S2St_Q&bMWIv#MS70b^WsNb=!I+aU52i2<-scgkN7Yx+Ca!?ii9b{A^Gh2uLG7zCP{-7Px)&cos=fX?6m`nUuXU>E12Eh%C7Wum0EarY zWx7tKL#!*KgSy%)z@>J!8mON`P0=#dPvuOg$0YR#zPZP{f_Fc@J0Zf|S{=vX&>_Am zUV?n1l8AFxP*x^Hi8>ocJnhLWTbY|3&tfMEWq09%9D2vH*tLbS?RAl26NwsDT+}@+ zI^pE-wHeu-w%0{ULaE{W5}is*K$YlBR&XTjb>UDOt5zAPD;q#PkB=bLUKbmcu5)hw zt5Zc)BRsHsPBztE7Y?;$^E#bMf3U8M4(e*J3zvFwi-Gz#)D)Xr{8XO3?R8P1Jb=33 zI1IHem~F2MkDVx#ZLbTDU0W!7QVCHz^yhvq9hfVeog-0_7EPv5Le2p=jiOw9+eZ^E zz+VCYG_{1`fSu8q8|rKv9cZ{#hxX-w9)>5`7eYD#ZX$#vC z0r)-e;d9LU@+UsZ*j3yZSA~l-VG_inFPMa>7&uOAQ^G5p1JlcYu3Htt3oW#~OJZnMr z{?&fBk(N+eShG{7(%Ya)bY`#3Gqn9~!=yW2uv{B9jMn3uyC*}fx+>G+QpO#Gl?~04!Pj0kk-Z32e`a{v>W@$? z<$u~5b)R4(IB3jY_NRg1&;Qa>eu8`k&aZ3LR+tITfuQA(m(fQss`=NS(eaeuzoo8M zsmwiM8C&oM#G`CCtlvYTjJ;ye)bnK{Mi)aC_jEdN|LH`@&AywxdiK%0cH`{R2P(f` z;BJn6;CZ+cp%89BxUuc)uIAF3&p9(v==^|x@r*g^9R@#bSMg)Q>2e>z=vy0MZ^dv4 zd+^rC^HNbd?7++K;SpZJ>+RtYHdGClz$@VWhzWOd4j#Y=+R}X&v>c3PEq)waetgB{ z!rcr!iV?IYT5oAU=e-vX^PIxUy=cj9S1MiSa!Xd6l?bb IxAL+61BN&jYybcN literal 0 HcmV?d00001 diff --git a/src/devices/mesh/dot11s/test/hwmp-reactive-regression-test-4-1.pcap b/src/devices/mesh/dot11s/test/hwmp-reactive-regression-test-4-1.pcap new file mode 100644 index 0000000000000000000000000000000000000000..c0d4880a42bb885c146b8bbea33138bd2f97423f GIT binary patch literal 11487 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 MPCd@Hgxa$GKUCRmy#N3J literal 0 HcmV?d00001 diff --git a/src/devices/mesh/dot11s/test/hwmp-reactive-regression-test-5-1.pcap b/src/devices/mesh/dot11s/test/hwmp-reactive-regression-test-5-1.pcap new file mode 100644 index 0000000000000000000000000000000000000000..08326518574e428d84b80b16dce30c833db14790 GIT binary patch literal 9280 zcmcIoQEU}O6urCK<-KlzRs>p7Y}Z6Up)D;1QE0V9N{pe{5Tclp_!2ZK(4?VaA`pCq zXdpsT8WJJ(14#TqP$Z%xDAwSQAf_RWel#SQ5K});_%I@T)O%-Ux4V01-?RlMnYa7i z>^t|~bMDNY*};ovj@eKIK^qwXcuRe0oe$86_tf)wfDzHepcnbX+xe~5F#Td>_fIQ- ztnT^TmI_#0)bV=Po8meAc()p0EncY)>?K5O5~Wz&<7XwjVB!5Jh=gb;x8P(6P#;lO z@%?F7>Hz&gwtZ+}D&A5b%*)?EV&j)zakLGu)Ccm)z8no>skDUss0RgXyOtHPez-WNI19E5q$Q^7LTh50aS#nZLxpvGJl(M6lps|i+)Dsz4iEapf!CsLA025U!> z>G4B_tan__qy?)|xm3EDx!j=%wuc4#WqlS_;a{lh*;9bo`sEDJgUgv=%UWYaDWq9R zt4E3^%1s}i!d9~707G@5KAQwQgd!Jq(-(M9aAT`C2liR z+PE;t1hHXh#-@pH3tJSZcPW#Snl!o|M;U%>Vq&h0;=2L98{*&A;R_E5-<%C~0tw2d zoMNoFaJ3{!^WL8_e65NR(l*YuiW1xbCk*H?TF}pB3g~wnElgNllrSZT6A|Rnl?Z}% zEi@r){8{5+NcnF#$~=rQl#6;OB&A9fkyM8-l7bj8&&NR0t{qHL&*~{1w(O~8NnL-z zS-uw0sfURkOGHfc2~^@zc3Cm&j(sz*aTAkL8hP)t3)j&gYfUm4j@WOAKj^ZSIRV z8LDf~s7eBw7q|fM?0E+0SyvIzX`35GmGYP-XsL7)Cn$wA)(J}3)i_mCCVz2a@>h)) z+q_ZANxy4uPho7h_E(Gua~3GT+LwkHpl5Z>Lwax5BWpUc~U7~x`|mp%8oS)2-}&N%1fp-6sj(MhyDhNi z(@jiW%<=KE{YhEGo|f$gYj1mbA-0=lMZ5`ST8!<`8_xCwqA#h8*bAcnAMKe7f1X4I zXliI>1<pTM;ooR4 zeZf0-T;oklq|h6l6cg~qyzS|c(XSlrV4S-45k{wZ+oJ$mmMv$1N~FP+Ns<2iLUVQ% zv``Is?MxQ%U?h6D4~U&gPGhlJH5qV?!sa^SBCFxs_+KVRSPj?Q)ST+0auoMRPu=2F zPp>*<0Vdxz-_qa<1XN2jtem=Sk@O!w#kNQuy2bMzxlh|7YHC{)V2R`YQy69nsLbo) zQVD8RNkR}O1l^JXYM#wU@t@dMZ#%$rb?s#>QAx>N^Gofc1c!h_?HthAwmJz&8{U+# z6_+Y(c|H=@9!XS?%STf|6_=)ia z``1@^==RQ7=mcoaO9i;$kv4`;BXy(b%+BxcQ-}3BtWy;w*($+?W^H{c5ZVL(5$us?1Fn7(COP61(c;LwLGYG zQV9b-&1lg)3N1}-0yWp1wm@wTs#BXl&2t+p;okPfRvx--btOYLs~rFyui$`AuDhUY1HOyRUWd(Cyqot%Em&TgY8F0x#bzG7`b6)zA%YC~J@X+n&c1J@eKyzLOfH&GXptEaV z640!6o%HZv)hP~W-(Y}dwFAKScW^+*KbZ8;TyvB#;0KEqzQ!t`Ht}e#Ir%_s4ysf8 EKir@!a{vGU literal 0 HcmV?d00001 diff --git a/src/devices/mesh/dot11s/test/hwmp-reactive-regression.cc b/src/devices/mesh/dot11s/test/hwmp-reactive-regression.cc new file mode 100644 index 000000000..c52be5cf1 --- /dev/null +++ b/src/devices/mesh/dot11s/test/hwmp-reactive-regression.cc @@ -0,0 +1,154 @@ +/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */ +/* + * Copyright (c) 2009 IITP RAS + * + * 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 + * + * Authors: Kirill Andreev + */ + +#include "ns3/mesh-helper.h" +#include "ns3/simulator.h" +#include "ns3/random-variable.h" +#include "ns3/mobility-helper.h" +#include "ns3/double.h" +#include "ns3/uinteger.h" +#include "ns3/string.h" +#include "ns3/yans-wifi-helper.h" +#include "ns3/internet-stack-helper.h" +#include "ns3/ipv4-address-helper.h" +#include "ns3/abort.h" +#include "ns3/udp-echo-helper.h" +#include "ns3/mobility-model.h" +#include + +#include "hwmp-reactive-regression.h" + +/// Set to true to rewrite reference traces, leave false to run regression test +const bool WRITE_VECTORS = false; +/// Unique PCAP file name prefix +const char * const PREFIX = "hwmp-reactive-regression-test"; + +HwmpReactiveRegressionTest::HwmpReactiveRegressionTest () : TestCase ("HWMP on-demand regression test"), + m_nodes (0), + m_time (Seconds (10)) +{ +} +HwmpReactiveRegressionTest::~HwmpReactiveRegressionTest () +{ + delete m_nodes; +} +bool +HwmpReactiveRegressionTest::DoRun () +{ + SeedManager::SetSeed(12345); + CreateNodes (); + CreateDevices (); + InstallApplications (); + + Simulator::Stop (m_time); + Simulator::Run (); + Simulator::Destroy (); + + if (!WRITE_VECTORS) CheckResults (); + delete m_nodes, m_nodes = 0; + return false; +} +void +HwmpReactiveRegressionTest::CreateNodes () +{ + m_nodes = new NodeContainer; + m_nodes->Create (6); + MobilityHelper mobility; + Ptr positionAlloc = CreateObject(); + positionAlloc->Add(Vector( 0, 0, 0)); + positionAlloc->Add(Vector( 0, 150, 0)); + positionAlloc->Add(Vector( 0, 300, 0)); + positionAlloc->Add(Vector( 0, 450, 0)); + positionAlloc->Add(Vector( 0, 600, 0)); + positionAlloc->Add(Vector( 0, 750, 0)); + mobility.SetPositionAllocator(positionAlloc); + mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel"); + mobility.Install (*m_nodes); + Simulator::Schedule (Seconds(5.0), &HwmpReactiveRegressionTest::ResetPosition, this); +} +void +HwmpReactiveRegressionTest::InstallApplications () +{ + UdpEchoServerHelper echoServer (9); + ApplicationContainer serverApps = echoServer.Install (m_nodes->Get (0)); + serverApps.Start (Seconds (0.0)); + serverApps.Stop (m_time); + UdpEchoClientHelper echoClient (m_interfaces.GetAddress (0), 9); + echoClient.SetAttribute ("MaxPackets", UintegerValue (300)); + echoClient.SetAttribute ("Interval", TimeValue (Seconds(0.5))); + echoClient.SetAttribute ("PacketSize", UintegerValue (20)); + ApplicationContainer clientApps = echoClient.Install (m_nodes->Get (5)); + clientApps.Start (Seconds (2.0)); + clientApps.Stop (m_time); +} +void +HwmpReactiveRegressionTest::CreateDevices () +{ + // 1. setup WiFi + YansWifiPhyHelper wifiPhy = YansWifiPhyHelper::Default (); + YansWifiChannelHelper wifiChannel = YansWifiChannelHelper::Default (); + wifiPhy.SetChannel (wifiChannel.Create ()); + // 2. setup mesh + MeshHelper mesh = MeshHelper::Default (); + mesh.SetStackInstaller ("ns3::Dot11sStack"); + mesh.SetMacType ("RandomStart", TimeValue (Seconds(0.1))); + mesh.SetNumberOfInterfaces (1); + NetDeviceContainer meshDevices = mesh.Install (wifiPhy, *m_nodes); + // 3. setup TCP/IP + InternetStackHelper internetStack; + internetStack.Install (*m_nodes); + Ipv4AddressHelper address; + address.SetBase ("10.1.1.0", "255.255.255.0"); + m_interfaces = address.Assign (meshDevices); + // 4. write PCAP if needed + std::string prefix = (WRITE_VECTORS ? NS_TEST_SOURCEDIR : std::string(GetTempDir ())) + PREFIX; + wifiPhy.EnablePcapAll (prefix); + +} + +void +HwmpReactiveRegressionTest::CheckResults () +{ + for (int i = 0; i < 6; ++i) + { + std::ostringstream os1, os2; + // File naming conventions are hard-coded here. + os1 << NS_TEST_SOURCEDIR << PREFIX << "-" << i << "-1.pcap"; + os2 << GetTempDir () << PREFIX << "-" << i << "-1.pcap"; + + uint32_t sec(0), usec(0); + bool diff = PcapFile::Diff (os1.str(), os2.str(), sec, usec); // TODO support default PcapWriter snap length here + NS_TEST_EXPECT_MSG_EQ (diff, false, "PCAP traces " << os1.str() << " and " << os2.str() + << " differ starting from " << sec << " s " << usec << " us"); + } +} + +void +HwmpReactiveRegressionTest::ResetPosition () +{ + Ptr object = m_nodes->Get(3); + Ptr model = object->GetObject (); + if (model == 0) + { + return; + } + model->SetPosition (Vector(9000, 0, 0)); + +} diff --git a/src/devices/mesh/dot11s/test/hwmp-reactive-regression.h b/src/devices/mesh/dot11s/test/hwmp-reactive-regression.h new file mode 100644 index 000000000..a7e3a904c --- /dev/null +++ b/src/devices/mesh/dot11s/test/hwmp-reactive-regression.h @@ -0,0 +1,91 @@ +/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */ +/* + * Copyright (c) 2009 IITP RAS + * + * 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 + * + * Authors: Kirill Andreev + */ +#include "ns3/test.h" +#include "ns3/node-container.h" +#include "ns3/nstime.h" +#include "ns3/ipv4-interface-container.h" +#include "ns3/pcap-file.h" + +using namespace ns3; + +/** + * \ingroup dot11s + * \brief test for multihop path establishing and path error + * procedures + * Initiate scenario with 6 stations. Procedure of opening peer link + * is the following: (PMP routines are not shown) + * \verbatim + * 1 2 3 4 5 6 + * | | | | |<---|---> ARP request (first attempt has failed!) + * |....|....|....|....|....| ARP reauest + * |<---|--->| | | | ARP request + * <---|--->| | | | | PREQ } This order is broken + * <---|--->| | | | | ARP request} due to BroadcastDca + * |<---|--->| | | | PREQ + * |....|....|....|....|....| ARP request + * | | | |<---|--->| PREQ + * | | | | |<---| PREP + * |....|....|....|....|....| PREP + * |<---| | | | | PREP + * |--->| | | | | ARP response + * |....|....|....|....|....| ARP response + * | | | | |--->| ARP response + * | | | | |<---| Data + * |....|....|....|....|....| Data + * |<---| | | | | Data + * <---|--->| | | | | ARP request + * |....|....|....|....|....| ARP reauest + * | | | | |<---|---> ARP request + * | | | | |<---| ARP response + * |....|....|....|....|....| ARP response + * |<---| | | | | ARP response + * |--->| | | | | Data + * At 5 station number 4 dissapears, and PERR is forwarded from 3 to 1 + * and from 5 to 6, and station 6 starts path discovery procedure + * again: + * | |<---| |--->| PERR (one due to beacon loss and one due to TX error) + * |<---| | | | PERR + * | | | |<---|---> PREQ + * | | | <---|--->| PREQ + * |....|....|.........|....| Repeated attempts of PREQ + * \endverbatim + */ + +class HwmpReactiveRegressionTest : public TestCase +{ +public: + HwmpReactiveRegressionTest (); + virtual ~HwmpReactiveRegressionTest(); + + virtual bool DoRun (); + void CheckResults (); +private: + /// XXX It is important to have pointers here + NodeContainer * m_nodes; + /// Simulation time + Time m_time; + Ipv4InterfaceContainer m_interfaces; + + void CreateNodes (); + void CreateDevices (); + void InstallApplications (); + void ResetPosition (); +}; + diff --git a/src/devices/mesh/dot11s/test/hwmp-simplest-regression-test-0-1.pcap b/src/devices/mesh/dot11s/test/hwmp-simplest-regression-test-0-1.pcap new file mode 100644 index 0000000000000000000000000000000000000000..2c72d0caa1bbad50c76c4ff79e793901625cab61 GIT binary patch literal 77039 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 T-dO&;CYxjZ>l-f}YOMbSue36b literal 0 HcmV?d00001 diff --git a/src/devices/mesh/dot11s/test/hwmp-simplest-regression-test-1-1.pcap b/src/devices/mesh/dot11s/test/hwmp-simplest-regression-test-1-1.pcap new file mode 100644 index 0000000000000000000000000000000000000000..e4ccc9865b291f943e7d3016809cb05b97fe2628 GIT binary patch literal 80402 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 + */ + +#include "ns3/mesh-helper.h" +#include "ns3/simulator.h" +#include "ns3/random-variable.h" +#include "ns3/mobility-helper.h" +#include "ns3/double.h" +#include "ns3/uinteger.h" +#include "ns3/string.h" +#include "ns3/yans-wifi-helper.h" +#include "ns3/internet-stack-helper.h" +#include "ns3/ipv4-address-helper.h" +#include "ns3/abort.h" +#include "ns3/udp-echo-helper.h" +#include "ns3/mobility-model.h" +#include +#include "hwmp-simplest-regression.h" + +using namespace ns3; + +/// Set to true to rewrite reference traces, leave false to run regression test +const bool WRITE_VECTORS = false; +/// Unique PCAP file name prefix +const char * const PREFIX = "hwmp-simplest-regression-test"; + + +HwmpSimplestRegressionTest::HwmpSimplestRegressionTest () : TestCase ("Simplest HWMP regression test"), + m_nodes (0), + m_time (Seconds (15)) +{ +} + +HwmpSimplestRegressionTest::~HwmpSimplestRegressionTest () +{ + delete m_nodes; +} +bool +HwmpSimplestRegressionTest::DoRun () +{ + SeedManager::SetSeed(12345); + CreateNodes (); + CreateDevices (); + InstallApplications (); + + Simulator::Stop (m_time); + Simulator::Run (); + Simulator::Destroy (); + + if (!WRITE_VECTORS) CheckResults (); + + delete m_nodes, m_nodes = 0; + return false; +} +void +HwmpSimplestRegressionTest::CreateNodes () +{ + m_nodes = new NodeContainer; + m_nodes->Create (2); + MobilityHelper mobility; + mobility.SetPositionAllocator ("ns3::GridPositionAllocator", + "MinX", DoubleValue (0.0), + "MinY", DoubleValue (0.0), + "DeltaX", DoubleValue (1 /*meter*/), + "DeltaY", DoubleValue (0), + "GridWidth", UintegerValue (2), + "LayoutType", StringValue ("RowFirst")); + mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel"); + mobility.Install (*m_nodes); + Simulator::Schedule (Seconds(10.0), &HwmpSimplestRegressionTest::ResetPosition, this); +} +void +HwmpSimplestRegressionTest::ResetPosition () +{ + Ptr object = m_nodes->Get(1); + Ptr model = object->GetObject (); + if (model == 0) + { + return; + } + model->SetPosition (Vector(9000, 0, 0)); +} +void +HwmpSimplestRegressionTest::InstallApplications () +{ + UdpEchoServerHelper echoServer (9); + ApplicationContainer serverApps = echoServer.Install (m_nodes->Get (0)); + serverApps.Start (Seconds (0.0)); + serverApps.Stop (m_time); + UdpEchoClientHelper echoClient (m_interfaces.GetAddress (0), 9); + echoClient.SetAttribute ("MaxPackets", UintegerValue (300)); + echoClient.SetAttribute ("Interval", TimeValue (Seconds(0.05))); + echoClient.SetAttribute ("PacketSize", UintegerValue (100)); + ApplicationContainer clientApps = echoClient.Install (m_nodes->Get (1)); + clientApps.Start (Seconds (2.0)); + clientApps.Stop (m_time); +} +void +HwmpSimplestRegressionTest::CreateDevices () +{ + // 1. setup WiFi + YansWifiPhyHelper wifiPhy = YansWifiPhyHelper::Default (); + YansWifiChannelHelper wifiChannel = YansWifiChannelHelper::Default (); + wifiPhy.SetChannel (wifiChannel.Create ()); + // 2. setup mesh + MeshHelper mesh = MeshHelper::Default (); + mesh.SetStackInstaller ("ns3::Dot11sStack"); + mesh.SetMacType ("RandomStart", TimeValue (Seconds(0.1))); + mesh.SetNumberOfInterfaces (1); + NetDeviceContainer meshDevices = mesh.Install (wifiPhy, *m_nodes); + // 3. setup TCP/IP + InternetStackHelper internetStack; + internetStack.Install (*m_nodes); + Ipv4AddressHelper address; + address.SetBase ("10.1.1.0", "255.255.255.0"); + m_interfaces = address.Assign (meshDevices); + // 4. write PCAP if needed + std::string prefix = (WRITE_VECTORS ? NS_TEST_SOURCEDIR : std::string(GetTempDir ())) + PREFIX; + wifiPhy.EnablePcapAll (prefix); +} + +void +HwmpSimplestRegressionTest::CheckResults () +{ + for (int i = 0; i < 2; ++i) + { + std::ostringstream os1, os2; + // File naming conventions are hard-coded here. + os1 << NS_TEST_SOURCEDIR << PREFIX << "-" << i << "-1.pcap"; + os2 << GetTempDir () << PREFIX << "-" << i << "-1.pcap"; + + uint32_t sec(0), usec(0); + bool diff = PcapFile::Diff (os1.str(), os2.str(), sec, usec); // TODO support default PcapWriter snap length here + NS_TEST_EXPECT_MSG_EQ (diff, false, "PCAP traces " << os1.str() << " and " << os2.str() + << " differ starting from " << sec << " s " << usec << " us"); + } +} + diff --git a/src/devices/mesh/dot11s/test/hwmp-simplest-regression.h b/src/devices/mesh/dot11s/test/hwmp-simplest-regression.h new file mode 100644 index 000000000..cdbed35b2 --- /dev/null +++ b/src/devices/mesh/dot11s/test/hwmp-simplest-regression.h @@ -0,0 +1,89 @@ +/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */ +/* + * Copyright (c) 2009 IITP RAS + * + * 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 + * + * Authors: Kirill Andreev + */ + +#include "ns3/test.h" +#include "ns3/node-container.h" +#include "ns3/nstime.h" +#include "ns3/ipv4-interface-container.h" +#include "ns3/pcap-file.h" + +using namespace ns3; + +/** + * \ingroup dot11s + * \brief Peering Management & HWM Protocol regression test + * Initiate scenario with 2 stations. Procedure of opening peer link + * is the following: + * \verbatim + * <-----------|-----------> Broadcast frame + * |----------->| Unicast frame + * + * !!! PMP routines: + * <-----------|----------->| Beacon + * |<-----------| Peer Link Open frame + * |----------->| Peer Link Open frame + * |----------->| Peer Link Confirm frame + * |<-----------| Peer Link Confirm frame + * |............| !!! Data started: + * |<-----------|-----------> Arp Request + * <-----------|----------->| Arp Request (fwd) + * <-----------|----------->| PREQ + * |<-----------| PREP + * |----------->| ARP reply + * |<-----------| Data + * |----------->| Data + * |............| Some other beacons + * |<-----------| Data + * |----------->| Data + * |............| !!! Route expiration routines: + * |<-----------|-----------> PREQ (route expired) + * |----------->| PREP + * |<-----------| Data + * |----------->| Data + * |............| + * \endverbatim + * At 10 seconds stations become unreachable, so UDP client tries to + * close peer link due to TX-fail, and UDP-srver tries to close link + * due to beacon loss + + + */ +class HwmpSimplestRegressionTest : public TestCase +{ +public: + HwmpSimplestRegressionTest (); + virtual ~HwmpSimplestRegressionTest(); + + virtual bool DoRun (); + void CheckResults (); + +private: + /// XXX It is important to have pointers here + NodeContainer * m_nodes; + /// Simulation time + Time m_time; + Ipv4InterfaceContainer m_interfaces; + + void CreateNodes (); + void CreateDevices (); + void InstallApplications (); + void ResetPosition (); +}; + diff --git a/src/devices/mesh/dot11s/test/hwmp-target-flags-regression-test-0-1.pcap b/src/devices/mesh/dot11s/test/hwmp-target-flags-regression-test-0-1.pcap new file mode 100644 index 0000000000000000000000000000000000000000..3b6768ae5645a68725176bdb04725eaea78fa8b0 GIT binary patch literal 10632 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 TJ$MTE{-YjXMa%*)aZ&#Z(t_>Y literal 0 HcmV?d00001 diff --git a/src/devices/mesh/dot11s/test/hwmp-target-flags-regression-test-2-1.pcap b/src/devices/mesh/dot11s/test/hwmp-target-flags-regression-test-2-1.pcap new file mode 100644 index 0000000000000000000000000000000000000000..51140c84239c307dc30e5c254ad3b727b457758c GIT binary patch literal 13418 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 + */ + +#include "ns3/mesh-helper.h" +#include "ns3/simulator.h" +#include "ns3/random-variable.h" +#include "ns3/mobility-helper.h" +#include "ns3/double.h" +#include "ns3/uinteger.h" +#include "ns3/string.h" +#include "ns3/yans-wifi-helper.h" +#include "ns3/internet-stack-helper.h" +#include "ns3/ipv4-address-helper.h" +#include "ns3/abort.h" +#include "ns3/udp-echo-helper.h" +#include "ns3/mobility-model.h" +#include +#include "hwmp-target-flags-regression.h" + +using namespace ns3; + +/// Set to true to rewrite reference traces, leave false to run regression test +const bool WRITE_VECTORS = false; +/// Unique PCAP file name prefix +const char * const PREFIX = "hwmp-target-flags-regression-test"; + + +HwmpDoRfRegressionTest::HwmpDoRfRegressionTest () : TestCase ("HWMP proactive regression test"), + m_nodes (0), + m_time (Seconds (5)) +{ +} + +HwmpDoRfRegressionTest::~HwmpDoRfRegressionTest () +{ + delete m_nodes; +} +bool +HwmpDoRfRegressionTest::DoRun () +{ + SeedManager::SetSeed(12345); + CreateNodes (); + CreateDevices (); + InstallApplications (); + + Simulator::Stop (m_time); + Simulator::Run (); + Simulator::Destroy (); + + if (!WRITE_VECTORS) CheckResults (); + + delete m_nodes, m_nodes = 0; + return false; +} +void +HwmpDoRfRegressionTest::CreateNodes () +{ + m_nodes = new NodeContainer; + m_nodes->Create (4); + MobilityHelper mobility; + mobility.SetPositionAllocator ("ns3::GridPositionAllocator", + "MinX", DoubleValue (0.0), + "MinY", DoubleValue (0.0), + "DeltaX", DoubleValue (100), + "DeltaY", DoubleValue (0), + "GridWidth", UintegerValue (4), + "LayoutType", StringValue ("RowFirst")); + mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel"); + mobility.Install (*m_nodes); +} +void +HwmpDoRfRegressionTest::InstallApplications () +{ + UdpEchoServerHelper echoServer (9); + ApplicationContainer serverApps = echoServer.Install (m_nodes->Get (0)); + serverApps.Start (Seconds (0.0)); + serverApps.Stop (m_time); + UdpEchoClientHelper echoClient (m_interfaces.GetAddress (0), 9); + echoClient.SetAttribute ("MaxPackets", UintegerValue (300)); + echoClient.SetAttribute ("Interval", TimeValue (Seconds(1.0))); + echoClient.SetAttribute ("PacketSize", UintegerValue (100)); + //Install first client + ApplicationContainer clientApps = echoClient.Install (m_nodes->Get (1)); + clientApps.Start (Seconds (2.2)); + clientApps.Stop (m_time); + //Install second client + clientApps = echoClient.Install (m_nodes->Get (2)); + clientApps.Start (Seconds (2.0)); + clientApps.Stop (m_time); + //Install second server and attach client to it: + UdpEchoServerHelper echoServer1 (10); + serverApps = echoServer1.Install (m_nodes->Get (3)); + serverApps.Start (Seconds (0.0)); + serverApps.Stop (m_time); + UdpEchoClientHelper echoClient1 (m_interfaces.GetAddress (3), 10); + echoClient1.SetAttribute ("MaxPackets", UintegerValue (300)); + echoClient1.SetAttribute ("Interval", TimeValue (Seconds(1.0))); + echoClient1.SetAttribute ("PacketSize", UintegerValue (100)); + clientApps = echoClient1.Install (m_nodes->Get (0)); + clientApps.Start (Seconds (2.4)); + clientApps.Stop (m_time); +} +void +HwmpDoRfRegressionTest::CreateDevices () +{ + // 1. setup WiFi + YansWifiPhyHelper wifiPhy = YansWifiPhyHelper::Default (); + YansWifiChannelHelper wifiChannel = YansWifiChannelHelper::Default (); + wifiPhy.SetChannel (wifiChannel.Create ()); + // 2. setup mesh + MeshHelper mesh = MeshHelper::Default (); + mesh.SetStackInstaller ("ns3::Dot11sStack"); + mesh.SetMacType ("RandomStart", TimeValue (Seconds(0.1))); + mesh.SetNumberOfInterfaces (1); + NetDeviceContainer meshDevices = mesh.Install (wifiPhy, *m_nodes); + // 3. setup TCP/IP + InternetStackHelper internetStack; + internetStack.Install (*m_nodes); + Ipv4AddressHelper address; + address.SetBase ("10.1.1.0", "255.255.255.0"); + m_interfaces = address.Assign (meshDevices); + // 4. write PCAP if needed + std::string prefix = (WRITE_VECTORS ? NS_TEST_SOURCEDIR : std::string(GetTempDir ())) + PREFIX; + wifiPhy.EnablePcapAll (prefix); +} + +void +HwmpDoRfRegressionTest::CheckResults () +{ + for (int i = 0; i < 4; ++i) + { + std::ostringstream os1, os2; + // File naming conventions are hard-coded here. + os1 << NS_TEST_SOURCEDIR << PREFIX << "-" << i << "-1.pcap"; + os2 << GetTempDir () << PREFIX << "-" << i << "-1.pcap"; + + uint32_t sec(0), usec(0); + bool diff = PcapFile::Diff (os1.str(), os2.str(), sec, usec); // TODO support default PcapWriter snap length here + NS_TEST_EXPECT_MSG_EQ (diff, false, "PCAP traces " << os1.str() << " and " << os2.str() + << " differ starting from " << sec << " s " << usec << " us"); + } +} + diff --git a/src/devices/mesh/dot11s/test/hwmp-target-flags-regression.h b/src/devices/mesh/dot11s/test/hwmp-target-flags-regression.h new file mode 100644 index 000000000..123844d87 --- /dev/null +++ b/src/devices/mesh/dot11s/test/hwmp-target-flags-regression.h @@ -0,0 +1,88 @@ +/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */ +/* + * Copyright (c) 2009 IITP RAS + * + * 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 + * + * Authors: Kirill Andreev + */ + +#include "ns3/test.h" +#include "ns3/node-container.h" +#include "ns3/nstime.h" +#include "ns3/ipv4-interface-container.h" +#include "ns3/pcap-file.h" + +using namespace ns3; + +/** + * \ingroup dot11s + * \brief This is a test for intermediate reply and saving routing + * information about neighbour. 4 stations and 3 UDP ping streams are initiated. + * \verbatim + * <-----------|-----------> Broadcast frame + * |----------->| Unicast frame + * 10 11 12 13 + * | |<-----------|----------->| ARP request (12 asks who has 10) + * | | |<-----------|-----------> ARP request + * |<-----------|----------->| | ARP request + * <-----------|----------->| | | PREQ + * |<-----------|----------->| | PREQ + * | |<-----------| | PREP + * |<-----------| | | PREP + * |----------->| | | ARP reply + * | |----------->| | ARP REPLY + * | |<-----------| | Data + * |............|............|............| + * |<-----------|----------->| | ARP request (11 asks who has 10) + * |............|............|............| + * |----------->| | | ARP reply + * ^ Note, that this arp reply goes without route + * discovery procedure, because route is known from + * previous PREQ/PREP exchange + * |<-----------| | | DATA + * |............|............|............| + * <-----------|----------->| | | ARP request (10 asks who has 13) + * |............|............|............| + * | | |<-----------|-----------> PREQ (13 asks about 10) DO=0 RF=1 + * | | |----------->| PREP (intermediate reply - 12 knows about 10) + * | |<-----------|----------->| PREQ DO=1 RF=0 + * |............|............|............| + * |----------->| | | PREP + * | |----------->| | PREP + * | | |----------->| PREP + * \endverbatim + */ +class HwmpDoRfRegressionTest : public TestCase +{ +public: + HwmpDoRfRegressionTest (); + virtual ~HwmpDoRfRegressionTest(); + + virtual bool DoRun (); + void CheckResults (); + +private: + /// XXX It is important to have pointers here + NodeContainer * m_nodes; + /// Simulation time + Time m_time; + Ipv4InterfaceContainer m_interfaces; + + void CreateNodes (); + void CreateDevices (); + void InstallApplications (); + void ResetPosition (); +}; + diff --git a/src/devices/mesh/dot11s/test/pmp-regression-test-0-1.pcap b/src/devices/mesh/dot11s/test/pmp-regression-test-0-1.pcap new file mode 100644 index 0000000000000000000000000000000000000000..f8fbb750feb871cc73d58038251d30a8e4da0eb1 GIT binary patch literal 851 zcmca|c+)~A1{MYw`2U}QArs1BmSwnIz?+E@UT#qd3f?E)0~-b4wX{kMR!7`}(N4&n+Xp#4Pqo(UN8 zsJ?%N&31^%K;PS?Gcq^=X%I$BM^M{=5+J~sb`B#Qu`OL^m*wgA!y literal 0 HcmV?d00001 diff --git a/src/devices/mesh/dot11s/test/pmp-regression-test-1-1.pcap b/src/devices/mesh/dot11s/test/pmp-regression-test-1-1.pcap new file mode 100644 index 0000000000000000000000000000000000000000..4422a27360c9d49a24dd70b3f23ba8648162fb2d GIT binary patch literal 851 zcmca|c+)~A1{MYw`2U}QArs2UmSQ zAp9RngZY*W=FCtdKqdq#Ffi}|X%N2B03<*FVm6TRU4eli07!!{+ zfX8lDMn)vt*%h(a4lx;M;}4)LhVM~q7ogDh97_1?4+F|#_#Waqh%1n6Zq(K-h9YJjeN`L@k+BuAL#L6Jg@PZLFF-<|xZrx*nw j2C^Se#$sSPBf5d_*g0_-2oE2yiJa{3uo!rN9oawt&rf;A literal 0 HcmV?d00001 diff --git a/src/devices/mesh/dot11s/test/pmp-regression.cc b/src/devices/mesh/dot11s/test/pmp-regression.cc new file mode 100644 index 000000000..9bb40c367 --- /dev/null +++ b/src/devices/mesh/dot11s/test/pmp-regression.cc @@ -0,0 +1,121 @@ +/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */ +/* + * Copyright (c) 2009 IITP RAS + * + * 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 + * + * Authors: Pavel Boyko + */ +#include "ns3/mesh-helper.h" +#include "ns3/simulator.h" +#include "ns3/random-variable.h" +#include "ns3/mobility-helper.h" +#include "ns3/double.h" +#include "ns3/uinteger.h" +#include "ns3/string.h" +#include "ns3/yans-wifi-helper.h" +#include "ns3/internet-stack-helper.h" +#include "ns3/mobility-model.h" +#include "ns3/pcap-file.h" +#include + +#include "pmp-regression.h" + +using namespace ns3; + +/// Set to true to rewrite reference traces, leave false to run regression test +const bool WRITE_VECTORS = false; +/// Unique PCAP file name prefix +const char * const PREFIX = "pmp-regression-test"; + +PeerManagementProtocolRegressionTest::PeerManagementProtocolRegressionTest () : TestCase ("PMP regression test"), + m_nodes (0), + m_time (Seconds (1)) +{ +} + +PeerManagementProtocolRegressionTest::~PeerManagementProtocolRegressionTest () +{ + delete m_nodes; +} + +bool +PeerManagementProtocolRegressionTest::DoRun () +{ + SeedManager::SetSeed(12345); + CreateNodes (); + CreateDevices (); + + Simulator::Stop (m_time); + Simulator::Run (); + Simulator::Destroy (); + + if (!WRITE_VECTORS) CheckResults (); + + delete m_nodes, m_nodes = 0; + return GetErrorStatus (); +} + +void +PeerManagementProtocolRegressionTest::CreateNodes () +{ + m_nodes = new NodeContainer; + m_nodes->Create (2); + MobilityHelper mobility; + mobility.SetPositionAllocator ("ns3::GridPositionAllocator", + "MinX", DoubleValue (0.0), + "MinY", DoubleValue (0.0), + "DeltaX", DoubleValue (1 /*meter*/), + "DeltaY", DoubleValue (0), + "GridWidth", UintegerValue (2), + "LayoutType", StringValue ("RowFirst")); + mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel"); + mobility.Install (*m_nodes); +} + +void +PeerManagementProtocolRegressionTest::CreateDevices () +{ + // 1. setup WiFi + YansWifiPhyHelper wifiPhy = YansWifiPhyHelper::Default (); + YansWifiChannelHelper wifiChannel = YansWifiChannelHelper::Default (); + wifiPhy.SetChannel (wifiChannel.Create ()); + // 2. setup mesh + MeshHelper mesh = MeshHelper::Default (); + mesh.SetStackInstaller ("ns3::Dot11sStack"); + mesh.SetMacType ("RandomStart", TimeValue (Seconds(0.1))); + mesh.SetNumberOfInterfaces (1); + NetDeviceContainer meshDevices = mesh.Install (wifiPhy, *m_nodes); + // 3. write PCAP if needed + std::string prefix = (WRITE_VECTORS ? NS_TEST_SOURCEDIR : std::string(GetTempDir ())) + PREFIX; + wifiPhy.EnablePcapAll (prefix); +} + +void +PeerManagementProtocolRegressionTest::CheckResults () +{ + for (int i = 0; i < 2; ++i) + { + std::ostringstream os1, os2; + // File naming conventions are hard-coded here. + os1 << NS_TEST_SOURCEDIR << PREFIX << "-" << i << "-1.pcap"; + os2 << GetTempDir () << PREFIX << "-" << i << "-1.pcap"; + + uint32_t sec(0), usec(0); + bool diff = PcapFile::Diff (os1.str(), os2.str(), sec, usec); // TODO support default PcapWriter snap length here + NS_TEST_EXPECT_MSG_EQ (diff, false, "PCAP traces " << os1.str() << " and " << os2.str() + << " differ starting from " << sec << " s " << usec << " us"); + } +} + diff --git a/src/devices/mesh/dot11s/test/pmp-regression.h b/src/devices/mesh/dot11s/test/pmp-regression.h new file mode 100644 index 000000000..f98d7655a --- /dev/null +++ b/src/devices/mesh/dot11s/test/pmp-regression.h @@ -0,0 +1,62 @@ +/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */ +/* + * Copyright (c) 2009 IITP RAS + * + * 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 + * + * Authors: Pavel Boyko + */ +#ifndef PMP_REGRESSION_H +#define PMP_REGRESSION_H +#include "ns3/test.h" +#include "ns3/node-container.h" +#include "ns3/nstime.h" + +using namespace ns3; +/** + * \ingroup dot11s + * + * \brief Peering Management Protocol regression test + * + * Initiate scenario with 2 stations. Procedure of opening peer link + * is the following: + * \verbatim + * |----------->| Beacon + * |<-----------| Peer Link Open frame + * |----------->| Peer Link Open frame + * |----------->| Peer Link Confirm frame + * |<-----------| Peer Link Confirm frame + * |............| + * |<---------->| Other beacons + * \endverbatim + */ +class PeerManagementProtocolRegressionTest : public TestCase +{ +public: + PeerManagementProtocolRegressionTest (); + ~PeerManagementProtocolRegressionTest (); + +private: + /// XXX It is important to have pointers here + NodeContainer * m_nodes; + /// Simulation time + Time m_time; + + void CreateNodes (); + void CreateDevices (); + void CheckResults (); + bool DoRun (); +}; +#endif // PMP_REGRESSION_H + diff --git a/src/devices/mesh/dot11s/test/regression.cc b/src/devices/mesh/dot11s/test/regression.cc new file mode 100644 index 000000000..789e84703 --- /dev/null +++ b/src/devices/mesh/dot11s/test/regression.cc @@ -0,0 +1,40 @@ +/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */ +/* + * Copyright (c) 2009 IITP RAS + * + * 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 + * + * Authors: Kirill Andreev + */ + +#include "ns3/test.h" +#include "pmp-regression.h" +#include "hwmp-reactive-regression.h" +#include "hwmp-proactive-regression.h" +#include "hwmp-simplest-regression.h" +#include "hwmp-target-flags-regression.h" + +using namespace ns3; +class Dot11sRegressionSuite : public TestSuite +{ +public: + Dot11sRegressionSuite () : TestSuite ("devices-mesh-dot11s-regression", SYSTEM) + { + AddTestCase (new PeerManagementProtocolRegressionTest); + AddTestCase (new HwmpSimplestRegressionTest); + AddTestCase (new HwmpReactiveRegressionTest); + AddTestCase (new HwmpProactiveRegressionTest); + AddTestCase (new HwmpDoRfRegressionTest); + } +} g_dot11sRegressionSuite; diff --git a/src/devices/mesh/dot11s/wscript b/src/devices/mesh/dot11s/wscript index a79453bb6..b40c2f038 100644 --- a/src/devices/mesh/dot11s/wscript +++ b/src/devices/mesh/dot11s/wscript @@ -23,7 +23,14 @@ def build(bld): 'hwmp-protocol-mac.cc', 'hwmp-protocol.cc', 'airtime-metric.cc', - 'dot11s-test-suite.cc', + 'test/dot11s-test-suite.cc', + 'test/pmp-regression.cc', + 'test/hwmp-reactive-regression.cc', + 'test/hwmp-proactive-regression.cc', + 'test/hwmp-simplest-regression.cc', + 'test/hwmp-target-flags-regression.cc', + 'test/regression.cc', + ] headers = bld.new_task_gen('ns3header') headers.module = 'dot11s'