diff --git a/src/wifi/model/ap-wifi-mac.cc b/src/wifi/model/ap-wifi-mac.cc index eef050863..92f302ed8 100644 --- a/src/wifi/model/ap-wifi-mac.cc +++ b/src/wifi/model/ap-wifi-mac.cc @@ -947,7 +947,7 @@ ApWifiMac::SendProbeResp(Mac48Address to, uint8_t linkId) probe.Get() = GetHtCapabilities(linkId); probe.Get() = GetHtOperation(linkId); } - if (GetVhtSupported(SINGLE_LINK_OP_ID)) + if (GetVhtSupported(linkId)) { probe.Get() = GetVhtCapabilities(linkId); probe.Get() = GetVhtOperation(linkId); diff --git a/src/wifi/model/sta-wifi-mac.cc b/src/wifi/model/sta-wifi-mac.cc index 3741907eb..3da1a1ace 100644 --- a/src/wifi/model/sta-wifi-mac.cc +++ b/src/wifi/model/sta-wifi-mac.cc @@ -241,38 +241,38 @@ StaWifiMac::GetCurrentChannel(uint8_t linkId) const } void -StaWifiMac::SendProbeRequest() +StaWifiMac::SendProbeRequest(uint8_t linkId) { - NS_LOG_FUNCTION(this); + NS_LOG_FUNCTION(this << linkId); WifiMacHeader hdr; hdr.SetType(WIFI_MAC_MGT_PROBE_REQUEST); hdr.SetAddr1(Mac48Address::GetBroadcast()); - hdr.SetAddr2(GetAddress()); + hdr.SetAddr2(GetFrameExchangeManager(linkId)->GetAddress()); hdr.SetAddr3(Mac48Address::GetBroadcast()); hdr.SetDsNotFrom(); hdr.SetDsNotTo(); Ptr packet = Create(); MgtProbeRequestHeader probe; probe.Get() = GetSsid(); - auto supportedRates = GetSupportedRates(SINGLE_LINK_OP_ID); + auto supportedRates = GetSupportedRates(linkId); probe.Get() = supportedRates.rates; probe.Get() = supportedRates.extendedRates; if (GetHtSupported()) { probe.Get() = GetExtendedCapabilities(); - probe.Get() = GetHtCapabilities(SINGLE_LINK_OP_ID); + probe.Get() = GetHtCapabilities(linkId); } - if (GetVhtSupported(SINGLE_LINK_OP_ID)) + if (GetVhtSupported(linkId)) { - probe.Get() = GetVhtCapabilities(SINGLE_LINK_OP_ID); + probe.Get() = GetVhtCapabilities(linkId); } if (GetHeSupported()) { - probe.Get() = GetHeCapabilities(SINGLE_LINK_OP_ID); + probe.Get() = GetHeCapabilities(linkId); } if (GetEhtSupported()) { - probe.Get() = GetEhtCapabilities(SINGLE_LINK_OP_ID); + probe.Get() = GetEhtCapabilities(linkId); } packet->AddHeader(probe); diff --git a/src/wifi/model/sta-wifi-mac.h b/src/wifi/model/sta-wifi-mac.h index f6f30ab98..fc76a9f86 100644 --- a/src/wifi/model/sta-wifi-mac.h +++ b/src/wifi/model/sta-wifi-mac.h @@ -185,10 +185,11 @@ class StaWifiMac : public WifiMac void SetAssocManager(Ptr assocManager); /** - * Forward a probe request packet to the DCF. The standard is not clear on the correct - * queue for management frames if QoS is supported. We always use the DCF. + * Enqueue a probe request packet for transmission on the given link. + * + * \param linkId the ID of the given link */ - void SendProbeRequest(); + void SendProbeRequest(uint8_t linkId); /** * This method is called after wait beacon timeout or wait probe request timeout has diff --git a/src/wifi/model/wifi-default-assoc-manager.cc b/src/wifi/model/wifi-default-assoc-manager.cc index d2628ef16..61df984fa 100644 --- a/src/wifi/model/wifi-default-assoc-manager.cc +++ b/src/wifi/model/wifi-default-assoc-manager.cc @@ -96,7 +96,13 @@ WifiDefaultAssocManager::DoStartScanning() if (GetScanParams().type == WifiScanParams::ACTIVE) { - Simulator::Schedule(GetScanParams().probeDelay, &StaWifiMac::SendProbeRequest, m_mac); + for (uint8_t linkId = 0; linkId < m_mac->GetNLinks(); linkId++) + { + Simulator::Schedule(GetScanParams().probeDelay, + &StaWifiMac::SendProbeRequest, + m_mac, + linkId); + } m_probeRequestEvent = Simulator::Schedule(GetScanParams().probeDelay + GetScanParams().maxChannelTime, &WifiDefaultAssocManager::EndScanning,