wifi: Add wifi-manager-example to test all wifi managers

This commit is contained in:
Sébastien Deronne
2017-02-14 08:17:42 +01:00
parent c94750ebb6
commit 4556ae07de
21 changed files with 837 additions and 949 deletions

View File

@@ -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 <tomhend@u.washington.edu>
*/
// 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<const Packet> 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<FixedRssLossModel> 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 <StandardInfo> 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<StandardInfo>::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<uint32_t> (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<Node> clientNode = CreateObject<Node> ();
Ptr<Node> serverNode = CreateObject<Node> ();
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<YansWifiChannel> wifiChannel = CreateObject<YansWifiChannel> ();
Ptr<ConstantSpeedPropagationDelayModel> delayModel = CreateObject<ConstantSpeedPropagationDelayModel> ();
wifiChannel->SetPropagationDelayModel (delayModel);
Ptr<FixedRssLossModel> rssLossModel = CreateObject<FixedRssLossModel> ();
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<ListPositionAllocator> positionAlloc = CreateObject<ListPositionAllocator> ();
//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<NetDevice> ndClient = clientDevice.Get (0);
Ptr<NetDevice> ndServer = serverDevice.Get (0);
Ptr<WifiNetDevice> wndClient = ndClient->GetObject<WifiNetDevice> ();
Ptr<WifiNetDevice> wndServer = ndServer->GetObject<WifiNetDevice> ();
Ptr<WifiPhy> wifiPhyPtrClient = wndClient->GetPhy ();
Ptr<WifiPhy> 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<PacketSocketClient> client = CreateObject<PacketSocketClient> ();
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<double> (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<PacketSocketServer> server = CreateObject<PacketSocketServer> ();
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;
}

View File

@@ -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 <tomhend@u.washington.edu>
* Matías Richart <mrichart@fing.edu.uy>
*/
// 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<const Packet> 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<FixedRssLossModel> 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 <StandardInfo> 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<StandardInfo>::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<Node> clientNode = CreateObject<Node> ();
Ptr<Node> serverNode = CreateObject<Node> ();
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<YansWifiChannel> wifiChannel = CreateObject<YansWifiChannel> ();
Ptr<ConstantSpeedPropagationDelayModel> delayModel = CreateObject<ConstantSpeedPropagationDelayModel> ();
wifiChannel->SetPropagationDelayModel (delayModel);
Ptr<FixedRssLossModel> rssLossModel = CreateObject<FixedRssLossModel> ();
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<ListPositionAllocator> positionAlloc = CreateObject<ListPositionAllocator> ();
//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<NetDevice> ndClient = clientDevice.Get (0);
Ptr<WifiNetDevice> wndClient = ndClient->GetObject<WifiNetDevice> ();
Ptr<WifiPhy> 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<NetDevice> ndServer = serverDevice.Get (0);
Ptr<WifiNetDevice> wndServer = ndServer->GetObject<WifiNetDevice> ();
Ptr<WifiPhy> 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<PacketSocketClient> client = CreateObject<PacketSocketClient> ();
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<PacketSocketServer> server = CreateObject<PacketSocketServer> ();
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;
}

View File

@@ -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 <tomhend@u.washington.edu>
* Matías Richart <mrichart@fing.edu.uy>
* Sébastien Deronne <sebastien.deronne@gmail.com>
*/
// 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<const Packet> 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<FixedRssLossModel> 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 <StandardInfo> serverStandards;
std::vector <StandardInfo> 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<StandardInfo>::size_type i = 0; i != serverStandards.size (); i++)
{
if (standard == serverStandards[i].m_name)
{
serverSelectedStandard = serverStandards[i];
}
}
for (std::vector<StandardInfo>::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<Node> clientNode = CreateObject<Node> ();
Ptr<Node> serverNode = CreateObject<Node> ();
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<YansWifiChannel> wifiChannel = CreateObject<YansWifiChannel> ();
Ptr<ConstantSpeedPropagationDelayModel> delayModel = CreateObject<ConstantSpeedPropagationDelayModel> ();
wifiChannel->SetPropagationDelayModel (delayModel);
Ptr<FixedRssLossModel> rssLossModel = CreateObject<FixedRssLossModel> ();
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<ListPositionAllocator> positionAlloc = CreateObject<ListPositionAllocator> ();
//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<NetDevice> ndClient = clientDevice.Get (0);
Ptr<NetDevice> ndServer = serverDevice.Get (0);
Ptr<WifiNetDevice> wndClient = ndClient->GetObject<WifiNetDevice> ();
Ptr<WifiNetDevice> wndServer = ndServer->GetObject<WifiNetDevice> ();
Ptr<WifiPhy> wifiPhyPtrClient = wndClient->GetPhy ();
Ptr<WifiPhy> 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<PacketSocketClient> client = CreateObject<PacketSocketClient> ();
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<double> (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<PacketSocketServer> server = CreateObject<PacketSocketServer> ();
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;
}

View File

@@ -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'

View File

@@ -81,11 +81,17 @@ AarfWifiManager::GetTypeId (void)
UintegerValue (10),
MakeUintegerAccessor (&AarfWifiManager::m_minSuccessThreshold),
MakeUintegerChecker<uint32_t> ())
.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);
}

View File

@@ -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<uint64_t> m_currentRate; //!< Trace rate changes
};
} //namespace ns3

View File

@@ -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);
}

View File

@@ -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<uint64_t> m_currentRate; //!< Trace rate changes
};
} //namespace ns3

View File

@@ -84,11 +84,17 @@ AmrrWifiManager::GetTypeId (void)
UintegerValue (1),
MakeUintegerAccessor (&AmrrWifiManager::m_minSuccessThreshold),
MakeUintegerChecker<uint32_t> ())
.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);
}

View File

@@ -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<uint64_t> m_currentRate; //!< Trace rate changes
};
} //namespace ns3

View File

@@ -64,11 +64,17 @@ ArfWifiManager::GetTypeId (void)
UintegerValue (10),
MakeUintegerAccessor (&ArfWifiManager::m_successThreshold),
MakeUintegerChecker<uint32_t> ())
.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);
}

View File

@@ -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<uint64_t> m_currentRate; //!< Trace rate changes
};
} //namespace ns3

View File

@@ -71,12 +71,17 @@ CaraWifiManager::GetTypeId (void)
UintegerValue (15),
MakeUintegerAccessor (&CaraWifiManager::m_timerTimeout),
MakeUintegerChecker<uint32_t> ())
.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);
}

View File

@@ -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<uint64_t> m_currentRate; //!< Trace rate changes
};
} //namespace ns3

View File

@@ -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<UniformRandomVariable> ();
@@ -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);
}

View File

@@ -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 <fstream>
@@ -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<UniformRandomVariable> m_uniformRandomVariable;
TracedValue<uint64_t> m_currentRate; //!< Trace rate changes
};
} //namespace ns3

View File

@@ -69,11 +69,17 @@ OnoeWifiManager::GetTypeId (void)
UintegerValue (10),
MakeUintegerAccessor (&OnoeWifiManager::m_addCreditThreshold),
MakeUintegerChecker<uint32_t> ())
.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);
}

View File

@@ -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<uint64_t> m_currentRate; //!< Trace rate changes
};
} //namespace ns3

View File

@@ -180,12 +180,18 @@ RraaWifiManager::GetTypeId (void)
DoubleValue (0.3932),
MakeDoubleAccessor (&RraaWifiManager::m_pmtlfor9),
MakeDoubleChecker<double> ())
.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);
}

View File

@@ -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<uint64_t> m_currentRate; //!< Trace rate changes
};
} //namespace ns3

View File

@@ -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