wifi: Only update bands tracked by interference helper if needed
This commit is contained in:
committed by
Sebastien Deronne
parent
d666ad494e
commit
2df30d6838
@@ -274,6 +274,13 @@ InterferenceHelper::RemoveBands(FrequencyRange range)
|
||||
m_firstPowers.erase(range);
|
||||
}
|
||||
|
||||
bool
|
||||
InterferenceHelper::HasBand(WifiSpectrumBand band, const FrequencyRange& range) const
|
||||
{
|
||||
NS_LOG_FUNCTION(this << band.first << band.second << range);
|
||||
return (m_niChanges.count(range) > 0 && m_niChanges.at(range).count(band) > 0);
|
||||
}
|
||||
|
||||
void
|
||||
InterferenceHelper::AddBand(WifiSpectrumBand band, const FrequencyRange& range)
|
||||
{
|
||||
|
||||
@@ -159,6 +159,15 @@ class InterferenceHelper : public Object
|
||||
*/
|
||||
void RemoveBands(FrequencyRange range);
|
||||
|
||||
/**
|
||||
* Check whether a given band is tracked by this interference helper.
|
||||
*
|
||||
* \param band the band to be checked
|
||||
* \param range the frequency range the band to check belongs to
|
||||
* \return true if the band is already tracked by this interference helper, false otherwise
|
||||
*/
|
||||
bool HasBand(WifiSpectrumBand band, const FrequencyRange& range) const;
|
||||
|
||||
/**
|
||||
* Set the noise figure.
|
||||
*
|
||||
|
||||
@@ -38,6 +38,8 @@
|
||||
#include "ns3/spectrum-channel.h"
|
||||
#include "ns3/wifi-net-device.h"
|
||||
|
||||
#include <algorithm>
|
||||
|
||||
namespace ns3
|
||||
{
|
||||
|
||||
@@ -119,11 +121,10 @@ SpectrumWifiPhy::UpdateInterferenceHelperBands()
|
||||
NS_LOG_FUNCTION(this);
|
||||
NS_ASSERT(!m_spectrumPhyInterfaces.empty());
|
||||
uint16_t channelWidth = GetChannelWidth();
|
||||
m_interference->RemoveBands(WHOLE_WIFI_SPECTRUM);
|
||||
std::vector<WifiSpectrumBand> bands;
|
||||
if (channelWidth < 20)
|
||||
{
|
||||
WifiSpectrumBand band = GetBand(channelWidth);
|
||||
m_interference->AddBand(band, WHOLE_WIFI_SPECTRUM);
|
||||
bands.push_back(GetBand(channelWidth));
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -131,7 +132,7 @@ SpectrumWifiPhy::UpdateInterferenceHelperBands()
|
||||
{
|
||||
for (uint32_t i = 0; i < (channelWidth / bw); ++i)
|
||||
{
|
||||
m_interference->AddBand(GetBand(bw, i), WHOLE_WIFI_SPECTRUM);
|
||||
bands.push_back(GetBand(bw, i));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -183,9 +184,21 @@ SpectrumWifiPhy::UpdateInterferenceHelperBands()
|
||||
}
|
||||
for (const auto& bandRuPair : m_ruBands[channelWidth])
|
||||
{
|
||||
m_interference->AddBand(bandRuPair.first, WHOLE_WIFI_SPECTRUM);
|
||||
bands.push_back(bandRuPair.first);
|
||||
}
|
||||
}
|
||||
const auto bandsChanged = std::any_of(bands.cbegin(), bands.cend(), [&](const auto& band) {
|
||||
return !m_interference->HasBand(band, WHOLE_WIFI_SPECTRUM);
|
||||
});
|
||||
if (!bandsChanged)
|
||||
{
|
||||
return;
|
||||
}
|
||||
m_interference->RemoveBands(WHOLE_WIFI_SPECTRUM);
|
||||
for (const auto& band : bands)
|
||||
{
|
||||
m_interference->AddBand(band, WHOLE_WIFI_SPECTRUM);
|
||||
}
|
||||
}
|
||||
|
||||
Ptr<Channel>
|
||||
|
||||
Reference in New Issue
Block a user