diff --git a/RELEASE_NOTES b/RELEASE_NOTES index 643a51526..712d47e8f 100644 --- a/RELEASE_NOTES +++ b/RELEASE_NOTES @@ -73,6 +73,7 @@ Bugs fixed - Bug 2614 - RIP header version should be set to 2 - Bug 2627 - Ipv6RawSocket does not honor the bound interface when sending packets - Bug 2628 - Simulation crashes because of an out of range TID +- Bug 2629 - Assert failure in MinstrelHtWifiManager::GetLowestIndex Known issues ------------ diff --git a/src/wifi/model/sta-wifi-mac.cc b/src/wifi/model/sta-wifi-mac.cc index b3fb6e061..232bd90c7 100644 --- a/src/wifi/model/sta-wifi-mac.cc +++ b/src/wifi/model/sta-wifi-mac.cc @@ -517,6 +517,15 @@ StaWifiMac::Receive (Ptr packet, const WifiMacHeader *hdr) Time delay = MicroSeconds (beacon.GetBeaconIntervalUs () * m_maxMissedBeacons); RestartBeaconWatchdog (delay); SetBssid (hdr->GetAddr3 ()); + SupportedRates rates = beacon.GetSupportedRates (); + for (uint32_t i = 0; i < m_phy->GetNModes (); i++) + { + WifiMode mode = m_phy->GetMode (i); + if (rates.IsSupportedRate (mode.GetDataRate (m_phy->GetChannelWidth ()))) + { + m_stationManager->AddSupportedMode (hdr->GetAddr2 (), mode); + } + } bool isShortPreambleEnabled = capabilities.IsShortPreamble (); if (m_erpSupported) { @@ -575,6 +584,14 @@ StaWifiMac::Receive (Ptr packet, const WifiMacHeader *hdr) { m_stationManager->SetUseGreenfieldProtection (false); } + for (uint32_t i = 0; i < m_phy->GetNMcs (); i++) + { + WifiMode mcs = m_phy->GetMcs (i); + if (mcs.GetModulationClass () == WIFI_MOD_CLASS_HT && htCapabilities.IsSupportedMcs (mcs.GetMcsValue ())) + { + m_stationManager->AddSupportedMcs (hdr->GetAddr2 (), mcs); + } + } } } if (m_vhtSupported) @@ -585,13 +602,29 @@ StaWifiMac::Receive (Ptr packet, const WifiMacHeader *hdr) { m_stationManager->AddStationVhtCapabilities (hdr->GetAddr2 (), vhtCapabilities); VhtOperation vhtOperation = beacon.GetVhtOperation (); + for (uint32_t i = 0; i < m_phy->GetNMcs (); i++) + { + WifiMode mcs = m_phy->GetMcs (i); + if (mcs.GetModulationClass () == WIFI_MOD_CLASS_VHT && vhtCapabilities.IsSupportedRxMcs (mcs.GetMcsValue ())) + { + m_stationManager->AddSupportedMcs (hdr->GetAddr2 (), mcs); + } + } } } if (m_heSupported) { - HeCapabilities hecapabilities = beacon.GetHeCapabilities (); + HeCapabilities heCapabilities = beacon.GetHeCapabilities (); //todo: once we support non constant rate managers, we should add checks here whether HE is supported by the peer - m_stationManager->AddStationHeCapabilities (hdr->GetAddr2 (), hecapabilities); + m_stationManager->AddStationHeCapabilities (hdr->GetAddr2 (), heCapabilities); + for (uint32_t i = 0; i < m_phy->GetNMcs (); i++) + { + WifiMode mcs = m_phy->GetMcs (i); + if (mcs.GetModulationClass () == WIFI_MOD_CLASS_HE && heCapabilities.IsSupportedRxMcs (mcs.GetMcsValue ())) + { + m_stationManager->AddSupportedMcs (hdr->GetAddr2 (), mcs); + } + } } m_stationManager->SetShortPreambleEnabled (isShortPreambleEnabled); m_stationManager->SetShortSlotTimeEnabled (capabilities.IsShortSlotTime ()); @@ -807,11 +840,11 @@ StaWifiMac::Receive (Ptr packet, const WifiMacHeader *hdr) } if (m_htSupported) { - HtCapabilities htcapabilities = assocResp.GetHtCapabilities (); + HtCapabilities htCapabilities = assocResp.GetHtCapabilities (); for (uint32_t i = 0; i < m_phy->GetNMcs (); i++) { WifiMode mcs = m_phy->GetMcs (i); - if (mcs.GetModulationClass () == WIFI_MOD_CLASS_HT && htcapabilities.IsSupportedMcs (mcs.GetMcsValue ())) + if (mcs.GetModulationClass () == WIFI_MOD_CLASS_HT && htCapabilities.IsSupportedMcs (mcs.GetMcsValue ())) { m_stationManager->AddSupportedMcs (hdr->GetAddr2 (), mcs); //here should add a control to add basic MCS when it is implemented @@ -824,7 +857,7 @@ StaWifiMac::Receive (Ptr packet, const WifiMacHeader *hdr) for (uint32_t i = 0; i < m_phy->GetNMcs (); i++) { WifiMode mcs = m_phy->GetMcs (i); - if (mcs.GetModulationClass () == WIFI_MOD_CLASS_VHT && vhtcapabilities.IsSupportedTxMcs (mcs.GetMcsValue ())) + if (mcs.GetModulationClass () == WIFI_MOD_CLASS_VHT && vhtcapabilities.IsSupportedRxMcs (mcs.GetMcsValue ())) { m_stationManager->AddSupportedMcs (hdr->GetAddr2 (), mcs); //here should add a control to add basic MCS when it is implemented @@ -833,11 +866,11 @@ StaWifiMac::Receive (Ptr packet, const WifiMacHeader *hdr) } if (m_heSupported) { - HeCapabilities hecapabilities = assocResp.GetHeCapabilities (); + HeCapabilities heCapabilities = assocResp.GetHeCapabilities (); for (uint32_t i = 0; i < m_phy->GetNMcs (); i++) { WifiMode mcs = m_phy->GetMcs (i); - if (mcs.GetModulationClass () == WIFI_MOD_CLASS_HE && hecapabilities.IsSupportedTxMcs (mcs.GetMcsValue ())) + if (mcs.GetModulationClass () == WIFI_MOD_CLASS_HE && heCapabilities.IsSupportedRxMcs (mcs.GetMcsValue ())) { m_stationManager->AddSupportedMcs (hdr->GetAddr2 (), mcs); //here should add a control to add basic MCS when it is implemented