diff --git a/RELEASE_NOTES b/RELEASE_NOTES index 7eb26be37..ceac55911 100644 --- a/RELEASE_NOTES +++ b/RELEASE_NOTES @@ -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 diff --git a/src/wifi/model/sta-wifi-mac.cc b/src/wifi/model/sta-wifi-mac.cc index 71b84e333..3fc9e1a9c 100644 --- a/src/wifi/model/sta-wifi-mac.cc +++ b/src/wifi/model/sta-wifi-mac.cc @@ -541,6 +541,18 @@ StaWifiMac::Receive (Ptr 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); diff --git a/src/wifi/model/wifi-remote-station-manager.cc b/src/wifi/model/wifi-remote-station-manager.cc index 2ac768d89..b99f99bb5 100644 --- a/src/wifi/model/wifi-remote-station-manager.cc +++ b/src/wifi/model/wifi-remote-station-manager.cc @@ -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