From 4556ae07dec1ff717d5df7c3d05bd7e2a170db1a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Deronne?= Date: Tue, 14 Feb 2017 08:17:42 +0100 Subject: [PATCH] wifi: Add wifi-manager-example to test all wifi managers --- .../examples/ideal-wifi-manager-example.cc | 388 -------------- .../minstrel-ht-wifi-manager-example.cc | 374 ------------- src/wifi/examples/wifi-manager-example.cc | 501 ++++++++++++++++++ src/wifi/examples/wscript | 12 +- src/wifi/model/aarf-wifi-manager.cc | 11 + src/wifi/model/aarf-wifi-manager.h | 5 +- src/wifi/model/aarfcd-wifi-manager.cc | 13 +- src/wifi/model/aarfcd-wifi-manager.h | 3 + src/wifi/model/amrr-wifi-manager.cc | 11 + src/wifi/model/amrr-wifi-manager.h | 3 + src/wifi/model/arf-wifi-manager.cc | 11 + src/wifi/model/arf-wifi-manager.h | 3 + src/wifi/model/cara-wifi-manager.cc | 12 +- src/wifi/model/cara-wifi-manager.h | 3 + src/wifi/model/minstrel-wifi-manager.cc | 11 + src/wifi/model/minstrel-wifi-manager.h | 4 +- src/wifi/model/onoe-wifi-manager.cc | 11 + src/wifi/model/onoe-wifi-manager.h | 3 + src/wifi/model/rraa-wifi-manager.cc | 11 + src/wifi/model/rraa-wifi-manager.h | 3 + src/wifi/test/examples-to-run.py | 393 ++++++++------ 21 files changed, 837 insertions(+), 949 deletions(-) delete mode 100644 src/wifi/examples/ideal-wifi-manager-example.cc delete mode 100644 src/wifi/examples/minstrel-ht-wifi-manager-example.cc create mode 100644 src/wifi/examples/wifi-manager-example.cc diff --git a/src/wifi/examples/ideal-wifi-manager-example.cc b/src/wifi/examples/ideal-wifi-manager-example.cc deleted file mode 100644 index 4fdbc4465..000000000 --- a/src/wifi/examples/ideal-wifi-manager-example.cc +++ /dev/null @@ -1,388 +0,0 @@ -/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */ -/* - * Copyright (c) 2016 University of Washington - * - * 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 - * - * Author: Tom Henderson - */ - -// Test the operation of IdealWifiManager as the SNR is varied, and create -// a gnuplot output file for plotting -// -// By default, the 802.11b standard is plotted. Several command line -// arguments can change the following options: -// --standard (802.11a, 802.11b, 802.11g, 802.11n-5GHz, 802.11n-2.4GHz, 802.11ac, 802.11-holland, 802.11-10MHz, 802.11-5MHz) -// --shortGuard (for 802.11n/ac) -// --nss (for 802.11n/ac) -// --channelWidth (for 802.11n/ac) -// --broadcast instead of unicast (default is unicast) -// --rtsThreshold (by default, value of 99999 disables it) - -#include "ns3/core-module.h" -#include "ns3/network-module.h" -#include "ns3/wifi-module.h" -#include "ns3/stats-module.h" -#include "ns3/mobility-module.h" -#include "ns3/propagation-module.h" - -using namespace ns3; - -NS_LOG_COMPONENT_DEFINE ("IdealWifiManagerExample"); - -// 290K @ 20 MHz -const double NOISE_DBM_Hz = -174.0; -double noiseDbm = NOISE_DBM_Hz; - -double g_intervalBytes = 0; -uint64_t g_intervalRate = 0; - -void -PacketRx (Ptr pkt, const Address &addr) -{ - NS_LOG_DEBUG ("Received size " << pkt->GetSize ()); - g_intervalBytes += pkt->GetSize (); -} - -void -RateChange (uint64_t oldVal, uint64_t newVal) -{ - NS_LOG_DEBUG ("Change from " << oldVal << " to " << newVal); - g_intervalRate = newVal; -} - -struct Step -{ - double stepSize; - double stepTime; -}; - -struct StandardInfo -{ - StandardInfo () - { - m_name = "none"; - } - StandardInfo (std::string name, enum WifiPhyStandard standard, uint32_t width, bool sgi, double snrLow, double snrHigh, double xMin, double xMax, double yMax) - : m_name (name), - m_standard (standard), - m_width (width), - m_snrLow (snrLow), - m_snrHigh (snrHigh), - m_xMin (xMin), - m_xMax (xMax), - m_yMax (yMax) - { - } - std::string m_name; - enum WifiPhyStandard m_standard; - uint32_t m_width; - double m_snrLow; - double m_snrHigh; - double m_xMin; - double m_xMax; - double m_yMax; -}; - -void -ChangeSignalAndReportRate (Ptr rssModel, struct Step step, double rss, Gnuplot2dDataset& rateDataset, Gnuplot2dDataset& actualDataset) -{ - NS_LOG_FUNCTION (rssModel << step.stepSize << step.stepTime << rss); - double snr = rss - noiseDbm; - rateDataset.Add (snr, g_intervalRate / 1000000.0); - // Calculate received rate since last interval - double currentRate = ((g_intervalBytes * 8) / step.stepTime) / 1e6; // Mb/s - actualDataset.Add (snr, currentRate); - rssModel->SetRss (rss - step.stepSize); - NS_LOG_INFO ("At time " << Simulator::Now ().As (Time::S) << "; observed rate " << currentRate << "; setting new power to " << rss - step.stepSize); - g_intervalBytes = 0; - Simulator::Schedule (Seconds (step.stepTime), &ChangeSignalAndReportRate, rssModel, step, (rss - step.stepSize), rateDataset, actualDataset); -} - -int main (int argc, char *argv[]) -{ - std::vector standards; - uint32_t steps; - - uint32_t rtsThreshold = 999999; // disabled even for large A-MPDU - double stepSize = 1; // dBm - double stepTime = 0.5; // seconds - uint32_t packetSize = 1024; // bytes - int broadcast = 0; - int ap1_x = 0; - int ap1_y = 0; - int sta1_x = 5; - int sta1_y = 0; - uint16_t nss = 1; - bool shortGuardInterval = false; - uint32_t channelWidth = 20; - std::string standard ("802.11b"); - StandardInfo selectedStandard; - - CommandLine cmd; - cmd.AddValue ("rtsThreshold", "RTS threshold", rtsThreshold); - cmd.AddValue ("stepSize", "Power between steps (dBm)", stepSize); - cmd.AddValue ("stepTime", "Time on each step (seconds)", stepTime); - cmd.AddValue ("broadcast", "Send broadcast instead of unicast", broadcast); - cmd.AddValue ("channelWidth", "Set channel width (valid only for 802.11n or ac)", channelWidth); - cmd.AddValue ("nss", "Set nss (valid only for 802.11n or ac)", nss); - cmd.AddValue ("shortGuard", "Set short guard interval (802.11n/ac)", shortGuardInterval); - cmd.AddValue ("standard", "Set standard (802.11a, 802.11b, 802.11g, 802.11n-5GHz, 802.11n-2.4GHz, 802.11ac, 802.11-holland, 802.11-10MHz, 802.11-5MHz)", standard); - cmd.Parse (argc, argv); - - if (standard == "802.11b") - { - NS_ABORT_MSG_IF (channelWidth != 20 && channelWidth != 22, "Invalid channel width for standard " << standard); - NS_ABORT_MSG_IF (nss != 1, "Invalid nss for standard " << standard); - } - else if (standard == "802.11a" || standard == "802.11g") - { - NS_ABORT_MSG_IF (channelWidth != 20, "Invalid channel width for standard " << standard); - NS_ABORT_MSG_IF (nss != 1, "Invalid nss for standard " << standard); - } - else if (standard == "802.11n-5GHz" || standard == "802.11n-2.4GHz") - { - NS_ABORT_MSG_IF (channelWidth != 20 && channelWidth != 40, "Invalid channel width for standard " << standard); - NS_ABORT_MSG_IF (nss == 0 || nss > 4, "Invalid nss " << nss << " for standard " << standard); - } - else if (standard == "802.11ac") - { - NS_ABORT_MSG_IF (channelWidth != 20 && channelWidth != 40 && channelWidth != 80 && channelWidth != 160, "Invalid channel width for standard " << standard); - NS_ABORT_MSG_IF (nss == 0 || nss > 4, "Invalid nss " << nss << " for standard " << standard); - } - - std::string plotName = "ideal-wifi-manager-example-"; - std::string dataName = "ideal-wifi-manager-example-"; - plotName += standard; - dataName += standard; - if (standard == "802.11n-5GHz" || standard == "802.11n-2.4GHz" || standard == "802.11ac") - { - std::ostringstream oss; - std::string gi; - if (shortGuardInterval) - { - gi = "SGI"; - } - else - { - gi = "LGI"; - } - oss << "-" << channelWidth << "MHz-" << gi << "-" << nss << "SS"; - plotName += oss.str (); - dataName += oss.str (); - } - plotName += ".eps"; - dataName += ".plt"; - std::ofstream outfile (dataName.c_str ()); - Gnuplot gnuplot = Gnuplot (plotName); - - // As channel width increases, scale up plot's yRange value - uint32_t channelRateFactor = channelWidth / 20; - channelRateFactor = channelRateFactor * nss; - - // The first number is channel width, second is minimum SNR, third is maximum - // SNR, fourth and fifth provide xrange axis limits, and sixth the yaxis - // maximum - standards.push_back (StandardInfo ("802.11a", WIFI_PHY_STANDARD_80211a, 20, false, 3, 27, 0, 30, 60)); - standards.push_back (StandardInfo ("802.11b", WIFI_PHY_STANDARD_80211b, 22, false, -5, 11, -6, 15, 15)); - standards.push_back (StandardInfo ("802.11g", WIFI_PHY_STANDARD_80211g, 20, false, -5, 27, -6, 30, 60)); - standards.push_back (StandardInfo ("802.11n-5GHz", WIFI_PHY_STANDARD_80211n_5GHZ, channelWidth, shortGuardInterval, 3, 30, 0, 35, 80 * channelRateFactor)); - standards.push_back (StandardInfo ("802.11n-2.4GHz", WIFI_PHY_STANDARD_80211n_2_4GHZ, channelWidth, shortGuardInterval, 3, 30, 0, 35, 80 * channelRateFactor)); - standards.push_back (StandardInfo ("802.11ac", WIFI_PHY_STANDARD_80211ac, channelWidth, shortGuardInterval, 5, 35, 0, 40, 120 * channelRateFactor)); - standards.push_back (StandardInfo ("802.11-holland", WIFI_PHY_STANDARD_holland, 20, false, 3, 27, 0, 30, 60)); - standards.push_back (StandardInfo ("802.11-10MHz", WIFI_PHY_STANDARD_80211_10MHZ, 10, false, 3, 27, 0, 30, 60)); - standards.push_back (StandardInfo ("802.11-5MHz", WIFI_PHY_STANDARD_80211_5MHZ, 5, false, 3, 27, 0, 30, 60)); - - for (std::vector::size_type i = 0; i != standards.size (); i++) - { - if (standard == standards[i].m_name) - { - selectedStandard = standards[i]; - } - } - NS_ABORT_IF (selectedStandard.m_name == "none"); - std::cout << "Testing " << selectedStandard.m_name << "..." << std::endl; - NS_ABORT_MSG_IF (selectedStandard.m_snrLow >= selectedStandard.m_snrHigh, "SNR values in wrong order"); - steps = static_cast (std::floor ((selectedStandard.m_snrHigh - selectedStandard.m_snrLow ) / stepSize)) + 1; - NS_LOG_DEBUG ("Using " << steps << " steps for SNR range " << selectedStandard.m_snrLow << ":" << selectedStandard.m_snrHigh); - Ptr clientNode = CreateObject (); - Ptr serverNode = CreateObject (); - - WifiHelper wifi; - wifi.SetStandard (selectedStandard.m_standard); - YansWifiPhyHelper wifiPhy = YansWifiPhyHelper::Default (); - wifiPhy.Set ("RxGain", DoubleValue (0.0)); - wifiPhy.Set ("RxNoiseFigure", DoubleValue (0.0)); - wifiPhy.Set ("EnergyDetectionThreshold", DoubleValue (-110.0)); - wifiPhy.Set ("CcaMode1Threshold", DoubleValue (-110.0)); - - Ptr wifiChannel = CreateObject (); - Ptr delayModel = CreateObject (); - wifiChannel->SetPropagationDelayModel (delayModel); - Ptr rssLossModel = CreateObject (); - wifiChannel->SetPropagationLossModel (rssLossModel); - wifiPhy.SetChannel (wifiChannel); - - wifi.SetRemoteStationManager ("ns3::IdealWifiManager", "RtsCtsThreshold", UintegerValue (rtsThreshold)); - - // Use Adhoc so we don't get into association issues - NetDeviceContainer serverDevice; - NetDeviceContainer clientDevice; - - WifiMacHelper wifiMac; - wifiMac.SetType ("ns3::AdhocWifiMac"); - serverDevice = wifi.Install (wifiPhy, wifiMac, serverNode); - clientDevice = wifi.Install (wifiPhy, wifiMac, clientNode); - - Config::ConnectWithoutContext ("/NodeList/0/DeviceList/*/$ns3::WifiNetDevice/RemoteStationManager/$ns3::IdealWifiManager/Rate", MakeCallback (&RateChange)); - // Configure the mobility. - MobilityHelper mobility; - Ptr positionAlloc = CreateObject (); - //Initial position of AP and STA - positionAlloc->Add (Vector (ap1_x, ap1_y, 0.0)); - NS_LOG_INFO ("Setting initial AP position to " << Vector (ap1_x, ap1_y, 0.0)); - positionAlloc->Add (Vector (sta1_x, sta1_y, 0.0)); - NS_LOG_INFO ("Setting initial STA position to " << Vector (sta1_x, sta1_y, 0.0)); - mobility.SetPositionAllocator (positionAlloc); - mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel"); - mobility.Install (clientNode); - mobility.Install (serverNode); - - Gnuplot2dDataset rateDataset (selectedStandard.m_name + std::string ("-rate selected")); - Gnuplot2dDataset actualDataset (selectedStandard.m_name + std::string ("-observed")); - struct Step step; - step.stepSize = stepSize; - step.stepTime = stepTime; - - // Perform post-install configuration from defaults for channel width, - // guard interval, and nss, if necessary - // Obtain pointer to the WifiPhy - Ptr ndClient = clientDevice.Get (0); - Ptr ndServer = serverDevice.Get (0); - Ptr wndClient = ndClient->GetObject (); - Ptr wndServer = ndServer->GetObject (); - Ptr wifiPhyPtrClient = wndClient->GetPhy (); - Ptr wifiPhyPtrServer = wndServer->GetPhy (); - wifiPhyPtrClient->SetNumberOfAntennas (nss); - wifiPhyPtrClient->SetMaxSupportedTxSpatialStreams (nss); - wifiPhyPtrClient->SetMaxSupportedRxSpatialStreams (nss); - wifiPhyPtrServer->SetNumberOfAntennas (nss); - wifiPhyPtrServer->SetMaxSupportedTxSpatialStreams (nss); - wifiPhyPtrServer->SetMaxSupportedRxSpatialStreams (nss); - // Only set the channel width and guard interval for HT and VHT modes - if (selectedStandard.m_name == "802.11n-5GHz" - || selectedStandard.m_name == "802.11n-2.4GHz" - || selectedStandard.m_name == "802.11ac") - { - wifiPhyPtrClient->SetChannelWidth (selectedStandard.m_width); - wifiPhyPtrServer->SetChannelWidth (selectedStandard.m_width); - wifiPhyPtrClient->SetShortGuardInterval (shortGuardInterval); - wifiPhyPtrServer->SetShortGuardInterval (shortGuardInterval); - } - NS_LOG_DEBUG ("Channel width " << wifiPhyPtrClient->GetChannelWidth () << " noiseDbm " << noiseDbm); - NS_LOG_DEBUG ("NSS " << wifiPhyPtrClient->GetMaxSupportedTxSpatialStreams ()); - - // Configure signal and noise, and schedule first iteration - noiseDbm += 10 * log10 (selectedStandard.m_width * 1000000); - double rssCurrent = (selectedStandard.m_snrHigh + noiseDbm); - rssLossModel->SetRss (rssCurrent); - NS_LOG_INFO ("Setting initial Rss to " << rssCurrent); - //Move the STA by stepsSize meters every stepTime seconds - Simulator::Schedule (Seconds (0.5 + stepTime), &ChangeSignalAndReportRate, rssLossModel, step, rssCurrent, rateDataset, actualDataset); - - PacketSocketHelper packetSocketHelper; - packetSocketHelper.Install (serverNode); - packetSocketHelper.Install (clientNode); - - PacketSocketAddress socketAddr; - socketAddr.SetSingleDevice (serverDevice.Get (0)->GetIfIndex ()); - if (broadcast) - { - socketAddr.SetPhysicalAddress (serverDevice.Get (0)->GetBroadcast ()); - } - else - { - socketAddr.SetPhysicalAddress (serverDevice.Get (0)->GetAddress ()); - } - // Arbitrary protocol type. - // Note: PacketSocket doesn't have any L4 multiplexing or demultiplexing - // The only mux/demux is based on the protocol field - socketAddr.SetProtocol (1); - - Ptr client = CreateObject (); - client->SetRemote (socketAddr); - client->SetStartTime (Seconds (0.5)); // allow simulation warmup - client->SetAttribute ("MaxPackets", UintegerValue (0)); // unlimited - client->SetAttribute ("PacketSize", UintegerValue (packetSize)); - - // Set a maximum rate 10% above the yMax specified for the selected standard - double rate = selectedStandard.m_yMax * 1e6 * 1.10; - double clientInterval = static_cast (packetSize) * 8 / rate; - NS_LOG_DEBUG ("Setting interval to " << clientInterval << " sec for rate of " << rate << " bits/sec"); - - client->SetAttribute ("Interval", TimeValue (Seconds (clientInterval))); - clientNode->AddApplication (client); - - Ptr server = CreateObject (); - server->SetLocal (socketAddr); - server->TraceConnectWithoutContext ("Rx", MakeCallback (&PacketRx)); - serverNode->AddApplication (server); - - Simulator::Stop (Seconds ((steps + 1) * stepTime)); - Simulator::Run (); - Simulator::Destroy (); - - gnuplot.AddDataset (rateDataset); - gnuplot.AddDataset (actualDataset); - - std::ostringstream xMinStr, xMaxStr, yMaxStr; - std::string xRangeStr ("set xrange ["); - xMinStr << selectedStandard.m_xMin; - xRangeStr.append (xMinStr.str ()); - xRangeStr.append (":"); - xMaxStr << selectedStandard.m_xMax; - xRangeStr.append (xMaxStr.str ()); - xRangeStr.append ("]"); - std::string yRangeStr ("set yrange [0:"); - yMaxStr << selectedStandard.m_yMax; - yRangeStr.append (yMaxStr.str ()); - yRangeStr.append ("]"); - - std::ostringstream widthStrStr; - std::ostringstream nssStrStr; - std::string title ("Wi-Fi ideal rate control: "); - title.append (standard); - title.append (" channel width: "); - widthStrStr << selectedStandard.m_width; - title.append (widthStrStr.str ()); - title.append (" MHz nss: "); - nssStrStr << nss; - title.append (nssStrStr.str ()); - if (shortGuardInterval == true) - { - title.append (" shortGuard: true"); - } - - gnuplot.SetTerminal ("postscript eps color enh \"Times-BoldItalic\""); - gnuplot.SetLegend ("SNR (dB)", "Rate (Mb/s)"); - gnuplot.SetTitle (title); - gnuplot.SetExtra (xRangeStr); - gnuplot.AppendExtra (yRangeStr); - gnuplot.AppendExtra ("set key top left"); - gnuplot.GenerateOutput (outfile); - outfile.close (); - - return 0; -} - diff --git a/src/wifi/examples/minstrel-ht-wifi-manager-example.cc b/src/wifi/examples/minstrel-ht-wifi-manager-example.cc deleted file mode 100644 index d34c87344..000000000 --- a/src/wifi/examples/minstrel-ht-wifi-manager-example.cc +++ /dev/null @@ -1,374 +0,0 @@ -/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */ -/* - * Copyright (c) 2016 University of Washington - * - * 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 - * - * Author: Tom Henderson - * Matías Richart - */ - -// Test the operation of IdealWifiManager as the SNR is varied, and create -// a gnuplot output file for plotting -// -// By default, the 802.11b standard is plotted. Several command line -// arguments can change the following options: -// --rtsThreshold: RTS threshold [65535] -// --BE_MaxAmpduSize: BE Mac A-MPDU size [65535] -// --stepSize: Power between steps (dBm) [1] -// --stepTime: Time on each step (seconds) [1] -// --broadcast: Send broadcast instead of unicast [0] -// --channelWidth: Set channel width (valid only for 802.11n or ac) [20] -// --standard: Set standard (802.11a, 802.11b, 802.11g, 802.11n-5GHz, 802.11ac, and others...) [802.11b] - -#include "ns3/core-module.h" -#include "ns3/network-module.h" -#include "ns3/wifi-module.h" -#include "ns3/stats-module.h" -#include "ns3/mobility-module.h" -#include "ns3/propagation-module.h" - -using namespace ns3; - -NS_LOG_COMPONENT_DEFINE ("MinstrelHtWifiManagerExample"); - -// 20 MHz, 290K -const double NOISE_DBM_Hz = -174.0; -double noiseDbm = NOISE_DBM_Hz; - -double g_intervalBytes = 0; -uint64_t g_intervalRate = 0; - -void -PacketRx (Ptr pkt, const Address &addr) -{ - NS_LOG_DEBUG ("Received size " << pkt->GetSize ()); - g_intervalBytes += pkt->GetSize (); -} - -void -RateChange (uint64_t newVal, Mac48Address dest) -{ - NS_LOG_DEBUG ("Change to " << newVal); - g_intervalRate = newVal; -} - -struct Step -{ - double stepSize; - double stepTime; -}; - -struct StandardInfo -{ - StandardInfo () - { - m_name = "none"; - } - StandardInfo (std::string name, enum WifiPhyStandard standard, uint32_t width, bool sgi, double snrLow, double snrHigh, double xMin, double xMax, double yMax) - : m_name (name), - m_standard (standard), - m_width (width), - m_sgi (sgi), - m_snrLow (snrLow), - m_snrHigh (snrHigh), - m_xMin (xMin), - m_xMax (xMax), - m_yMax (yMax) - { - } - std::string m_name; - enum WifiPhyStandard m_standard; - uint32_t m_width; - bool m_sgi; - double m_snrLow; - double m_snrHigh; - double m_xMin; - double m_xMax; - double m_yMax; -}; - -void -ChangeSignalAndReportRate (Ptr rssModel, struct Step step, double rss, Gnuplot2dDataset& rateDataset, Gnuplot2dDataset& actualDataset) -{ - NS_LOG_FUNCTION (rssModel << step.stepSize << step.stepTime << rss); - double snr = rss - noiseDbm; //dB - rateDataset.Add (snr, g_intervalRate / 1000000.0); - // Calculate received rate since last interval - double currentRate = ((g_intervalBytes * 8) / step.stepTime) / 1e6; // Mb/s - actualDataset.Add (snr, currentRate); - rssModel->SetRss (rss - step.stepSize); - NS_LOG_INFO ("At time " << Simulator::Now ().As (Time::S) << "; observed rate " << currentRate << "; setting new power to " << rss - step.stepSize); - g_intervalBytes = 0; - Simulator::Schedule (Seconds (step.stepTime), &ChangeSignalAndReportRate, rssModel, step, (rss - step.stepSize), rateDataset, actualDataset); -} - -int main (int argc, char *argv[]) -{ - std::vector standards; - int steps; - uint32_t rtsThreshold = 65535; - uint32_t BE_MaxAmpduSize = 65535; - double stepSize = 1; // dBm - double stepTime = 1; // seconds - uint32_t packetSize = 1024; // bytes - int broadcast = 0; - int ap1_x = 0; - int ap1_y = 0; - int sta1_x = 5; - int sta1_y = 0; - uint16_t nss = 1; - bool shortGuardInterval = false; - uint32_t channelWidth = 20; - std::string standard ("802.11b"); - StandardInfo selectedStandard; - std::string outfileName ("minstrel-ht-"); - - CommandLine cmd; - cmd.AddValue ("rtsThreshold", "RTS threshold", rtsThreshold); - cmd.AddValue ("BE_MaxAmpduSize", "BE Max A-MPDU size", BE_MaxAmpduSize); - cmd.AddValue ("stepSize", "Power between steps (dBm)", stepSize); - cmd.AddValue ("stepTime", "Time on each step (seconds)", stepTime); - cmd.AddValue ("broadcast", "Send broadcast instead of unicast", broadcast); - cmd.AddValue ("channelWidth", "Set channel width (valid only for 802.11n or ac)", channelWidth); - cmd.AddValue ("shortGuard", "Set short guard interval (802.11n/ac)", shortGuardInterval); - cmd.AddValue ("nss", "Set nss (valid only for 802.11n or ac)", nss); - cmd.AddValue ("standard", "Set standard (802.11a, 802.11b, 802.11g, 802.11n-5GHz, 802.11n-2.4GHz, 802.11ac, 802.11-holland, 802.11-10MHz, 802.11-5MHz)", standard); - cmd.Parse (argc, argv); - - if (standard == "802.11b") - { - NS_ABORT_MSG_IF (channelWidth != 20 && channelWidth != 22, "Invalid channel width for standard " << standard); - NS_ABORT_MSG_IF (nss != 1, "Invalid nss for standard " << standard); - } - else if (standard == "802.11a" || standard == "802.11g") - { - NS_ABORT_MSG_IF (channelWidth != 20, "Invalid channel width for standard " << standard); - NS_ABORT_MSG_IF (nss != 1, "Invalid nss for standard " << standard); - } - else if (standard == "802.11n-5GHz" || standard == "802.11n-2.4GHz") - { - NS_ABORT_MSG_IF (channelWidth != 20 && channelWidth != 40, "Invalid channel width for standard " << standard); - NS_ABORT_MSG_IF (nss == 0 || nss > 4, "Invalid nss " << nss << " for standard " << standard); - } - else if (standard == "802.11ac") - { - NS_ABORT_MSG_IF (channelWidth != 20 && channelWidth != 40 && channelWidth != 80 && channelWidth != 160, "Invalid channel width for standard " << standard); - NS_ABORT_MSG_IF (nss == 0 || nss > 4, "Invalid nss " << nss << " for standard " << standard); - } - - outfileName.append (standard); - if (standard == "802.11n-5GHz" || standard == "802.11n-2.4GHz" || standard == "802.11ac") - { - std::ostringstream oss; - std::string gi; - if (shortGuardInterval) - { - gi = "SGI"; - } - else - { - gi = "LGI"; - } - oss << "-" << channelWidth << "MHz-" << gi << "-" << nss << "SS"; - outfileName += oss.str (); - } - std::string tmp = outfileName + ".plt"; - std::ofstream outfile (tmp.c_str ()); - tmp = outfileName + ".eps"; - Gnuplot gnuplot = Gnuplot (tmp.c_str ()); - - // The first number is channel width, second is minimum SNR, third is maximum - // SNR, fourth and fifth provide xrange axis limits, and sixth the yaxis - // maximum - standards.push_back (StandardInfo ("802.11a", WIFI_PHY_STANDARD_80211a, 20, false, 3, 27, 0, 30, 60)); - standards.push_back (StandardInfo ("802.11b", WIFI_PHY_STANDARD_80211b, 22, false, -5, 11, -6, 15, 15)); - standards.push_back (StandardInfo ("802.11g", WIFI_PHY_STANDARD_80211g, 20, false, -5, 27, -6, 30, 80)); - standards.push_back (StandardInfo ("802.11n-5GHz", WIFI_PHY_STANDARD_80211n_5GHZ, channelWidth, shortGuardInterval, 5, 30, 0, 35, 80)); - standards.push_back (StandardInfo ("802.11n-2.4GHz", WIFI_PHY_STANDARD_80211n_2_4GHZ, channelWidth, shortGuardInterval, 5, 30, 0, 35, 80)); - standards.push_back (StandardInfo ("802.11ac", WIFI_PHY_STANDARD_80211ac, channelWidth, shortGuardInterval, 5, 30, 0, 35, 80)); - standards.push_back (StandardInfo ("802.11-holland", WIFI_PHY_STANDARD_holland, 20, false, 3, 27, 0, 30, 60)); - standards.push_back (StandardInfo ("802.11-10MHz", WIFI_PHY_STANDARD_80211_10MHZ, 10, false, 3, 27, 0, 30, 60)); - standards.push_back (StandardInfo ("802.11-5MHz", WIFI_PHY_STANDARD_80211_5MHZ, 5, false, 3, 27, 0, 30, 60)); - - for (std::vector::size_type i = 0; i != standards.size (); i++) - { - if (standard == standards[i].m_name) - { - selectedStandard = standards[i]; - } - } - NS_ABORT_IF (selectedStandard.m_name == "none"); - std::cout << "Testing " << selectedStandard.m_name << "..." << std::endl; - NS_ABORT_MSG_IF (selectedStandard.m_snrLow >= selectedStandard.m_snrHigh, "SNR values in wrong order"); - steps = std::abs ((int) (selectedStandard.m_snrHigh - selectedStandard.m_snrLow ) / stepSize) + 1; - Ptr clientNode = CreateObject (); - Ptr serverNode = CreateObject (); - - WifiHelper wifi; - wifi.SetStandard (selectedStandard.m_standard); - YansWifiPhyHelper wifiPhy = YansWifiPhyHelper::Default (); - wifiPhy.Set ("RxGain", DoubleValue (0.0)); - wifiPhy.Set ("RxNoiseFigure", DoubleValue (0.0)); - wifiPhy.Set ("EnergyDetectionThreshold", DoubleValue (-110.0)); - wifiPhy.Set ("CcaMode1Threshold", DoubleValue (-110.0)); - - Ptr wifiChannel = CreateObject (); - Ptr delayModel = CreateObject (); - wifiChannel->SetPropagationDelayModel (delayModel); - Ptr rssLossModel = CreateObject (); - wifiChannel->SetPropagationLossModel (rssLossModel); - wifiPhy.SetChannel (wifiChannel); - wifiPhy.Set ("ShortGuardEnabled", BooleanValue (selectedStandard.m_sgi)); - - wifi.SetRemoteStationManager ("ns3::MinstrelHtWifiManager", "RtsCtsThreshold", UintegerValue (rtsThreshold), "PrintStats", BooleanValue (true)); - - // Use Adhoc so we don't get into association issues - NetDeviceContainer serverDevice; - NetDeviceContainer clientDevice; - - WifiMacHelper wifiMac; - wifiMac.SetType ("ns3::AdhocWifiMac", - "BE_MaxAmpduSize", UintegerValue (BE_MaxAmpduSize)); - serverDevice = wifi.Install (wifiPhy, wifiMac, serverNode); - clientDevice = wifi.Install (wifiPhy, wifiMac, clientNode); - - Config::ConnectWithoutContext ("/NodeList/0/DeviceList/*/$ns3::WifiNetDevice/RemoteStationManager/$ns3::MinstrelHtWifiManager/RateChange", MakeCallback (&RateChange)); - - // Configure the mobility. - MobilityHelper mobility; - Ptr positionAlloc = CreateObject (); - //Initial position of AP and STA - positionAlloc->Add (Vector (ap1_x, ap1_y, 0.0)); - NS_LOG_INFO ("Setting initial AP position to " << Vector (ap1_x, ap1_y, 0.0)); - positionAlloc->Add (Vector (sta1_x, sta1_y, 0.0)); - NS_LOG_INFO ("Setting initial STA position to " << Vector (sta1_x, sta1_y, 0.0)); - mobility.SetPositionAllocator (positionAlloc); - mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel"); - mobility.Install (clientNode); - mobility.Install (serverNode); - - Gnuplot2dDataset rateDataset (selectedStandard.m_name + std::string ("-rate selected")); - Gnuplot2dDataset actualDataset (selectedStandard.m_name + std::string ("-observed")); - struct Step step; - step.stepSize = stepSize; - step.stepTime = stepTime; - - // Set channel width - // Adjust noise for channel width - // Obtain pointer to the WifiPhy - Ptr ndClient = clientDevice.Get (0); - Ptr wndClient = ndClient->GetObject (); - Ptr wifiPhyPtrClient = wndClient->GetPhy (); - wifiPhyPtrClient->SetChannelWidth (selectedStandard.m_width); - wifiPhyPtrClient->SetNumberOfAntennas (nss); - wifiPhyPtrClient->SetMaxSupportedTxSpatialStreams (nss); - wifiPhyPtrClient->SetMaxSupportedRxSpatialStreams (nss); - noiseDbm += 10 * log10 (selectedStandard.m_width * 1000000); - NS_LOG_DEBUG ("Channel width " << wifiPhyPtrClient->GetChannelWidth () << " noiseDbm " << noiseDbm); - - // Set channel width - // Adjust noise for channel width - // Obtain pointer to the WifiPhy - Ptr ndServer = serverDevice.Get (0); - Ptr wndServer = ndServer->GetObject (); - Ptr wifiPhyPtrServer = wndServer->GetPhy (); - wifiPhyPtrServer->SetChannelWidth (selectedStandard.m_width); - wifiPhyPtrServer->SetNumberOfAntennas (nss); - wifiPhyPtrServer->SetMaxSupportedTxSpatialStreams (nss); - wifiPhyPtrServer->SetMaxSupportedRxSpatialStreams (nss); - - double rssCurrent = (selectedStandard.m_snrHigh + noiseDbm); - rssLossModel->SetRss (rssCurrent); - NS_LOG_INFO ("Setting initial Rss to " << rssCurrent); - //Move the STA by stepsSize meters every stepTime seconds - Simulator::Schedule (Seconds (0.5 + stepTime), &ChangeSignalAndReportRate, rssLossModel, step, rssCurrent, rateDataset, actualDataset); - - PacketSocketHelper packetSocketHelper; - packetSocketHelper.Install (serverNode); - packetSocketHelper.Install (clientNode); - - PacketSocketAddress socketAddr; - socketAddr.SetSingleDevice (serverDevice.Get (0)->GetIfIndex ()); - if (broadcast) - { - socketAddr.SetPhysicalAddress (serverDevice.Get (0)->GetBroadcast ()); - } - else - { - socketAddr.SetPhysicalAddress (serverDevice.Get (0)->GetAddress ()); - } - // Arbitrary protocol type. - // Note: PacketSocket doesn't have any L4 multiplexing or demultiplexing - // The only mux/demux is based on the protocol field - socketAddr.SetProtocol (1); - - Ptr client = CreateObject (); - client->SetRemote (socketAddr); - client->SetStartTime (Seconds (0.5)); - client->SetAttribute ("MaxPackets", UintegerValue (0)); - client->SetAttribute ("PacketSize", UintegerValue (packetSize)); - client->SetAttribute ("Interval", TimeValue (MicroSeconds (20))); - clientNode->AddApplication (client); - - Ptr server = CreateObject (); - server->SetLocal (socketAddr); - server->TraceConnectWithoutContext ("Rx", MakeCallback (&PacketRx)); - serverNode->AddApplication (server); - - Simulator::Stop (Seconds ((steps + 1) * stepTime)); - Simulator::Run (); - Simulator::Destroy (); - - gnuplot.AddDataset (rateDataset); - gnuplot.AddDataset (actualDataset); - - std::ostringstream xMinStr, xMaxStr, yMaxStr; - std::string xRangeStr ("set xrange ["); - xMinStr << selectedStandard.m_xMin; - xRangeStr.append (xMinStr.str ()); - xRangeStr.append (":"); - xMaxStr << selectedStandard.m_xMax; - xRangeStr.append (xMaxStr.str ()); - xRangeStr.append ("]"); - std::string yRangeStr ("set yrange [0:"); - yMaxStr << selectedStandard.m_yMax; - yRangeStr.append (yMaxStr.str ()); - yRangeStr.append ("]"); - - std::ostringstream widthStrStr; - std::ostringstream nssStrStr; - std::string title ("Wi-Fi Minstrel ht rate control: "); - title.append (standard); - title.append (" channel width: "); - widthStrStr << selectedStandard.m_width; - title.append (widthStrStr.str ()); - title.append (" MHz nss: "); - nssStrStr << nss; - title.append (nssStrStr.str ()); - if (shortGuardInterval == true) - { - title.append (" shortGuard: true"); - } - - gnuplot.SetTerminal ("postscript eps color enh \"Times-BoldItalic\""); - gnuplot.SetLegend ("SNR (dB)", "Rate (Mb/s)"); - gnuplot.SetTitle (title); - gnuplot.SetExtra (xRangeStr); - gnuplot.AppendExtra (yRangeStr); - gnuplot.AppendExtra ("set key reverse left Left"); - gnuplot.GenerateOutput (outfile); - outfile.close (); - return 0; -} diff --git a/src/wifi/examples/wifi-manager-example.cc b/src/wifi/examples/wifi-manager-example.cc new file mode 100644 index 000000000..62dbb21d3 --- /dev/null +++ b/src/wifi/examples/wifi-manager-example.cc @@ -0,0 +1,501 @@ +/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */ +/* + * Copyright (c) 2016 University of Washington + * + * 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: Tom Henderson + * Matías Richart + * Sébastien Deronne + */ + +// Test the operation of a wifi manager as the SNR is varied, and create +// a gnuplot output file for plotting. +// +// The test consists of a device acting as server and a device as client generating traffic. +// +// The output consists of a plot of the rate observed and selected at the client device. +// +// By default, the 802.11a standard using IdealWifiManager is plotted. Several command line +// arguments can change the following options: +// --wifiManager (Aarf, Aarfcd, Amrr, Arf, Cara, Ideal, Minstrel, MinstrelHt, Onoe, Rraa) +// --standard (802.11a, 802.11b, 802.11g, 802.11n-5GHz, 802.11n-2.4GHz, 802.11ac, 802.11-holland, 802.11-10MHz, 802.11-5MHz) +// --serverShortGuardInterval and --clientShortGuardInterval (for 802.11n/ac) +// --serverNss and --clientNss (for 802.11n/ac) +// --serverChannelWidth and --clientChannelWidth (for 802.11n/ac) +// --broadcast instead of unicast (default is unicast) +// --rtsThreshold (by default, value of 99999 disables it) + +#include "ns3/core-module.h" +#include "ns3/network-module.h" +#include "ns3/wifi-module.h" +#include "ns3/stats-module.h" +#include "ns3/mobility-module.h" +#include "ns3/propagation-module.h" + +using namespace ns3; + +NS_LOG_COMPONENT_DEFINE ("WifiManagerExample"); + +// 290K @ 20 MHz +const double NOISE_DBM_Hz = -174.0; +double noiseDbm = NOISE_DBM_Hz; + +double g_intervalBytes = 0; +uint64_t g_intervalRate = 0; + +void +PacketRx (Ptr pkt, const Address &addr) +{ + NS_LOG_DEBUG ("Received size " << pkt->GetSize ()); + g_intervalBytes += pkt->GetSize (); +} + +void +RateChange (uint64_t oldVal, uint64_t newVal) +{ + NS_LOG_DEBUG ("Change from " << oldVal << " to " << newVal); + g_intervalRate = newVal; +} + +void +RateChangeMinstrelHt (uint64_t newVal, Mac48Address dest) +{ + NS_LOG_DEBUG ("Change to " << newVal); + g_intervalRate = newVal; +} + +struct Step +{ + double stepSize; + double stepTime; +}; + +struct StandardInfo +{ + StandardInfo () + { + m_name = "none"; + } + StandardInfo (std::string name, enum WifiPhyStandard standard, uint16_t width, double snrLow, double snrHigh, double xMin, double xMax, double yMax) + : m_name (name), + m_standard (standard), + m_width (width), + m_snrLow (snrLow), + m_snrHigh (snrHigh), + m_xMin (xMin), + m_xMax (xMax), + m_yMax (yMax) + { + } + std::string m_name; + enum WifiPhyStandard m_standard; + uint16_t m_width; + double m_snrLow; + double m_snrHigh; + double m_xMin; + double m_xMax; + double m_yMax; +}; + +void +ChangeSignalAndReportRate (Ptr rssModel, struct Step step, double rss, Gnuplot2dDataset& rateDataset, Gnuplot2dDataset& actualDataset) +{ + NS_LOG_FUNCTION (rssModel << step.stepSize << step.stepTime << rss); + double snr = rss - noiseDbm; + rateDataset.Add (snr, g_intervalRate / 1000000.0); + // Calculate received rate since last interval + double currentRate = ((g_intervalBytes * 8) / step.stepTime) / 1e6; // Mb/s + actualDataset.Add (snr, currentRate); + rssModel->SetRss (rss - step.stepSize); + NS_LOG_INFO ("At time " << Simulator::Now ().As (Time::S) << "; observed rate " << currentRate << "; setting new power to " << rss - step.stepSize); + g_intervalBytes = 0; + Simulator::Schedule (Seconds (step.stepTime), &ChangeSignalAndReportRate, rssModel, step, (rss - step.stepSize), rateDataset, actualDataset); +} + +int main (int argc, char *argv[]) +{ + std::vector serverStandards; + std::vector clientStandards; + uint32_t steps; + + uint32_t rtsThreshold = 999999; // disabled even for large A-MPDU + uint32_t maxAmpduSize = 65535; + double stepSize = 1; // dBm + double stepTime = 1; // seconds + uint32_t packetSize = 1024; // bytes + bool broadcast = 0; + int ap1_x = 0; + int ap1_y = 0; + int sta1_x = 5; + int sta1_y = 0; + uint16_t serverNss = 1; + uint16_t clientNss = 1; + bool serverShortGuardInterval = false; + bool clientShortGuardInterval = false; + uint16_t serverChannelWidth = 20; + uint16_t clientChannelWidth = 20; + std::string wifiManager ("Ideal"); + std::string standard ("802.11a"); + StandardInfo serverSelectedStandard; + StandardInfo clientSelectedStandard; + + CommandLine cmd; + cmd.AddValue ("rtsThreshold", "RTS threshold", rtsThreshold); + cmd.AddValue ("maxAmpduSize", "Max A-MPDU size", maxAmpduSize); + cmd.AddValue ("stepSize", "Power between steps (dBm)", stepSize); + cmd.AddValue ("stepTime", "Time on each step (seconds)", stepTime); + cmd.AddValue ("broadcast", "Send broadcast instead of unicast", broadcast); + cmd.AddValue ("serverChannelWidth", "Set channel width of the server (valid only for 802.11n or ac)", serverChannelWidth); + cmd.AddValue ("clientChannelWidth", "Set channel width of the client (valid only for 802.11n or ac)", clientChannelWidth); + cmd.AddValue ("serverNss", "Set nss of the server (valid only for 802.11n or ac)", serverNss); + cmd.AddValue ("clientNss", "Set nss of the client (valid only for 802.11n or ac)", clientNss); + cmd.AddValue ("serverShortGuardInterval", "Set short guard interval of the server (802.11n/ac)", serverShortGuardInterval); + cmd.AddValue ("clientShortGuardInterval", "Set short guard interval of the client (802.11n/ac)", clientShortGuardInterval); + cmd.AddValue ("standard", "Set standard (802.11a, 802.11b, 802.11g, 802.11n-5GHz, 802.11n-2.4GHz, 802.11ac, 802.11-holland, 802.11-10MHz, 802.11-5MHz)", standard); + cmd.AddValue ("wifiManager", "Set wifi rate manager (Aarf, Aarfcd, Amrr, Arf, Cara, Ideal, Minstrel, MinstrelHt, Onoe, Rraa)", wifiManager); + cmd.Parse (argc,argv); + + if (standard == "802.11b") + { + NS_ABORT_MSG_IF (serverChannelWidth != 22 && serverChannelWidth != 22, "Invalid channel width for standard " << standard); + NS_ABORT_MSG_IF (serverNss != 1, "Invalid nss for standard " << standard); + NS_ABORT_MSG_IF (clientChannelWidth != 22 && clientChannelWidth != 22, "Invalid channel width for standard " << standard); + NS_ABORT_MSG_IF (clientNss != 1, "Invalid nss for standard " << standard); + } + else if (standard == "802.11a" || standard == "802.11g") + { + NS_ABORT_MSG_IF (serverChannelWidth != 20, "Invalid channel width for standard " << standard); + NS_ABORT_MSG_IF (serverNss != 1, "Invalid nss for standard " << standard); + NS_ABORT_MSG_IF (clientChannelWidth != 20, "Invalid channel width for standard " << standard); + NS_ABORT_MSG_IF (clientNss != 1, "Invalid nss for standard " << standard); + } + else if (standard == "802.11n-5GHz" || standard == "802.11n-2.4GHz") + { + NS_ABORT_MSG_IF (serverChannelWidth != 20 && serverChannelWidth != 40, "Invalid channel width for standard " << standard); + NS_ABORT_MSG_IF (serverNss == 0 || serverNss > 4, "Invalid nss " << serverNss << " for standard " << standard); + NS_ABORT_MSG_IF (clientChannelWidth != 20 && clientChannelWidth != 40, "Invalid channel width for standard " << standard); + NS_ABORT_MSG_IF (clientNss == 0 || clientNss > 4, "Invalid nss " << clientNss << " for standard " << standard); + } + else if (standard == "802.11ac") + { + NS_ABORT_MSG_IF (serverChannelWidth != 20 && serverChannelWidth != 40 && serverChannelWidth != 80 && serverChannelWidth != 160, "Invalid channel width for standard " << standard); + NS_ABORT_MSG_IF (serverNss == 0 || serverNss > 4, "Invalid nss " << serverNss << " for standard " << standard); + NS_ABORT_MSG_IF (clientChannelWidth != 20 && clientChannelWidth != 40 && clientChannelWidth != 80 && clientChannelWidth != 160, "Invalid channel width for standard " << standard); + NS_ABORT_MSG_IF (clientNss == 0 || clientNss > 4, "Invalid nss " << clientNss << " for standard " << standard); + } + + std::string plotName = "wifi-manager-example-"; + std::string dataName = "wifi-manager-example-"; + plotName += wifiManager; + dataName += wifiManager; + plotName += "-"; + dataName += "-"; + plotName += standard; + dataName += standard; + plotName += "-server="; + dataName += "-server="; + if (standard == "802.11n-5GHz" || standard == "802.11n-2.4GHz" || standard == "802.11ac") + { + std::ostringstream oss; + std::string gi; + if (serverShortGuardInterval) + { + gi = "SGI"; + } + else + { + gi = "LGI"; + } + oss << serverChannelWidth << "MHz_" << gi << "_" << serverNss << "SS"; + plotName += oss.str (); + dataName += oss.str (); + } + plotName += "-client="; + dataName += "-client="; + if (standard == "802.11n-5GHz" || standard == "802.11n-2.4GHz" || standard == "802.11ac") + { + std::ostringstream oss; + std::string gi; + if (clientShortGuardInterval) + { + gi = "SGI"; + } + else + { + gi = "LGI"; + } + oss << clientChannelWidth << "MHz_" << gi << "_" << clientNss << "SS"; + plotName += oss.str (); + dataName += oss.str (); + } + plotName += ".eps"; + dataName += ".plt"; + std::ofstream outfile (dataName.c_str ()); + Gnuplot gnuplot = Gnuplot (plotName); + + // As channel width increases, scale up plot's yRange value + uint32_t channelRateFactor = std::max (clientChannelWidth, serverChannelWidth) / 20; + channelRateFactor = channelRateFactor * std::max (clientNss, serverNss); + + // The first number is channel width, second is minimum SNR, third is maximum + // SNR, fourth and fifth provide xrange axis limits, and sixth the yaxis + // maximum + serverStandards.push_back (StandardInfo ("802.11a", WIFI_PHY_STANDARD_80211a, 20, 3, 27, 0, 30, 60)); + serverStandards.push_back (StandardInfo ("802.11b", WIFI_PHY_STANDARD_80211b, 22, -5, 11, -6, 15, 15)); + serverStandards.push_back (StandardInfo ("802.11g", WIFI_PHY_STANDARD_80211g, 20, -5, 27, -6, 30, 60)); + serverStandards.push_back (StandardInfo ("802.11n-5GHz", WIFI_PHY_STANDARD_80211n_5GHZ, serverChannelWidth, 3, 30, 0, 35, 80 * channelRateFactor)); + serverStandards.push_back (StandardInfo ("802.11n-2.4GHz", WIFI_PHY_STANDARD_80211n_2_4GHZ, serverChannelWidth, 3, 30, 0, 35, 80 * channelRateFactor)); + serverStandards.push_back (StandardInfo ("802.11ac", WIFI_PHY_STANDARD_80211ac, serverChannelWidth, 5, 35, 0, 40, 120 * channelRateFactor)); + serverStandards.push_back (StandardInfo ("802.11-holland", WIFI_PHY_STANDARD_holland, 20, 3, 27, 0, 30, 60)); + serverStandards.push_back (StandardInfo ("802.11-10MHz", WIFI_PHY_STANDARD_80211_10MHZ, 10, 3, 27, 0, 30, 60)); + serverStandards.push_back (StandardInfo ("802.11-5MHz", WIFI_PHY_STANDARD_80211_5MHZ, 5, 3, 27, 0, 30, 60)); + + clientStandards.push_back (StandardInfo ("802.11a", WIFI_PHY_STANDARD_80211a, 20, 3, 27, 0, 30, 60)); + clientStandards.push_back (StandardInfo ("802.11b", WIFI_PHY_STANDARD_80211b, 22, -5, 11, -6, 15, 15)); + clientStandards.push_back (StandardInfo ("802.11g", WIFI_PHY_STANDARD_80211g, 20, -5, 27, -6, 30, 60)); + clientStandards.push_back (StandardInfo ("802.11n-5GHz", WIFI_PHY_STANDARD_80211n_5GHZ, clientChannelWidth, 3, 30, 0, 35, 80 * channelRateFactor)); + clientStandards.push_back (StandardInfo ("802.11n-2.4GHz", WIFI_PHY_STANDARD_80211n_2_4GHZ, clientChannelWidth, 3, 30, 0, 35, 80 * channelRateFactor)); + clientStandards.push_back (StandardInfo ("802.11ac", WIFI_PHY_STANDARD_80211ac, clientChannelWidth, 5, 35, 0, 40, 120 * channelRateFactor)); + clientStandards.push_back (StandardInfo ("802.11-holland", WIFI_PHY_STANDARD_holland, 20, 3, 27, 0, 30, 60)); + clientStandards.push_back (StandardInfo ("802.11-10MHz", WIFI_PHY_STANDARD_80211_10MHZ, 10, 3, 27, 0, 30, 60)); + clientStandards.push_back (StandardInfo ("802.11-5MHz", WIFI_PHY_STANDARD_80211_5MHZ, 5, 3, 27, 0, 30, 60)); + + for (std::vector::size_type i = 0; i != serverStandards.size (); i++) + { + if (standard == serverStandards[i].m_name) + { + serverSelectedStandard = serverStandards[i]; + } + } + for (std::vector::size_type i = 0; i != clientStandards.size (); i++) + { + if (standard == clientStandards[i].m_name) + { + clientSelectedStandard = clientStandards[i]; + } + } + + NS_ABORT_IF (serverSelectedStandard.m_name == "none"); + NS_ABORT_IF (clientSelectedStandard.m_name == "none"); + std::cout << "Testing " << serverSelectedStandard.m_name << " with " << wifiManager << " ..." << std::endl; + NS_ABORT_MSG_IF (clientSelectedStandard.m_snrLow >= clientSelectedStandard.m_snrHigh, "SNR values in wrong order"); + steps = std::abs ((int) (clientSelectedStandard.m_snrHigh - clientSelectedStandard.m_snrLow ) / stepSize) + 1; + NS_LOG_DEBUG ("Using " << steps << " steps for SNR range " << clientSelectedStandard.m_snrLow << ":" << clientSelectedStandard.m_snrHigh); + Ptr clientNode = CreateObject (); + Ptr serverNode = CreateObject (); + + WifiHelper wifi; + wifi.SetStandard (serverSelectedStandard.m_standard); + YansWifiPhyHelper wifiPhy = YansWifiPhyHelper::Default (); + wifiPhy.Set ("RxNoiseFigure", DoubleValue (0.0)); + wifiPhy.Set ("EnergyDetectionThreshold", DoubleValue (-110.0)); + wifiPhy.Set ("CcaMode1Threshold", DoubleValue (-110.0)); + + Ptr wifiChannel = CreateObject (); + Ptr delayModel = CreateObject (); + wifiChannel->SetPropagationDelayModel (delayModel); + Ptr rssLossModel = CreateObject (); + wifiChannel->SetPropagationLossModel (rssLossModel); + wifiPhy.SetChannel (wifiChannel); + + wifi.SetRemoteStationManager ("ns3::" + wifiManager + "WifiManager", "RtsCtsThreshold", UintegerValue (rtsThreshold)); + + NetDeviceContainer serverDevice; + NetDeviceContainer clientDevice; + + WifiMacHelper wifiMac; + // Use Adhoc so we don't get into association issues + wifiMac.SetType ("ns3::AdhocWifiMac", + "BE_MaxAmpduSize", UintegerValue (maxAmpduSize)); + + serverDevice = wifi.Install (wifiPhy, wifiMac, serverNode); + clientDevice = wifi.Install (wifiPhy, wifiMac, clientNode); + + if (wifiManager == "MinstrelHt") + { + Config::ConnectWithoutContext ("/NodeList/0/DeviceList/*/$ns3::WifiNetDevice/RemoteStationManager/$ns3::MinstrelHtWifiManager/RateChange", MakeCallback (&RateChangeMinstrelHt)); + } + else + { + Config::ConnectWithoutContext ("/NodeList/0/DeviceList/*/$ns3::WifiNetDevice/RemoteStationManager/$ns3::" + wifiManager + "WifiManager/Rate", MakeCallback (&RateChange)); + } + // Configure the mobility. + MobilityHelper mobility; + Ptr positionAlloc = CreateObject (); + //Initial position of AP and STA + positionAlloc->Add (Vector (ap1_x, ap1_y, 0.0)); + NS_LOG_INFO ("Setting initial AP position to " << Vector (ap1_x, ap1_y, 0.0)); + positionAlloc->Add (Vector (sta1_x, sta1_y, 0.0)); + NS_LOG_INFO ("Setting initial STA position to " << Vector (sta1_x, sta1_y, 0.0)); + mobility.SetPositionAllocator (positionAlloc); + mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel"); + mobility.Install (clientNode); + mobility.Install (serverNode); + + Gnuplot2dDataset rateDataset (clientSelectedStandard.m_name + std::string ("-rate selected")); + Gnuplot2dDataset actualDataset (clientSelectedStandard.m_name + std::string ("-observed")); + struct Step step; + step.stepSize = stepSize; + step.stepTime = stepTime; + + // Perform post-install configuration from defaults for channel width, + // guard interval, and nss, if necessary + // Obtain pointer to the WifiPhy + Ptr ndClient = clientDevice.Get (0); + Ptr ndServer = serverDevice.Get (0); + Ptr wndClient = ndClient->GetObject (); + Ptr wndServer = ndServer->GetObject (); + Ptr wifiPhyPtrClient = wndClient->GetPhy (); + Ptr wifiPhyPtrServer = wndServer->GetPhy (); + wifiPhyPtrClient->SetNumberOfAntennas (clientNss); + wifiPhyPtrClient->SetMaxSupportedTxSpatialStreams (clientNss); + wifiPhyPtrClient->SetMaxSupportedRxSpatialStreams (clientNss); + wifiPhyPtrServer->SetNumberOfAntennas (serverNss); + wifiPhyPtrServer->SetMaxSupportedTxSpatialStreams (serverNss); + wifiPhyPtrServer->SetMaxSupportedRxSpatialStreams (serverNss); + // Only set the channel width and guard interval for HT and VHT modes + if (serverSelectedStandard.m_name == "802.11n-5GHz" + || serverSelectedStandard.m_name == "802.11n-2.4GHz" + || serverSelectedStandard.m_name == "802.11ac") + { + wifiPhyPtrServer->SetChannelWidth (serverSelectedStandard.m_width); + wifiPhyPtrServer->SetShortGuardInterval (serverShortGuardInterval); + wifiPhyPtrClient->SetChannelWidth (clientSelectedStandard.m_width); + wifiPhyPtrClient->SetShortGuardInterval (clientShortGuardInterval); + } + NS_LOG_DEBUG ("Channel width " << wifiPhyPtrClient->GetChannelWidth () << " noiseDbm " << noiseDbm); + NS_LOG_DEBUG ("NSS " << wifiPhyPtrClient->GetMaxSupportedTxSpatialStreams ()); + + // Configure signal and noise, and schedule first iteration + noiseDbm += 10 * log10 (clientSelectedStandard.m_width * 1000000); + double rssCurrent = (clientSelectedStandard.m_snrHigh + noiseDbm); + rssLossModel->SetRss (rssCurrent); + NS_LOG_INFO ("Setting initial Rss to " << rssCurrent); + //Move the STA by stepsSize meters every stepTime seconds + Simulator::Schedule (Seconds (0.5 + stepTime), &ChangeSignalAndReportRate, rssLossModel, step, rssCurrent, rateDataset, actualDataset); + + PacketSocketHelper packetSocketHelper; + packetSocketHelper.Install (serverNode); + packetSocketHelper.Install (clientNode); + + PacketSocketAddress socketAddr; + socketAddr.SetSingleDevice (serverDevice.Get (0)->GetIfIndex ()); + if (broadcast) + { + socketAddr.SetPhysicalAddress (serverDevice.Get (0)->GetBroadcast ()); + } + else + { + socketAddr.SetPhysicalAddress (serverDevice.Get (0)->GetAddress ()); + } + // Arbitrary protocol type. + // Note: PacketSocket doesn't have any L4 multiplexing or demultiplexing + // The only mux/demux is based on the protocol field + socketAddr.SetProtocol (1); + + Ptr client = CreateObject (); + client->SetRemote (socketAddr); + client->SetStartTime (Seconds (0.5)); // allow simulation warmup + client->SetAttribute ("MaxPackets", UintegerValue (0)); // unlimited + client->SetAttribute ("PacketSize", UintegerValue (packetSize)); + + // Set a maximum rate 10% above the yMax specified for the selected standard + double rate = clientSelectedStandard.m_yMax * 1e6 * 1.10; + double clientInterval = static_cast (packetSize) * 8 / rate; + NS_LOG_DEBUG ("Setting interval to " << clientInterval << " sec for rate of " << rate << " bits/sec"); + + client->SetAttribute ("Interval", TimeValue (Seconds (clientInterval))); + clientNode->AddApplication (client); + + Ptr server = CreateObject (); + server->SetLocal (socketAddr); + server->TraceConnectWithoutContext ("Rx", MakeCallback (&PacketRx)); + serverNode->AddApplication (server); + + Simulator::Stop (Seconds ((steps + 1) * stepTime)); + Simulator::Run (); + Simulator::Destroy (); + + gnuplot.AddDataset (rateDataset); + gnuplot.AddDataset (actualDataset); + + std::ostringstream xMinStr, xMaxStr, yMaxStr; + std::string xRangeStr ("set xrange ["); + xMinStr << clientSelectedStandard.m_xMin; + xRangeStr.append (xMinStr.str ()); + xRangeStr.append (":"); + xMaxStr << clientSelectedStandard.m_xMax; + xRangeStr.append (xMaxStr.str ()); + xRangeStr.append ("]"); + std::string yRangeStr ("set yrange [0:"); + yMaxStr << clientSelectedStandard.m_yMax; + yRangeStr.append (yMaxStr.str ()); + yRangeStr.append ("]"); + + std::string title ("Results for "); + title.append (standard); + title.append (" with "); + title.append (wifiManager); + title.append ("\\n"); + if (standard == "802.11n-5GHz" || standard == "802.11n-2.4GHz" || standard == "802.11ac") + { + std::ostringstream serverWidthStrStr; + std::ostringstream serverNssStrStr; + title.append ("server: width="); + serverWidthStrStr << serverSelectedStandard.m_width; + title.append (serverWidthStrStr.str ()); + title.append ("MHz"); + if (serverShortGuardInterval == true) + { + title.append (" GI=short"); + } + else + { + title.append (" GI=long"); + } + title.append (" nss="); + serverNssStrStr << serverNss; + title.append (serverNssStrStr.str ()); + title.append ("\\n"); + std::ostringstream clientWidthStrStr; + std::ostringstream clientNssStrStr; + title.append ("client: width="); + clientWidthStrStr << clientSelectedStandard.m_width; + title.append (clientWidthStrStr.str ()); + title.append ("MHz"); + if (clientShortGuardInterval == true) + { + title.append (" GI=short"); + } + else + { + title.append (" GI=long"); + } + title.append (" nss="); + clientNssStrStr << clientNss; + title.append (clientNssStrStr.str ()); + } + gnuplot.SetTerminal ("postscript eps color enh \"Times-BoldItalic\""); + gnuplot.SetLegend ("SNR (dB)", "Rate (Mb/s)"); + gnuplot.SetTitle (title); + gnuplot.SetExtra (xRangeStr); + gnuplot.AppendExtra (yRangeStr); + gnuplot.AppendExtra ("set key top left"); + gnuplot.GenerateOutput (outfile); + outfile.close (); + + return 0; +} + diff --git a/src/wifi/examples/wscript b/src/wifi/examples/wscript index 6d41f2a7f..d38dafd0d 100644 --- a/src/wifi/examples/wscript +++ b/src/wifi/examples/wscript @@ -12,14 +12,6 @@ def build(bld): ['core', 'mobility', 'network', 'wifi']) obj.source = 'test-interference-helper.cc' - obj = bld.create_ns3_program('ideal-wifi-manager-example', + obj = bld.create_ns3_program('wifi-manager-example', ['core', 'network', 'wifi', 'stats', 'mobility', 'propagation']) - obj.source = 'ideal-wifi-manager-example.cc' - - obj = bld.create_ns3_program('minstrel-ht-wifi-manager-example', - ['core', 'network', 'wifi', 'stats', 'mobility', 'propagation']) - obj.source = 'minstrel-ht-wifi-manager-example.cc' - - obj = bld.create_ns3_program('wifi-phy-configuration', - ['core', 'network', 'config-store', 'wifi']) - obj.source = 'wifi-phy-configuration.cc' + obj.source = 'wifi-manager-example.cc' diff --git a/src/wifi/model/aarf-wifi-manager.cc b/src/wifi/model/aarf-wifi-manager.cc index e70918536..04dd418fe 100644 --- a/src/wifi/model/aarf-wifi-manager.cc +++ b/src/wifi/model/aarf-wifi-manager.cc @@ -81,11 +81,17 @@ AarfWifiManager::GetTypeId (void) UintegerValue (10), MakeUintegerAccessor (&AarfWifiManager::m_minSuccessThreshold), MakeUintegerChecker ()) + .AddTraceSource ("Rate", + "Traced value for rate changes (b/s)", + MakeTraceSourceAccessor (&AarfWifiManager::m_currentRate), + "ns3::TracedValueCallback::Uint64") ; return tid; } AarfWifiManager::AarfWifiManager () + : WifiRemoteStationManager (), + m_currentRate (0) { NS_LOG_FUNCTION (this); } @@ -239,6 +245,11 @@ AarfWifiManager::DoGetDataTxVector (WifiRemoteStation *st) channelWidth = 20; } WifiMode mode = GetSupported (station, station->m_rate); + if (m_currentRate != mode.GetDataRate (channelWidth)) + { + NS_LOG_DEBUG ("New datarate: " << mode.GetDataRate (channelWidth)); + m_currentRate = mode.GetDataRate (channelWidth); + } return WifiTxVector (mode, GetDefaultTxPowerLevel (), GetLongRetryCount (station), GetPreambleForTransmission (mode, GetAddress (station)), 800, 1, 1, 0, channelWidth, GetAggregation (station), false); } diff --git a/src/wifi/model/aarf-wifi-manager.h b/src/wifi/model/aarf-wifi-manager.h index 9ff8ee950..b8fce136a 100644 --- a/src/wifi/model/aarf-wifi-manager.h +++ b/src/wifi/model/aarf-wifi-manager.h @@ -21,7 +21,8 @@ #ifndef AARF_WIFI_MANAGER_H #define AARF_WIFI_MANAGER_H -#include "arf-wifi-manager.h" +#include "ns3/traced-value.h" +#include "wifi-remote-station-manager.h" namespace ns3 { @@ -72,6 +73,8 @@ private: double m_successK; uint32_t m_maxSuccessThreshold; double m_timerK; + + TracedValue m_currentRate; //!< Trace rate changes }; } //namespace ns3 diff --git a/src/wifi/model/aarfcd-wifi-manager.cc b/src/wifi/model/aarfcd-wifi-manager.cc index a53b62580..707dcade5 100644 --- a/src/wifi/model/aarfcd-wifi-manager.cc +++ b/src/wifi/model/aarfcd-wifi-manager.cc @@ -107,12 +107,18 @@ AarfcdWifiManager::GetTypeId (void) BooleanValue (true), MakeBooleanAccessor (&AarfcdWifiManager::m_turnOnRtsAfterRateIncrease), MakeBooleanChecker ()) + .AddTraceSource ("Rate", + "Traced value for rate changes (b/s)", + MakeTraceSourceAccessor (&AarfcdWifiManager::m_currentRate), + "ns3::TracedValueCallback::Uint64") ; return tid; } AarfcdWifiManager::AarfcdWifiManager () - : WifiRemoteStationManager () + : WifiRemoteStationManager (), + m_currentRate (0) + { NS_LOG_FUNCTION (this); } @@ -308,6 +314,11 @@ AarfcdWifiManager::DoGetDataTxVector (WifiRemoteStation *st) channelWidth = 20; } WifiMode mode = GetSupported (station, station->m_rate); + if (m_currentRate != mode.GetDataRate (channelWidth)) + { + NS_LOG_DEBUG ("New datarate: " << mode.GetDataRate (channelWidth)); + m_currentRate = mode.GetDataRate (channelWidth); + } return WifiTxVector (mode, GetDefaultTxPowerLevel (), GetLongRetryCount (station), GetPreambleForTransmission (mode, GetAddress (station)), 800, 1, 1, 0, channelWidth, GetAggregation (station), false); } diff --git a/src/wifi/model/aarfcd-wifi-manager.h b/src/wifi/model/aarfcd-wifi-manager.h index e77ffb898..9e383e6cd 100644 --- a/src/wifi/model/aarfcd-wifi-manager.h +++ b/src/wifi/model/aarfcd-wifi-manager.h @@ -21,6 +21,7 @@ #ifndef AARFCD_WIFI_MANAGER_H #define AARFCD_WIFI_MANAGER_H +#include "ns3/traced-value.h" #include "wifi-remote-station-manager.h" namespace ns3 { @@ -126,6 +127,8 @@ private: uint32_t m_maxRtsWnd; bool m_turnOffRtsAfterRateDecrease; bool m_turnOnRtsAfterRateIncrease; + + TracedValue m_currentRate; //!< Trace rate changes }; } //namespace ns3 diff --git a/src/wifi/model/amrr-wifi-manager.cc b/src/wifi/model/amrr-wifi-manager.cc index 79e858f11..ee1fc5cce 100644 --- a/src/wifi/model/amrr-wifi-manager.cc +++ b/src/wifi/model/amrr-wifi-manager.cc @@ -84,11 +84,17 @@ AmrrWifiManager::GetTypeId (void) UintegerValue (1), MakeUintegerAccessor (&AmrrWifiManager::m_minSuccessThreshold), MakeUintegerChecker ()) + .AddTraceSource ("Rate", + "Traced value for rate changes (b/s)", + MakeTraceSourceAccessor (&AmrrWifiManager::m_currentRate), + "ns3::TracedValueCallback::Uint64") ; return tid; } AmrrWifiManager::AmrrWifiManager () + : WifiRemoteStationManager (), + m_currentRate (0) { NS_LOG_FUNCTION (this); } @@ -342,6 +348,11 @@ AmrrWifiManager::DoGetDataTxVector (WifiRemoteStation *st) channelWidth = 20; } WifiMode mode = GetSupported (station, rateIndex); + if (m_currentRate != mode.GetDataRate (channelWidth)) + { + NS_LOG_DEBUG ("New datarate: " << mode.GetDataRate (channelWidth)); + m_currentRate = mode.GetDataRate (channelWidth); + } return WifiTxVector (mode, GetDefaultTxPowerLevel (), GetLongRetryCount (station), GetPreambleForTransmission (mode, GetAddress (station)), 800, 1, 1, 0, channelWidth, GetAggregation (station), false); } diff --git a/src/wifi/model/amrr-wifi-manager.h b/src/wifi/model/amrr-wifi-manager.h index 9d4bb031a..85cceefda 100644 --- a/src/wifi/model/amrr-wifi-manager.h +++ b/src/wifi/model/amrr-wifi-manager.h @@ -21,6 +21,7 @@ #ifndef AMRR_WIFI_MANAGER_H #define AMRR_WIFI_MANAGER_H +#include "ns3/traced-value.h" #include "wifi-remote-station-manager.h" namespace ns3 { @@ -152,6 +153,8 @@ private: double m_successRatio; uint32_t m_maxSuccessThreshold; uint32_t m_minSuccessThreshold; + + TracedValue m_currentRate; //!< Trace rate changes }; } //namespace ns3 diff --git a/src/wifi/model/arf-wifi-manager.cc b/src/wifi/model/arf-wifi-manager.cc index 1f16d5648..61c533f6b 100644 --- a/src/wifi/model/arf-wifi-manager.cc +++ b/src/wifi/model/arf-wifi-manager.cc @@ -64,11 +64,17 @@ ArfWifiManager::GetTypeId (void) UintegerValue (10), MakeUintegerAccessor (&ArfWifiManager::m_successThreshold), MakeUintegerChecker ()) + .AddTraceSource ("Rate", + "Traced value for rate changes (b/s)", + MakeTraceSourceAccessor (&ArfWifiManager::m_currentRate), + "ns3::TracedValueCallback::Uint64") ; return tid; } ArfWifiManager::ArfWifiManager () + : WifiRemoteStationManager (), + m_currentRate (0) { NS_LOG_FUNCTION (this); } @@ -214,6 +220,11 @@ ArfWifiManager::DoGetDataTxVector (WifiRemoteStation *st) channelWidth = 20; } WifiMode mode = GetSupported (station, station->m_rate); + if (m_currentRate != mode.GetDataRate (channelWidth)) + { + NS_LOG_DEBUG ("New datarate: " << mode.GetDataRate (channelWidth)); + m_currentRate = mode.GetDataRate (channelWidth); + } return WifiTxVector (mode, GetDefaultTxPowerLevel (), GetLongRetryCount (station), GetPreambleForTransmission (mode, GetAddress (station)), 800, 1, 1, 0, channelWidth, GetAggregation (station), false); } diff --git a/src/wifi/model/arf-wifi-manager.h b/src/wifi/model/arf-wifi-manager.h index 0baa3f8bd..96613a2a8 100644 --- a/src/wifi/model/arf-wifi-manager.h +++ b/src/wifi/model/arf-wifi-manager.h @@ -21,6 +21,7 @@ #ifndef ARF_WIFI_MANAGER_H #define ARF_WIFI_MANAGER_H +#include "ns3/traced-value.h" #include "wifi-remote-station-manager.h" namespace ns3 { @@ -75,6 +76,8 @@ private: uint32_t m_timerThreshold; uint32_t m_successThreshold; + + TracedValue m_currentRate; //!< Trace rate changes }; } //namespace ns3 diff --git a/src/wifi/model/cara-wifi-manager.cc b/src/wifi/model/cara-wifi-manager.cc index 9ec3d3277..d0a65aae1 100644 --- a/src/wifi/model/cara-wifi-manager.cc +++ b/src/wifi/model/cara-wifi-manager.cc @@ -71,12 +71,17 @@ CaraWifiManager::GetTypeId (void) UintegerValue (15), MakeUintegerAccessor (&CaraWifiManager::m_timerTimeout), MakeUintegerChecker ()) + .AddTraceSource ("Rate", + "Traced value for rate changes (b/s)", + MakeTraceSourceAccessor (&CaraWifiManager::m_currentRate), + "ns3::TracedValueCallback::Uint64") ; return tid; } CaraWifiManager::CaraWifiManager () - : WifiRemoteStationManager () + : WifiRemoteStationManager (), + m_currentRate (0) { NS_LOG_FUNCTION (this); } @@ -186,6 +191,11 @@ CaraWifiManager::DoGetDataTxVector (WifiRemoteStation *st) channelWidth = 20; } WifiMode mode = GetSupported (station, station->m_rate); + if (m_currentRate != mode.GetDataRate (channelWidth)) + { + NS_LOG_DEBUG ("New datarate: " << mode.GetDataRate (channelWidth)); + m_currentRate = mode.GetDataRate (channelWidth); + } return WifiTxVector (mode, GetDefaultTxPowerLevel (), GetLongRetryCount (station), GetPreambleForTransmission (mode, GetAddress (station)), 800, 1, 1, 0, channelWidth, GetAggregation (station), false); } diff --git a/src/wifi/model/cara-wifi-manager.h b/src/wifi/model/cara-wifi-manager.h index d156b701a..e0c038a95 100644 --- a/src/wifi/model/cara-wifi-manager.h +++ b/src/wifi/model/cara-wifi-manager.h @@ -21,6 +21,7 @@ #ifndef CARA_WIFI_MANAGER_H #define CARA_WIFI_MANAGER_H +#include "ns3/traced-value.h" #include "wifi-remote-station-manager.h" namespace ns3 { @@ -75,6 +76,8 @@ private: uint32_t m_successThreshold; uint32_t m_failureThreshold; uint32_t m_probeThreshold; + + TracedValue m_currentRate; //!< Trace rate changes }; } //namespace ns3 diff --git a/src/wifi/model/minstrel-wifi-manager.cc b/src/wifi/model/minstrel-wifi-manager.cc index 972feaa9e..3fc236bcd 100644 --- a/src/wifi/model/minstrel-wifi-manager.cc +++ b/src/wifi/model/minstrel-wifi-manager.cc @@ -83,11 +83,17 @@ MinstrelWifiManager::GetTypeId (void) BooleanValue (false), MakeBooleanAccessor (&MinstrelWifiManager::m_printStats), MakeBooleanChecker ()) + .AddTraceSource ("Rate", + "Traced value for rate changes (b/s)", + MakeTraceSourceAccessor (&MinstrelWifiManager::m_currentRate), + "ns3::TracedValueCallback::Uint64") ; return tid; } MinstrelWifiManager::MinstrelWifiManager () + : WifiRemoteStationManager (), + m_currentRate (0) { NS_LOG_FUNCTION (this); m_uniformRandomVariable = CreateObject (); @@ -360,6 +366,11 @@ MinstrelWifiManager::GetDataTxVector (MinstrelWifiRemoteStation *station) station->m_txrate = station->m_nModes / 2; } WifiMode mode = GetSupported (station, station->m_txrate); + if (m_currentRate != mode.GetDataRate (channelWidth)) + { + NS_LOG_DEBUG ("New datarate: " << mode.GetDataRate (channelWidth)); + m_currentRate = mode.GetDataRate (channelWidth); + } return WifiTxVector (mode, GetDefaultTxPowerLevel (), GetLongRetryCount (station), GetPreambleForTransmission (mode, GetAddress (station)), 800, 1, 1, 0, channelWidth, GetAggregation (station), false); } diff --git a/src/wifi/model/minstrel-wifi-manager.h b/src/wifi/model/minstrel-wifi-manager.h index 8452aed72..76e5d73b5 100644 --- a/src/wifi/model/minstrel-wifi-manager.h +++ b/src/wifi/model/minstrel-wifi-manager.h @@ -22,6 +22,7 @@ #ifndef MINSTREL_WIFI_MANAGER_H #define MINSTREL_WIFI_MANAGER_H +#include "ns3/traced-value.h" #include "wifi-remote-station-manager.h" #include "ns3/random-variable-stream.h" #include @@ -260,7 +261,6 @@ private: //printing Minstrel Table void PrintTable (MinstrelWifiRemoteStation *station); - /** * typedef for a vector of a pair of Time, WifiMode. * (Essentially a list for WifiMode and its corresponding transmission time @@ -278,6 +278,8 @@ private: //Provides uniform random variables. Ptr m_uniformRandomVariable; + + TracedValue m_currentRate; //!< Trace rate changes }; } //namespace ns3 diff --git a/src/wifi/model/onoe-wifi-manager.cc b/src/wifi/model/onoe-wifi-manager.cc index dc7494574..ad24cb02c 100644 --- a/src/wifi/model/onoe-wifi-manager.cc +++ b/src/wifi/model/onoe-wifi-manager.cc @@ -69,11 +69,17 @@ OnoeWifiManager::GetTypeId (void) UintegerValue (10), MakeUintegerAccessor (&OnoeWifiManager::m_addCreditThreshold), MakeUintegerChecker ()) + .AddTraceSource ("Rate", + "Traced value for rate changes (b/s)", + MakeTraceSourceAccessor (&OnoeWifiManager::m_currentRate), + "ns3::TracedValueCallback::Uint64") ; return tid; } OnoeWifiManager::OnoeWifiManager () + : WifiRemoteStationManager (), + m_currentRate (0) { } @@ -284,6 +290,11 @@ OnoeWifiManager::DoGetDataTxVector (WifiRemoteStation *st) channelWidth = 20; } WifiMode mode = GetSupported (station, rateIndex); + if (m_currentRate != mode.GetDataRate (channelWidth)) + { + NS_LOG_DEBUG ("New datarate: " << mode.GetDataRate (channelWidth)); + m_currentRate = mode.GetDataRate (channelWidth); + } return WifiTxVector (mode, GetDefaultTxPowerLevel (), GetLongRetryCount (station), GetPreambleForTransmission (mode, GetAddress (st)), 800, 1, 1, 0, channelWidth, GetAggregation (station), false); } diff --git a/src/wifi/model/onoe-wifi-manager.h b/src/wifi/model/onoe-wifi-manager.h index 4f9da86d9..bbd47e59e 100644 --- a/src/wifi/model/onoe-wifi-manager.h +++ b/src/wifi/model/onoe-wifi-manager.h @@ -21,6 +21,7 @@ #ifndef ONOE_WIFI_MANAGER_H #define ONOE_WIFI_MANAGER_H +#include "ns3/traced-value.h" #include "wifi-remote-station-manager.h" namespace ns3 { @@ -82,6 +83,8 @@ private: Time m_updatePeriod; uint32_t m_addCreditThreshold; uint32_t m_raiseThreshold; + + TracedValue m_currentRate; //!< Trace rate changes }; } //namespace ns3 diff --git a/src/wifi/model/rraa-wifi-manager.cc b/src/wifi/model/rraa-wifi-manager.cc index d752cdfc7..e4797cb86 100644 --- a/src/wifi/model/rraa-wifi-manager.cc +++ b/src/wifi/model/rraa-wifi-manager.cc @@ -180,12 +180,18 @@ RraaWifiManager::GetTypeId (void) DoubleValue (0.3932), MakeDoubleAccessor (&RraaWifiManager::m_pmtlfor9), MakeDoubleChecker ()) + .AddTraceSource ("Rate", + "Traced value for rate changes (b/s)", + MakeTraceSourceAccessor (&RraaWifiManager::m_currentRate), + "ns3::TracedValueCallback::Uint64") ; return tid; } RraaWifiManager::RraaWifiManager () + : WifiRemoteStationManager (), + m_currentRate (0) { } @@ -295,6 +301,11 @@ RraaWifiManager::DoGetDataTxVector (WifiRemoteStation *st) ResetCountersBasic (station); } WifiMode mode = GetSupported (station, station->m_rate); + if (m_currentRate != mode.GetDataRate (channelWidth)) + { + NS_LOG_DEBUG ("New datarate: " << mode.GetDataRate (channelWidth)); + m_currentRate = mode.GetDataRate (channelWidth); + } return WifiTxVector (mode, GetDefaultTxPowerLevel (), GetLongRetryCount (station), GetPreambleForTransmission (mode, GetAddress (station)), 800, 1, 1, 0, channelWidth, GetAggregation (station), false); } diff --git a/src/wifi/model/rraa-wifi-manager.h b/src/wifi/model/rraa-wifi-manager.h index 652331eb2..02e3fc992 100644 --- a/src/wifi/model/rraa-wifi-manager.h +++ b/src/wifi/model/rraa-wifi-manager.h @@ -21,6 +21,7 @@ #ifndef RRAA_WIFI_MANAGER_H #define RRAA_WIFI_MANAGER_H +#include "ns3/traced-value.h" #include "wifi-remote-station-manager.h" namespace ns3 { @@ -166,6 +167,8 @@ private: double m_pmtlfor18; double m_pmtlfor12; double m_pmtlfor9; + + TracedValue m_currentRate; //!< Trace rate changes }; } //namespace ns3 diff --git a/src/wifi/test/examples-to-run.py b/src/wifi/test/examples-to-run.py index 594338b72..32c06b8fb 100644 --- a/src/wifi/test/examples-to-run.py +++ b/src/wifi/test/examples-to-run.py @@ -27,179 +27,226 @@ cpp_examples = [ ("wifi-phy-configuration --testCase=16", "True", "True"), ("wifi-phy-configuration --testCase=17", "True", "True"), ("wifi-phy-configuration --testCase=18", "True", "True"), - ("minstrel-ht-wifi-manager-example --standard=802.11a --stepTime=0.1", "True", "True"), - ("minstrel-ht-wifi-manager-example --standard=802.11b --stepTime=0.1", "True", "True"), - ("minstrel-ht-wifi-manager-example --standard=802.11g --stepTime=0.1", "True", "True"), - ("minstrel-ht-wifi-manager-example --standard=802.11-holland --stepTime=0.1", "True", "True"), - ("minstrel-ht-wifi-manager-example --standard=802.11-10MHz --stepTime=0.1", "True", "True"), - ("minstrel-ht-wifi-manager-example --standard=802.11-5MHz --stepTime=0.1", "True", "True"), - ("minstrel-ht-wifi-manager-example --standard=802.11n-5GHz --channelWidth=20 --shortGuard=0 --nss=1 --stepTime=0.1", "True", "True"), - ("minstrel-ht-wifi-manager-example --standard=802.11n-5GHz --channelWidth=20 --shortGuard=1 --nss=1 --stepTime=0.1", "True", "True"), - ("minstrel-ht-wifi-manager-example --standard=802.11n-5GHz --channelWidth=40 --shortGuard=0 --nss=1 --stepTime=0.1", "True", "True"), - ("minstrel-ht-wifi-manager-example --standard=802.11n-5GHz --channelWidth=40 --shortGuard=1 --nss=1 --stepTime=0.1", "True", "True"), - ("minstrel-ht-wifi-manager-example --standard=802.11n-5GHz --channelWidth=20 --shortGuard=0 --nss=2 --stepTime=0.1", "True", "True"), - ("minstrel-ht-wifi-manager-example --standard=802.11n-5GHz --channelWidth=20 --shortGuard=1 --nss=2 --stepTime=0.1", "False", "False"), - ("minstrel-ht-wifi-manager-example --standard=802.11n-5GHz --channelWidth=40 --shortGuard=0 --nss=2 --stepTime=0.1", "False", "False"), - ("minstrel-ht-wifi-manager-example --standard=802.11n-5GHz --channelWidth=40 --shortGuard=1 --nss=2 --stepTime=0.1", "False", "False"), - ("minstrel-ht-wifi-manager-example --standard=802.11n-5GHz --channelWidth=20 --shortGuard=0 --nss=3 --stepTime=0.1", "False", "False"), - ("minstrel-ht-wifi-manager-example --standard=802.11n-5GHz --channelWidth=20 --shortGuard=1 --nss=3 --stepTime=0.1", "False", "False"), - ("minstrel-ht-wifi-manager-example --standard=802.11n-5GHz --channelWidth=40 --shortGuard=0 --nss=3 --stepTime=0.1", "False", "False"), - ("minstrel-ht-wifi-manager-example --standard=802.11n-5GHz --channelWidth=40 --shortGuard=1 --nss=3 --stepTime=0.1", "False", "False"), - ("minstrel-ht-wifi-manager-example --standard=802.11n-5GHz --channelWidth=20 --shortGuard=0 --nss=4 --stepTime=0.1", "False", "False"), - ("minstrel-ht-wifi-manager-example --standard=802.11n-5GHz --channelWidth=20 --shortGuard=1 --nss=4 --stepTime=0.1", "False", "False"), - ("minstrel-ht-wifi-manager-example --standard=802.11n-5GHz --channelWidth=40 --shortGuard=0 --nss=4 --stepTime=0.1", "False", "False"), - ("minstrel-ht-wifi-manager-example --standard=802.11n-5GHz --channelWidth=40 --shortGuard=1 --nss=4 --stepTime=0.1", "True", "True"), - ("minstrel-ht-wifi-manager-example --standard=802.11n-2.4GHz --channelWidth=20 --shortGuard=0 --nss=1 --stepTime=0.1", "False", "False"), - ("minstrel-ht-wifi-manager-example --standard=802.11n-2.4GHz --channelWidth=20 --shortGuard=1 --nss=1 --stepTime=0.1", "False", "False"), - ("minstrel-ht-wifi-manager-example --standard=802.11n-2.4GHz --channelWidth=40 --shortGuard=0 --nss=1 --stepTime=0.1", "False", "False"), - ("minstrel-ht-wifi-manager-example --standard=802.11n-2.4GHz --channelWidth=40 --shortGuard=1 --nss=1 --stepTime=0.1", "False", "False"), - ("minstrel-ht-wifi-manager-example --standard=802.11n-2.4GHz --channelWidth=20 --shortGuard=0 --nss=2 --stepTime=0.1", "False", "False"), - ("minstrel-ht-wifi-manager-example --standard=802.11n-2.4GHz --channelWidth=20 --shortGuard=1 --nss=2 --stepTime=0.1", "False", "False"), - ("minstrel-ht-wifi-manager-example --standard=802.11n-2.4GHz --channelWidth=40 --shortGuard=0 --nss=2 --stepTime=0.1", "False", "False"), - ("minstrel-ht-wifi-manager-example --standard=802.11n-2.4GHz --channelWidth=40 --shortGuard=1 --nss=2 --stepTime=0.1", "False", "False"), - ("minstrel-ht-wifi-manager-example --standard=802.11n-2.4GHz --channelWidth=20 --shortGuard=0 --nss=3 --stepTime=0.1", "False", "False"), - ("minstrel-ht-wifi-manager-example --standard=802.11n-2.4GHz --channelWidth=20 --shortGuard=1 --nss=3 --stepTime=0.1", "False", "False"), - ("minstrel-ht-wifi-manager-example --standard=802.11n-2.4GHz --channelWidth=40 --shortGuard=0 --nss=3 --stepTime=0.1", "False", "False"), - ("minstrel-ht-wifi-manager-example --standard=802.11n-2.4GHz --channelWidth=40 --shortGuard=1 --nss=3 --stepTime=0.1", "False", "False"), - ("minstrel-ht-wifi-manager-example --standard=802.11n-2.4GHz --channelWidth=20 --shortGuard=0 --nss=4 --stepTime=0.1", "False", "False"), - ("minstrel-ht-wifi-manager-example --standard=802.11n-2.4GHz --channelWidth=20 --shortGuard=1 --nss=4 --stepTime=0.1", "False", "False"), - ("minstrel-ht-wifi-manager-example --standard=802.11n-2.4GHz --channelWidth=40 --shortGuard=0 --nss=4 --stepTime=0.1", "False", "False"), - ("minstrel-ht-wifi-manager-example --standard=802.11n-2.4GHz --channelWidth=40 --shortGuard=1 --nss=4 --stepTime=0.1", "True", "True"), - ("minstrel-ht-wifi-manager-example --standard=802.11ac --channelWidth=20 --shortGuard=0 --nss=1 --stepTime=0.1", "True", "True"), - ("minstrel-ht-wifi-manager-example --standard=802.11ac --channelWidth=20 --shortGuard=1 --nss=1 --stepTime=0.1", "True", "True"), - ("minstrel-ht-wifi-manager-example --standard=802.11ac --channelWidth=40 --shortGuard=0 --nss=1 --stepTime=0.1", "True", "True"), - ("minstrel-ht-wifi-manager-example --standard=802.11ac --channelWidth=40 --shortGuard=1 --nss=1 --stepTime=0.1", "True", "True"), - ("minstrel-ht-wifi-manager-example --standard=802.11ac --channelWidth=80 --shortGuard=0 --nss=1 --stepTime=0.1", "True", "True"), - ("minstrel-ht-wifi-manager-example --standard=802.11ac --channelWidth=80 --shortGuard=1 --nss=1 --stepTime=0.1", "True", "True"), - ("minstrel-ht-wifi-manager-example --standard=802.11ac --channelWidth=80 --shortGuard=0 --nss=1 --stepTime=0.1", "True", "True"), - ("minstrel-ht-wifi-manager-example --standard=802.11ac --channelWidth=80 --shortGuard=1 --nss=1 --stepTime=0.1", "True", "True"), - ("minstrel-ht-wifi-manager-example --standard=802.11ac --channelWidth=160 --shortGuard=0 --nss=1 --stepTime=0.1", "True", "True"), - ("minstrel-ht-wifi-manager-example --standard=802.11ac --channelWidth=160 --shortGuard=1 --nss=1 --stepTime=0.1", "True", "True"), - ("minstrel-ht-wifi-manager-example --standard=802.11ac --channelWidth=160 --shortGuard=0 --nss=1 --stepTime=0.1", "True", "True"), - ("minstrel-ht-wifi-manager-example --standard=802.11ac --channelWidth=160 --shortGuard=1 --nss=1 --stepTime=0.1", "True", "True"), - ("minstrel-ht-wifi-manager-example --standard=802.11ac --channelWidth=20 --shortGuard=0 --nss=2 --stepTime=0.1", "True", "True"), - ("minstrel-ht-wifi-manager-example --standard=802.11ac --channelWidth=20 --shortGuard=1 --nss=2 --stepTime=0.1", "False", "False"), - ("minstrel-ht-wifi-manager-example --standard=802.11ac --channelWidth=40 --shortGuard=0 --nss=2 --stepTime=0.1", "False", "False"), - ("minstrel-ht-wifi-manager-example --standard=802.11ac --channelWidth=40 --shortGuard=1 --nss=2 --stepTime=0.1", "False", "False"), - ("minstrel-ht-wifi-manager-example --standard=802.11ac --channelWidth=80 --shortGuard=0 --nss=2 --stepTime=0.1", "False", "False"), - ("minstrel-ht-wifi-manager-example --standard=802.11ac --channelWidth=80 --shortGuard=1 --nss=2 --stepTime=0.1", "False", "False"), - ("minstrel-ht-wifi-manager-example --standard=802.11ac --channelWidth=80 --shortGuard=0 --nss=2 --stepTime=0.1", "False", "False"), - ("minstrel-ht-wifi-manager-example --standard=802.11ac --channelWidth=80 --shortGuard=1 --nss=2 --stepTime=0.1", "False", "False"), - ("minstrel-ht-wifi-manager-example --standard=802.11ac --channelWidth=160 --shortGuard=0 --nss=2 --stepTime=0.1", "False", "False"), - ("minstrel-ht-wifi-manager-example --standard=802.11ac --channelWidth=160 --shortGuard=1 --nss=2 --stepTime=0.1", "False", "False"), - ("minstrel-ht-wifi-manager-example --standard=802.11ac --channelWidth=160 --shortGuard=0 --nss=2 --stepTime=0.1", "False", "False"), - ("minstrel-ht-wifi-manager-example --standard=802.11ac --channelWidth=160 --shortGuard=1 --nss=2 --stepTime=0.1", "False", "False"), - ("minstrel-ht-wifi-manager-example --standard=802.11ac --channelWidth=20 --shortGuard=0 --nss=3 --stepTime=0.1", "False", "False"), - ("minstrel-ht-wifi-manager-example --standard=802.11ac --channelWidth=20 --shortGuard=1 --nss=3 --stepTime=0.1", "False", "False"), - ("minstrel-ht-wifi-manager-example --standard=802.11ac --channelWidth=40 --shortGuard=0 --nss=3 --stepTime=0.1", "False", "False"), - ("minstrel-ht-wifi-manager-example --standard=802.11ac --channelWidth=40 --shortGuard=1 --nss=3 --stepTime=0.1", "False", "False"), - ("minstrel-ht-wifi-manager-example --standard=802.11ac --channelWidth=80 --shortGuard=0 --nss=3 --stepTime=0.1", "False", "False"), - ("minstrel-ht-wifi-manager-example --standard=802.11ac --channelWidth=80 --shortGuard=1 --nss=3 --stepTime=0.1", "False", "False"), - ("minstrel-ht-wifi-manager-example --standard=802.11ac --channelWidth=80 --shortGuard=0 --nss=3 --stepTime=0.1", "False", "False"), - ("minstrel-ht-wifi-manager-example --standard=802.11ac --channelWidth=80 --shortGuard=1 --nss=3 --stepTime=0.1", "False", "False"), - ("minstrel-ht-wifi-manager-example --standard=802.11ac --channelWidth=160 --shortGuard=0 --nss=3 --stepTime=0.1", "False", "False"), - ("minstrel-ht-wifi-manager-example --standard=802.11ac --channelWidth=160 --shortGuard=1 --nss=3 --stepTime=0.1", "False", "False"), - ("minstrel-ht-wifi-manager-example --standard=802.11ac --channelWidth=160 --shortGuard=0 --nss=3 --stepTime=0.1", "False", "False"), - ("minstrel-ht-wifi-manager-example --standard=802.11ac --channelWidth=160 --shortGuard=1 --nss=3 --stepTime=0.1", "False", "False"), - ("minstrel-ht-wifi-manager-example --standard=802.11ac --channelWidth=20 --shortGuard=0 --nss=4 --stepTime=0.1", "False", "False"), - ("minstrel-ht-wifi-manager-example --standard=802.11ac --channelWidth=20 --shortGuard=1 --nss=4 --stepTime=0.1", "False", "False"), - ("minstrel-ht-wifi-manager-example --standard=802.11ac --channelWidth=40 --shortGuard=0 --nss=4 --stepTime=0.1", "False", "False"), - ("minstrel-ht-wifi-manager-example --standard=802.11ac --channelWidth=40 --shortGuard=1 --nss=4 --stepTime=0.1", "False", "False"), - ("minstrel-ht-wifi-manager-example --standard=802.11ac --channelWidth=80 --shortGuard=0 --nss=4 --stepTime=0.1", "False", "False"), - ("minstrel-ht-wifi-manager-example --standard=802.11ac --channelWidth=80 --shortGuard=1 --nss=4 --stepTime=0.1", "False", "False"), - ("minstrel-ht-wifi-manager-example --standard=802.11ac --channelWidth=80 --shortGuard=0 --nss=4 --stepTime=0.1", "False", "False"), - ("minstrel-ht-wifi-manager-example --standard=802.11ac --channelWidth=80 --shortGuard=1 --nss=4 --stepTime=0.1", "False", "False"), - ("minstrel-ht-wifi-manager-example --standard=802.11ac --channelWidth=160 --shortGuard=0 --nss=4 --stepTime=0.1", "False", "False"), - ("minstrel-ht-wifi-manager-example --standard=802.11ac --channelWidth=160 --shortGuard=1 --nss=4 --stepTime=0.1", "False", "False"), - ("minstrel-ht-wifi-manager-example --standard=802.11ac --channelWidth=160 --shortGuard=0 --nss=4 --stepTime=0.1", "False", "False"), - ("minstrel-ht-wifi-manager-example --standard=802.11ac --channelWidth=160 --shortGuard=1 --nss=4 --stepTime=0.1", "True", "True"), -# To be uncommented once fix for bug 2647 is delivered -# ("ideal-wifi-manager-example --standard=802.11a --stepTime=0.1", "True", "True"), -# ("ideal-wifi-manager-example --standard=802.11b --stepTime=0.1", "True", "True"), -# ("ideal-wifi-manager-example --standard=802.11g --stepTime=0.1", "True", "True"), -# ("ideal-wifi-manager-example --standard=802.11-holland --stepTime=0.1", "True", "True"), -# ("ideal-wifi-manager-example --standard=802.11-10MHz --stepTime=0.1", "True", "True"), -# ("ideal-wifi-manager-example --standard=802.11-5MHz --stepTime=0.1", "True", "True"), -# ("ideal-wifi-manager-example --standard=802.11n-5GHz --channelWidth=20 --shortGuard=0 --nss=1 --stepTime=0.1", "True", "True"), -# ("ideal-wifi-manager-example --standard=802.11n-5GHz --channelWidth=20 --shortGuard=1 --nss=1 --stepTime=0.1", "True", "True"), -# ("ideal-wifi-manager-example --standard=802.11n-5GHz --channelWidth=40 --shortGuard=0 --nss=1 --stepTime=0.1", "True", "True"), -# ("ideal-wifi-manager-example --standard=802.11n-5GHz --channelWidth=40 --shortGuard=1 --nss=1 --stepTime=0.1", "True", "True"), -# ("ideal-wifi-manager-example --standard=802.11n-5GHz --channelWidth=20 --shortGuard=0 --nss=2 --stepTime=0.1", "True", "True"), -# ("ideal-wifi-manager-example --standard=802.11n-5GHz --channelWidth=20 --shortGuard=1 --nss=2 --stepTime=0.1", "False", "False"), -# ("ideal-wifi-manager-example --standard=802.11n-5GHz --channelWidth=40 --shortGuard=0 --nss=2 --stepTime=0.1", "False", "False"), -# ("ideal-wifi-manager-example --standard=802.11n-5GHz --channelWidth=40 --shortGuard=1 --nss=2 --stepTime=0.1", "False", "False"), -# ("ideal-wifi-manager-example --standard=802.11n-5GHz --channelWidth=20 --shortGuard=0 --nss=3 --stepTime=0.1", "False", "False"), -# ("ideal-wifi-manager-example --standard=802.11n-5GHz --channelWidth=20 --shortGuard=1 --nss=3 --stepTime=0.1", "False", "False"), -# ("ideal-wifi-manager-example --standard=802.11n-5GHz --channelWidth=40 --shortGuard=0 --nss=3 --stepTime=0.1", "False", "False"), -# ("ideal-wifi-manager-example --standard=802.11n-5GHz --channelWidth=40 --shortGuard=1 --nss=3 --stepTime=0.1", "False", "False"), -# ("ideal-wifi-manager-example --standard=802.11n-5GHz --channelWidth=20 --shortGuard=0 --nss=4 --stepTime=0.1", "False", "False"), -# ("ideal-wifi-manager-example --standard=802.11n-5GHz --channelWidth=20 --shortGuard=1 --nss=4 --stepTime=0.1", "False", "False"), -# ("ideal-wifi-manager-example --standard=802.11n-5GHz --channelWidth=40 --shortGuard=0 --nss=4 --stepTime=0.1", "False", "False"), -# ("ideal-wifi-manager-example --standard=802.11n-5GHz --channelWidth=40 --shortGuard=1 --nss=4 --stepTime=0.1", "True", "True"), -# ("ideal-wifi-manager-example --standard=802.11n-2.4GHz --channelWidth=20 --shortGuard=0 --nss=1 --stepTime=0.1", "False", "False"), -# ("ideal-wifi-manager-example --standard=802.11n-2.4GHz --channelWidth=20 --shortGuard=1 --nss=1 --stepTime=0.1", "False", "False"), -# ("ideal-wifi-manager-example --standard=802.11n-2.4GHz --channelWidth=40 --shortGuard=0 --nss=1 --stepTime=0.1", "False", "False"), -# ("ideal-wifi-manager-example --standard=802.11n-2.4GHz --channelWidth=40 --shortGuard=1 --nss=1 --stepTime=0.1", "False", "False"), -# ("ideal-wifi-manager-example --standard=802.11n-2.4GHz --channelWidth=20 --shortGuard=0 --nss=2 --stepTime=0.1", "False", "False"), -# ("ideal-wifi-manager-example --standard=802.11n-2.4GHz --channelWidth=20 --shortGuard=1 --nss=2 --stepTime=0.1", "False", "False"), -# ("ideal-wifi-manager-example --standard=802.11n-2.4GHz --channelWidth=40 --shortGuard=0 --nss=2 --stepTime=0.1", "False", "False"), -# ("ideal-wifi-manager-example --standard=802.11n-2.4GHz --channelWidth=40 --shortGuard=1 --nss=2 --stepTime=0.1", "False", "False"), -# ("ideal-wifi-manager-example --standard=802.11n-2.4GHz --channelWidth=20 --shortGuard=0 --nss=3 --stepTime=0.1", "False", "False"), -# ("ideal-wifi-manager-example --standard=802.11n-2.4GHz --channelWidth=20 --shortGuard=1 --nss=3 --stepTime=0.1", "False", "False"), -# ("ideal-wifi-manager-example --standard=802.11n-2.4GHz --channelWidth=40 --shortGuard=0 --nss=3 --stepTime=0.1", "False", "False"), -# ("ideal-wifi-manager-example --standard=802.11n-2.4GHz --channelWidth=40 --shortGuard=1 --nss=3 --stepTime=0.1", "False", "False"), -# ("ideal-wifi-manager-example --standard=802.11n-2.4GHz --channelWidth=20 --shortGuard=0 --nss=4 --stepTime=0.1", "False", "False"), -# ("ideal-wifi-manager-example --standard=802.11n-2.4GHz --channelWidth=20 --shortGuard=1 --nss=4 --stepTime=0.1", "False", "False"), -# ("ideal-wifi-manager-example --standard=802.11n-2.4GHz --channelWidth=40 --shortGuard=0 --nss=4 --stepTime=0.1", "False", "False"), -# ("ideal-wifi-manager-example --standard=802.11n-2.4GHz --channelWidth=40 --shortGuard=1 --nss=4 --stepTime=0.1", "True", "True"), -# ("ideal-wifi-manager-example --standard=802.11ac --channelWidth=20 --shortGuard=0 --nss=1 --stepTime=0.1", "True", "True"), -# ("ideal-wifi-manager-example --standard=802.11ac --channelWidth=20 --shortGuard=1 --nss=1 --stepTime=0.1", "True", "True"), -# ("ideal-wifi-manager-example --standard=802.11ac --channelWidth=40 --shortGuard=0 --nss=1 --stepTime=0.1", "True", "True"), -# ("ideal-wifi-manager-example --standard=802.11ac --channelWidth=40 --shortGuard=1 --nss=1 --stepTime=0.1", "True", "True"), -# ("ideal-wifi-manager-example --standard=802.11ac --channelWidth=80 --shortGuard=0 --nss=1 --stepTime=0.1", "True", "True"), -# ("ideal-wifi-manager-example --standard=802.11ac --channelWidth=80 --shortGuard=1 --nss=1 --stepTime=0.1", "True", "True"), -# ("ideal-wifi-manager-example --standard=802.11ac --channelWidth=80 --shortGuard=0 --nss=1 --stepTime=0.1", "True", "True"), -# ("ideal-wifi-manager-example --standard=802.11ac --channelWidth=80 --shortGuard=1 --nss=1 --stepTime=0.1", "True", "True"), -# ("ideal-wifi-manager-example --standard=802.11ac --channelWidth=160 --shortGuard=0 --nss=1 --stepTime=0.1", "True", "True"), -# ("ideal-wifi-manager-example --standard=802.11ac --channelWidth=160 --shortGuard=1 --nss=1 --stepTime=0.1", "True", "True"), -# ("ideal-wifi-manager-example --standard=802.11ac --channelWidth=160 --shortGuard=0 --nss=1 --stepTime=0.1", "True", "True"), -# ("ideal-wifi-manager-example --standard=802.11ac --channelWidth=160 --shortGuard=1 --nss=1 --stepTime=0.1", "True", "True"), -# ("ideal-wifi-manager-example --standard=802.11ac --channelWidth=20 --shortGuard=0 --nss=2 --stepTime=0.1", "True", "True"), -# ("ideal-wifi-manager-example --standard=802.11ac --channelWidth=20 --shortGuard=1 --nss=2 --stepTime=0.1", "False", "False"), -# ("ideal-wifi-manager-example --standard=802.11ac --channelWidth=40 --shortGuard=0 --nss=2 --stepTime=0.1", "False", "False"), -# ("ideal-wifi-manager-example --standard=802.11ac --channelWidth=40 --shortGuard=1 --nss=2 --stepTime=0.1", "False", "False"), -# ("ideal-wifi-manager-example --standard=802.11ac --channelWidth=80 --shortGuard=0 --nss=2 --stepTime=0.1", "False", "False"), -# ("ideal-wifi-manager-example --standard=802.11ac --channelWidth=80 --shortGuard=1 --nss=2 --stepTime=0.1", "False", "False"), -# ("ideal-wifi-manager-example --standard=802.11ac --channelWidth=80 --shortGuard=0 --nss=2 --stepTime=0.1", "False", "False"), -# ("ideal-wifi-manager-example --standard=802.11ac --channelWidth=80 --shortGuard=1 --nss=2 --stepTime=0.1", "False", "False"), -# ("ideal-wifi-manager-example --standard=802.11ac --channelWidth=160 --shortGuard=0 --nss=2 --stepTime=0.1", "False", "False"), -# ("ideal-wifi-manager-example --standard=802.11ac --channelWidth=160 --shortGuard=1 --nss=2 --stepTime=0.1", "False", "False"), -# ("ideal-wifi-manager-example --standard=802.11ac --channelWidth=160 --shortGuard=0 --nss=2 --stepTime=0.1", "False", "False"), -# ("ideal-wifi-manager-example --standard=802.11ac --channelWidth=160 --shortGuard=1 --nss=2 --stepTime=0.1", "False", "False"), -# ("ideal-wifi-manager-example --standard=802.11ac --channelWidth=20 --shortGuard=0 --nss=3 --stepTime=0.1", "False", "False"), -# ("ideal-wifi-manager-example --standard=802.11ac --channelWidth=20 --shortGuard=1 --nss=3 --stepTime=0.1", "False", "False"), -# ("ideal-wifi-manager-example --standard=802.11ac --channelWidth=40 --shortGuard=0 --nss=3 --stepTime=0.1", "False", "False"), -# ("ideal-wifi-manager-example --standard=802.11ac --channelWidth=40 --shortGuard=1 --nss=3 --stepTime=0.1", "False", "False"), -# ("ideal-wifi-manager-example --standard=802.11ac --channelWidth=80 --shortGuard=0 --nss=3 --stepTime=0.1", "False", "False"), -# ("ideal-wifi-manager-example --standard=802.11ac --channelWidth=80 --shortGuard=1 --nss=3 --stepTime=0.1", "False", "False"), -# ("ideal-wifi-manager-example --standard=802.11ac --channelWidth=80 --shortGuard=0 --nss=3 --stepTime=0.1", "False", "False"), -# ("ideal-wifi-manager-example --standard=802.11ac --channelWidth=80 --shortGuard=1 --nss=3 --stepTime=0.1", "False", "False"), -# ("ideal-wifi-manager-example --standard=802.11ac --channelWidth=160 --shortGuard=0 --nss=3 --stepTime=0.1", "False", "False"), -# ("ideal-wifi-manager-example --standard=802.11ac --channelWidth=160 --shortGuard=1 --nss=3 --stepTime=0.1", "False", "False"), -# ("ideal-wifi-manager-example --standard=802.11ac --channelWidth=160 --shortGuard=0 --nss=3 --stepTime=0.1", "False", "False"), -# ("ideal-wifi-manager-example --standard=802.11ac --channelWidth=160 --shortGuard=1 --nss=3 --stepTime=0.1", "False", "False"), -# ("ideal-wifi-manager-example --standard=802.11ac --channelWidth=20 --shortGuard=0 --nss=4 --stepTime=0.1", "False", "False"), -# ("ideal-wifi-manager-example --standard=802.11ac --channelWidth=20 --shortGuard=1 --nss=4 --stepTime=0.1", "False", "False"), -# ("ideal-wifi-manager-example --standard=802.11ac --channelWidth=40 --shortGuard=0 --nss=4 --stepTime=0.1", "False", "False"), -# ("ideal-wifi-manager-example --standard=802.11ac --channelWidth=40 --shortGuard=1 --nss=4 --stepTime=0.1", "False", "False"), -# ("ideal-wifi-manager-example --standard=802.11ac --channelWidth=80 --shortGuard=0 --nss=4 --stepTime=0.1", "False", "False"), -# ("ideal-wifi-manager-example --standard=802.11ac --channelWidth=80 --shortGuard=1 --nss=4 --stepTime=0.1", "False", "False"), -# ("ideal-wifi-manager-example --standard=802.11ac --channelWidth=80 --shortGuard=0 --nss=4 --stepTime=0.1", "False", "False"), -# ("ideal-wifi-manager-example --standard=802.11ac --channelWidth=80 --shortGuard=1 --nss=4 --stepTime=0.1", "False", "False"), -# ("ideal-wifi-manager-example --standard=802.11ac --channelWidth=160 --shortGuard=0 --nss=4 --stepTime=0.1", "False", "False"), -# ("ideal-wifi-manager-example --standard=802.11ac --channelWidth=160 --shortGuard=1 --nss=4 --stepTime=0.1", "False", "False"), -# ("ideal-wifi-manager-example --standard=802.11ac --channelWidth=160 --shortGuard=0 --nss=4 --stepTime=0.1", "False", "False"), -# ("ideal-wifi-manager-example --standard=802.11ac --channelWidth=160 --shortGuard=1 --nss=4 --stepTime=0.1", "True", "True"), + ("wifi-manager-example --wifiManager=Aarf --standard=802.11a --stepTime=0.1", "True", "True"), + ("wifi-manager-example --wifiManager=Aarf --standard=802.11b --serverChannelWidth=22 --clientChannelWidth=22 --stepTime=0.1", "True", "True"), + ("wifi-manager-example --wifiManager=Aarf --standard=802.11g --stepTime=0.1", "True", "True"), + ("wifi-manager-example --wifiManager=Aarf --standard=802.11-holland --stepTime=0.1", "True", "True"), + ("wifi-manager-example --wifiManager=Aarf --standard=802.11-10MHz --stepTime=0.1", "True", "True"), + ("wifi-manager-example --wifiManager=Aarf --standard=802.11-5MHz --stepTime=0.1", "True", "True"), + ("wifi-manager-example --wifiManager=Aarfcd --standard=802.11a --stepTime=0.1", "True", "True"), + ("wifi-manager-example --wifiManager=Aarfcd --standard=802.11b --serverChannelWidth=22 --clientChannelWidth=22 --stepTime=0.1", "True", "True"), + ("wifi-manager-example --wifiManager=Aarfcd --standard=802.11g --stepTime=0.1", "True", "True"), + ("wifi-manager-example --wifiManager=Aarfcd --standard=802.11-holland --stepTime=0.1", "True", "True"), + ("wifi-manager-example --wifiManager=Aarfcd --standard=802.11-10MHz --stepTime=0.1", "True", "True"), + ("wifi-manager-example --wifiManager=Aarfcd --standard=802.11-5MHz --stepTime=0.1", "True", "True"), + ("wifi-manager-example --wifiManager=Amrr --standard=802.11a --stepTime=0.1", "True", "True"), + ("wifi-manager-example --wifiManager=Amrr --standard=802.11b --serverChannelWidth=22 --clientChannelWidth=22 --stepTime=0.1", "True", "True"), + ("wifi-manager-example --wifiManager=Amrr --standard=802.11g --stepTime=0.1", "True", "True"), + ("wifi-manager-example --wifiManager=Amrr --standard=802.11-holland --stepTime=0.1", "True", "True"), + ("wifi-manager-example --wifiManager=Amrr --standard=802.11-10MHz --stepTime=0.1", "True", "True"), + ("wifi-manager-example --wifiManager=Amrr --standard=802.11-5MHz --stepTime=0.1", "True", "True"), + ("wifi-manager-example --wifiManager=Arf --standard=802.11a --stepTime=0.1", "True", "True"), + ("wifi-manager-example --wifiManager=Arf --standard=802.11b --serverChannelWidth=22 --clientChannelWidth=22 --stepTime=0.1", "True", "True"), + ("wifi-manager-example --wifiManager=Arf --standard=802.11g --stepTime=0.1", "True", "True"), + ("wifi-manager-example --wifiManager=Arf --standard=802.11-holland --stepTime=0.1", "True", "True"), + ("wifi-manager-example --wifiManager=Arf --standard=802.11-10MHz --stepTime=0.1", "True", "True"), + ("wifi-manager-example --wifiManager=Arf --standard=802.11-5MHz --stepTime=0.1", "True", "True"), + ("wifi-manager-example --wifiManager=Cara --standard=802.11a --stepTime=0.1", "True", "True"), + ("wifi-manager-example --wifiManager=Cara --standard=802.11b --serverChannelWidth=22 --clientChannelWidth=22 --stepTime=0.1", "True", "True"), + ("wifi-manager-example --wifiManager=Cara --standard=802.11g --stepTime=0.1", "True", "True"), + ("wifi-manager-example --wifiManager=Cara --standard=802.11-holland --stepTime=0.1", "True", "True"), + ("wifi-manager-example --wifiManager=Cara --standard=802.11-10MHz --stepTime=0.1", "True", "True"), + ("wifi-manager-example --wifiManager=Cara --standard=802.11-5MHz --stepTime=0.1", "True", "True"), + ("wifi-manager-example --wifiManager=Onoe --standard=802.11a --stepTime=0.1", "True", "True"), + ("wifi-manager-example --wifiManager=Onoe --standard=802.11b --serverChannelWidth=22 --clientChannelWidth=22 --stepTime=0.1", "True", "True"), + ("wifi-manager-example --wifiManager=Onoe --standard=802.11g --stepTime=0.1", "True", "True"), + ("wifi-manager-example --wifiManager=Onoe --standard=802.11-holland --stepTime=0.1", "True", "True"), + ("wifi-manager-example --wifiManager=Onoe --standard=802.11-10MHz --stepTime=0.1", "True", "True"), + ("wifi-manager-example --wifiManager=Onoe --standard=802.11-5MHz --stepTime=0.1", "True", "True"), + ("wifi-manager-example --wifiManager=Rraa --standard=802.11a --stepTime=0.1", "True", "True"), + #("wifi-manager-example --wifiManager=Rraa --standard=802.11b --serverChannelWidth=22 --clientChannelWidth=22 --stepTime=0.1", "True", "True"), #see Bug 2654 + ("wifi-manager-example --wifiManager=Rraa --standard=802.11g --stepTime=0.1", "True", "True"), + ("wifi-manager-example --wifiManager=Rraa --standard=802.11-holland --stepTime=0.1", "True", "True"), + #("wifi-manager-example --wifiManager=Rraa --standard=802.11-10MHz --stepTime=0.1", "True", "True"), #see Bug 2654 + #("wifi-manager-example --wifiManager=Rraa --standard=802.11-5MHz --stepTime=0.1", "True", "True"), #see Bug 2654 + ("wifi-manager-example --wifiManager=Minstrel --standard=802.11a --stepTime=0.1", "True", "True"), + ("wifi-manager-example --wifiManager=Minstrel --standard=802.11b --serverChannelWidth=22 --clientChannelWidth=22 --stepTime=0.1", "True", "True"), + ("wifi-manager-example --wifiManager=Minstrel --standard=802.11g --stepTime=0.1", "True", "True"), + ("wifi-manager-example --wifiManager=Minstrel --standard=802.11-holland --stepTime=0.1", "True", "True"), + ("wifi-manager-example --wifiManager=Minstrel --standard=802.11-10MHz --stepTime=0.1", "True", "True"), + ("wifi-manager-example --wifiManager=Minstrel --standard=802.11-5MHz --stepTime=0.1", "True", "True"), + ("wifi-manager-example --wifiManager=MinstrelHt --standard=802.11a --stepTime=0.1", "True", "True"), + ("wifi-manager-example --wifiManager=MinstrelHt --standard=802.11b --serverChannelWidth=22 --clientChannelWidth=22 --stepTime=0.1", "True", "True"), + ("wifi-manager-example --wifiManager=MinstrelHt --standard=802.11g --stepTime=0.1", "True", "True"), + ("wifi-manager-example --wifiManager=MinstrelHt --standard=802.11-holland --stepTime=0.1", "True", "True"), + ("wifi-manager-example --wifiManager=MinstrelHt --standard=802.11-10MHz --stepTime=0.1", "True", "True"), + ("wifi-manager-example --wifiManager=MinstrelHt --standard=802.11-5MHz --stepTime=0.1", "True", "True"), + ("wifi-manager-example --wifiManager=MinstrelHt --standard=802.11n-5GHz --serverChannelWidth=20 --clientChannelWidth=20 --serverShortGuardInterval=0 --clientShortGuardInterval=0 --serverNss=1 --clientNss=1 --stepTime=0.1", "True", "True"), + ("minstrel-ht-wifi-manager-example --standard=802.11n-5GHz --serverChannelWidth=20 --clientChannelWidth=20 --serverShortGuardInterval=1 --clientShortGuardInterval=1 --serverNss=1 --clientNss=1 --stepTime=0.1", "True", "True"), + ("minstrel-ht-wifi-manager-example --standard=802.11n-5GHz --serverChannelWidth=40 --clientChannelWidth=40 --serverShortGuardInterval=0 --clientShortGuardInterval=0 --serverNss=1 --clientNss=1 --stepTime=0.1", "True", "True"), + ("minstrel-ht-wifi-manager-example --standard=802.11n-5GHz --serverChannelWidth=40 --clientChannelWidth=40 --serverShortGuardInterval=1 --clientShortGuardInterval=1 --serverNss=1 --clientNss=1 --stepTime=0.1", "True", "True"), + ("minstrel-ht-wifi-manager-example --standard=802.11n-5GHz --serverChannelWidth=20 --clientChannelWidth=20 --serverShortGuardInterval=0 --clientShortGuardInterval=0 --serverNss=2 --clientNss=2 --stepTime=0.1", "True", "True"), + ("minstrel-ht-wifi-manager-example --standard=802.11n-5GHz --serverChannelWidth=20 --clientChannelWidth=20 --serverShortGuardInterval=1 --clientShortGuardInterval=1 --serverNss=2 --clientNss=2 --stepTime=0.1", "False", "False"), + ("minstrel-ht-wifi-manager-example --standard=802.11n-5GHz --serverChannelWidth=40 --clientChannelWidth=40 --serverShortGuardInterval=0 --clientShortGuardInterval=0 --serverNss=2 --clientNss=2 --stepTime=0.1", "False", "False"), + ("minstrel-ht-wifi-manager-example --standard=802.11n-5GHz --serverChannelWidth=40 --clientChannelWidth=40 --serverShortGuardInterval=1 --clientShortGuardInterval=1 --serverNss=2 --clientNss=2 --stepTime=0.1", "False", "False"), + ("minstrel-ht-wifi-manager-example --standard=802.11n-5GHz --serverChannelWidth=20 --clientChannelWidth=20 --serverShortGuardInterval=0 --clientShortGuardInterval=0 --serverNss=3 --clientNss=3 --stepTime=0.1", "False", "False"), + ("minstrel-ht-wifi-manager-example --standard=802.11n-5GHz --serverChannelWidth=20 --clientChannelWidth=20 --serverShortGuardInterval=1 --clientShortGuardInterval=1 --serverNss=3 --clientNss=3 --stepTime=0.1", "False", "False"), + ("minstrel-ht-wifi-manager-example --standard=802.11n-5GHz --serverChannelWidth=40 --clientChannelWidth=40 --serverShortGuardInterval=0 --clientShortGuardInterval=0 --serverNss=3 --clientNss=3 --stepTime=0.1", "False", "False"), + ("minstrel-ht-wifi-manager-example --standard=802.11n-5GHz --serverChannelWidth=40 --clientChannelWidth=40 --serverShortGuardInterval=1 --clientShortGuardInterval=1 --serverNss=3 --clientNss=3 --stepTime=0.1", "False", "False"), + ("minstrel-ht-wifi-manager-example --standard=802.11n-5GHz --serverChannelWidth=20 --clientChannelWidth=20 --serverShortGuardInterval=0 --clientShortGuardInterval=0 --serverNss=4 --clientNss=4 --stepTime=0.1", "False", "False"), + ("minstrel-ht-wifi-manager-example --standard=802.11n-5GHz --serverChannelWidth=20 --clientChannelWidth=20 --serverShortGuardInterval=1 --clientShortGuardInterval=1 --serverNss=4 --clientNss=4 --stepTime=0.1", "False", "False"), + ("minstrel-ht-wifi-manager-example --standard=802.11n-5GHz --serverChannelWidth=40 --clientChannelWidth=40 --serverShortGuardInterval=0 --clientShortGuardInterval=0 --serverNss=4 --clientNss=4 --stepTime=0.1", "False", "False"), + ("minstrel-ht-wifi-manager-example --standard=802.11n-5GHz --serverChannelWidth=40 --clientChannelWidth=40 --serverShortGuardInterval=1 --clientShortGuardInterval=1 --serverNss=4 --clientNss=4 --stepTime=0.1", "True", "True"), + ("minstrel-ht-wifi-manager-example --standard=802.11n-2.4GHz --serverChannelWidth=20 --clientChannelWidth=20 --serverShortGuardInterval=0 --clientShortGuardInterval=0 --serverNss=1 --clientNss=1 --stepTime=0.1", "False", "False"), + ("minstrel-ht-wifi-manager-example --standard=802.11n-2.4GHz --serverChannelWidth=20 --clientChannelWidth=20 --serverShortGuardInterval=1 --clientShortGuardInterval=1 --serverNss=1 --clientNss=1 --stepTime=0.1", "False", "False"), + ("minstrel-ht-wifi-manager-example --standard=802.11n-2.4GHz --serverChannelWidth=40 --clientChannelWidth=40 --serverShortGuardInterval=0 --clientShortGuardInterval=0 --serverNss=1 --clientNss=1 --stepTime=0.1", "False", "False"), + ("minstrel-ht-wifi-manager-example --standard=802.11n-2.4GHz --serverChannelWidth=40 --clientChannelWidth=40 --serverShortGuardInterval=1 --clientShortGuardInterval=1 --serverNss=1 --clientNss=1 --stepTime=0.1", "False", "False"), + ("minstrel-ht-wifi-manager-example --standard=802.11n-2.4GHz --serverChannelWidth=20 --clientChannelWidth=20 --serverShortGuardInterval=0 --clientShortGuardInterval=0 --serverNss=2 --clientNss=2 --stepTime=0.1", "False", "False"), + ("minstrel-ht-wifi-manager-example --standard=802.11n-2.4GHz --serverChannelWidth=20 --clientChannelWidth=20 --serverShortGuardInterval=1 --clientShortGuardInterval=1 --serverNss=2 --clientNss=2 --stepTime=0.1", "False", "False"), + ("minstrel-ht-wifi-manager-example --standard=802.11n-2.4GHz --serverChannelWidth=40 --clientChannelWidth=40 --serverShortGuardInterval=0 --clientShortGuardInterval=0 --serverNss=2 --clientNss=2 --stepTime=0.1", "False", "False"), + ("minstrel-ht-wifi-manager-example --standard=802.11n-2.4GHz --serverChannelWidth=40 --clientChannelWidth=40 --serverShortGuardInterval=1 --clientShortGuardInterval=1 --serverNss=2 --clientNss=2 --stepTime=0.1", "False", "False"), + ("minstrel-ht-wifi-manager-example --standard=802.11n-2.4GHz --serverChannelWidth=20 --clientChannelWidth=20 --serverShortGuardInterval=0 --clientShortGuardInterval=0 --serverNss=3 --clientNss=3 --stepTime=0.1", "False", "False"), + ("minstrel-ht-wifi-manager-example --standard=802.11n-2.4GHz --serverChannelWidth=20 --clientChannelWidth=20 --serverShortGuardInterval=1 --clientShortGuardInterval=1 --serverNss=3 --clientNss=3 --stepTime=0.1", "False", "False"), + ("minstrel-ht-wifi-manager-example --standard=802.11n-2.4GHz --serverChannelWidth=40 --clientChannelWidth=40 --serverShortGuardInterval=0 --clientShortGuardInterval=0 --serverNss=3 --clientNss=3 --stepTime=0.1", "False", "False"), + ("minstrel-ht-wifi-manager-example --standard=802.11n-2.4GHz --serverChannelWidth=40 --clientChannelWidth=40 --serverShortGuardInterval=1 --clientShortGuardInterval=1 --serverNss=3 --clientNss=3 --stepTime=0.1", "False", "False"), + ("minstrel-ht-wifi-manager-example --standard=802.11n-2.4GHz --serverChannelWidth=20 --clientChannelWidth=20 --serverShortGuardInterval=0 --clientShortGuardInterval=0 --serverNss=4 --clientNss=4 --stepTime=0.1", "False", "False"), + ("minstrel-ht-wifi-manager-example --standard=802.11n-2.4GHz --serverChannelWidth=20 --clientChannelWidth=20 --serverShortGuardInterval=1 --clientShortGuardInterval=1 --serverNss=4 --clientNss=4 --stepTime=0.1", "False", "False"), + ("minstrel-ht-wifi-manager-example --standard=802.11n-2.4GHz --serverChannelWidth=40 --clientChannelWidth=40 --serverShortGuardInterval=0 --clientShortGuardInterval=0 --serverNss=4 --clientNss=4 --stepTime=0.1", "False", "False"), + ("minstrel-ht-wifi-manager-example --standard=802.11n-2.4GHz --serverChannelWidth=40 --clientChannelWidth=40 --serverShortGuardInterval=1 --clientShortGuardInterval=1 --serverNss=4 --clientNss=4 --stepTime=0.1", "True", "True"), + ("minstrel-ht-wifi-manager-example --standard=802.11ac --serverChannelWidth=20 --clientChannelWidth=20 --serverShortGuardInterval=0 --clientShortGuardInterval=0 --serverNss=1 --clientNss=1 --stepTime=0.1", "True", "True"), + ("minstrel-ht-wifi-manager-example --standard=802.11ac --serverChannelWidth=20 --clientChannelWidth=20 --serverShortGuardInterval=1 --clientShortGuardInterval=1 --serverNss=1 --clientNss=1 --stepTime=0.1", "True", "True"), + ("minstrel-ht-wifi-manager-example --standard=802.11ac --serverChannelWidth=40 --clientChannelWidth=40 --serverShortGuardInterval=0 --clientShortGuardInterval=0 --serverNss=1 --clientNss=1 --stepTime=0.1", "True", "True"), + ("minstrel-ht-wifi-manager-example --standard=802.11ac --serverChannelWidth=40 --clientChannelWidth=40 --serverShortGuardInterval=1 --clientShortGuardInterval=1 --serverNss=1 --clientNss=1 --stepTime=0.1", "True", "True"), + ("minstrel-ht-wifi-manager-example --standard=802.11ac --serverChannelWidth=80 --clientChannelWidth=80 --serverShortGuardInterval=0 --clientShortGuardInterval=0 --serverNss=1 --clientNss=1 --stepTime=0.1", "True", "True"), + ("minstrel-ht-wifi-manager-example --standard=802.11ac --serverChannelWidth=80 --clientChannelWidth=80 --serverShortGuardInterval=1 --clientShortGuardInterval=1 --serverNss=1 --clientNss=1 --stepTime=0.1", "True", "True"), + ("minstrel-ht-wifi-manager-example --standard=802.11ac --serverChannelWidth=80 --clientChannelWidth=80 --serverShortGuardInterval=0 --clientShortGuardInterval=0 --serverNss=1 --clientNss=1 --stepTime=0.1", "True", "True"), + ("minstrel-ht-wifi-manager-example --standard=802.11ac --serverChannelWidth=80 --clientChannelWidth=80 --serverShortGuardInterval=1 --clientShortGuardInterval=1 --serverNss=1 --clientNss=1 --stepTime=0.1", "True", "True"), + ("minstrel-ht-wifi-manager-example --standard=802.11ac --serverChannelWidth=160 --clientChannelWidth=160 --serverShortGuardInterval=0 --clientShortGuardInterval=0 --serverNss=1 --clientNss=1 --stepTime=0.1", "True", "True"), + ("minstrel-ht-wifi-manager-example --standard=802.11ac --serverChannelWidth=160 --clientChannelWidth=160 --serverShortGuardInterval=1 --clientShortGuardInterval=1 --serverNss=1 --clientNss=1 --stepTime=0.1", "True", "True"), + ("minstrel-ht-wifi-manager-example --standard=802.11ac --serverChannelWidth=160 --clientChannelWidth=160 --serverShortGuardInterval=0 --clientShortGuardInterval=0 --serverNss=1 --clientNss=1 --stepTime=0.1", "True", "True"), + ("minstrel-ht-wifi-manager-example --standard=802.11ac --serverChannelWidth=160 --clientChannelWidth=160 --serverShortGuardInterval=1 --clientShortGuardInterval=1 --serverNss=1 --clientNss=1 --stepTime=0.1", "True", "True"), + ("minstrel-ht-wifi-manager-example --standard=802.11ac --serverChannelWidth=20 --clientChannelWidth=20 --serverShortGuardInterval=0 --clientShortGuardInterval=0 --serverNss=2 --clientNss=2 --stepTime=0.1", "True", "True"), + ("minstrel-ht-wifi-manager-example --standard=802.11ac --serverChannelWidth=20 --clientChannelWidth=20 --serverShortGuardInterval=1 --clientShortGuardInterval=1 --serverNss=2 --clientNss=2 --stepTime=0.1", "False", "False"), + ("minstrel-ht-wifi-manager-example --standard=802.11ac --serverChannelWidth=40 --clientChannelWidth=40 --serverShortGuardInterval=0 --clientShortGuardInterval=0 --serverNss=2 --clientNss=2 --stepTime=0.1", "False", "False"), + ("minstrel-ht-wifi-manager-example --standard=802.11ac --serverChannelWidth=40 --clientChannelWidth=40 --serverShortGuardInterval=1 --clientShortGuardInterval=1 --serverNss=2 --clientNss=2 --stepTime=0.1", "False", "False"), + ("minstrel-ht-wifi-manager-example --standard=802.11ac --serverChannelWidth=80 --clientChannelWidth=80 --serverShortGuardInterval=0 --clientShortGuardInterval=0 --serverNss=2 --clientNss=2 --stepTime=0.1", "False", "False"), + ("minstrel-ht-wifi-manager-example --standard=802.11ac --serverChannelWidth=80 --clientChannelWidth=80 --serverShortGuardInterval=1 --clientShortGuardInterval=1 --serverNss=2 --clientNss=2 --stepTime=0.1", "False", "False"), + ("minstrel-ht-wifi-manager-example --standard=802.11ac --serverChannelWidth=80 --clientChannelWidth=80 --serverShortGuardInterval=0 --clientShortGuardInterval=0 --serverNss=2 --clientNss=2 --stepTime=0.1", "False", "False"), + ("minstrel-ht-wifi-manager-example --standard=802.11ac --serverChannelWidth=80 --clientChannelWidth=80 --serverShortGuardInterval=1 --clientShortGuardInterval=1 --serverNss=2 --clientNss=2 --stepTime=0.1", "False", "False"), + ("minstrel-ht-wifi-manager-example --standard=802.11ac --serverChannelWidth=160 --clientChannelWidth=160 --serverShortGuardInterval=0 --clientShortGuardInterval=0 --serverNss=2 --clientNss=2 --stepTime=0.1", "False", "False"), + ("minstrel-ht-wifi-manager-example --standard=802.11ac --serverChannelWidth=160 --clientChannelWidth=160 --serverShortGuardInterval=1 --clientShortGuardInterval=1 --serverNss=2 --clientNss=2 --stepTime=0.1", "False", "False"), + ("minstrel-ht-wifi-manager-example --standard=802.11ac --serverChannelWidth=160 --clientChannelWidth=160 --serverShortGuardInterval=0 --clientShortGuardInterval=0 --serverNss=2 --clientNss=2 --stepTime=0.1", "False", "False"), + ("minstrel-ht-wifi-manager-example --standard=802.11ac --serverChannelWidth=160 --clientChannelWidth=160 --serverShortGuardInterval=1 --clientShortGuardInterval=1 --serverNss=2 --clientNss=2 --stepTime=0.1", "False", "False"), + ("minstrel-ht-wifi-manager-example --standard=802.11ac --serverChannelWidth=20 --clientChannelWidth=20 --serverShortGuardInterval=0 --clientShortGuardInterval=0 --serverNss=3 --clientNss=3 --stepTime=0.1", "False", "False"), + ("minstrel-ht-wifi-manager-example --standard=802.11ac --serverChannelWidth=20 --clientChannelWidth=20 --serverShortGuardInterval=1 --clientShortGuardInterval=1 --serverNss=3 --clientNss=3 --stepTime=0.1", "False", "False"), + ("minstrel-ht-wifi-manager-example --standard=802.11ac --serverChannelWidth=40 --clientChannelWidth=40 --serverShortGuardInterval=0 --clientShortGuardInterval=0 --serverNss=3 --clientNss=3 --stepTime=0.1", "False", "False"), + ("minstrel-ht-wifi-manager-example --standard=802.11ac --serverChannelWidth=40 --clientChannelWidth=40 --serverShortGuardInterval=1 --clientShortGuardInterval=1 --serverNss=3 --clientNss=3 --stepTime=0.1", "False", "False"), + ("minstrel-ht-wifi-manager-example --standard=802.11ac --serverChannelWidth=80 --clientChannelWidth=80 --serverShortGuardInterval=0 --clientShortGuardInterval=0 --serverNss=3 --clientNss=3 --stepTime=0.1", "False", "False"), + ("minstrel-ht-wifi-manager-example --standard=802.11ac --serverChannelWidth=80 --clientChannelWidth=80 --serverShortGuardInterval=1 --clientShortGuardInterval=1 --serverNss=3 --clientNss=3 --stepTime=0.1", "False", "False"), + ("minstrel-ht-wifi-manager-example --standard=802.11ac --serverChannelWidth=80 --clientChannelWidth=80 --serverShortGuardInterval=0 --clientShortGuardInterval=0 --serverNss=3 --clientNss=3 --stepTime=0.1", "False", "False"), + ("minstrel-ht-wifi-manager-example --standard=802.11ac --serverChannelWidth=80 --clientChannelWidth=80 --serverShortGuardInterval=1 --clientShortGuardInterval=1 --serverNss=3 --clientNss=3 --stepTime=0.1", "False", "False"), + ("minstrel-ht-wifi-manager-example --standard=802.11ac --serverChannelWidth=160 --clientChannelWidth=160 --serverShortGuardInterval=0 --clientShortGuardInterval=0 --serverNss=3 --clientNss=3 --stepTime=0.1", "False", "False"), + ("minstrel-ht-wifi-manager-example --standard=802.11ac --serverChannelWidth=160 --clientChannelWidth=160 --serverShortGuardInterval=1 --clientShortGuardInterval=1 --serverNss=3 --clientNss=3 --stepTime=0.1", "False", "False"), + ("minstrel-ht-wifi-manager-example --standard=802.11ac --serverChannelWidth=160 --clientChannelWidth=160 --serverShortGuardInterval=0 --clientShortGuardInterval=0 --serverNss=3 --clientNss=3 --stepTime=0.1", "False", "False"), + ("minstrel-ht-wifi-manager-example --standard=802.11ac --serverChannelWidth=160 --clientChannelWidth=160 --serverShortGuardInterval=1 --clientShortGuardInterval=1 --serverNss=3 --clientNss=3 --stepTime=0.1", "False", "False"), + ("minstrel-ht-wifi-manager-example --standard=802.11ac --serverChannelWidth=20 --clientChannelWidth=20 --serverShortGuardInterval=0 --clientShortGuardInterval=0 --serverNss=4 --clientNss=4 --stepTime=0.1", "False", "False"), + ("minstrel-ht-wifi-manager-example --standard=802.11ac --serverChannelWidth=20 --clientChannelWidth=20 --serverShortGuardInterval=1 --clientShortGuardInterval=1 --serverNss=4 --clientNss=4 --stepTime=0.1", "False", "False"), + ("minstrel-ht-wifi-manager-example --standard=802.11ac --serverChannelWidth=40 --clientChannelWidth=40 --serverShortGuardInterval=0 --clientShortGuardInterval=0 --serverNss=4 --clientNss=4 --stepTime=0.1", "False", "False"), + ("minstrel-ht-wifi-manager-example --standard=802.11ac --serverChannelWidth=40 --clientChannelWidth=40 --serverShortGuardInterval=1 --clientShortGuardInterval=1 --serverNss=4 --clientNss=4 --stepTime=0.1", "False", "False"), + ("minstrel-ht-wifi-manager-example --standard=802.11ac --serverChannelWidth=80 --clientChannelWidth=80 --serverShortGuardInterval=0 --clientShortGuardInterval=0 --serverNss=4 --clientNss=4 --stepTime=0.1", "False", "False"), + ("minstrel-ht-wifi-manager-example --standard=802.11ac --serverChannelWidth=80 --clientChannelWidth=80 --serverShortGuardInterval=1 --clientShortGuardInterval=1 --serverNss=4 --clientNss=4 --stepTime=0.1", "False", "False"), + ("minstrel-ht-wifi-manager-example --standard=802.11ac --serverChannelWidth=80 --clientChannelWidth=80 --serverShortGuardInterval=0 --clientShortGuardInterval=0 --serverNss=4 --clientNss=4 --stepTime=0.1", "False", "False"), + ("minstrel-ht-wifi-manager-example --standard=802.11ac --serverChannelWidth=80 --clientChannelWidth=80 --serverShortGuardInterval=1 --clientShortGuardInterval=1 --serverNss=4 --clientNss=4 --stepTime=0.1", "False", "False"), + ("minstrel-ht-wifi-manager-example --standard=802.11ac --serverChannelWidth=160 --clientChannelWidth=160 --serverShortGuardInterval=0 --clientShortGuardInterval=0 --serverNss=4 --clientNss=4 --stepTime=0.1", "False", "False"), + ("minstrel-ht-wifi-manager-example --standard=802.11ac --serverChannelWidth=160 --clientChannelWidth=160 --serverShortGuardInterval=1 --clientShortGuardInterval=1 --serverNss=4 --clientNss=4 --stepTime=0.1", "False", "False"), + ("minstrel-ht-wifi-manager-example --standard=802.11ac --serverChannelWidth=160 --clientChannelWidth=160 --serverShortGuardInterval=0 --clientShortGuardInterval=0 --serverNss=4 --clientNss=4 --stepTime=0.1", "False", "False"), + ("minstrel-ht-wifi-manager-example --standard=802.11ac --serverChannelWidth=160 --clientChannelWidth=160 --serverShortGuardInterval=1 --clientShortGuardInterval=1 --serverNss=4 --clientNss=4 --stepTime=0.1", "True", "True"), + ("wifi-manager-example --wifiManager=Ideal --standard=802.11a --stepTime=0.1", "True", "True"), + ("wifi-manager-example --wifiManager=Ideal --standard=802.11b --serverChannelWidth=22 --clientChannelWidth=22 --stepTime=0.1", "True", "True"), + ("wifi-manager-example --wifiManager=Ideal --standard=802.11g --stepTime=0.1", "True", "True"), + ("wifi-manager-example --wifiManager=Ideal --standard=802.11-holland --stepTime=0.1", "True", "True"), + ("wifi-manager-example --wifiManager=Ideal --standard=802.11-10MHz --stepTime=0.1", "True", "True"), + ("wifi-manager-example --wifiManager=Ideal --standard=802.11-5MHz --stepTime=0.1", "True", "True"), + ("ideal-wifi-manager-example --standard=802.11n-5GHz --serverChannelWidth=20 --clientChannelWidth=20 --serverShortGuardInterval=0 --clientShortGuardInterval=0 --serverNss=1 --clientNss=1 --stepTime=0.1", "True", "True"), + ("ideal-wifi-manager-example --standard=802.11n-5GHz --serverChannelWidth=20 --clientChannelWidth=20 --serverShortGuardInterval=1 --clientShortGuardInterval=1 --serverNss=1 --clientNss=1 --stepTime=0.1", "True", "True"), + ("ideal-wifi-manager-example --standard=802.11n-5GHz --serverChannelWidth=40 --clientChannelWidth=40 --serverShortGuardInterval=0 --clientShortGuardInterval=0 --serverNss=1 --clientNss=1 --stepTime=0.1", "True", "True"), + ("ideal-wifi-manager-example --standard=802.11n-5GHz --serverChannelWidth=40 --clientChannelWidth=40 --serverShortGuardInterval=1 --clientShortGuardInterval=1 --serverNss=1 --clientNss=1 --stepTime=0.1", "True", "True"), + ("ideal-wifi-manager-example --standard=802.11n-5GHz --serverChannelWidth=20 --clientChannelWidth=20 --serverShortGuardInterval=0 --clientShortGuardInterval=0 --serverNss=2 --clientNss=2 --stepTime=0.1", "True", "True"), + ("ideal-wifi-manager-example --standard=802.11n-5GHz --serverChannelWidth=20 --clientChannelWidth=20 --serverShortGuardInterval=1 --clientShortGuardInterval=1 --serverNss=2 --clientNss=2 --stepTime=0.1", "False", "False"), + ("ideal-wifi-manager-example --standard=802.11n-5GHz --serverChannelWidth=40 --clientChannelWidth=40 --serverShortGuardInterval=0 --clientShortGuardInterval=0 --serverNss=2 --clientNss=2 --stepTime=0.1", "False", "False"), + ("ideal-wifi-manager-example --standard=802.11n-5GHz --serverChannelWidth=40 --clientChannelWidth=40 --serverShortGuardInterval=1 --clientShortGuardInterval=1 --serverNss=2 --clientNss=2 --stepTime=0.1", "False", "False"), + ("ideal-wifi-manager-example --standard=802.11n-5GHz --serverChannelWidth=20 --clientChannelWidth=20 --serverShortGuardInterval=0 --clientShortGuardInterval=0 --serverNss=3 --clientNss=3 --stepTime=0.1", "False", "False"), + ("ideal-wifi-manager-example --standard=802.11n-5GHz --serverChannelWidth=20 --clientChannelWidth=20 --serverShortGuardInterval=1 --clientShortGuardInterval=1 --serverNss=3 --clientNss=3 --stepTime=0.1", "False", "False"), + ("ideal-wifi-manager-example --standard=802.11n-5GHz --serverChannelWidth=40 --clientChannelWidth=40 --serverShortGuardInterval=0 --clientShortGuardInterval=0 --serverNss=3 --clientNss=3 --stepTime=0.1", "False", "False"), + ("ideal-wifi-manager-example --standard=802.11n-5GHz --serverChannelWidth=40 --clientChannelWidth=40 --serverShortGuardInterval=1 --clientShortGuardInterval=1 --serverNss=3 --clientNss=3 --stepTime=0.1", "False", "False"), + ("ideal-wifi-manager-example --standard=802.11n-5GHz --serverChannelWidth=20 --clientChannelWidth=20 --serverShortGuardInterval=0 --clientShortGuardInterval=0 --serverNss=4 --clientNss=4 --stepTime=0.1", "False", "False"), + ("ideal-wifi-manager-example --standard=802.11n-5GHz --serverChannelWidth=20 --clientChannelWidth=20 --serverShortGuardInterval=1 --clientShortGuardInterval=1 --serverNss=4 --clientNss=4 --stepTime=0.1", "False", "False"), + ("ideal-wifi-manager-example --standard=802.11n-5GHz --serverChannelWidth=40 --clientChannelWidth=40 --serverShortGuardInterval=0 --clientShortGuardInterval=0 --serverNss=4 --clientNss=4 --stepTime=0.1", "False", "False"), + ("ideal-wifi-manager-example --standard=802.11n-5GHz --serverChannelWidth=40 --clientChannelWidth=40 --serverShortGuardInterval=1 --clientShortGuardInterval=1 --serverNss=4 --clientNss=4 --stepTime=0.1", "True", "True"), + ("ideal-wifi-manager-example --standard=802.11n-2.4GHz --serverChannelWidth=20 --clientChannelWidth=20 --serverShortGuardInterval=0 --clientShortGuardInterval=0 --serverNss=1 --clientNss=1 --stepTime=0.1", "False", "False"), + ("ideal-wifi-manager-example --standard=802.11n-2.4GHz --serverChannelWidth=20 --clientChannelWidth=20 --serverShortGuardInterval=1 --clientShortGuardInterval=1 --serverNss=1 --clientNss=1 --stepTime=0.1", "False", "False"), + ("ideal-wifi-manager-example --standard=802.11n-2.4GHz --serverChannelWidth=40 --clientChannelWidth=40 --serverShortGuardInterval=0 --clientShortGuardInterval=0 --serverNss=1 --clientNss=1 --stepTime=0.1", "False", "False"), + ("ideal-wifi-manager-example --standard=802.11n-2.4GHz --serverChannelWidth=40 --clientChannelWidth=40 --serverShortGuardInterval=1 --clientShortGuardInterval=1 --serverNss=1 --clientNss=1 --stepTime=0.1", "False", "False"), + ("ideal-wifi-manager-example --standard=802.11n-2.4GHz --serverChannelWidth=20 --clientChannelWidth=20 --serverShortGuardInterval=0 --clientShortGuardInterval=0 --serverNss=2 --clientNss=2 --stepTime=0.1", "False", "False"), + ("ideal-wifi-manager-example --standard=802.11n-2.4GHz --serverChannelWidth=20 --clientChannelWidth=20 --serverShortGuardInterval=1 --clientShortGuardInterval=1 --serverNss=2 --clientNss=2 --stepTime=0.1", "False", "False"), + ("ideal-wifi-manager-example --standard=802.11n-2.4GHz --serverChannelWidth=40 --clientChannelWidth=40 --serverShortGuardInterval=0 --clientShortGuardInterval=0 --serverNss=2 --clientNss=2 --stepTime=0.1", "False", "False"), + ("ideal-wifi-manager-example --standard=802.11n-2.4GHz --serverChannelWidth=40 --clientChannelWidth=40 --serverShortGuardInterval=1 --clientShortGuardInterval=1 --serverNss=2 --clientNss=2 --stepTime=0.1", "False", "False"), + ("ideal-wifi-manager-example --standard=802.11n-2.4GHz --serverChannelWidth=20 --clientChannelWidth=20 --serverShortGuardInterval=0 --clientShortGuardInterval=0 --serverNss=3 --clientNss=3 --stepTime=0.1", "False", "False"), + ("ideal-wifi-manager-example --standard=802.11n-2.4GHz --serverChannelWidth=20 --clientChannelWidth=20 --serverShortGuardInterval=1 --clientShortGuardInterval=1 --serverNss=3 --clientNss=3 --stepTime=0.1", "False", "False"), + ("ideal-wifi-manager-example --standard=802.11n-2.4GHz --serverChannelWidth=40 --clientChannelWidth=40 --serverShortGuardInterval=0 --clientShortGuardInterval=0 --serverNss=3 --clientNss=3 --stepTime=0.1", "False", "False"), + ("ideal-wifi-manager-example --standard=802.11n-2.4GHz --serverChannelWidth=40 --clientChannelWidth=40 --serverShortGuardInterval=1 --clientShortGuardInterval=1 --serverNss=3 --clientNss=3 --stepTime=0.1", "False", "False"), + ("ideal-wifi-manager-example --standard=802.11n-2.4GHz --serverChannelWidth=20 --clientChannelWidth=20 --serverShortGuardInterval=0 --clientShortGuardInterval=0 --serverNss=4 --clientNss=4 --stepTime=0.1", "False", "False"), + ("ideal-wifi-manager-example --standard=802.11n-2.4GHz --serverChannelWidth=20 --clientChannelWidth=20 --serverShortGuardInterval=1 --clientShortGuardInterval=1 --serverNss=4 --clientNss=4 --stepTime=0.1", "False", "False"), + ("ideal-wifi-manager-example --standard=802.11n-2.4GHz --serverChannelWidth=40 --clientChannelWidth=40 --serverShortGuardInterval=0 --clientShortGuardInterval=0 --serverNss=4 --clientNss=4 --stepTime=0.1", "False", "False"), + ("ideal-wifi-manager-example --standard=802.11n-2.4GHz --serverChannelWidth=40 --clientChannelWidth=40 --serverShortGuardInterval=1 --clientShortGuardInterval=1 --serverNss=4 --clientNss=4 --stepTime=0.1", "True", "True"), + ("ideal-wifi-manager-example --standard=802.11ac --serverChannelWidth=20 --clientChannelWidth=20 --serverShortGuardInterval=0 --clientShortGuardInterval=0 --serverNss=1 --clientNss=1 --stepTime=0.1", "True", "True"), + ("ideal-wifi-manager-example --standard=802.11ac --serverChannelWidth=20 --clientChannelWidth=20 --serverShortGuardInterval=1 --clientShortGuardInterval=1 --serverNss=1 --clientNss=1 --stepTime=0.1", "True", "True"), + ("ideal-wifi-manager-example --standard=802.11ac --serverChannelWidth=40 --clientChannelWidth=40 --serverShortGuardInterval=0 --clientShortGuardInterval=0 --serverNss=1 --clientNss=1 --stepTime=0.1", "True", "True"), + ("ideal-wifi-manager-example --standard=802.11ac --serverChannelWidth=40 --clientChannelWidth=40 --serverShortGuardInterval=1 --clientShortGuardInterval=1 --serverNss=1 --clientNss=1 --stepTime=0.1", "True", "True"), + ("ideal-wifi-manager-example --standard=802.11ac --serverChannelWidth=80 --clientChannelWidth=80 --serverShortGuardInterval=0 --clientShortGuardInterval=0 --serverNss=1 --clientNss=1 --stepTime=0.1", "True", "True"), + ("ideal-wifi-manager-example --standard=802.11ac --serverChannelWidth=80 --clientChannelWidth=80 --serverShortGuardInterval=1 --clientShortGuardInterval=1 --serverNss=1 --clientNss=1 --stepTime=0.1", "True", "True"), + ("ideal-wifi-manager-example --standard=802.11ac --serverChannelWidth=80 --clientChannelWidth=80 --serverShortGuardInterval=0 --clientShortGuardInterval=0 --serverNss=1 --clientNss=1 --stepTime=0.1", "True", "True"), + ("ideal-wifi-manager-example --standard=802.11ac --serverChannelWidth=80 --clientChannelWidth=80 --serverShortGuardInterval=1 --clientShortGuardInterval=1 --serverNss=1 --clientNss=1 --stepTime=0.1", "True", "True"), + ("ideal-wifi-manager-example --standard=802.11ac --serverChannelWidth=160 --clientChannelWidth=160 --serverShortGuardInterval=0 --clientShortGuardInterval=0 --serverNss=1 --clientNss=1 --stepTime=0.1", "True", "True"), + ("ideal-wifi-manager-example --standard=802.11ac --serverChannelWidth=160 --clientChannelWidth=160 --serverShortGuardInterval=1 --clientShortGuardInterval=1 --serverNss=1 --clientNss=1 --stepTime=0.1", "True", "True"), + ("ideal-wifi-manager-example --standard=802.11ac --serverChannelWidth=160 --clientChannelWidth=160 --serverShortGuardInterval=0 --clientShortGuardInterval=0 --serverNss=1 --clientNss=1 --stepTime=0.1", "True", "True"), + ("ideal-wifi-manager-example --standard=802.11ac --serverChannelWidth=160 --clientChannelWidth=160 --serverShortGuardInterval=1 --clientShortGuardInterval=1 --serverNss=1 --clientNss=1 --stepTime=0.1", "True", "True"), + ("ideal-wifi-manager-example --standard=802.11ac --serverChannelWidth=20 --clientChannelWidth=20 --serverShortGuardInterval=0 --clientShortGuardInterval=0 --serverNss=2 --clientNss=2 --stepTime=0.1", "True", "True"), + ("ideal-wifi-manager-example --standard=802.11ac --serverChannelWidth=20 --clientChannelWidth=20 --serverShortGuardInterval=1 --clientShortGuardInterval=1 --serverNss=2 --clientNss=2 --stepTime=0.1", "False", "False"), + ("ideal-wifi-manager-example --standard=802.11ac --serverChannelWidth=40 --clientChannelWidth=40 --serverShortGuardInterval=0 --clientShortGuardInterval=0 --serverNss=2 --clientNss=2 --stepTime=0.1", "False", "False"), + ("ideal-wifi-manager-example --standard=802.11ac --serverChannelWidth=40 --clientChannelWidth=40 --serverShortGuardInterval=1 --clientShortGuardInterval=1 --serverNss=2 --clientNss=2 --stepTime=0.1", "False", "False"), + ("ideal-wifi-manager-example --standard=802.11ac --serverChannelWidth=80 --clientChannelWidth=80 --serverShortGuardInterval=0 --clientShortGuardInterval=0 --serverNss=2 --clientNss=2 --stepTime=0.1", "False", "False"), + ("ideal-wifi-manager-example --standard=802.11ac --serverChannelWidth=80 --clientChannelWidth=80 --serverShortGuardInterval=1 --clientShortGuardInterval=1 --serverNss=2 --clientNss=2 --stepTime=0.1", "False", "False"), + ("ideal-wifi-manager-example --standard=802.11ac --serverChannelWidth=80 --clientChannelWidth=80 --serverShortGuardInterval=0 --clientShortGuardInterval=0 --serverNss=2 --clientNss=2 --stepTime=0.1", "False", "False"), + ("ideal-wifi-manager-example --standard=802.11ac --serverChannelWidth=80 --clientChannelWidth=80 --serverShortGuardInterval=1 --clientShortGuardInterval=1 --serverNss=2 --clientNss=2 --stepTime=0.1", "False", "False"), + ("ideal-wifi-manager-example --standard=802.11ac --serverChannelWidth=160 --clientChannelWidth=160 --serverShortGuardInterval=0 --clientShortGuardInterval=0 --serverNss=2 --clientNss=2 --stepTime=0.1", "False", "False"), + ("ideal-wifi-manager-example --standard=802.11ac --serverChannelWidth=160 --clientChannelWidth=160 --serverShortGuardInterval=1 --clientShortGuardInterval=1 --serverNss=2 --clientNss=2 --stepTime=0.1", "False", "False"), + ("ideal-wifi-manager-example --standard=802.11ac --serverChannelWidth=160 --clientChannelWidth=160 --serverShortGuardInterval=0 --clientShortGuardInterval=0 --serverNss=2 --clientNss=2 --stepTime=0.1", "False", "False"), + ("ideal-wifi-manager-example --standard=802.11ac --serverChannelWidth=160 --clientChannelWidth=160 --serverShortGuardInterval=1 --clientShortGuardInterval=1 --serverNss=2 --clientNss=2 --stepTime=0.1", "False", "False"), + ("ideal-wifi-manager-example --standard=802.11ac --serverChannelWidth=20 --clientChannelWidth=20 --serverShortGuardInterval=0 --clientShortGuardInterval=0 --serverNss=3 --clientNss=3 --stepTime=0.1", "False", "False"), + ("ideal-wifi-manager-example --standard=802.11ac --serverChannelWidth=20 --clientChannelWidth=20 --serverShortGuardInterval=1 --clientShortGuardInterval=1 --serverNss=3 --clientNss=3 --stepTime=0.1", "False", "False"), + ("ideal-wifi-manager-example --standard=802.11ac --serverChannelWidth=40 --clientChannelWidth=40 --serverShortGuardInterval=0 --clientShortGuardInterval=0 --serverNss=3 --clientNss=3 --stepTime=0.1", "False", "False"), + ("ideal-wifi-manager-example --standard=802.11ac --serverChannelWidth=40 --clientChannelWidth=40 --serverShortGuardInterval=1 --clientShortGuardInterval=1 --serverNss=3 --clientNss=3 --stepTime=0.1", "False", "False"), + ("ideal-wifi-manager-example --standard=802.11ac --serverChannelWidth=80 --clientChannelWidth=80 --serverShortGuardInterval=0 --clientShortGuardInterval=0 --serverNss=3 --clientNss=3 --stepTime=0.1", "False", "False"), + ("ideal-wifi-manager-example --standard=802.11ac --serverChannelWidth=80 --clientChannelWidth=80 --serverShortGuardInterval=1 --clientShortGuardInterval=1 --serverNss=3 --clientNss=3 --stepTime=0.1", "False", "False"), + ("ideal-wifi-manager-example --standard=802.11ac --serverChannelWidth=80 --clientChannelWidth=80 --serverShortGuardInterval=0 --clientShortGuardInterval=0 --serverNss=3 --clientNss=3 --stepTime=0.1", "False", "False"), + ("ideal-wifi-manager-example --standard=802.11ac --serverChannelWidth=80 --clientChannelWidth=80 --serverShortGuardInterval=1 --clientShortGuardInterval=1 --serverNss=3 --clientNss=3 --stepTime=0.1", "False", "False"), + ("ideal-wifi-manager-example --standard=802.11ac --serverChannelWidth=160 --clientChannelWidth=160 --serverShortGuardInterval=0 --clientShortGuardInterval=0 --serverNss=3 --clientNss=3 --stepTime=0.1", "False", "False"), + ("ideal-wifi-manager-example --standard=802.11ac --serverChannelWidth=160 --clientChannelWidth=160 --serverShortGuardInterval=1 --clientShortGuardInterval=1 --serverNss=3 --clientNss=3 --stepTime=0.1", "False", "False"), + ("ideal-wifi-manager-example --standard=802.11ac --serverChannelWidth=160 --clientChannelWidth=160 --serverShortGuardInterval=0 --clientShortGuardInterval=0 --serverNss=3 --clientNss=3 --stepTime=0.1", "False", "False"), + ("ideal-wifi-manager-example --standard=802.11ac --serverChannelWidth=160 --clientChannelWidth=160 --serverShortGuardInterval=1 --clientShortGuardInterval=1 --serverNss=3 --clientNss=3 --stepTime=0.1", "False", "False"), + ("ideal-wifi-manager-example --standard=802.11ac --serverChannelWidth=20 --clientChannelWidth=20 --serverShortGuardInterval=0 --clientShortGuardInterval=0 --serverNss=4 --clientNss=4 --stepTime=0.1", "False", "False"), + ("ideal-wifi-manager-example --standard=802.11ac --serverChannelWidth=20 --clientChannelWidth=20 --serverShortGuardInterval=1 --clientShortGuardInterval=1 --serverNss=4 --clientNss=4 --stepTime=0.1", "False", "False"), + ("ideal-wifi-manager-example --standard=802.11ac --serverChannelWidth=40 --clientChannelWidth=40 --serverShortGuardInterval=0 --clientShortGuardInterval=0 --serverNss=4 --clientNss=4 --stepTime=0.1", "False", "False"), + ("ideal-wifi-manager-example --standard=802.11ac --serverChannelWidth=40 --clientChannelWidth=40 --serverShortGuardInterval=1 --clientShortGuardInterval=1 --serverNss=4 --clientNss=4 --stepTime=0.1", "False", "False"), + ("ideal-wifi-manager-example --standard=802.11ac --serverChannelWidth=80 --clientChannelWidth=80 --serverShortGuardInterval=0 --clientShortGuardInterval=0 --serverNss=4 --clientNss=4 --stepTime=0.1", "False", "False"), + ("ideal-wifi-manager-example --standard=802.11ac --serverChannelWidth=80 --clientChannelWidth=80 --serverShortGuardInterval=1 --clientShortGuardInterval=1 --serverNss=4 --clientNss=4 --stepTime=0.1", "False", "False"), + ("ideal-wifi-manager-example --standard=802.11ac --serverChannelWidth=80 --clientChannelWidth=80 --serverShortGuardInterval=0 --clientShortGuardInterval=0 --serverNss=4 --clientNss=4 --stepTime=0.1", "False", "False"), + ("ideal-wifi-manager-example --standard=802.11ac --serverChannelWidth=80 --clientChannelWidth=80 --serverShortGuardInterval=1 --clientShortGuardInterval=1 --serverNss=4 --clientNss=4 --stepTime=0.1", "False", "False"), + ("ideal-wifi-manager-example --standard=802.11ac --serverChannelWidth=160 --clientChannelWidth=160 --serverShortGuardInterval=0 --clientShortGuardInterval=0 --serverNss=4 --clientNss=4 --stepTime=0.1", "False", "False"), + ("ideal-wifi-manager-example --standard=802.11ac --serverChannelWidth=160 --clientChannelWidth=160 --serverShortGuardInterval=1 --clientShortGuardInterval=1 --serverNss=4 --clientNss=4 --stepTime=0.1", "False", "False"), + ("ideal-wifi-manager-example --standard=802.11ac --serverChannelWidth=160 --clientChannelWidth=160 --serverShortGuardInterval=0 --clientShortGuardInterval=0 --serverNss=4 --clientNss=4 --stepTime=0.1", "False", "False"), + ("ideal-wifi-manager-example --standard=802.11ac --serverChannelWidth=160 --clientChannelWidth=160 --serverShortGuardInterval=1 --clientShortGuardInterval=1 --serverNss=4 --clientNss=4 --stepTime=0.1", "True", "True"), ] # A list of Python examples to run in order to ensure that they remain