From 622f2df62b26e80dbdc27d90dd815cf28256387a Mon Sep 17 00:00:00 2001 From: Stefano Avallone Date: Thu, 1 Jun 2023 12:22:04 +0200 Subject: [PATCH] wifi: Set (MU) EDCA parameters on correct links --- src/wifi/model/sta-wifi-mac.cc | 46 +++++++++++++++++++++------------- src/wifi/model/sta-wifi-mac.h | 12 ++++++--- 2 files changed, 36 insertions(+), 22 deletions(-) diff --git a/src/wifi/model/sta-wifi-mac.cc b/src/wifi/model/sta-wifi-mac.cc index bbbe78ab7..9ceea2b75 100644 --- a/src/wifi/model/sta-wifi-mac.cc +++ b/src/wifi/model/sta-wifi-mac.cc @@ -1439,22 +1439,26 @@ StaWifiMac::UpdateApInfo(const MgtFrameType& frame, edcaParameters->GetBeCWmin(), edcaParameters->GetBeCWmax(), edcaParameters->GetBeAifsn(), - 32 * MicroSeconds(edcaParameters->GetBeTxopLimit())); + 32 * MicroSeconds(edcaParameters->GetBeTxopLimit()), + linkId); SetEdcaParameters(AC_BK, edcaParameters->GetBkCWmin(), edcaParameters->GetBkCWmax(), edcaParameters->GetBkAifsn(), - 32 * MicroSeconds(edcaParameters->GetBkTxopLimit())); + 32 * MicroSeconds(edcaParameters->GetBkTxopLimit()), + linkId); SetEdcaParameters(AC_VI, edcaParameters->GetViCWmin(), edcaParameters->GetViCWmax(), edcaParameters->GetViAifsn(), - 32 * MicroSeconds(edcaParameters->GetViTxopLimit())); + 32 * MicroSeconds(edcaParameters->GetViTxopLimit()), + linkId); SetEdcaParameters(AC_VO, edcaParameters->GetVoCWmin(), edcaParameters->GetVoCWmax(), edcaParameters->GetVoAifsn(), - 32 * MicroSeconds(edcaParameters->GetVoTxopLimit())); + 32 * MicroSeconds(edcaParameters->GetVoTxopLimit()), + linkId); } GetWifiRemoteStationManager(linkId)->SetQosSupport(apAddr, qosSupported); @@ -1533,22 +1537,26 @@ StaWifiMac::UpdateApInfo(const MgtFrameType& frame, muEdcaParameters->GetMuCwMin(AC_BE), muEdcaParameters->GetMuCwMax(AC_BE), muEdcaParameters->GetMuAifsn(AC_BE), - muEdcaParameters->GetMuEdcaTimer(AC_BE)); + muEdcaParameters->GetMuEdcaTimer(AC_BE), + linkId); SetMuEdcaParameters(AC_BK, muEdcaParameters->GetMuCwMin(AC_BK), muEdcaParameters->GetMuCwMax(AC_BK), muEdcaParameters->GetMuAifsn(AC_BK), - muEdcaParameters->GetMuEdcaTimer(AC_BK)); + muEdcaParameters->GetMuEdcaTimer(AC_BK), + linkId); SetMuEdcaParameters(AC_VI, muEdcaParameters->GetMuCwMin(AC_VI), muEdcaParameters->GetMuCwMax(AC_VI), muEdcaParameters->GetMuAifsn(AC_VI), - muEdcaParameters->GetMuEdcaTimer(AC_VI)); + muEdcaParameters->GetMuEdcaTimer(AC_VI), + linkId); SetMuEdcaParameters(AC_VO, muEdcaParameters->GetMuCwMin(AC_VO), muEdcaParameters->GetMuCwMax(AC_VO), muEdcaParameters->GetMuAifsn(AC_VO), - muEdcaParameters->GetMuEdcaTimer(AC_VO)); + muEdcaParameters->GetMuEdcaTimer(AC_VO), + linkId); } if (!GetEhtSupported()) @@ -1718,13 +1726,14 @@ StaWifiMac::SetEdcaParameters(AcIndex ac, uint32_t cwMin, uint32_t cwMax, uint8_t aifsn, - Time txopLimit) + Time txopLimit, + uint8_t linkId) { Ptr edca = GetQosTxop(ac); - edca->SetMinCw(cwMin, SINGLE_LINK_OP_ID); - edca->SetMaxCw(cwMax, SINGLE_LINK_OP_ID); - edca->SetAifsn(aifsn, SINGLE_LINK_OP_ID); - edca->SetTxopLimit(txopLimit, SINGLE_LINK_OP_ID); + edca->SetMinCw(cwMin, linkId); + edca->SetMaxCw(cwMax, linkId); + edca->SetAifsn(aifsn, linkId); + edca->SetTxopLimit(txopLimit, linkId); } void @@ -1732,13 +1741,14 @@ StaWifiMac::SetMuEdcaParameters(AcIndex ac, uint16_t cwMin, uint16_t cwMax, uint8_t aifsn, - Time muEdcaTimer) + Time muEdcaTimer, + uint8_t linkId) { Ptr edca = GetQosTxop(ac); - edca->SetMuCwMin(cwMin, SINGLE_LINK_OP_ID); - edca->SetMuCwMax(cwMax, SINGLE_LINK_OP_ID); - edca->SetMuAifsn(aifsn, SINGLE_LINK_OP_ID); - edca->SetMuEdcaTimer(muEdcaTimer, SINGLE_LINK_OP_ID); + edca->SetMuCwMin(cwMin, linkId); + edca->SetMuCwMax(cwMax, linkId); + edca->SetMuAifsn(aifsn, linkId); + edca->SetMuEdcaTimer(muEdcaTimer, linkId); } void diff --git a/src/wifi/model/sta-wifi-mac.h b/src/wifi/model/sta-wifi-mac.h index 68772d36b..10fef4216 100644 --- a/src/wifi/model/sta-wifi-mac.h +++ b/src/wifi/model/sta-wifi-mac.h @@ -501,33 +501,37 @@ class StaWifiMac : public WifiMac */ void SetState(MacState value); /** - * Set the EDCA parameters. + * Set the EDCA parameters for the given link. * * \param ac the access class * \param cwMin the minimum contention window size * \param cwMax the maximum contention window size * \param aifsn the number of slots that make up an AIFS * \param txopLimit the TXOP limit + * \param linkId the ID of the given link */ void SetEdcaParameters(AcIndex ac, uint32_t cwMin, uint32_t cwMax, uint8_t aifsn, - Time txopLimit); + Time txopLimit, + uint8_t linkId); /** - * Set the MU EDCA parameters. + * Set the MU EDCA parameters for the given link. * * \param ac the Access Category * \param cwMin the minimum contention window size * \param cwMax the maximum contention window size * \param aifsn the number of slots that make up an AIFS * \param muEdcaTimer the MU EDCA timer + * \param linkId the ID of the given link */ void SetMuEdcaParameters(AcIndex ac, uint16_t cwMin, uint16_t cwMax, uint8_t aifsn, - Time muEdcaTimer); + Time muEdcaTimer, + uint8_t linkId); /** * Return the Capability information for the given link. *