wifi: Use structs to group (MU) EDCA parameters

This commit is contained in:
Stefano Avallone
2023-06-04 22:07:09 +02:00
parent 622f2df62b
commit fc4677bb07
2 changed files with 83 additions and 84 deletions

View File

@@ -1435,29 +1435,29 @@ StaWifiMac::UpdateApInfo(const MgtFrameType& frame,
qosSupported = true;
// The value of the TXOP Limit field is specified as an unsigned integer, with the least
// significant octet transmitted first, in units of 32 μs.
SetEdcaParameters(AC_BE,
edcaParameters->GetBeCWmin(),
edcaParameters->GetBeCWmax(),
edcaParameters->GetBeAifsn(),
32 * MicroSeconds(edcaParameters->GetBeTxopLimit()),
SetEdcaParameters({AC_BE,
edcaParameters->GetBeCWmin(),
edcaParameters->GetBeCWmax(),
edcaParameters->GetBeAifsn(),
32 * MicroSeconds(edcaParameters->GetBeTxopLimit())},
linkId);
SetEdcaParameters(AC_BK,
edcaParameters->GetBkCWmin(),
edcaParameters->GetBkCWmax(),
edcaParameters->GetBkAifsn(),
32 * MicroSeconds(edcaParameters->GetBkTxopLimit()),
SetEdcaParameters({AC_BK,
edcaParameters->GetBkCWmin(),
edcaParameters->GetBkCWmax(),
edcaParameters->GetBkAifsn(),
32 * MicroSeconds(edcaParameters->GetBkTxopLimit())},
linkId);
SetEdcaParameters(AC_VI,
edcaParameters->GetViCWmin(),
edcaParameters->GetViCWmax(),
edcaParameters->GetViAifsn(),
32 * MicroSeconds(edcaParameters->GetViTxopLimit()),
SetEdcaParameters({AC_VI,
edcaParameters->GetViCWmin(),
edcaParameters->GetViCWmax(),
edcaParameters->GetViAifsn(),
32 * MicroSeconds(edcaParameters->GetViTxopLimit())},
linkId);
SetEdcaParameters(AC_VO,
edcaParameters->GetVoCWmin(),
edcaParameters->GetVoCWmax(),
edcaParameters->GetVoAifsn(),
32 * MicroSeconds(edcaParameters->GetVoTxopLimit()),
SetEdcaParameters({AC_VO,
edcaParameters->GetVoCWmin(),
edcaParameters->GetVoCWmax(),
edcaParameters->GetVoAifsn(),
32 * MicroSeconds(edcaParameters->GetVoTxopLimit())},
linkId);
}
GetWifiRemoteStationManager(linkId)->SetQosSupport(apAddr, qosSupported);
@@ -1533,29 +1533,29 @@ StaWifiMac::UpdateApInfo(const MgtFrameType& frame,
const auto& muEdcaParameters = frame.template Get<MuEdcaParameterSet>();
if (muEdcaParameters.has_value())
{
SetMuEdcaParameters(AC_BE,
muEdcaParameters->GetMuCwMin(AC_BE),
muEdcaParameters->GetMuCwMax(AC_BE),
muEdcaParameters->GetMuAifsn(AC_BE),
muEdcaParameters->GetMuEdcaTimer(AC_BE),
SetMuEdcaParameters({AC_BE,
muEdcaParameters->GetMuCwMin(AC_BE),
muEdcaParameters->GetMuCwMax(AC_BE),
muEdcaParameters->GetMuAifsn(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),
SetMuEdcaParameters({AC_BK,
muEdcaParameters->GetMuCwMin(AC_BK),
muEdcaParameters->GetMuCwMax(AC_BK),
muEdcaParameters->GetMuAifsn(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),
SetMuEdcaParameters({AC_VI,
muEdcaParameters->GetMuCwMin(AC_VI),
muEdcaParameters->GetMuCwMax(AC_VI),
muEdcaParameters->GetMuAifsn(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),
SetMuEdcaParameters({AC_VO,
muEdcaParameters->GetMuCwMin(AC_VO),
muEdcaParameters->GetMuCwMax(AC_VO),
muEdcaParameters->GetMuAifsn(AC_VO),
muEdcaParameters->GetMuEdcaTimer(AC_VO)},
linkId);
}
@@ -1722,33 +1722,23 @@ StaWifiMac::SetState(MacState value)
}
void
StaWifiMac::SetEdcaParameters(AcIndex ac,
uint32_t cwMin,
uint32_t cwMax,
uint8_t aifsn,
Time txopLimit,
uint8_t linkId)
StaWifiMac::SetEdcaParameters(const EdcaParams& params, uint8_t linkId)
{
Ptr<QosTxop> edca = GetQosTxop(ac);
edca->SetMinCw(cwMin, linkId);
edca->SetMaxCw(cwMax, linkId);
edca->SetAifsn(aifsn, linkId);
edca->SetTxopLimit(txopLimit, linkId);
Ptr<QosTxop> edca = GetQosTxop(params.ac);
edca->SetMinCw(params.cwMin, linkId);
edca->SetMaxCw(params.cwMax, linkId);
edca->SetAifsn(params.aifsn, linkId);
edca->SetTxopLimit(params.txopLimit, linkId);
}
void
StaWifiMac::SetMuEdcaParameters(AcIndex ac,
uint16_t cwMin,
uint16_t cwMax,
uint8_t aifsn,
Time muEdcaTimer,
uint8_t linkId)
StaWifiMac::SetMuEdcaParameters(const MuEdcaParams& params, uint8_t linkId)
{
Ptr<QosTxop> edca = GetQosTxop(ac);
edca->SetMuCwMin(cwMin, linkId);
edca->SetMuCwMax(cwMax, linkId);
edca->SetMuAifsn(aifsn, linkId);
edca->SetMuEdcaTimer(muEdcaTimer, linkId);
Ptr<QosTxop> edca = GetQosTxop(params.ac);
edca->SetMuCwMin(params.cwMin, linkId);
edca->SetMuCwMax(params.cwMax, linkId);
edca->SetMuAifsn(params.aifsn, linkId);
edca->SetMuEdcaTimer(params.muEdcaTimer, linkId);
}
void

View File

@@ -500,38 +500,47 @@ class StaWifiMac : public WifiMac
* \param value the new state
*/
void SetState(MacState value);
/**
* EDCA Parameters
*/
struct EdcaParams
{
AcIndex ac; //!< the access category
uint32_t cwMin; //!< the minimum contention window size
uint32_t cwMax; //!< the maximum contention window size
uint8_t aifsn; //!< the number of slots that make up an AIFS
Time txopLimit; //!< the TXOP limit
};
/**
* 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 params the EDCA parameters
* \param linkId the ID of the given link
*/
void SetEdcaParameters(AcIndex ac,
uint32_t cwMin,
uint32_t cwMax,
uint8_t aifsn,
Time txopLimit,
uint8_t linkId);
void SetEdcaParameters(const EdcaParams& params, uint8_t linkId);
/**
* MU EDCA Parameters
*/
struct MuEdcaParams
{
AcIndex ac; //!< the access category
uint32_t cwMin; //!< the minimum contention window size
uint32_t cwMax; //!< the maximum contention window size
uint8_t aifsn; //!< the number of slots that make up an AIFS
Time muEdcaTimer; //!< the MU EDCA timer
};
/**
* 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 params the MU EDCA parameters
* \param linkId the ID of the given link
*/
void SetMuEdcaParameters(AcIndex ac,
uint16_t cwMin,
uint16_t cwMax,
uint8_t aifsn,
Time muEdcaTimer,
uint8_t linkId);
void SetMuEdcaParameters(const MuEdcaParams& params, uint8_t linkId);
/**
* Return the Capability information for the given link.
*