wifi: Remove HT Greenfield support
This commit is contained in:
@@ -68,6 +68,7 @@ us a note on ns-developers mailing list.</p>
|
||||
<ul>
|
||||
<li>The default <b>TCP congestion control</b> has been changed from NewReno to CUBIC.</li>
|
||||
<li>The 802.11a-like PHY configuration known as <b>Holland</b> has been removed from the wifi module. It was added in the 2005 timeframe for Wi-Fi rate control research but hasn't been used for quite some time.</li>
|
||||
<li>Support for <b>Greenfield mode</b> (aka <b>HT_GF</b>) has been dropped from wifi.</li>
|
||||
</ul>
|
||||
|
||||
<hr>
|
||||
|
||||
@@ -28,6 +28,7 @@ New user-visible features
|
||||
-------------------------
|
||||
- (sixlowpan) Added support for stateful (i.e., context-based) RFC6282 compression.
|
||||
- (wifi) Holland PHY configuration has been removed from the model
|
||||
- (wifi) HT Greenfield (HT_GF) preamble support has been removed from the model
|
||||
|
||||
Bugs fixed
|
||||
----------
|
||||
|
||||
@@ -45,9 +45,7 @@
|
||||
// - whether short PPDU format is supported by the 802.11b station;
|
||||
// - whether short slot time is supported by both the 802.11g station and the AP.
|
||||
//
|
||||
// The example then compares HT only and mixed HT/non-HT cases with various configurations depending on the following parameters:
|
||||
// - whether HT GF is supported by the AP;
|
||||
// - whether HT GF is supported by all HT stations;
|
||||
// The example then compares HT only and mixed HT/non-HT cases.
|
||||
//
|
||||
// The output results show that the presence of an 802.11b station strongly affects 802.11g performance.
|
||||
// Protection mechanisms ensure that the NAV value of 802.11b stations is set correctly in case of 802.11g transmissions.
|
||||
@@ -56,8 +54,6 @@
|
||||
// mechanism for access points). Since short slot time is disabled once an 802.11b station enters the network, benefits from
|
||||
// short slot time are only observed in a g only configuration.
|
||||
//
|
||||
// HT and mixed-HT results show that HT GF permits to slightly increase performance when all HT stations support GF mode
|
||||
//
|
||||
// The user can also select the payload size and can choose either an UDP or a TCP connection.
|
||||
// Example: ./waf --run "wifi-mixed-network --isUdp=1"
|
||||
|
||||
@@ -73,15 +69,12 @@ struct Parameters
|
||||
bool enableShortSlotTime;
|
||||
bool enableShortPhyPreamble;
|
||||
WifiStandard apType;
|
||||
bool apSupportsGreenfield;
|
||||
uint32_t nWifiB;
|
||||
bool bHasTraffic;
|
||||
uint32_t nWifiG;
|
||||
bool gHasTraffic;
|
||||
uint32_t nWifiNNonGreenfield;
|
||||
bool nNonGreenfieldHasTraffic;
|
||||
uint32_t nWifiNGreenfield;
|
||||
bool nGreenfieldHasTraffic;
|
||||
uint32_t nWifiN;
|
||||
bool nHasTraffic;
|
||||
bool isUdp;
|
||||
uint32_t payloadSize;
|
||||
double simulationTime;
|
||||
@@ -117,15 +110,12 @@ Experiment::Run (Parameters params)
|
||||
<< "\n\t enableShortSlotTime=" << params.enableShortSlotTime
|
||||
<< "\n\t enableShortPhyPreamble=" << params.enableShortPhyPreamble
|
||||
<< "\n\t apType=" << apTypeString
|
||||
<< "\n\t apSupportsGreenfield=" << params.apSupportsGreenfield
|
||||
<< "\n\t nWifiB=" << params.nWifiB
|
||||
<< "\n\t bHasTraffic=" << params.bHasTraffic
|
||||
<< "\n\t nWifiG=" << params.nWifiG
|
||||
<< "\n\t gHasTraffic=" << params.gHasTraffic
|
||||
<< "\n\t nWifiNNonGreenfield=" << params.nWifiNNonGreenfield
|
||||
<< "\n\t nNonGreenfieldHasTraffic=" << params.nNonGreenfieldHasTraffic
|
||||
<< "\n\t nWifiNGreenfield=" << params.nWifiNGreenfield
|
||||
<< "\n\t nGreenfieldHasTraffic=" << params.nGreenfieldHasTraffic
|
||||
<< "\n\t nWifiN=" << params.nWifiN
|
||||
<< "\n\t nHasTraffic=" << params.nHasTraffic
|
||||
<< std::endl;
|
||||
|
||||
Config::SetDefault ("ns3::WifiRemoteStationManager::ErpProtectionMode", StringValue (params.erpProtectionMode));
|
||||
@@ -133,8 +123,7 @@ Experiment::Run (Parameters params)
|
||||
double throughput = 0;
|
||||
uint32_t nWifiB = params.nWifiB;
|
||||
uint32_t nWifiG = params.nWifiG;
|
||||
uint32_t nWifiNNGF = params.nWifiNNonGreenfield;
|
||||
uint32_t nWifiNGF = params.nWifiNGreenfield;
|
||||
uint32_t nWifiN = params.nWifiN;
|
||||
double simulationTime = params.simulationTime;
|
||||
uint32_t payloadSize = params.payloadSize;
|
||||
|
||||
@@ -142,10 +131,8 @@ Experiment::Run (Parameters params)
|
||||
wifiBStaNodes.Create (nWifiB);
|
||||
NodeContainer wifiGStaNodes;
|
||||
wifiGStaNodes.Create (nWifiG);
|
||||
NodeContainer wifiNNGFStaNodes;
|
||||
wifiNNGFStaNodes.Create (nWifiNNGF);
|
||||
NodeContainer wifiNGFStaNodes;
|
||||
wifiNGFStaNodes.Create (nWifiNGF);
|
||||
NodeContainer wifiNStaNodes;
|
||||
wifiNStaNodes.Create (nWifiN);
|
||||
NodeContainer wifiApNode;
|
||||
wifiApNode.Create (1);
|
||||
|
||||
@@ -182,13 +169,12 @@ Experiment::Run (Parameters params)
|
||||
|
||||
// 802.11b/g/n STA
|
||||
wifi.SetStandard (WIFI_STANDARD_80211n_2_4GHZ);
|
||||
NetDeviceContainer nNGFStaDevice, nGFStaDevice;
|
||||
NetDeviceContainer nStaDevice;
|
||||
mac.SetType ("ns3::StaWifiMac",
|
||||
"Ssid", SsidValue (ssid),
|
||||
"BE_BlockAckThreshold", UintegerValue (2),
|
||||
"ShortSlotTimeSupported", BooleanValue (params.enableShortSlotTime));
|
||||
nNGFStaDevice = wifi.Install (phy, mac, wifiNNGFStaNodes);
|
||||
nGFStaDevice = wifi.Install (phy, mac, wifiNGFStaNodes);
|
||||
nStaDevice = wifi.Install (phy, mac, wifiNStaNodes);
|
||||
|
||||
// AP
|
||||
NetDeviceContainer apDevice;
|
||||
@@ -206,31 +192,16 @@ Experiment::Run (Parameters params)
|
||||
{
|
||||
Ptr<NetDevice> dev = wifiApNode.Get (0)->GetDevice (0);
|
||||
Ptr<WifiNetDevice> wifi_dev = DynamicCast<WifiNetDevice> (dev);
|
||||
Ptr<HtConfiguration> htConfiguration = wifi_dev->GetHtConfiguration ();
|
||||
htConfiguration->SetGreenfieldSupported (params.apSupportsGreenfield);
|
||||
Ptr<WifiMac> wifi_mac = wifi_dev->GetMac ();
|
||||
PointerValue ptr;
|
||||
wifi_mac->GetAttribute ("BE_Txop", ptr);
|
||||
Ptr<QosTxop> edca = ptr.Get<QosTxop> ();
|
||||
edca->SetTxopLimit (MicroSeconds (3008));
|
||||
}
|
||||
if (nWifiNNGF > 0)
|
||||
if (nWifiN > 0)
|
||||
{
|
||||
Ptr<NetDevice> dev = wifiNNGFStaNodes.Get (0)->GetDevice (0);
|
||||
Ptr<NetDevice> dev = wifiNStaNodes.Get (0)->GetDevice (0);
|
||||
Ptr<WifiNetDevice> wifi_dev = DynamicCast<WifiNetDevice> (dev);
|
||||
Ptr<HtConfiguration> htConfiguration = wifi_dev->GetHtConfiguration ();
|
||||
Ptr<WifiMac> wifi_mac = wifi_dev->GetMac ();
|
||||
PointerValue ptr;
|
||||
wifi_mac->GetAttribute ("BE_Txop", ptr);
|
||||
Ptr<QosTxop> edca = ptr.Get<QosTxop> ();
|
||||
edca->SetTxopLimit (MicroSeconds (3008));
|
||||
}
|
||||
if (nWifiNGF > 0)
|
||||
{
|
||||
Ptr<NetDevice> dev = wifiNGFStaNodes.Get (0)->GetDevice (0);
|
||||
Ptr<WifiNetDevice> wifi_dev = DynamicCast<WifiNetDevice> (dev);
|
||||
Ptr<HtConfiguration> htConfiguration = wifi_dev->GetHtConfiguration ();
|
||||
htConfiguration->SetGreenfieldSupported (true);
|
||||
Ptr<WifiMac> wifi_mac = wifi_dev->GetMac ();
|
||||
PointerValue ptr;
|
||||
wifi_mac->GetAttribute ("BE_Txop", ptr);
|
||||
@@ -253,11 +224,7 @@ Experiment::Run (Parameters params)
|
||||
{
|
||||
positionAlloc->Add (Vector (0.0, 5.0, 0.0));
|
||||
}
|
||||
for (uint32_t i = 0; i < nWifiNNGF; i++)
|
||||
{
|
||||
positionAlloc->Add (Vector (0.0, 0.0, 5.0));
|
||||
}
|
||||
for (uint32_t i = 0; i < nWifiNGF; i++)
|
||||
for (uint32_t i = 0; i < nWifiN; i++)
|
||||
{
|
||||
positionAlloc->Add (Vector (0.0, 0.0, 5.0));
|
||||
}
|
||||
@@ -267,16 +234,14 @@ Experiment::Run (Parameters params)
|
||||
mobility.Install (wifiApNode);
|
||||
mobility.Install (wifiBStaNodes);
|
||||
mobility.Install (wifiGStaNodes);
|
||||
mobility.Install (wifiNNGFStaNodes);
|
||||
mobility.Install (wifiNGFStaNodes);
|
||||
mobility.Install (wifiNStaNodes);
|
||||
|
||||
// Internet stack
|
||||
InternetStackHelper stack;
|
||||
stack.Install (wifiApNode);
|
||||
stack.Install (wifiBStaNodes);
|
||||
stack.Install (wifiGStaNodes);
|
||||
stack.Install (wifiNNGFStaNodes);
|
||||
stack.Install (wifiNGFStaNodes);
|
||||
stack.Install (wifiNStaNodes);
|
||||
|
||||
Ipv4AddressHelper address;
|
||||
address.SetBase ("192.168.1.0", "255.255.255.0");
|
||||
@@ -284,10 +249,8 @@ Experiment::Run (Parameters params)
|
||||
bStaInterface = address.Assign (bStaDevice);
|
||||
Ipv4InterfaceContainer gStaInterface;
|
||||
gStaInterface = address.Assign (gStaDevice);
|
||||
Ipv4InterfaceContainer nNGFStaInterface;
|
||||
nNGFStaInterface = address.Assign (nNGFStaDevice);
|
||||
Ipv4InterfaceContainer nGFStaInterface;
|
||||
nGFStaInterface = address.Assign (nGFStaDevice);
|
||||
Ipv4InterfaceContainer nStaInterface;
|
||||
nStaInterface = address.Assign (nStaDevice);
|
||||
Ipv4InterfaceContainer ApInterface;
|
||||
ApInterface = address.Assign (apDevice);
|
||||
|
||||
@@ -314,13 +277,9 @@ Experiment::Run (Parameters params)
|
||||
{
|
||||
clientApps.Add (client.Install (wifiGStaNodes));
|
||||
}
|
||||
if (params.nNonGreenfieldHasTraffic)
|
||||
if (params.nHasTraffic)
|
||||
{
|
||||
clientApps.Add (client.Install (wifiNNGFStaNodes));
|
||||
}
|
||||
if (params.nGreenfieldHasTraffic)
|
||||
{
|
||||
clientApps.Add (client.Install (wifiNGFStaNodes));
|
||||
clientApps.Add (client.Install (wifiNStaNodes));
|
||||
}
|
||||
clientApps.Start (Seconds (1.0));
|
||||
clientApps.Stop (Seconds (simulationTime + 1));
|
||||
@@ -359,13 +318,9 @@ Experiment::Run (Parameters params)
|
||||
{
|
||||
clientApps.Add (onoff.Install (wifiGStaNodes));
|
||||
}
|
||||
if (params.nNonGreenfieldHasTraffic)
|
||||
if (params.nHasTraffic)
|
||||
{
|
||||
clientApps.Add (onoff.Install (wifiNNGFStaNodes));
|
||||
}
|
||||
if (params.nGreenfieldHasTraffic)
|
||||
{
|
||||
clientApps.Add (onoff.Install (wifiNGFStaNodes));
|
||||
clientApps.Add (onoff.Install (wifiNStaNodes));
|
||||
}
|
||||
clientApps.Start (Seconds (1.0));
|
||||
clientApps.Stop (Seconds (simulationTime + 1));
|
||||
@@ -389,15 +344,12 @@ int main (int argc, char *argv[])
|
||||
params.enableShortSlotTime = false;
|
||||
params.enableShortPhyPreamble = false;
|
||||
params.apType = WIFI_STANDARD_80211g;
|
||||
params.apSupportsGreenfield = false;
|
||||
params.nWifiB = 0;
|
||||
params.bHasTraffic = false;
|
||||
params.nWifiG = 1;
|
||||
params.gHasTraffic = true;
|
||||
params.nWifiNNonGreenfield = 0;
|
||||
params.nNonGreenfieldHasTraffic = false;
|
||||
params.nWifiNGreenfield = 0;
|
||||
params.nGreenfieldHasTraffic = false;
|
||||
params.nWifiN = 0;
|
||||
params.nHasTraffic = false;
|
||||
params.isUdp = true;
|
||||
params.payloadSize = 1472; //bytes
|
||||
params.simulationTime = 10; //seconds
|
||||
@@ -516,130 +468,17 @@ int main (int argc, char *argv[])
|
||||
}
|
||||
std::cout << "Throughput: " << throughput << " Mbit/s \n" << std::endl;
|
||||
|
||||
params.testName = "HT GF not supported";
|
||||
params.enableErpProtection = false;
|
||||
params.enableShortSlotTime = false;
|
||||
params.enableShortPhyPreamble = false;
|
||||
params.apType = WIFI_STANDARD_80211n_2_4GHZ;
|
||||
params.apSupportsGreenfield = false;
|
||||
params.nWifiB = 0;
|
||||
params.bHasTraffic = false;
|
||||
params.nWifiG = 0;
|
||||
params.gHasTraffic = false;
|
||||
params.nWifiNNonGreenfield = 1;
|
||||
params.nNonGreenfieldHasTraffic = true;
|
||||
params.nWifiNGreenfield = 0;
|
||||
params.nGreenfieldHasTraffic = false;
|
||||
throughput = experiment.Run (params);
|
||||
if (verifyResults && (throughput < 43 || throughput > 44))
|
||||
{
|
||||
NS_LOG_ERROR ("Obtained throughput " << throughput << " is not in the expected boundaries!");
|
||||
exit (1);
|
||||
}
|
||||
std::cout << "Throughput: " << throughput << " Mbit/s \n" << std::endl;
|
||||
|
||||
params.testName = "HT only with GF used";
|
||||
params.enableErpProtection = false;
|
||||
params.enableShortSlotTime = false;
|
||||
params.enableShortPhyPreamble = false;
|
||||
params.apType = WIFI_STANDARD_80211n_2_4GHZ;
|
||||
params.apSupportsGreenfield = true;
|
||||
params.nWifiB = 0;
|
||||
params.bHasTraffic = false;
|
||||
params.nWifiG = 0;
|
||||
params.gHasTraffic = false;
|
||||
params.nWifiNNonGreenfield = 0;
|
||||
params.nNonGreenfieldHasTraffic = false;
|
||||
params.nWifiNGreenfield = 1;
|
||||
params.nGreenfieldHasTraffic = true;
|
||||
throughput = experiment.Run (params);
|
||||
if (verifyResults && (throughput < 44 || throughput > 45))
|
||||
{
|
||||
NS_LOG_ERROR ("Obtained throughput " << throughput << " is not in the expected boundaries!");
|
||||
exit (1);
|
||||
}
|
||||
std::cout << "Throughput: " << throughput << " Mbit/s \n" << std::endl;
|
||||
|
||||
params.testName = "HT only with GF allowed but disabled by protection";
|
||||
params.enableErpProtection = false;
|
||||
params.enableShortSlotTime = false;
|
||||
params.enableShortPhyPreamble = false;
|
||||
params.apType = WIFI_STANDARD_80211n_2_4GHZ;
|
||||
params.apSupportsGreenfield = true;
|
||||
params.nWifiB = 0;
|
||||
params.bHasTraffic = false;
|
||||
params.nWifiG = 0;
|
||||
params.gHasTraffic = false;
|
||||
params.nWifiNNonGreenfield = 1;
|
||||
params.nNonGreenfieldHasTraffic = false;
|
||||
params.nWifiNGreenfield = 1;
|
||||
params.nGreenfieldHasTraffic = true;
|
||||
throughput = experiment.Run (params);
|
||||
if (verifyResults && (throughput < 43 || throughput > 44))
|
||||
{
|
||||
NS_LOG_ERROR ("Obtained throughput " << throughput << " is not in the expected boundaries!");
|
||||
exit (1);
|
||||
}
|
||||
std::cout << "Throughput: " << throughput << " Mbit/s \n" << std::endl;
|
||||
|
||||
params.testName = "HT only with GF not supported by the receiver";
|
||||
params.enableErpProtection = false;
|
||||
params.enableShortSlotTime = false;
|
||||
params.enableShortPhyPreamble = false;
|
||||
params.apType = WIFI_STANDARD_80211n_2_4GHZ;
|
||||
params.apSupportsGreenfield = false;
|
||||
params.nWifiB = 0;
|
||||
params.bHasTraffic = false;
|
||||
params.nWifiG = 0;
|
||||
params.gHasTraffic = false;
|
||||
params.nWifiNNonGreenfield = 0;
|
||||
params.nNonGreenfieldHasTraffic = false;
|
||||
params.nWifiNGreenfield = 1;
|
||||
params.nGreenfieldHasTraffic = true;
|
||||
throughput = experiment.Run (params);
|
||||
if (verifyResults && (throughput < 43 || throughput > 44))
|
||||
{
|
||||
NS_LOG_ERROR ("Obtained throughput " << throughput << " is not in the expected boundaries!");
|
||||
exit (1);
|
||||
}
|
||||
std::cout << "Throughput: " << throughput << " Mbit/s \n" << std::endl;
|
||||
|
||||
params.testName = "Mixed HT/non-HT with GF enabled";
|
||||
params.enableErpProtection = false;
|
||||
params.enableShortSlotTime = false;
|
||||
params.enableShortPhyPreamble = false;
|
||||
params.apType = WIFI_STANDARD_80211n_2_4GHZ;
|
||||
params.apSupportsGreenfield = true;
|
||||
params.nWifiB = 0;
|
||||
params.bHasTraffic = false;
|
||||
params.nWifiG = 1;
|
||||
params.gHasTraffic = false;
|
||||
params.nWifiNNonGreenfield = 0;
|
||||
params.nNonGreenfieldHasTraffic = false;
|
||||
params.nWifiNGreenfield = 1;
|
||||
params.nGreenfieldHasTraffic = true;
|
||||
throughput = experiment.Run (params);
|
||||
if (verifyResults && (throughput < 44 || throughput > 45))
|
||||
{
|
||||
NS_LOG_ERROR ("Obtained throughput " << throughput << " is not in the expected boundaries!");
|
||||
exit (1);
|
||||
}
|
||||
std::cout << "Throughput: " << throughput << " Mbit/s \n" << std::endl;
|
||||
|
||||
params.testName = "HT only";
|
||||
params.enableErpProtection = false;
|
||||
params.enableShortSlotTime = false;
|
||||
params.enableShortPhyPreamble = false;
|
||||
params.apType = WIFI_STANDARD_80211n_2_4GHZ;
|
||||
params.apSupportsGreenfield = false;
|
||||
params.nWifiB = 0;
|
||||
params.bHasTraffic = false;
|
||||
params.nWifiG = 0;
|
||||
params.gHasTraffic = false;
|
||||
params.nWifiNNonGreenfield = 1;
|
||||
params.nNonGreenfieldHasTraffic = true;
|
||||
params.nWifiNGreenfield = 0;
|
||||
params.nGreenfieldHasTraffic = false;
|
||||
params.nWifiN = 1;
|
||||
params.nHasTraffic = true;
|
||||
throughput = experiment.Run (params);
|
||||
if (verifyResults && (throughput < 44 || throughput > 45))
|
||||
{
|
||||
@@ -653,15 +492,12 @@ int main (int argc, char *argv[])
|
||||
params.enableShortSlotTime = false;
|
||||
params.enableShortPhyPreamble = false;
|
||||
params.apType = WIFI_STANDARD_80211n_2_4GHZ;
|
||||
params.apSupportsGreenfield = false;
|
||||
params.nWifiB = 0;
|
||||
params.bHasTraffic = false;
|
||||
params.nWifiG = 1;
|
||||
params.gHasTraffic = false;
|
||||
params.nWifiNNonGreenfield = 1;
|
||||
params.nNonGreenfieldHasTraffic = true;
|
||||
params.nWifiNGreenfield = 0;
|
||||
params.nGreenfieldHasTraffic = false;
|
||||
params.nWifiN = 1;
|
||||
params.nHasTraffic = true;
|
||||
throughput = experiment.Run (params);
|
||||
if (verifyResults && (throughput < 44 || throughput > 45))
|
||||
{
|
||||
|
||||
@@ -789,10 +789,6 @@ The following line of code enables the support of a short guard interval for all
|
||||
|
||||
Config::Set ("/NodeList/*/DeviceList/*/$ns3::WifiNetDevice/HtConfiguration/ShortGuardIntervalSupported", BooleanValue (true));
|
||||
|
||||
Furthermore, 802.11n provides an optional mode (Greenfield mode) to reduce preamble durations and which is only compatible with 802.11n devices. This mode is enabled as follows::
|
||||
|
||||
htConfiguration->SetGreenfieldSupported (true);
|
||||
|
||||
VHT configuration
|
||||
=================
|
||||
|
||||
|
||||
@@ -393,10 +393,6 @@ int main (int argc, char *argv[])
|
||||
{
|
||||
input.preamble = WIFI_PREAMBLE_HT_MF;
|
||||
}
|
||||
else if (str_preamble == "WIFI_PREAMBLE_HT_GF" && (input.standard == WIFI_PHY_STANDARD_80211n))
|
||||
{
|
||||
input.preamble = WIFI_PREAMBLE_HT_GF;
|
||||
}
|
||||
else if (str_preamble == "WIFI_PREAMBLE_VHT_SU" && input.standard == WIFI_PHY_STANDARD_80211ac)
|
||||
{
|
||||
input.preamble = WIFI_PREAMBLE_VHT_SU;
|
||||
|
||||
@@ -386,10 +386,6 @@ WifiPhyHelper::GetRadiotapHeader (
|
||||
}
|
||||
|
||||
mcsKnown |= RadiotapHeader::MCS_KNOWN_HT_FORMAT;
|
||||
if (preamble == WIFI_PREAMBLE_HT_GF)
|
||||
{
|
||||
mcsFlags |= RadiotapHeader::MCS_FLAGS_HT_GREENFIELD;
|
||||
}
|
||||
|
||||
mcsKnown |= RadiotapHeader::MCS_KNOWN_NESS;
|
||||
if (txVector.GetNess () & 0x01) //bit 1
|
||||
|
||||
@@ -262,7 +262,7 @@ AarfWifiManager::DoGetDataTxVector (WifiRemoteStation *st)
|
||||
NS_LOG_DEBUG ("New datarate: " << mode.GetDataRate (channelWidth));
|
||||
m_currentRate = mode.GetDataRate (channelWidth);
|
||||
}
|
||||
return WifiTxVector (mode, GetDefaultTxPowerLevel (), GetPreambleForTransmission (mode.GetModulationClass (), GetShortPreambleEnabled (), UseGreenfieldForDestination (GetAddress (station))), 800, 1, 1, 0, channelWidth, GetAggregation (station));
|
||||
return WifiTxVector (mode, GetDefaultTxPowerLevel (), GetPreambleForTransmission (mode.GetModulationClass (), GetShortPreambleEnabled ()), 800, 1, 1, 0, channelWidth, GetAggregation (station));
|
||||
}
|
||||
|
||||
WifiTxVector
|
||||
@@ -287,7 +287,7 @@ AarfWifiManager::DoGetRtsTxVector (WifiRemoteStation *st)
|
||||
{
|
||||
mode = GetNonErpSupported (station, 0);
|
||||
}
|
||||
rtsTxVector = WifiTxVector (mode, GetDefaultTxPowerLevel (), GetPreambleForTransmission (mode.GetModulationClass (), GetShortPreambleEnabled (), UseGreenfieldForDestination (GetAddress (station))), 800, 1, 1, 0, channelWidth, GetAggregation (station));
|
||||
rtsTxVector = WifiTxVector (mode, GetDefaultTxPowerLevel (), GetPreambleForTransmission (mode.GetModulationClass (), GetShortPreambleEnabled ()), 800, 1, 1, 0, channelWidth, GetAggregation (station));
|
||||
return rtsTxVector;
|
||||
}
|
||||
|
||||
|
||||
@@ -330,7 +330,7 @@ AarfcdWifiManager::DoGetDataTxVector (WifiRemoteStation *st)
|
||||
NS_LOG_DEBUG ("New datarate: " << mode.GetDataRate (channelWidth));
|
||||
m_currentRate = mode.GetDataRate (channelWidth);
|
||||
}
|
||||
return WifiTxVector (mode, GetDefaultTxPowerLevel (), GetPreambleForTransmission (mode.GetModulationClass (), GetShortPreambleEnabled (), UseGreenfieldForDestination (GetAddress (station))), 800, 1, 1, 0, channelWidth, GetAggregation (station));
|
||||
return WifiTxVector (mode, GetDefaultTxPowerLevel (), GetPreambleForTransmission (mode.GetModulationClass (), GetShortPreambleEnabled ()), 800, 1, 1, 0, channelWidth, GetAggregation (station));
|
||||
}
|
||||
|
||||
WifiTxVector
|
||||
@@ -355,7 +355,7 @@ AarfcdWifiManager::DoGetRtsTxVector (WifiRemoteStation *st)
|
||||
{
|
||||
mode = GetNonErpSupported (station, 0);
|
||||
}
|
||||
rtsTxVector = WifiTxVector (mode, GetDefaultTxPowerLevel (), GetPreambleForTransmission (mode.GetModulationClass (), GetShortPreambleEnabled (), UseGreenfieldForDestination (GetAddress (station))), 800, 1, 1, 0, channelWidth, GetAggregation (station));
|
||||
rtsTxVector = WifiTxVector (mode, GetDefaultTxPowerLevel (), GetPreambleForTransmission (mode.GetModulationClass (), GetShortPreambleEnabled ()), 800, 1, 1, 0, channelWidth, GetAggregation (station));
|
||||
return rtsTxVector;
|
||||
}
|
||||
|
||||
|
||||
@@ -374,7 +374,7 @@ AmrrWifiManager::DoGetDataTxVector (WifiRemoteStation *st)
|
||||
NS_LOG_DEBUG ("New datarate: " << mode.GetDataRate (channelWidth));
|
||||
m_currentRate = mode.GetDataRate (channelWidth);
|
||||
}
|
||||
return WifiTxVector (mode, GetDefaultTxPowerLevel (), GetPreambleForTransmission (mode.GetModulationClass (), GetShortPreambleEnabled (), UseGreenfieldForDestination (GetAddress (station))), 800, 1, 1, 0, channelWidth, GetAggregation (station));
|
||||
return WifiTxVector (mode, GetDefaultTxPowerLevel (), GetPreambleForTransmission (mode.GetModulationClass (), GetShortPreambleEnabled ()), 800, 1, 1, 0, channelWidth, GetAggregation (station));
|
||||
}
|
||||
|
||||
WifiTxVector
|
||||
@@ -398,7 +398,7 @@ AmrrWifiManager::DoGetRtsTxVector (WifiRemoteStation *st)
|
||||
{
|
||||
mode = GetNonErpSupported (station, 0);
|
||||
}
|
||||
rtsTxVector = WifiTxVector (mode, GetDefaultTxPowerLevel (), GetPreambleForTransmission (mode.GetModulationClass (), GetShortPreambleEnabled (), UseGreenfieldForDestination (GetAddress (station))), 800, 1, 1, 0, channelWidth, GetAggregation (station));
|
||||
rtsTxVector = WifiTxVector (mode, GetDefaultTxPowerLevel (), GetPreambleForTransmission (mode.GetModulationClass (), GetShortPreambleEnabled ()), 800, 1, 1, 0, channelWidth, GetAggregation (station));
|
||||
return rtsTxVector;
|
||||
}
|
||||
|
||||
|
||||
@@ -240,22 +240,6 @@ ApWifiMac::GetShortPreambleEnabled (void) const
|
||||
return false;
|
||||
}
|
||||
|
||||
bool
|
||||
ApWifiMac::IsNonGfHtStasPresent (void) const
|
||||
{
|
||||
bool isNonGfHtStasPresent = false;
|
||||
for (std::map<uint16_t, Mac48Address>::const_iterator i = m_staList.begin (); i != m_staList.end (); i++)
|
||||
{
|
||||
if (!m_stationManager->GetGreenfieldSupported (i->second))
|
||||
{
|
||||
isNonGfHtStasPresent = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
m_stationManager->SetUseGreenfieldProtection (isNonGfHtStasPresent);
|
||||
return isNonGfHtStasPresent;
|
||||
}
|
||||
|
||||
uint16_t
|
||||
ApWifiMac::GetVhtOperationalChannelWidth (void) const
|
||||
{
|
||||
@@ -531,7 +515,7 @@ ApWifiMac::GetHtOperation (void) const
|
||||
operation.SetHtSupported (1);
|
||||
operation.SetPrimaryChannel (m_phy->GetChannelNumber ());
|
||||
operation.SetRifsMode (false);
|
||||
operation.SetNonGfHtStasPresent (IsNonGfHtStasPresent ());
|
||||
operation.SetNonGfHtStasPresent (true);
|
||||
if (m_phy->GetChannelWidth () > 20)
|
||||
{
|
||||
operation.SetSecondaryChannelOffset (1);
|
||||
|
||||
@@ -90,12 +90,6 @@ public:
|
||||
* \returns whether short preamble should be enabled or not in the BSS.
|
||||
*/
|
||||
bool GetShortPreambleEnabled (void) const;
|
||||
/**
|
||||
* Determine whether non-Greenfield HT stations are present or not.
|
||||
*
|
||||
* \returns whether non-Greenfield HT stations are present or not.
|
||||
*/
|
||||
bool IsNonGfHtStasPresent (void) const;
|
||||
/**
|
||||
* Determine the VHT operational channel width (in MHz).
|
||||
*
|
||||
|
||||
@@ -361,7 +361,7 @@ AparfWifiManager::DoGetDataTxVector (WifiRemoteStation *st)
|
||||
m_rateChange (prevRate, rate, station->m_state->m_address);
|
||||
station->m_prevRateIndex = station->m_rateIndex;
|
||||
}
|
||||
return WifiTxVector (mode, station->m_powerLevel, GetPreambleForTransmission (mode.GetModulationClass (), GetShortPreambleEnabled (), UseGreenfieldForDestination (GetAddress (st))), 800, 1, 1, 0, channelWidth, GetAggregation (station));
|
||||
return WifiTxVector (mode, station->m_powerLevel, GetPreambleForTransmission (mode.GetModulationClass (), GetShortPreambleEnabled ()), 800, 1, 1, 0, channelWidth, GetAggregation (station));
|
||||
}
|
||||
|
||||
WifiTxVector
|
||||
@@ -386,7 +386,7 @@ AparfWifiManager::DoGetRtsTxVector (WifiRemoteStation *st)
|
||||
{
|
||||
mode = GetNonErpSupported (station, 0);
|
||||
}
|
||||
rtsTxVector = WifiTxVector (mode, GetDefaultTxPowerLevel (), GetPreambleForTransmission (mode.GetModulationClass (), GetShortPreambleEnabled (), UseGreenfieldForDestination (GetAddress (st))), 800, 1, 1, 0, channelWidth, GetAggregation (station));
|
||||
rtsTxVector = WifiTxVector (mode, GetDefaultTxPowerLevel (), GetPreambleForTransmission (mode.GetModulationClass (), GetShortPreambleEnabled ()), 800, 1, 1, 0, channelWidth, GetAggregation (station));
|
||||
return rtsTxVector;
|
||||
}
|
||||
|
||||
|
||||
@@ -239,7 +239,7 @@ ArfWifiManager::DoGetDataTxVector (WifiRemoteStation *st)
|
||||
NS_LOG_DEBUG ("New datarate: " << mode.GetDataRate (channelWidth));
|
||||
m_currentRate = mode.GetDataRate (channelWidth);
|
||||
}
|
||||
return WifiTxVector (mode, GetDefaultTxPowerLevel (), GetPreambleForTransmission (mode.GetModulationClass (), GetShortPreambleEnabled (), UseGreenfieldForDestination (GetAddress (station))), 800, 1, 1, 0, channelWidth, GetAggregation (station));
|
||||
return WifiTxVector (mode, GetDefaultTxPowerLevel (), GetPreambleForTransmission (mode.GetModulationClass (), GetShortPreambleEnabled ()), 800, 1, 1, 0, channelWidth, GetAggregation (station));
|
||||
}
|
||||
|
||||
WifiTxVector
|
||||
@@ -264,7 +264,7 @@ ArfWifiManager::DoGetRtsTxVector (WifiRemoteStation *st)
|
||||
{
|
||||
mode = GetNonErpSupported (station, 0);
|
||||
}
|
||||
rtsTxVector = WifiTxVector (mode, GetDefaultTxPowerLevel (), GetPreambleForTransmission (mode.GetModulationClass (), GetShortPreambleEnabled (), UseGreenfieldForDestination (GetAddress (station))), 800, 1, 1, 0, channelWidth, GetAggregation (station));
|
||||
rtsTxVector = WifiTxVector (mode, GetDefaultTxPowerLevel (), GetPreambleForTransmission (mode.GetModulationClass (), GetShortPreambleEnabled ()), 800, 1, 1, 0, channelWidth, GetAggregation (station));
|
||||
return rtsTxVector;
|
||||
}
|
||||
|
||||
|
||||
@@ -212,7 +212,7 @@ CaraWifiManager::DoGetDataTxVector (WifiRemoteStation *st)
|
||||
NS_LOG_DEBUG ("New datarate: " << mode.GetDataRate (channelWidth));
|
||||
m_currentRate = mode.GetDataRate (channelWidth);
|
||||
}
|
||||
return WifiTxVector (mode, GetDefaultTxPowerLevel (), GetPreambleForTransmission (mode.GetModulationClass (), GetShortPreambleEnabled (), UseGreenfieldForDestination (GetAddress (station))), 800, 1, 1, 0, channelWidth, GetAggregation (station));
|
||||
return WifiTxVector (mode, GetDefaultTxPowerLevel (), GetPreambleForTransmission (mode.GetModulationClass (), GetShortPreambleEnabled ()), 800, 1, 1, 0, channelWidth, GetAggregation (station));
|
||||
}
|
||||
|
||||
WifiTxVector
|
||||
@@ -237,7 +237,7 @@ CaraWifiManager::DoGetRtsTxVector (WifiRemoteStation *st)
|
||||
{
|
||||
mode = GetNonErpSupported (station, 0);
|
||||
}
|
||||
rtsTxVector = WifiTxVector (mode, GetDefaultTxPowerLevel (), GetPreambleForTransmission (mode.GetModulationClass (), GetShortPreambleEnabled (), UseGreenfieldForDestination (GetAddress (station))), 800, 1, 1, 0, channelWidth, GetAggregation (station));
|
||||
rtsTxVector = WifiTxVector (mode, GetDefaultTxPowerLevel (), GetPreambleForTransmission (mode.GetModulationClass (), GetShortPreambleEnabled ()), 800, 1, 1, 0, channelWidth, GetAggregation (station));
|
||||
return rtsTxVector;
|
||||
}
|
||||
|
||||
|
||||
@@ -123,14 +123,14 @@ ConstantRateWifiManager::DoGetDataTxVector (WifiRemoteStation *st)
|
||||
{
|
||||
nss = 1 + (m_dataMode.GetMcsValue () / 8);
|
||||
}
|
||||
return WifiTxVector (m_dataMode, GetDefaultTxPowerLevel (), GetPreambleForTransmission (m_dataMode.GetModulationClass (), GetShortPreambleEnabled (), UseGreenfieldForDestination (GetAddress (st))), ConvertGuardIntervalToNanoSeconds (m_dataMode, GetShortGuardIntervalSupported (st), NanoSeconds (GetGuardInterval (st))), GetNumberOfAntennas (), nss, 0, GetChannelWidthForTransmission (m_dataMode, GetChannelWidth (st)), GetAggregation (st));
|
||||
return WifiTxVector (m_dataMode, GetDefaultTxPowerLevel (), GetPreambleForTransmission (m_dataMode.GetModulationClass (), GetShortPreambleEnabled ()), ConvertGuardIntervalToNanoSeconds (m_dataMode, GetShortGuardIntervalSupported (st), NanoSeconds (GetGuardInterval (st))), GetNumberOfAntennas (), nss, 0, GetChannelWidthForTransmission (m_dataMode, GetChannelWidth (st)), GetAggregation (st));
|
||||
}
|
||||
|
||||
WifiTxVector
|
||||
ConstantRateWifiManager::DoGetRtsTxVector (WifiRemoteStation *st)
|
||||
{
|
||||
NS_LOG_FUNCTION (this << st);
|
||||
return WifiTxVector (m_ctlMode, GetDefaultTxPowerLevel (), GetPreambleForTransmission (m_ctlMode.GetModulationClass (), GetShortPreambleEnabled (), UseGreenfieldForDestination (GetAddress (st))), ConvertGuardIntervalToNanoSeconds (m_ctlMode, GetShortGuardIntervalSupported (st), NanoSeconds (GetGuardInterval (st))), 1, 1, 0, GetChannelWidthForTransmission (m_ctlMode, GetChannelWidth (st)), GetAggregation (st));
|
||||
return WifiTxVector (m_ctlMode, GetDefaultTxPowerLevel (), GetPreambleForTransmission (m_ctlMode.GetModulationClass (), GetShortPreambleEnabled ()), ConvertGuardIntervalToNanoSeconds (m_ctlMode, GetShortGuardIntervalSupported (st), NanoSeconds (GetGuardInterval (st))), 1, 1, 0, GetChannelWidthForTransmission (m_ctlMode, GetChannelWidth (st)), GetAggregation (st));
|
||||
}
|
||||
|
||||
} //namespace ns3
|
||||
|
||||
@@ -116,12 +116,6 @@ HtCapabilities::SetSupportedChannelWidth (uint8_t supportedChannelWidth)
|
||||
m_supportedChannelWidth = supportedChannelWidth;
|
||||
}
|
||||
|
||||
void
|
||||
HtCapabilities::SetGreenfield (uint8_t greenfield)
|
||||
{
|
||||
m_greenField = greenfield;
|
||||
}
|
||||
|
||||
void
|
||||
HtCapabilities::SetShortGuardInterval20 (uint8_t shortGuardInterval)
|
||||
{
|
||||
@@ -210,12 +204,6 @@ HtCapabilities::GetSupportedChannelWidth (void) const
|
||||
return m_supportedChannelWidth;
|
||||
}
|
||||
|
||||
uint8_t
|
||||
HtCapabilities::GetGreenfield (void) const
|
||||
{
|
||||
return m_greenField;
|
||||
}
|
||||
|
||||
uint8_t
|
||||
HtCapabilities::GetShortGuardInterval20 (void) const
|
||||
{
|
||||
@@ -554,7 +542,6 @@ operator << (std::ostream &os, const HtCapabilities &htcapabilities)
|
||||
{
|
||||
os << bool (htcapabilities.GetLdpc ())
|
||||
<< "|" << bool (htcapabilities.GetSupportedChannelWidth ())
|
||||
<< "|" << bool (htcapabilities.GetGreenfield ())
|
||||
<< "|" << bool (htcapabilities.GetShortGuardInterval20 ()) << "|";
|
||||
for (uint8_t i = 0; i < MAX_SUPPORTED_MCS; i++)
|
||||
{
|
||||
|
||||
@@ -113,12 +113,6 @@ public:
|
||||
* \param supportedChannelWidth the supported channel width field
|
||||
*/
|
||||
void SetSupportedChannelWidth (uint8_t supportedChannelWidth);
|
||||
/**
|
||||
* Set the Greenfield field.
|
||||
*
|
||||
* \param greenfield the Greenfield field
|
||||
*/
|
||||
void SetGreenfield (uint8_t greenfield);
|
||||
/**
|
||||
* Set the short guard interval 20 field.
|
||||
*
|
||||
@@ -243,12 +237,6 @@ public:
|
||||
* \return the supported channel width
|
||||
*/
|
||||
uint8_t GetSupportedChannelWidth (void) const;
|
||||
/**
|
||||
* Return the Greenfield field.
|
||||
*
|
||||
* \return the Greenfield field
|
||||
*/
|
||||
uint8_t GetGreenfield (void) const;
|
||||
/**
|
||||
* Return the short guard interval 20 value.
|
||||
*
|
||||
|
||||
@@ -52,12 +52,6 @@ HtConfiguration::GetTypeId (void)
|
||||
MakeBooleanAccessor (&HtConfiguration::GetShortGuardIntervalSupported,
|
||||
&HtConfiguration::SetShortGuardIntervalSupported),
|
||||
MakeBooleanChecker ())
|
||||
.AddAttribute ("GreenfieldSupported",
|
||||
"Whether or not Greenfield is supported.",
|
||||
BooleanValue (false),
|
||||
MakeBooleanAccessor (&HtConfiguration::GetGreenfieldSupported,
|
||||
&HtConfiguration::SetGreenfieldSupported),
|
||||
MakeBooleanChecker ())
|
||||
.AddAttribute ("LdpcSupported",
|
||||
"Whether or not LDPC coding is supported.",
|
||||
BooleanValue (false),
|
||||
@@ -81,19 +75,6 @@ HtConfiguration::GetShortGuardIntervalSupported (void) const
|
||||
return m_sgiSupported;
|
||||
}
|
||||
|
||||
void
|
||||
HtConfiguration::SetGreenfieldSupported (bool enable)
|
||||
{
|
||||
NS_LOG_FUNCTION (this << enable);
|
||||
m_greenfieldSupported = enable;
|
||||
}
|
||||
|
||||
bool
|
||||
HtConfiguration::GetGreenfieldSupported (void) const
|
||||
{
|
||||
return m_greenfieldSupported;
|
||||
}
|
||||
|
||||
void
|
||||
HtConfiguration::SetLdpcSupported (bool enable)
|
||||
{
|
||||
|
||||
@@ -59,20 +59,6 @@ public:
|
||||
* false otherwise.
|
||||
*/
|
||||
bool GetShortGuardIntervalSupported (void) const;
|
||||
/**
|
||||
* Enable or disable Greenfield support.
|
||||
*
|
||||
* \param enable true if Greenfield is to be supported,
|
||||
* false otherwise
|
||||
*/
|
||||
void SetGreenfieldSupported (bool enable);
|
||||
/**
|
||||
* \return whether the device supports Greenfield.
|
||||
*
|
||||
* \return true if Greenfield is supported,
|
||||
* false otherwise.
|
||||
*/
|
||||
bool GetGreenfieldSupported (void) const;
|
||||
/**
|
||||
* Enable or disable LDPC support.
|
||||
*
|
||||
@@ -91,7 +77,6 @@ public:
|
||||
|
||||
private:
|
||||
bool m_sgiSupported; ///< flag whether short guard interval is supported
|
||||
bool m_greenfieldSupported; ///< flag whether Greenfield is supported
|
||||
bool m_ldpcSupported; ///< flag whether LDPC coding is supported
|
||||
};
|
||||
|
||||
|
||||
@@ -29,7 +29,7 @@ HtOperation::HtOperation ()
|
||||
m_rifsMode (0),
|
||||
m_reservedInformationSubset1 (0),
|
||||
m_htProtection (0),
|
||||
m_nonGfHtStasPresent (0),
|
||||
m_nonGfHtStasPresent (1),
|
||||
m_reservedInformationSubset2_1 (0),
|
||||
m_obssNonHtStasPresent (0),
|
||||
m_reservedInformationSubset2_2 (0),
|
||||
|
||||
@@ -41,10 +41,6 @@ const PhyEntity::PpduFormats HtPhy::m_htPpduFormats {
|
||||
WIFI_PPDU_FIELD_NON_HT_HEADER, //L-SIG
|
||||
WIFI_PPDU_FIELD_HT_SIG, //HT-SIG
|
||||
WIFI_PPDU_FIELD_TRAINING, //HT-STF + HT-LTFs
|
||||
WIFI_PPDU_FIELD_DATA } },
|
||||
{ WIFI_PREAMBLE_HT_GF, { WIFI_PPDU_FIELD_PREAMBLE, //HT-GF-STF + HT-LTF1
|
||||
WIFI_PPDU_FIELD_HT_SIG, //HT-SIG
|
||||
WIFI_PPDU_FIELD_TRAINING, //Additional HT-LTFs
|
||||
WIFI_PPDU_FIELD_DATA } }
|
||||
};
|
||||
/* *NS_CHECK_STYLE_ON* */
|
||||
@@ -242,7 +238,7 @@ HtPhy::GetDuration (WifiPpduField field, WifiTxVector txVector) const
|
||||
Time
|
||||
HtPhy::GetLSigDuration (WifiPreamble preamble) const
|
||||
{
|
||||
return (preamble == WIFI_PREAMBLE_HT_GF) ? MicroSeconds (0) : MicroSeconds (4); //no L-SIG for HT-GF
|
||||
return MicroSeconds (4);
|
||||
}
|
||||
|
||||
Time
|
||||
@@ -252,14 +248,7 @@ HtPhy::GetTrainingDuration (WifiTxVector txVector,
|
||||
NS_ABORT_MSG_IF (nDataLtf == 0 || nDataLtf > 4 || nExtensionLtf > 4 || (nDataLtf + nExtensionLtf) > 5,
|
||||
"Unsupported combination of data (" << +nDataLtf << ") and extension (" << +nExtensionLtf << ") LTFs numbers for HT"); //see IEEE 802.11-2016, section 19.3.9.4.6 "HT-LTF definition"
|
||||
Time duration = MicroSeconds (4) * (nDataLtf + nExtensionLtf);
|
||||
if (txVector.GetPreambleType () == WIFI_PREAMBLE_HT_GF)
|
||||
{
|
||||
return MicroSeconds (4) * (nDataLtf - 1 + nExtensionLtf); //no HT-STF and first HT-LTF is already in preamble, see IEEE 802.11-2016, section 19.3.5.5 "HT-greenfield format LTF"
|
||||
}
|
||||
else //HT-MF
|
||||
{
|
||||
return MicroSeconds (4) * (1 /* HT-STF */ + nDataLtf + nExtensionLtf);
|
||||
}
|
||||
return MicroSeconds (4) * (1 /* HT-STF */ + nDataLtf + nExtensionLtf);
|
||||
}
|
||||
|
||||
Time
|
||||
@@ -383,7 +372,6 @@ HtPhy::DoEndReceiveField (WifiPpduField field, Ptr<Event> event)
|
||||
case WIFI_PPDU_FIELD_TRAINING:
|
||||
return PhyFieldRxStatus (true); //always consider that training has been correctly received
|
||||
case WIFI_PPDU_FIELD_NON_HT_HEADER:
|
||||
NS_ASSERT (event->GetTxVector ().GetPreambleType () != WIFI_PREAMBLE_HT_GF);
|
||||
//no break so as to go to OfdmPhy for processing
|
||||
default:
|
||||
return OfdmPhy::DoEndReceiveField (field, event);
|
||||
|
||||
@@ -42,8 +42,8 @@ namespace ns3 {
|
||||
* \ingroup wifi
|
||||
*
|
||||
* HT PHY is based on OFDM PHY.
|
||||
* HT-Mixed and HT-Greenfield PPDU formats are
|
||||
* supported. Only HT MCSs up to 31 are supported.
|
||||
* Only HT-Mixed is supported (support for HT-Greenfield has been removed).
|
||||
* Only HT MCSs up to 31 are supported.
|
||||
*
|
||||
* Refer to IEEE 802.11-2016, clause 19.
|
||||
*/
|
||||
|
||||
@@ -530,7 +530,7 @@ IdealWifiManager::DoGetDataTxVector (WifiRemoteStation *st)
|
||||
NS_LOG_DEBUG ("New datarate: " << maxMode.GetDataRate (channelWidth, guardInterval, selectedNss));
|
||||
m_currentRate = maxMode.GetDataRate (channelWidth, guardInterval, selectedNss);
|
||||
}
|
||||
return WifiTxVector (maxMode, GetDefaultTxPowerLevel (), GetPreambleForTransmission (maxMode.GetModulationClass (), GetShortPreambleEnabled (), UseGreenfieldForDestination (GetAddress (station))), guardInterval, GetNumberOfAntennas (), selectedNss, 0, GetChannelWidthForTransmission (maxMode, channelWidth), GetAggregation (station));
|
||||
return WifiTxVector (maxMode, GetDefaultTxPowerLevel (), GetPreambleForTransmission (maxMode.GetModulationClass (), GetShortPreambleEnabled ()), guardInterval, GetNumberOfAntennas (), selectedNss, 0, GetChannelWidthForTransmission (maxMode, channelWidth), GetAggregation (station));
|
||||
}
|
||||
|
||||
WifiTxVector
|
||||
@@ -560,7 +560,7 @@ IdealWifiManager::DoGetRtsTxVector (WifiRemoteStation *st)
|
||||
maxMode = mode;
|
||||
}
|
||||
}
|
||||
return WifiTxVector (maxMode, GetDefaultTxPowerLevel (), GetPreambleForTransmission (maxMode.GetModulationClass (), GetShortPreambleEnabled (), UseGreenfieldForDestination (GetAddress (station))), 800, GetNumberOfAntennas (), nss, 0, GetChannelWidthForNonHtMode (maxMode), GetAggregation (station));
|
||||
return WifiTxVector (maxMode, GetDefaultTxPowerLevel (), GetPreambleForTransmission (maxMode.GetModulationClass (), GetShortPreambleEnabled ()), 800, GetNumberOfAntennas (), nss, 0, GetChannelWidthForNonHtMode (maxMode), GetAggregation (station));
|
||||
}
|
||||
|
||||
double
|
||||
|
||||
@@ -865,7 +865,7 @@ MinstrelHtWifiManager::DoGetDataTxVector (WifiRemoteStation *st)
|
||||
NS_LOG_DEBUG ("New datarate: " << dataRate);
|
||||
m_currentRate = dataRate;
|
||||
}
|
||||
return WifiTxVector (mode, GetDefaultTxPowerLevel (), GetPreambleForTransmission (mode.GetModulationClass (), GetShortPreambleEnabled (), UseGreenfieldForDestination (GetAddress (station))), group.sgi ? 400 : 800, GetNumberOfAntennas (), group.streams, GetNess (station), GetChannelWidthForTransmission (mode, group.chWidth), GetAggregation (station) && !station->m_isSampling);
|
||||
return WifiTxVector (mode, GetDefaultTxPowerLevel (), GetPreambleForTransmission (mode.GetModulationClass (), GetShortPreambleEnabled ()), group.sgi ? 400 : 800, GetNumberOfAntennas (), group.streams, GetNess (station), GetChannelWidthForTransmission (mode, group.chWidth), GetAggregation (station) && !station->m_isSampling);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -939,7 +939,7 @@ MinstrelHtWifiManager::DoGetRtsTxVector (WifiRemoteStation *st)
|
||||
|
||||
NS_ASSERT (rateFound);
|
||||
|
||||
return WifiTxVector (rtsRate, GetDefaultTxPowerLevel (), GetPreambleForTransmission (rtsRate.GetModulationClass (), GetShortPreambleEnabled (), UseGreenfieldForDestination (GetAddress (station))),
|
||||
return WifiTxVector (rtsRate, GetDefaultTxPowerLevel (), GetPreambleForTransmission (rtsRate.GetModulationClass (), GetShortPreambleEnabled ()),
|
||||
800, 1, 1, 0, GetChannelWidthForTransmission (rtsRate, GetChannelWidth (station)), GetAggregation (station));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -379,7 +379,7 @@ MinstrelWifiManager::GetDataTxVector (MinstrelWifiRemoteStation *station)
|
||||
NS_LOG_DEBUG ("New datarate: " << mode.GetDataRate (channelWidth));
|
||||
m_currentRate = mode.GetDataRate (channelWidth);
|
||||
}
|
||||
return WifiTxVector (mode, GetDefaultTxPowerLevel (), GetPreambleForTransmission (mode.GetModulationClass (), GetShortPreambleEnabled (), UseGreenfieldForDestination (GetAddress (station))), 800, 1, 1, 0, channelWidth, GetAggregation (station));
|
||||
return WifiTxVector (mode, GetDefaultTxPowerLevel (), GetPreambleForTransmission (mode.GetModulationClass (), GetShortPreambleEnabled ()), 800, 1, 1, 0, channelWidth, GetAggregation (station));
|
||||
}
|
||||
|
||||
WifiTxVector
|
||||
@@ -402,7 +402,7 @@ MinstrelWifiManager::GetRtsTxVector (MinstrelWifiRemoteStation *station)
|
||||
{
|
||||
mode = GetNonErpSupported (station, 0);
|
||||
}
|
||||
rtsTxVector = WifiTxVector (mode, GetDefaultTxPowerLevel (), GetPreambleForTransmission (mode.GetModulationClass (), GetShortPreambleEnabled (), UseGreenfieldForDestination (GetAddress (station))), 800, 1, 1, 0, channelWidth, GetAggregation (station));
|
||||
rtsTxVector = WifiTxVector (mode, GetDefaultTxPowerLevel (), GetPreambleForTransmission (mode.GetModulationClass (), GetShortPreambleEnabled ()), 800, 1, 1, 0, channelWidth, GetAggregation (station));
|
||||
return rtsTxVector;
|
||||
}
|
||||
|
||||
|
||||
@@ -336,7 +336,7 @@ OnoeWifiManager::DoGetDataTxVector (WifiRemoteStation *st)
|
||||
NS_LOG_DEBUG ("New datarate: " << mode.GetDataRate (channelWidth));
|
||||
m_currentRate = mode.GetDataRate (channelWidth);
|
||||
}
|
||||
return WifiTxVector (mode, GetDefaultTxPowerLevel (), GetPreambleForTransmission (mode.GetModulationClass (), GetShortPreambleEnabled (), UseGreenfieldForDestination (GetAddress (st))), 800, 1, 1, 0, channelWidth, GetAggregation (station));
|
||||
return WifiTxVector (mode, GetDefaultTxPowerLevel (), GetPreambleForTransmission (mode.GetModulationClass (), GetShortPreambleEnabled ()), 800, 1, 1, 0, channelWidth, GetAggregation (station));
|
||||
}
|
||||
|
||||
WifiTxVector
|
||||
@@ -360,7 +360,7 @@ OnoeWifiManager::DoGetRtsTxVector (WifiRemoteStation *st)
|
||||
{
|
||||
mode = GetNonErpSupported (station, 0);
|
||||
}
|
||||
rtsTxVector = WifiTxVector (mode, GetDefaultTxPowerLevel (), GetPreambleForTransmission (mode.GetModulationClass (), GetShortPreambleEnabled (), UseGreenfieldForDestination (GetAddress (st))), 800, 1, 1, 0, channelWidth, GetAggregation (station));
|
||||
rtsTxVector = WifiTxVector (mode, GetDefaultTxPowerLevel (), GetPreambleForTransmission (mode.GetModulationClass (), GetShortPreambleEnabled ()), 800, 1, 1, 0, channelWidth, GetAggregation (station));
|
||||
return rtsTxVector;
|
||||
}
|
||||
|
||||
|
||||
@@ -333,7 +333,7 @@ ParfWifiManager::DoGetDataTxVector (WifiRemoteStation *st)
|
||||
m_rateChange (prevRate, rate, station->m_state->m_address);
|
||||
station->m_prevRateIndex = station->m_rateIndex;
|
||||
}
|
||||
return WifiTxVector (mode, station->m_powerLevel, GetPreambleForTransmission (mode.GetModulationClass (), GetShortPreambleEnabled (), UseGreenfieldForDestination (GetAddress (station))), 800, 1, 1, 0, channelWidth, GetAggregation (station));
|
||||
return WifiTxVector (mode, station->m_powerLevel, GetPreambleForTransmission (mode.GetModulationClass (), GetShortPreambleEnabled ()), 800, 1, 1, 0, channelWidth, GetAggregation (station));
|
||||
}
|
||||
|
||||
WifiTxVector
|
||||
@@ -358,7 +358,7 @@ ParfWifiManager::DoGetRtsTxVector (WifiRemoteStation *st)
|
||||
{
|
||||
mode = GetNonErpSupported (station, 0);
|
||||
}
|
||||
rtsTxVector = WifiTxVector (mode, GetDefaultTxPowerLevel (), GetPreambleForTransmission (mode.GetModulationClass (), GetShortPreambleEnabled (), UseGreenfieldForDestination (GetAddress (station))), 800, 1, 1, 0, channelWidth, GetAggregation (station));
|
||||
rtsTxVector = WifiTxVector (mode, GetDefaultTxPowerLevel (), GetPreambleForTransmission (mode.GetModulationClass (), GetShortPreambleEnabled ()), 800, 1, 1, 0, channelWidth, GetAggregation (station));
|
||||
return rtsTxVector;
|
||||
}
|
||||
|
||||
|
||||
@@ -205,14 +205,12 @@ RegularWifiMac::GetHtCapabilities (void) const
|
||||
if (GetHtSupported ())
|
||||
{
|
||||
Ptr<HtConfiguration> htConfiguration = GetHtConfiguration ();
|
||||
bool greenfieldSupported = htConfiguration->GetGreenfieldSupported ();
|
||||
bool sgiSupported = htConfiguration->GetShortGuardIntervalSupported ();
|
||||
capabilities.SetHtSupported (1);
|
||||
capabilities.SetLdpc (htConfiguration->GetLdpcSupported ());
|
||||
capabilities.SetSupportedChannelWidth (m_phy->GetChannelWidth () >= 40);
|
||||
capabilities.SetShortGuardInterval20 (sgiSupported);
|
||||
capabilities.SetShortGuardInterval40 (m_phy->GetChannelWidth () >= 40 && sgiSupported);
|
||||
capabilities.SetGreenfield (greenfieldSupported);
|
||||
// Set Maximum A-MSDU Length subfield
|
||||
uint16_t maxAmsduSize = std::max ({m_voMaxAmsduSize, m_viMaxAmsduSize,
|
||||
m_beMaxAmsduSize, m_bkMaxAmsduSize});
|
||||
@@ -231,7 +229,7 @@ RegularWifiMac::GetHtCapabilities (void) const
|
||||
// The maximum A-MPDU length in HT capabilities elements ranges from 2^13-1 to 2^16-1
|
||||
capabilities.SetMaxAmpduLength (std::min (std::max (maxAmpduLength, 8191u), 65535u));
|
||||
|
||||
capabilities.SetLSigProtectionSupport (!greenfieldSupported);
|
||||
capabilities.SetLSigProtectionSupport (true);
|
||||
uint64_t maxSupportedRate = 0; //in bit/s
|
||||
for (const auto & mcs : m_phy->GetMcsList (WIFI_MOD_CLASS_HT))
|
||||
{
|
||||
|
||||
@@ -361,7 +361,7 @@ RraaWifiManager::DoGetDataTxVector (WifiRemoteStation *st)
|
||||
NS_LOG_DEBUG ("New datarate: " << mode.GetDataRate (channelWidth));
|
||||
m_currentRate = mode.GetDataRate (channelWidth);
|
||||
}
|
||||
return WifiTxVector (mode, GetDefaultTxPowerLevel (), GetPreambleForTransmission (mode.GetModulationClass (), GetShortPreambleEnabled (), UseGreenfieldForDestination (GetAddress (station))), 800, 1, 1, 0, channelWidth, GetAggregation (station));
|
||||
return WifiTxVector (mode, GetDefaultTxPowerLevel (), GetPreambleForTransmission (mode.GetModulationClass (), GetShortPreambleEnabled ()), 800, 1, 1, 0, channelWidth, GetAggregation (station));
|
||||
}
|
||||
|
||||
WifiTxVector
|
||||
@@ -384,7 +384,7 @@ RraaWifiManager::DoGetRtsTxVector (WifiRemoteStation *st)
|
||||
{
|
||||
mode = GetNonErpSupported (station, 0);
|
||||
}
|
||||
rtsTxVector = WifiTxVector (mode, GetDefaultTxPowerLevel (), GetPreambleForTransmission (mode.GetModulationClass (), GetShortPreambleEnabled (), UseGreenfieldForDestination (GetAddress (station))), 800, 1, 1, 0, channelWidth, GetAggregation (station));
|
||||
rtsTxVector = WifiTxVector (mode, GetDefaultTxPowerLevel (), GetPreambleForTransmission (mode.GetModulationClass (), GetShortPreambleEnabled ()), 800, 1, 1, 0, channelWidth, GetAggregation (station));
|
||||
return rtsTxVector;
|
||||
}
|
||||
|
||||
|
||||
@@ -412,7 +412,7 @@ RrpaaWifiManager::DoGetDataTxVector (WifiRemoteStation *st)
|
||||
m_powerChange (prevPower, power, station->m_state->m_address);
|
||||
station->m_prevPowerLevel = station->m_powerLevel;
|
||||
}
|
||||
return WifiTxVector (mode, station->m_powerLevel, GetPreambleForTransmission (mode.GetModulationClass (), GetShortPreambleEnabled (), UseGreenfieldForDestination (GetAddress (station))), 800, 1, 1, 0, channelWidth, GetAggregation (station));
|
||||
return WifiTxVector (mode, station->m_powerLevel, GetPreambleForTransmission (mode.GetModulationClass (), GetShortPreambleEnabled ()), 800, 1, 1, 0, channelWidth, GetAggregation (station));
|
||||
}
|
||||
WifiTxVector
|
||||
RrpaaWifiManager::DoGetRtsTxVector (WifiRemoteStation *st)
|
||||
@@ -434,7 +434,7 @@ RrpaaWifiManager::DoGetRtsTxVector (WifiRemoteStation *st)
|
||||
{
|
||||
mode = GetNonErpSupported (station, 0);
|
||||
}
|
||||
rtsTxVector = WifiTxVector (mode, GetDefaultTxPowerLevel (), GetPreambleForTransmission (mode.GetModulationClass (), GetShortPreambleEnabled (), UseGreenfieldForDestination (GetAddress (station))), 800, 1, 1, 0, channelWidth, GetAggregation (station));
|
||||
rtsTxVector = WifiTxVector (mode, GetDefaultTxPowerLevel (), GetPreambleForTransmission (mode.GetModulationClass (), GetShortPreambleEnabled ()), 800, 1, 1, 0, channelWidth, GetAggregation (station));
|
||||
return rtsTxVector;
|
||||
}
|
||||
|
||||
|
||||
@@ -782,15 +782,6 @@ StaWifiMac::UpdateApInfoFromBeacon (MgtBeaconHeader beacon, Mac48Address apAddr,
|
||||
else
|
||||
{
|
||||
m_stationManager->AddStationHtCapabilities (apAddr, htCapabilities);
|
||||
HtOperation htOperation = beacon.GetHtOperation ();
|
||||
if (htOperation.GetNonGfHtStasPresent ())
|
||||
{
|
||||
m_stationManager->SetUseGreenfieldProtection (true);
|
||||
}
|
||||
else
|
||||
{
|
||||
m_stationManager->SetUseGreenfieldProtection (false);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (GetVhtSupported ())
|
||||
@@ -969,15 +960,6 @@ StaWifiMac::UpdateApInfoFromAssocResp (MgtAssocResponseHeader assocResp, Mac48Ad
|
||||
else
|
||||
{
|
||||
m_stationManager->AddStationHtCapabilities (apAddr, htCapabilities);
|
||||
HtOperation htOperation = assocResp.GetHtOperation ();
|
||||
if (htOperation.GetNonGfHtStasPresent ())
|
||||
{
|
||||
m_stationManager->SetUseGreenfieldProtection (true);
|
||||
}
|
||||
else
|
||||
{
|
||||
m_stationManager->SetUseGreenfieldProtection (false);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (GetVhtSupported ())
|
||||
|
||||
@@ -47,7 +47,6 @@ enum WifiPreamble
|
||||
WIFI_PREAMBLE_LONG,
|
||||
WIFI_PREAMBLE_SHORT,
|
||||
WIFI_PREAMBLE_HT_MF,
|
||||
WIFI_PREAMBLE_HT_GF,
|
||||
WIFI_PREAMBLE_VHT_SU,
|
||||
WIFI_PREAMBLE_VHT_MU,
|
||||
WIFI_PREAMBLE_HE_SU,
|
||||
@@ -73,8 +72,6 @@ inline std::ostream& operator<< (std::ostream &os, const WifiPreamble &preamble)
|
||||
return (os << "SHORT");
|
||||
case WIFI_PREAMBLE_HT_MF:
|
||||
return (os << "HT_MF");
|
||||
case WIFI_PREAMBLE_HT_GF:
|
||||
return (os << "HT_GF");
|
||||
case WIFI_PREAMBLE_VHT_SU:
|
||||
return (os << "VHT_SU");
|
||||
case WIFI_PREAMBLE_VHT_MU:
|
||||
|
||||
@@ -120,7 +120,6 @@ WifiRemoteStationManager::WifiRemoteStationManager ()
|
||||
: m_pcfSupported (false),
|
||||
m_useNonErpProtection (false),
|
||||
m_useNonHtProtection (false),
|
||||
m_useGreenfieldProtection (false),
|
||||
m_shortPreambleEnabled (false),
|
||||
m_shortSlotTimeEnabled (false)
|
||||
{
|
||||
@@ -270,22 +269,6 @@ WifiRemoteStationManager::GetPcfSupported (void) const
|
||||
return m_pcfSupported;
|
||||
}
|
||||
|
||||
bool
|
||||
WifiRemoteStationManager::GetGreenfieldSupported (void) const
|
||||
{
|
||||
if (GetHtSupported ())
|
||||
{
|
||||
Ptr<WifiNetDevice> device = DynamicCast<WifiNetDevice> (m_wifiPhy->GetDevice ());
|
||||
Ptr<HtConfiguration> htConfiguration = device->GetHtConfiguration ();
|
||||
NS_ASSERT (htConfiguration); //If HT is supported, we should have a HT configuration attached
|
||||
if (htConfiguration->GetGreenfieldSupported ())
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool
|
||||
WifiRemoteStationManager::GetLdpcSupported (void) const
|
||||
{
|
||||
@@ -512,7 +495,7 @@ WifiRemoteStationManager::GetDataTxVector (const WifiMacHeader &header)
|
||||
WifiMode mode = GetNonUnicastMode ();
|
||||
WifiTxVector v;
|
||||
v.SetMode (mode);
|
||||
v.SetPreambleType (GetPreambleForTransmission (mode.GetModulationClass (), GetShortPreambleEnabled (), UseGreenfieldForDestination (address)));
|
||||
v.SetPreambleType (GetPreambleForTransmission (mode.GetModulationClass (), GetShortPreambleEnabled ()));
|
||||
v.SetTxPowerLevel (m_defaultTxPowerLevel);
|
||||
v.SetChannelWidth (GetChannelWidthForTransmission (mode, m_wifiPhy->GetChannelWidth ()));
|
||||
v.SetGuardInterval (ConvertGuardIntervalToNanoSeconds (mode, DynamicCast<WifiNetDevice> (m_wifiPhy->GetDevice ())));
|
||||
@@ -535,7 +518,7 @@ WifiRemoteStationManager::GetDataTxVector (const WifiMacHeader &header)
|
||||
mgtMode = GetDefaultMode ();
|
||||
}
|
||||
txVector.SetMode (mgtMode);
|
||||
txVector.SetPreambleType (GetPreambleForTransmission (mgtMode.GetModulationClass (), GetShortPreambleEnabled (), UseGreenfieldForDestination (address)));
|
||||
txVector.SetPreambleType (GetPreambleForTransmission (mgtMode.GetModulationClass (), GetShortPreambleEnabled ()));
|
||||
txVector.SetTxPowerLevel (m_defaultTxPowerLevel);
|
||||
txVector.SetChannelWidth (GetChannelWidthForTransmission (mgtMode, m_wifiPhy->GetChannelWidth ()));
|
||||
txVector.SetGuardInterval (ConvertGuardIntervalToNanoSeconds (mgtMode, DynamicCast<WifiNetDevice> (m_wifiPhy->GetDevice ())));
|
||||
@@ -598,7 +581,7 @@ WifiRemoteStationManager::GetRtsTxVector (Mac48Address address)
|
||||
WifiMode mode = GetNonUnicastMode ();
|
||||
WifiTxVector v;
|
||||
v.SetMode (mode);
|
||||
v.SetPreambleType (GetPreambleForTransmission (mode.GetModulationClass (), GetShortPreambleEnabled (), UseGreenfieldForDestination (address)));
|
||||
v.SetPreambleType (GetPreambleForTransmission (mode.GetModulationClass (), GetShortPreambleEnabled ()));
|
||||
v.SetTxPowerLevel (m_defaultTxPowerLevel);
|
||||
v.SetChannelWidth (GetChannelWidthForTransmission (mode, m_wifiPhy->GetChannelWidth ()));
|
||||
v.SetGuardInterval (ConvertGuardIntervalToNanoSeconds (mode, DynamicCast<WifiNetDevice> (m_wifiPhy->GetDevice ())));
|
||||
@@ -617,7 +600,7 @@ WifiRemoteStationManager::GetCtsTxVector (Mac48Address to, WifiMode rtsTxMode) c
|
||||
WifiMode ctsMode = GetControlAnswerMode (rtsTxMode);
|
||||
WifiTxVector v;
|
||||
v.SetMode (ctsMode);
|
||||
v.SetPreambleType (GetPreambleForTransmission (ctsMode.GetModulationClass (), GetShortPreambleEnabled (), UseGreenfieldForDestination (to)));
|
||||
v.SetPreambleType (GetPreambleForTransmission (ctsMode.GetModulationClass (), GetShortPreambleEnabled ()));
|
||||
v.SetTxPowerLevel (GetDefaultTxPowerLevel ());
|
||||
v.SetChannelWidth (GetChannelWidthForTransmission (ctsMode, m_wifiPhy->GetChannelWidth ()));
|
||||
uint16_t ctsTxGuardInterval = ConvertGuardIntervalToNanoSeconds (ctsMode, DynamicCast<WifiNetDevice> (m_wifiPhy->GetDevice ()));
|
||||
@@ -633,7 +616,7 @@ WifiRemoteStationManager::GetAckTxVector (Mac48Address to, WifiMode dataTxMode)
|
||||
WifiMode ackMode = GetControlAnswerMode (dataTxMode);
|
||||
WifiTxVector v;
|
||||
v.SetMode (ackMode);
|
||||
v.SetPreambleType (GetPreambleForTransmission (ackMode.GetModulationClass (), GetShortPreambleEnabled (), UseGreenfieldForDestination (to)));
|
||||
v.SetPreambleType (GetPreambleForTransmission (ackMode.GetModulationClass (), GetShortPreambleEnabled ()));
|
||||
v.SetTxPowerLevel (GetDefaultTxPowerLevel ());
|
||||
v.SetChannelWidth (GetChannelWidthForTransmission (ackMode, m_wifiPhy->GetChannelWidth ()));
|
||||
uint16_t ackTxGuardInterval = ConvertGuardIntervalToNanoSeconds (ackMode, DynamicCast<WifiNetDevice> (m_wifiPhy->GetDevice ()));
|
||||
@@ -649,7 +632,7 @@ WifiRemoteStationManager::GetBlockAckTxVector (Mac48Address to, WifiMode dataTxM
|
||||
WifiMode blockAckMode = GetControlAnswerMode (dataTxMode);
|
||||
WifiTxVector v;
|
||||
v.SetMode (blockAckMode);
|
||||
v.SetPreambleType (GetPreambleForTransmission (blockAckMode.GetModulationClass (), GetShortPreambleEnabled (), UseGreenfieldForDestination (to)));
|
||||
v.SetPreambleType (GetPreambleForTransmission (blockAckMode.GetModulationClass (), GetShortPreambleEnabled ()));
|
||||
v.SetTxPowerLevel (GetDefaultTxPowerLevel ());
|
||||
v.SetChannelWidth (GetChannelWidthForTransmission (blockAckMode, m_wifiPhy->GetChannelWidth ()));
|
||||
uint16_t blockAckTxGuardInterval = ConvertGuardIntervalToNanoSeconds (blockAckMode, DynamicCast<WifiNetDevice> (m_wifiPhy->GetDevice ()));
|
||||
@@ -1038,19 +1021,6 @@ WifiRemoteStationManager::GetUseNonHtProtection (void) const
|
||||
return m_useNonHtProtection;
|
||||
}
|
||||
|
||||
void
|
||||
WifiRemoteStationManager::SetUseGreenfieldProtection (bool enable)
|
||||
{
|
||||
NS_LOG_FUNCTION (this << enable);
|
||||
m_useGreenfieldProtection = enable;
|
||||
}
|
||||
|
||||
bool
|
||||
WifiRemoteStationManager::GetUseGreenfieldProtection (void) const
|
||||
{
|
||||
return m_useGreenfieldProtection;
|
||||
}
|
||||
|
||||
bool
|
||||
WifiRemoteStationManager::NeedRetransmission (Ptr<const WifiMacQueueItem> mpdu)
|
||||
{
|
||||
@@ -1414,18 +1384,6 @@ WifiRemoteStationManager::GetStationHeCapabilities (Mac48Address from)
|
||||
return LookupState (from)->m_heCapabilities;
|
||||
}
|
||||
|
||||
bool
|
||||
WifiRemoteStationManager::GetGreenfieldSupported (Mac48Address address) const
|
||||
{
|
||||
Ptr<const HtCapabilities> htCapabilities = LookupState (address)->m_htCapabilities;
|
||||
|
||||
if (!htCapabilities)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
return htCapabilities->GetGreenfield ();
|
||||
}
|
||||
|
||||
bool
|
||||
WifiRemoteStationManager::GetLdpcSupported (Mac48Address address) const
|
||||
{
|
||||
@@ -1697,18 +1655,6 @@ WifiRemoteStationManager::GetGuardInterval (const WifiRemoteStation *station) co
|
||||
return station->m_state->m_guardInterval;
|
||||
}
|
||||
|
||||
bool
|
||||
WifiRemoteStationManager::GetGreenfield (const WifiRemoteStation *station) const
|
||||
{
|
||||
Ptr<const HtCapabilities> htCapabilities = station->m_state->m_htCapabilities;
|
||||
|
||||
if (!htCapabilities)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
return htCapabilities->GetGreenfield ();
|
||||
}
|
||||
|
||||
bool
|
||||
WifiRemoteStationManager::GetAggregation (const WifiRemoteStation *station) const
|
||||
{
|
||||
@@ -1868,12 +1814,6 @@ WifiRemoteStationManager::GetMaxNumberOfTransmitStreams (void) const
|
||||
return m_wifiPhy->GetMaxSupportedTxSpatialStreams ();
|
||||
}
|
||||
|
||||
bool
|
||||
WifiRemoteStationManager::UseGreenfieldForDestination (Mac48Address dest) const
|
||||
{
|
||||
return (GetGreenfieldSupported () && GetGreenfieldSupported (dest) && !GetUseGreenfieldProtection ());
|
||||
}
|
||||
|
||||
bool
|
||||
WifiRemoteStationManager::UseLdpcForDestination (Mac48Address dest) const
|
||||
{
|
||||
|
||||
@@ -267,12 +267,6 @@ public:
|
||||
* \return true if PCF capability support is enabled, false otherwise
|
||||
*/
|
||||
bool GetPcfSupported (void) const;
|
||||
/**
|
||||
* Return whether the device has HT Greenfield support enabled.
|
||||
*
|
||||
* \return true if HT Grenfield support is enabled, false otherwise
|
||||
*/
|
||||
bool GetGreenfieldSupported (void) const;
|
||||
/**
|
||||
* Return whether the device has LDPC support enabled.
|
||||
*
|
||||
@@ -317,19 +311,6 @@ public:
|
||||
* false otherwise
|
||||
*/
|
||||
bool GetUseNonHtProtection (void) const;
|
||||
/**
|
||||
* Enable or disable protection for stations that do not support HT Greenfield format.
|
||||
*
|
||||
* \param enable enable or disable protection for stations that do not support HT Greenfield format
|
||||
*/
|
||||
void SetUseGreenfieldProtection (bool enable);
|
||||
/**
|
||||
* Return whether protection for stations that do not support HT Greenfield format is enabled.
|
||||
*
|
||||
* \return true if protection for stations that do not support HT Greenfield is enabled,
|
||||
* false otherwise
|
||||
*/
|
||||
bool GetUseGreenfieldProtection (void) const;
|
||||
/**
|
||||
* Enable or disable short PHY preambles.
|
||||
*
|
||||
@@ -404,15 +385,6 @@ public:
|
||||
* \return the basic mode at the given index
|
||||
*/
|
||||
WifiMode GetNonErpBasicMode (uint8_t i) const;
|
||||
/**
|
||||
* Return whether the station supports Greenfield or not.
|
||||
*
|
||||
* \param address the address of the station
|
||||
*
|
||||
* \return true if Greenfield is supported by the station,
|
||||
* false otherwise
|
||||
*/
|
||||
bool GetGreenfieldSupported (Mac48Address address) const;
|
||||
/**
|
||||
* Return whether the station supports LDPC or not.
|
||||
*
|
||||
@@ -873,14 +845,6 @@ public:
|
||||
* \return the maximum number of spatial streams supported by the PHY layer
|
||||
*/
|
||||
uint8_t GetMaxNumberOfTransmitStreams (void) const;
|
||||
/**
|
||||
* \returns whether HT greenfield should be used for a given destination address.
|
||||
*
|
||||
* \param dest the destination address
|
||||
*
|
||||
* \return whether HT greenfield should be used for a given destination address
|
||||
*/
|
||||
bool UseGreenfieldForDestination (Mac48Address dest) const;
|
||||
/**
|
||||
* \returns whether LDPC should be used for a given destination address.
|
||||
*
|
||||
@@ -1054,15 +1018,6 @@ protected:
|
||||
* false otherwise
|
||||
*/
|
||||
bool GetAggregation (const WifiRemoteStation *station) const;
|
||||
/**
|
||||
* Return whether the station supports Greenfield or not.
|
||||
*
|
||||
* \param station the station being queried
|
||||
*
|
||||
* \return true if Greenfield is supported by the station,
|
||||
* false otherwise
|
||||
*/
|
||||
bool GetGreenfield (const WifiRemoteStation *station) const;
|
||||
|
||||
/**
|
||||
* Return the number of supported streams the station has.
|
||||
@@ -1307,7 +1262,6 @@ private:
|
||||
WifiMode m_nonUnicastMode; //!< Transmission mode for non-unicast Data frames
|
||||
bool m_useNonErpProtection; //!< flag if protection for non-ERP stations against ERP transmissions is enabled
|
||||
bool m_useNonHtProtection; //!< flag if protection for non-HT stations against HT transmissions is enabled
|
||||
bool m_useGreenfieldProtection; //!< flag if protection for stations that do not support HT Greenfield format is enabled
|
||||
bool m_shortPreambleEnabled; //!< flag if short PHY preamble is enabled
|
||||
bool m_shortSlotTimeEnabled; //!< flag if short slot time is enabled
|
||||
ProtectionMode m_erpProtectionMode; //!< Protection mode for ERP stations when non-ERP stations are detected
|
||||
|
||||
@@ -113,7 +113,7 @@ GetChannelWidthForTransmission (WifiMode mode, uint16_t maxSupportedChannelWidth
|
||||
}
|
||||
|
||||
WifiPreamble
|
||||
GetPreambleForTransmission (WifiModulationClass modulation, bool useShortPreamble, bool useGreenfield)
|
||||
GetPreambleForTransmission (WifiModulationClass modulation, bool useShortPreamble)
|
||||
{
|
||||
if (modulation == WIFI_MOD_CLASS_HE)
|
||||
{
|
||||
@@ -123,14 +123,9 @@ GetPreambleForTransmission (WifiModulationClass modulation, bool useShortPreambl
|
||||
{
|
||||
return WIFI_PREAMBLE_VHT_SU;
|
||||
}
|
||||
else if (modulation == WIFI_MOD_CLASS_HT && useGreenfield)
|
||||
{
|
||||
//If protection for Greenfield is used we go for HT_MF preamble which is the default protection for GF format defined in the standard.
|
||||
return WIFI_PREAMBLE_HT_GF;
|
||||
}
|
||||
else if (modulation == WIFI_MOD_CLASS_HT)
|
||||
{
|
||||
return WIFI_PREAMBLE_HT_MF;
|
||||
return WIFI_PREAMBLE_HT_MF; // HT_GF has been removed
|
||||
}
|
||||
else if (modulation == WIFI_MOD_CLASS_HR_DSSS && useShortPreamble) //ERP_DSSS is modeled through HR_DSSS (since same preamble and modulation)
|
||||
{
|
||||
@@ -245,21 +240,18 @@ GetPpduMaxTime (WifiPreamble preamble)
|
||||
|
||||
switch (preamble)
|
||||
{
|
||||
case WIFI_PREAMBLE_HT_GF:
|
||||
duration = MicroSeconds (10000);
|
||||
break;
|
||||
case WIFI_PREAMBLE_HT_MF:
|
||||
case WIFI_PREAMBLE_VHT_SU:
|
||||
case WIFI_PREAMBLE_VHT_MU:
|
||||
case WIFI_PREAMBLE_HE_SU:
|
||||
case WIFI_PREAMBLE_HE_ER_SU:
|
||||
case WIFI_PREAMBLE_HE_MU:
|
||||
case WIFI_PREAMBLE_HE_TB:
|
||||
duration = MicroSeconds (5484);
|
||||
break;
|
||||
default:
|
||||
duration = MicroSeconds (0);
|
||||
break;
|
||||
case WIFI_PREAMBLE_HT_MF:
|
||||
case WIFI_PREAMBLE_VHT_SU:
|
||||
case WIFI_PREAMBLE_VHT_MU:
|
||||
case WIFI_PREAMBLE_HE_SU:
|
||||
case WIFI_PREAMBLE_HE_ER_SU:
|
||||
case WIFI_PREAMBLE_HE_MU:
|
||||
case WIFI_PREAMBLE_HE_TB:
|
||||
duration = MicroSeconds (5484);
|
||||
break;
|
||||
default:
|
||||
duration = MicroSeconds (0);
|
||||
break;
|
||||
}
|
||||
return duration;
|
||||
}
|
||||
@@ -267,7 +259,7 @@ GetPpduMaxTime (WifiPreamble preamble)
|
||||
bool
|
||||
IsHt (WifiPreamble preamble)
|
||||
{
|
||||
return (preamble == WIFI_PREAMBLE_HT_MF || preamble == WIFI_PREAMBLE_HT_GF);
|
||||
return (preamble == WIFI_PREAMBLE_HT_MF);
|
||||
}
|
||||
|
||||
bool
|
||||
|
||||
@@ -89,11 +89,10 @@ uint16_t ConvertGuardIntervalToNanoSeconds (WifiMode mode, bool htShortGuardInte
|
||||
*
|
||||
* \param modulation the modulation selected for the transmission
|
||||
* \param useShortPreamble whether short preamble should be used
|
||||
* \param useGreenfield whether HT Greenfield should be used
|
||||
*
|
||||
* \return the preamble to be used for the transmission
|
||||
*/
|
||||
WifiPreamble GetPreambleForTransmission (WifiModulationClass modulation, bool useShortPreamble, bool useGreenfield);
|
||||
WifiPreamble GetPreambleForTransmission (WifiModulationClass modulation, bool useShortPreamble);
|
||||
/**
|
||||
* Return the channel width that corresponds to the selected mode (instead of
|
||||
* letting the PHY's default channel width). This is especially useful when using
|
||||
|
||||
@@ -409,33 +409,18 @@ TxDurationTest::DoRun (void)
|
||||
&& CheckTxDuration (1536, HtPhy::GetHtMcs7 (), 20, 800, WIFI_PREAMBLE_HT_MF, MicroSeconds (228))
|
||||
&& CheckTxDuration (76, HtPhy::GetHtMcs7 (), 20, 800, WIFI_PREAMBLE_HT_MF, MicroSeconds (48))
|
||||
&& CheckTxDuration (14, HtPhy::GetHtMcs7 (), 20, 800, WIFI_PREAMBLE_HT_MF, MicroSeconds (40))
|
||||
&& CheckTxDuration (1536, HtPhy::GetHtMcs7 (), 20, 800, WIFI_PREAMBLE_HT_GF, MicroSeconds (216))
|
||||
&& CheckTxDuration (76, HtPhy::GetHtMcs7 (), 20, 800, WIFI_PREAMBLE_HT_GF, MicroSeconds (36))
|
||||
&& CheckTxDuration (14, HtPhy::GetHtMcs7 (), 20, 800, WIFI_PREAMBLE_HT_GF, MicroSeconds (28))
|
||||
&& CheckTxDuration (1536, HtPhy::GetHtMcs0 (), 20, 400, WIFI_PREAMBLE_HT_MF, NanoSeconds (1742400))
|
||||
&& CheckTxDuration (76, HtPhy::GetHtMcs0 (), 20, 400, WIFI_PREAMBLE_HT_MF, MicroSeconds (126))
|
||||
&& CheckTxDuration (14, HtPhy::GetHtMcs0 (), 20, 400, WIFI_PREAMBLE_HT_MF, NanoSeconds (57600))
|
||||
&& CheckTxDuration (1536,HtPhy::GetHtMcs0 (), 20, 400, WIFI_PREAMBLE_HT_GF, NanoSeconds (1730400))
|
||||
&& CheckTxDuration (76, HtPhy::GetHtMcs0 (), 20, 400, WIFI_PREAMBLE_HT_GF, MicroSeconds (114))
|
||||
&& CheckTxDuration (14, HtPhy::GetHtMcs0 (), 20, 400, WIFI_PREAMBLE_HT_GF, NanoSeconds (45600))
|
||||
&& CheckTxDuration (1536, HtPhy::GetHtMcs6 (), 20, 400, WIFI_PREAMBLE_HT_MF, NanoSeconds (226800))
|
||||
&& CheckTxDuration (76, HtPhy::GetHtMcs6 (), 20, 400, WIFI_PREAMBLE_HT_MF, NanoSeconds (46800))
|
||||
&& CheckTxDuration (14, HtPhy::GetHtMcs6 (), 20, 400, WIFI_PREAMBLE_HT_MF, NanoSeconds (39600))
|
||||
&& CheckTxDuration (1536, HtPhy::GetHtMcs6 (), 20, 400, WIFI_PREAMBLE_HT_GF, NanoSeconds (214800))
|
||||
&& CheckTxDuration (76, HtPhy::GetHtMcs6 (), 20, 400, WIFI_PREAMBLE_HT_GF, NanoSeconds (34800))
|
||||
&& CheckTxDuration (14, HtPhy::GetHtMcs6 (), 20, 400, WIFI_PREAMBLE_HT_GF, NanoSeconds (27600))
|
||||
&& CheckTxDuration (1536, HtPhy::GetHtMcs7 (), 40, 800, WIFI_PREAMBLE_HT_MF, MicroSeconds (128))
|
||||
&& CheckTxDuration (76, HtPhy::GetHtMcs7 (), 40, 800, WIFI_PREAMBLE_HT_MF, MicroSeconds (44))
|
||||
&& CheckTxDuration (14, HtPhy::GetHtMcs7 (), 40, 800, WIFI_PREAMBLE_HT_MF, MicroSeconds (40))
|
||||
&& CheckTxDuration (1536, HtPhy::GetHtMcs7 (), 40, 800, WIFI_PREAMBLE_HT_GF, MicroSeconds (116))
|
||||
&& CheckTxDuration (76, HtPhy::GetHtMcs7 (), 40, 800, WIFI_PREAMBLE_HT_GF, MicroSeconds (32))
|
||||
&& CheckTxDuration (14, HtPhy::GetHtMcs7 (), 40, 800, WIFI_PREAMBLE_HT_GF, MicroSeconds (28))
|
||||
&& CheckTxDuration (1536, HtPhy::GetHtMcs7 (), 40, 400, WIFI_PREAMBLE_HT_MF, NanoSeconds (118800))
|
||||
&& CheckTxDuration (76, HtPhy::GetHtMcs7 (), 40, 400, WIFI_PREAMBLE_HT_MF, NanoSeconds (43200))
|
||||
&& CheckTxDuration (14, HtPhy::GetHtMcs7 (), 40, 400, WIFI_PREAMBLE_HT_MF, NanoSeconds (39600))
|
||||
&& CheckTxDuration (1536, HtPhy::GetHtMcs7 (), 40, 400, WIFI_PREAMBLE_HT_GF, NanoSeconds (106800))
|
||||
&& CheckTxDuration (76, HtPhy::GetHtMcs7 (), 40, 400, WIFI_PREAMBLE_HT_GF, NanoSeconds (31200))
|
||||
&& CheckTxDuration (14, HtPhy::GetHtMcs7 (), 40, 400, WIFI_PREAMBLE_HT_GF, NanoSeconds (27600));
|
||||
&& CheckTxDuration (14, HtPhy::GetHtMcs7 (), 40, 400, WIFI_PREAMBLE_HT_MF, NanoSeconds (39600));
|
||||
|
||||
NS_TEST_EXPECT_MSG_EQ (retval, true, "an 802.11n duration failed");
|
||||
|
||||
@@ -869,29 +854,6 @@ PhyHeaderSectionsTest::DoRun (void)
|
||||
htSigMode };
|
||||
CheckPhyHeaderSections (phyEntity->GetPhyHeaderSections (txVector, ppduStart), sections);
|
||||
|
||||
// -> HT-GF format for 1 SS and no ESS
|
||||
txVector.SetPreambleType (WIFI_PREAMBLE_HT_GF);
|
||||
txVector.SetNss (1);
|
||||
txVector.SetNess (0);
|
||||
sections = { { WIFI_PPDU_FIELD_PREAMBLE, { { ppduStart,
|
||||
ppduStart + MicroSeconds (16) },
|
||||
nonHtMode } },
|
||||
{ WIFI_PPDU_FIELD_HT_SIG, { { ppduStart + MicroSeconds (16),
|
||||
ppduStart + MicroSeconds (24) },
|
||||
htSigMode } },
|
||||
{ WIFI_PPDU_FIELD_TRAINING, { { ppduStart + MicroSeconds (24),
|
||||
ppduStart + MicroSeconds (24) }, // sole HT-LTF already in preamble
|
||||
htSigMode } } };
|
||||
CheckPhyHeaderSections (phyEntity->GetPhyHeaderSections (txVector, ppduStart), sections);
|
||||
|
||||
// -> HT-GF format for 2 SS and 2 ESS
|
||||
txVector.SetNss (2);
|
||||
txVector.SetNess (2);
|
||||
sections[WIFI_PPDU_FIELD_TRAINING] = { { ppduStart + MicroSeconds (24),
|
||||
ppduStart + MicroSeconds (36) }, // 3 HT-LTFs (1 data, since 1 already in preamble, + 2 extension)
|
||||
htSigMode };
|
||||
CheckPhyHeaderSections (phyEntity->GetPhyHeaderSections (txVector, ppduStart), sections);
|
||||
|
||||
|
||||
// ==================================================================================
|
||||
// 11ac (VHT)
|
||||
|
||||
Reference in New Issue
Block a user