wifi: Do not constrain aux PHY max width based on aux PHY max modulation class

This commit is contained in:
Stefano Avallone
2025-02-18 11:10:21 +01:00
parent f750cf045f
commit 81534524bf

View File

@@ -58,9 +58,7 @@ EmlsrManager::GetTypeId()
MakeUintegerAccessor(&EmlsrManager::SetMainPhyId, &EmlsrManager::GetMainPhyId),
MakeUintegerChecker<uint8_t>())
.AddAttribute("AuxPhyChannelWidth",
"The maximum channel width (MHz) supported by Aux PHYs. Note that the "
"maximum channel width is capped to the maximum channel width supported "
"by the configured maximum modulation class supported.",
"The maximum channel width (MHz) supported by Aux PHYs.",
TypeId::ATTR_GET |
TypeId::ATTR_CONSTRUCT, // prevent setting after construction
UintegerValue(20),
@@ -1381,27 +1379,25 @@ EmlsrManager::ComputeOperatingChannels()
m_mainPhyChannels.emplace(linkId, channel);
auto mainPhyChWidth = channel.GetWidth();
auto auxPhyMaxWidth =
std::min(m_auxPhyMaxWidth, GetMaximumChannelWidth(m_auxPhyMaxModClass));
if (auxPhyMaxWidth >= mainPhyChWidth)
if (m_auxPhyMaxWidth >= mainPhyChWidth)
{
// same channel can be used by aux PHYs
m_auxPhyChannels.emplace(linkId, channel);
continue;
}
// aux PHYs will operate on a primary subchannel
auto freq = channel.GetPrimaryChannelCenterFrequency(auxPhyMaxWidth);
auto freq = channel.GetPrimaryChannelCenterFrequency(m_auxPhyMaxWidth);
auto chIt = WifiPhyOperatingChannel::FindFirst(0,
freq,
auxPhyMaxWidth,
m_auxPhyMaxWidth,
WIFI_STANDARD_UNSPECIFIED,
channel.GetPhyBand());
NS_ASSERT_MSG(chIt != WifiPhyOperatingChannel::m_frequencyChannels.end(),
"Primary" << auxPhyMaxWidth << " channel not found");
"Primary" << m_auxPhyMaxWidth << " channel not found");
m_auxPhyChannels.emplace(linkId, chIt);
// find the P20 index for the channel used by the aux PHYs
auto p20Index = channel.GetPrimaryChannelIndex(MHz_u{20});
while (mainPhyChWidth > auxPhyMaxWidth)
while (mainPhyChWidth > m_auxPhyMaxWidth)
{
mainPhyChWidth /= 2;
p20Index /= 2;