Bug 2201: Simulation fails when active probing is used in 802.11n/ac with channel bonding enabled
This commit is contained in:
@@ -54,6 +54,7 @@ Bugs fixed
|
||||
- Bug 2183 - LiIonEnergySourceHelper is not in the energy wscript
|
||||
- Bug 2185 - WiFi MacLow may respond to errored frames that it should ignore
|
||||
- Bug 2195 - Udp[*]Client can't send packets to broadcast address
|
||||
- Bug 2201 - Simulation fails when active probing is used in 802.11n/ac with channel bonding enabled
|
||||
- Bug 2207 - Print node ID and time when printing routing tables
|
||||
- Bug 2206 - Split internet-apps from applications
|
||||
- Bug 2208 - Interface index based L4 protocols
|
||||
|
||||
@@ -541,6 +541,18 @@ StaWifiMac::Receive (Ptr<Packet> packet, const WifiMacHeader *hdr)
|
||||
return;
|
||||
}
|
||||
}
|
||||
for (uint32_t i = 0; i < m_phy->GetNModes (); i++)
|
||||
{
|
||||
WifiMode mode = m_phy->GetMode (i);
|
||||
if (rates.IsSupportedRate (mode.GetDataRate (m_phy->GetChannelWidth (), false, 1)))
|
||||
{
|
||||
m_stationManager->AddSupportedMode (hdr->GetAddr2 (), mode);
|
||||
if (rates.IsBasicRate (mode.GetDataRate (m_phy->GetChannelWidth (), false, 1)))
|
||||
{
|
||||
m_stationManager->AddBasicMode (mode);
|
||||
}
|
||||
}
|
||||
}
|
||||
SetBssid (hdr->GetAddr3 ());
|
||||
Time delay = MicroSeconds (probeResp.GetBeaconIntervalUs () * m_maxMissedBeacons);
|
||||
RestartBeaconWatchdog (delay);
|
||||
|
||||
@@ -1003,8 +1003,9 @@ WifiRemoteStationManager::GetControlAnswerMode (Mac48Address address, WifiMode r
|
||||
//First, search the BSS Basic Rate set
|
||||
for (WifiModeListIterator i = m_bssBasicRateSet.begin (); i != m_bssBasicRateSet.end (); i++)
|
||||
{
|
||||
if ((!found || i->GetPhyRate (m_wifiPhy->GetChannelWidth (), m_wifiPhy->GetGuardInterval (), 1) > mode.GetPhyRate (m_wifiPhy->GetChannelWidth (), m_wifiPhy->GetGuardInterval (), 1))
|
||||
&& (i->GetPhyRate (m_wifiPhy->GetChannelWidth (), m_wifiPhy->GetGuardInterval (), 1) <= reqMode.GetPhyRate (m_wifiPhy->GetChannelWidth (), m_wifiPhy->GetGuardInterval (), 1))
|
||||
if ((!found || i->GetPhyRate (m_wifiPhy->GetChannelWidth (), 0, 1) > mode.GetPhyRate (m_wifiPhy->GetChannelWidth (), 0, 1))
|
||||
&& (i->GetPhyRate (m_wifiPhy->GetChannelWidth (), 0, 1) <= reqMode.GetPhyRate (m_wifiPhy->GetChannelWidth (), 0, 1))
|
||||
&& (i->GetConstellationSize (1) <= reqMode.GetConstellationSize (1))
|
||||
&& ((i->GetModulationClass () == reqMode.GetModulationClass ())
|
||||
|| (reqMode.GetModulationClass () == WIFI_MOD_CLASS_HT)
|
||||
|| (reqMode.GetModulationClass () == WIFI_MOD_CLASS_VHT)))
|
||||
@@ -1024,8 +1025,8 @@ WifiRemoteStationManager::GetControlAnswerMode (Mac48Address address, WifiMode r
|
||||
mode = GetDefaultMcs ();
|
||||
for (WifiModeListIterator i = m_bssBasicMcsSet.begin (); i != m_bssBasicMcsSet.end (); i++)
|
||||
{
|
||||
if ((!found || i->GetPhyRate (m_wifiPhy->GetChannelWidth (), m_wifiPhy->GetGuardInterval (), 1) > mode.GetPhyRate (m_wifiPhy->GetChannelWidth (), m_wifiPhy->GetGuardInterval (), 1))
|
||||
&& i->GetPhyRate (m_wifiPhy->GetChannelWidth (), m_wifiPhy->GetGuardInterval (), 1) <= reqMode.GetPhyRate (m_wifiPhy->GetChannelWidth (), m_wifiPhy->GetGuardInterval (), 1))
|
||||
if ((!found || i->GetPhyRate (m_wifiPhy->GetChannelWidth (), 0, 1) > mode.GetPhyRate (m_wifiPhy->GetChannelWidth (), 0, 1))
|
||||
&& i->GetPhyRate (m_wifiPhy->GetChannelWidth (), 0, 1) <= reqMode.GetPhyRate (m_wifiPhy->GetChannelWidth (), 0, 1))
|
||||
//&& thismode.GetModulationClass () == reqMode.GetModulationClass ()) //TODO: check standard
|
||||
{
|
||||
mode = *i;
|
||||
@@ -1076,8 +1077,9 @@ WifiRemoteStationManager::GetControlAnswerMode (Mac48Address address, WifiMode r
|
||||
* ...then it's our best choice so far.
|
||||
*/
|
||||
if (thismode.IsMandatory ()
|
||||
&& (!found || thismode.GetPhyRate (m_wifiPhy->GetChannelWidth (), m_wifiPhy->GetGuardInterval (), 1) > mode.GetPhyRate (m_wifiPhy->GetChannelWidth (), m_wifiPhy->GetGuardInterval (), 1))
|
||||
&& (thismode.GetPhyRate (m_wifiPhy->GetChannelWidth (), m_wifiPhy->GetGuardInterval (), 1) <= reqMode.GetPhyRate (m_wifiPhy->GetChannelWidth (), m_wifiPhy->GetGuardInterval (), 1))
|
||||
&& (!found || thismode.GetPhyRate (m_wifiPhy->GetChannelWidth (), 0, 1) > mode.GetPhyRate (m_wifiPhy->GetChannelWidth (), 0, 1))
|
||||
&& (thismode.GetPhyRate (m_wifiPhy->GetChannelWidth (), 0, 1) <= reqMode.GetPhyRate (m_wifiPhy->GetChannelWidth (), 0, 1))
|
||||
&& (thismode.GetConstellationSize (1) <= reqMode.GetConstellationSize (1))
|
||||
&& ((thismode.GetModulationClass () == reqMode.GetModulationClass ())
|
||||
|| (reqMode.GetModulationClass () == WIFI_MOD_CLASS_HT)
|
||||
|| (reqMode.GetModulationClass () == WIFI_MOD_CLASS_HT)))
|
||||
@@ -1096,9 +1098,9 @@ WifiRemoteStationManager::GetControlAnswerMode (Mac48Address address, WifiMode r
|
||||
{
|
||||
WifiMode thismode = m_wifiPhy->GetMcs (idx);
|
||||
if (thismode.IsMandatory ()
|
||||
&& (!found || thismode.GetPhyRate (m_wifiPhy->GetChannelWidth (), m_wifiPhy->GetGuardInterval (), 1) > mode.GetPhyRate (m_wifiPhy->GetChannelWidth (), m_wifiPhy->GetGuardInterval (), 1))
|
||||
&& thismode.GetPhyRate (m_wifiPhy->GetChannelWidth (), m_wifiPhy->GetGuardInterval (), 1) <= reqMode.GetPhyRate (m_wifiPhy->GetChannelWidth (), m_wifiPhy->GetGuardInterval (), 1)
|
||||
&& thismode.GetModulationClass () == reqMode.GetModulationClass ())
|
||||
&& (!found || thismode.GetPhyRate (m_wifiPhy->GetChannelWidth (), 0, 1) > mode.GetPhyRate (m_wifiPhy->GetChannelWidth (), 0, 1))
|
||||
&& thismode.GetPhyRate (m_wifiPhy->GetChannelWidth (), 0, 1) <= reqMode.GetPhyRate (m_wifiPhy->GetChannelWidth (), 0, 1))
|
||||
//&& thismode.GetModulationClass () == reqMode.GetModulationClass ()) //TODO: check standard
|
||||
{
|
||||
mode = thismode;
|
||||
//As above; we've found a potentially-suitable transmit
|
||||
|
||||
Reference in New Issue
Block a user