diff --git a/src/wifi/test/wifi-mac-ofdma-test.cc b/src/wifi/test/wifi-mac-ofdma-test.cc index a94c42c3b..1d77c2490 100644 --- a/src/wifi/test/wifi-mac-ofdma-test.cc +++ b/src/wifi/test/wifi-mac-ofdma-test.cc @@ -85,6 +85,7 @@ class TestMultiUserScheduler : public MultiUserScheduler WifiTxVector m_txVector; //!< the TX vector for MU PPDUs WifiTxParameters m_txParams; //!< TX parameters WifiPsduMap m_psduMap; //!< the DL MU PPDU to transmit + WifiModulationClass m_modClass; //!< modulation class for DL MU PPDUs and TB PPDUs }; NS_OBJECT_ENSURE_REGISTERED(TestMultiUserScheduler); @@ -92,10 +93,16 @@ NS_OBJECT_ENSURE_REGISTERED(TestMultiUserScheduler); TypeId TestMultiUserScheduler::GetTypeId() { - static TypeId tid = TypeId("ns3::TestMultiUserScheduler") - .SetParent() - .SetGroupName("Wifi") - .AddConstructor(); + static TypeId tid = + TypeId("ns3::TestMultiUserScheduler") + .SetParent() + .SetGroupName("Wifi") + .AddConstructor() + .AddAttribute("ModulationClass", + "Modulation class for DL MU PPDUs and TB PPDUs.", + EnumValue(WIFI_MOD_CLASS_HE), + MakeEnumAccessor(&TestMultiUserScheduler::m_modClass), + MakeEnumChecker(WIFI_MOD_CLASS_HE, "HE", WIFI_MOD_CLASS_EHT, "EHT")); return tid; } @@ -134,7 +141,8 @@ TestMultiUserScheduler::SelectTxFormat() : TriggerFrameType::BASIC_TRIGGER); WifiTxVector txVector = m_txVector; - txVector.SetPreambleType(WIFI_PREAMBLE_HE_TB); + txVector.SetPreambleType(m_modClass == WIFI_MOD_CLASS_HE ? WIFI_PREAMBLE_HE_TB + : WIFI_PREAMBLE_EHT_TB); m_trigger = CtrlTriggerHeader(ulTriggerType, txVector); txVector.SetGuardInterval(m_trigger.GetGuardInterval()); @@ -261,7 +269,7 @@ TestMultiUserScheduler::SelectTxFormat() void TestMultiUserScheduler::ComputeWifiTxVector() { - if (m_txVector.GetPreambleType() == WIFI_PREAMBLE_HE_MU) + if (m_txVector.IsDlMu()) { // the TX vector has been already computed return; @@ -269,7 +277,12 @@ TestMultiUserScheduler::ComputeWifiTxVector() uint16_t bw = m_apMac->GetWifiPhy()->GetChannelWidth(); - m_txVector.SetPreambleType(WIFI_PREAMBLE_HE_MU); + m_txVector.SetPreambleType(m_modClass == WIFI_MOD_CLASS_HE ? WIFI_PREAMBLE_HE_MU + : WIFI_PREAMBLE_EHT_MU); + if (IsEht(m_txVector.GetPreambleType())) + { + m_txVector.SetEhtPpduType(0); + } m_txVector.SetChannelWidth(bw); m_txVector.SetGuardInterval(m_apMac->GetHeConfiguration()->GetGuardInterval().GetNanoSeconds()); m_txVector.SetTxPowerLevel(GetWifiRemoteStationManager()->GetDefaultTxPowerLevel()); @@ -329,6 +342,18 @@ TestMultiUserScheduler::ComputeUlMuInfo() return UlMuInfo{m_trigger, m_triggerHdr, std::move(m_txParams)}; } +/** + * \ingroup wifi-test + * \ingroup tests + * The scenarios + */ +enum class WifiOfdmaScenario : uint8_t +{ + HE = 0, // HE AP and HE non-AP STAs + HE_EHT, // EHT AP, some EHT non-AP STAs and some non-EHT HE non-AP STAs + EHT // EHT AP and EHT non-AP STAs +}; + /** * \ingroup wifi-test * \ingroup tests @@ -367,13 +392,15 @@ class OfdmaAckSequenceTest : public TestCase * \param txopLimit the TXOP limit in microseconds * \param nPktsPerSta number of packets to send to/receive from each station * \param muEdcaParameterSet the MU EDCA Parameter Set + * \param scenario the OFDMA scenario to test */ OfdmaAckSequenceTest(uint16_t width, WifiAcknowledgment::Method dlType, uint32_t maxAmpduSize, uint16_t txopLimit, uint16_t nPktsPerSta, - MuEdcaParameterSet muEdcaParameterSet); + MuEdcaParameterSet muEdcaParameterSet, + WifiOfdmaScenario scenario); ~OfdmaAckSequenceTest() override; /** @@ -433,6 +460,9 @@ class OfdmaAckSequenceTest : public TestCase uint16_t m_txopLimit; ///< TXOP limit in microseconds uint16_t m_nPktsPerSta; ///< number of packets to send to each station MuEdcaParameterSet m_muEdcaParameterSet; ///< MU EDCA Parameter Set + WifiOfdmaScenario m_scenario; ///< OFDMA scenario to test + WifiPreamble m_dlMuPreamble; ///< expected preamble type for DL MU PPDUs + WifiPreamble m_tbPreamble; ///< expected preamble type for TB PPDUs bool m_ulPktsGenerated; ///< whether UL packets for HE TB PPDUs have been generated uint16_t m_received; ///< number of packets received by the stations uint16_t m_flushed; ///< number of DL packets flushed after DL MU PPDU @@ -445,7 +475,8 @@ OfdmaAckSequenceTest::OfdmaAckSequenceTest(uint16_t width, uint32_t maxAmpduSize, uint16_t txopLimit, uint16_t nPktsPerSta, - MuEdcaParameterSet muEdcaParameterSet) + MuEdcaParameterSet muEdcaParameterSet, + WifiOfdmaScenario scenario) : TestCase("Check correct operation of DL OFDMA acknowledgment sequences"), m_nStations(4), m_sockets(m_nStations), @@ -455,12 +486,25 @@ OfdmaAckSequenceTest::OfdmaAckSequenceTest(uint16_t width, m_txopLimit(txopLimit), m_nPktsPerSta(nPktsPerSta), m_muEdcaParameterSet(muEdcaParameterSet), + m_scenario(scenario), m_ulPktsGenerated(false), m_received(0), m_flushed(0), m_edcaDisabledStartTime(Seconds(0)), m_cwValues(std::vector(m_nStations, 2)) // 2 is an invalid CW value { + switch (m_scenario) + { + case WifiOfdmaScenario::HE: + case WifiOfdmaScenario::HE_EHT: + m_dlMuPreamble = WIFI_PREAMBLE_HE_MU; + m_tbPreamble = WIFI_PREAMBLE_HE_TB; + break; + case WifiOfdmaScenario::EHT: + m_dlMuPreamble = WIFI_PREAMBLE_EHT_MU; + m_tbPreamble = WIFI_PREAMBLE_EHT_TB; + break; + } } OfdmaAckSequenceTest::~OfdmaAckSequenceTest() @@ -508,13 +552,15 @@ OfdmaAckSequenceTest::Transmit(std::string context, ? " TID " + std::to_string(*psdu->GetTids().begin()) : "") << " txDuration " << txDuration << " duration/ID " - << psdu->GetHeader(0).GetDuration() << " #TX PSDUs = " << m_txPsdus.size()); + << psdu->GetHeader(0).GetDuration() << " #TX PSDUs = " << m_txPsdus.size() + << "\n" + << "TXVECTOR: " << txVector << "\n"); } } // Flush the MAC queue of the AP after sending a DL MU PPDU (no need for // further transmissions) - if (txVector.GetPreambleType() == WIFI_PREAMBLE_HE_MU) + if (txVector.GetPreambleType() == m_dlMuPreamble) { m_flushed = 0; for (uint32_t i = 0; i < m_staDevices.GetN(); i++) @@ -541,7 +587,7 @@ OfdmaAckSequenceTest::Transmit(std::string context, } } } - else if (txVector.GetPreambleType() == WIFI_PREAMBLE_HE_TB && + else if (txVector.GetPreambleType() == m_tbPreamble && psduMap.begin()->second->GetHeader(0).HasData()) { Mac48Address sender = psduMap.begin()->second->GetAddr2(); @@ -658,7 +704,7 @@ OfdmaAckSequenceTest::CheckResults(Time sifs, Time slotTime, uint8_t aifsn) "Expected one User Info field per station"); // A first STA sends a QoS Null frame in an HE TB PPDU a SIFS after the reception of the BSRP TF - NS_TEST_EXPECT_MSG_EQ((m_txPsdus[1].txVector.GetPreambleType() == WIFI_PREAMBLE_HE_TB && + NS_TEST_EXPECT_MSG_EQ((m_txPsdus[1].txVector.GetPreambleType() == m_tbPreamble && m_txPsdus[1].psduMap.size() == 1 && m_txPsdus[1].psduMap.begin()->second->GetNMpdus() == 1), true, @@ -691,7 +737,7 @@ OfdmaAckSequenceTest::CheckResults(Time sifs, Time slotTime, uint8_t aifsn) // A second STA sends a QoS Null frame in an HE TB PPDU a SIFS after the reception of the BSRP // TF - NS_TEST_EXPECT_MSG_EQ((m_txPsdus[2].txVector.GetPreambleType() == WIFI_PREAMBLE_HE_TB && + NS_TEST_EXPECT_MSG_EQ((m_txPsdus[2].txVector.GetPreambleType() == m_tbPreamble && m_txPsdus[2].psduMap.size() == 1 && m_txPsdus[2].psduMap.begin()->second->GetNMpdus() == 1), true, @@ -721,7 +767,7 @@ OfdmaAckSequenceTest::CheckResults(Time sifs, Time slotTime, uint8_t aifsn) "Duration/ID in BSRP Trigger Frame is too short"); // A third STA sends a QoS Null frame in an HE TB PPDU a SIFS after the reception of the BSRP TF - NS_TEST_EXPECT_MSG_EQ((m_txPsdus[3].txVector.GetPreambleType() == WIFI_PREAMBLE_HE_TB && + NS_TEST_EXPECT_MSG_EQ((m_txPsdus[3].txVector.GetPreambleType() == m_tbPreamble && m_txPsdus[3].psduMap.size() == 1 && m_txPsdus[3].psduMap.begin()->second->GetNMpdus() == 1), true, @@ -752,7 +798,7 @@ OfdmaAckSequenceTest::CheckResults(Time sifs, Time slotTime, uint8_t aifsn) // A fourth STA sends a QoS Null frame in an HE TB PPDU a SIFS after the reception of the BSRP // TF - NS_TEST_EXPECT_MSG_EQ((m_txPsdus[4].txVector.GetPreambleType() == WIFI_PREAMBLE_HE_TB && + NS_TEST_EXPECT_MSG_EQ((m_txPsdus[4].txVector.GetPreambleType() == m_tbPreamble && m_txPsdus[4].psduMap.size() == 1 && m_txPsdus[4].psduMap.begin()->second->GetNMpdus() == 1), true, @@ -802,7 +848,7 @@ OfdmaAckSequenceTest::CheckResults(Time sifs, Time slotTime, uint8_t aifsn) } // A first STA sends QoS data frames in an HE TB PPDU a SIFS after the reception of the Basic TF - NS_TEST_EXPECT_MSG_EQ((m_txPsdus[6].txVector.GetPreambleType() == WIFI_PREAMBLE_HE_TB && + NS_TEST_EXPECT_MSG_EQ((m_txPsdus[6].txVector.GetPreambleType() == m_tbPreamble && m_txPsdus[6].psduMap.size() == 1 && m_txPsdus[6].psduMap.begin()->second->GetNMpdus() == 2 && m_txPsdus[6].psduMap.begin()->second->GetHeader(0).IsQosData() && @@ -818,7 +864,7 @@ OfdmaAckSequenceTest::CheckResults(Time sifs, Time slotTime, uint8_t aifsn) // A second STA sends QoS data frames in an HE TB PPDU a SIFS after the reception of the Basic // TF - NS_TEST_EXPECT_MSG_EQ((m_txPsdus[7].txVector.GetPreambleType() == WIFI_PREAMBLE_HE_TB && + NS_TEST_EXPECT_MSG_EQ((m_txPsdus[7].txVector.GetPreambleType() == m_tbPreamble && m_txPsdus[7].psduMap.size() == 1 && m_txPsdus[7].psduMap.begin()->second->GetNMpdus() == 2 && m_txPsdus[7].psduMap.begin()->second->GetHeader(0).IsQosData() && @@ -833,7 +879,7 @@ OfdmaAckSequenceTest::CheckResults(Time sifs, Time slotTime, uint8_t aifsn) "QoS data frames in HE TB PPDU sent too late"); // A third STA sends QoS data frames in an HE TB PPDU a SIFS after the reception of the Basic TF - NS_TEST_EXPECT_MSG_EQ((m_txPsdus[8].txVector.GetPreambleType() == WIFI_PREAMBLE_HE_TB && + NS_TEST_EXPECT_MSG_EQ((m_txPsdus[8].txVector.GetPreambleType() == m_tbPreamble && m_txPsdus[8].psduMap.size() == 1 && m_txPsdus[8].psduMap.begin()->second->GetNMpdus() == 2 && m_txPsdus[8].psduMap.begin()->second->GetHeader(0).IsQosData() && @@ -849,7 +895,7 @@ OfdmaAckSequenceTest::CheckResults(Time sifs, Time slotTime, uint8_t aifsn) // A fourth STA sends QoS data frames in an HE TB PPDU a SIFS after the reception of the Basic // TF - NS_TEST_EXPECT_MSG_EQ((m_txPsdus[9].txVector.GetPreambleType() == WIFI_PREAMBLE_HE_TB && + NS_TEST_EXPECT_MSG_EQ((m_txPsdus[9].txVector.GetPreambleType() == m_tbPreamble && m_txPsdus[9].psduMap.size() == 1 && m_txPsdus[9].psduMap.begin()->second->GetNMpdus() == 2 && m_txPsdus[9].psduMap.begin()->second->GetHeader(0).IsQosData() && @@ -912,7 +958,7 @@ OfdmaAckSequenceTest::CheckResults(Time sifs, Time slotTime, uint8_t aifsn) // the AP sends a DL MU PPDU NS_TEST_EXPECT_MSG_GT_OR_EQ(m_txPsdus.size(), 12, "Expected at least 12 transmitted packet"); NS_TEST_EXPECT_MSG_EQ(m_txPsdus[11].txVector.GetPreambleType(), - WIFI_PREAMBLE_HE_MU, + m_dlMuPreamble, "Expected a DL MU PPDU"); NS_TEST_EXPECT_MSG_EQ(m_txPsdus[11].psduMap.size(), 4, @@ -1106,7 +1152,7 @@ OfdmaAckSequenceTest::CheckResults(Time sifs, Time slotTime, uint8_t aifsn) // A first STA sends a Block Ack in an HE TB PPDU a SIFS after the reception of the DL MU // PPDU - NS_TEST_EXPECT_MSG_EQ((m_txPsdus[13].txVector.GetPreambleType() == WIFI_PREAMBLE_HE_TB && + NS_TEST_EXPECT_MSG_EQ((m_txPsdus[13].txVector.GetPreambleType() == m_tbPreamble && m_txPsdus[13].psduMap.size() == 1 && m_txPsdus[13].psduMap.begin()->second->GetHeader(0).IsBlockAck()), true, @@ -1120,7 +1166,7 @@ OfdmaAckSequenceTest::CheckResults(Time sifs, Time slotTime, uint8_t aifsn) // A second STA sends a Block Ack in an HE TB PPDU a SIFS after the reception of the DL MU // PPDU - NS_TEST_EXPECT_MSG_EQ((m_txPsdus[14].txVector.GetPreambleType() == WIFI_PREAMBLE_HE_TB && + NS_TEST_EXPECT_MSG_EQ((m_txPsdus[14].txVector.GetPreambleType() == m_tbPreamble && m_txPsdus[14].psduMap.size() == 1 && m_txPsdus[14].psduMap.begin()->second->GetHeader(0).IsBlockAck()), true, @@ -1134,7 +1180,7 @@ OfdmaAckSequenceTest::CheckResults(Time sifs, Time slotTime, uint8_t aifsn) // A third STA sends a Block Ack in an HE TB PPDU a SIFS after the reception of the DL MU // PPDU - NS_TEST_EXPECT_MSG_EQ((m_txPsdus[15].txVector.GetPreambleType() == WIFI_PREAMBLE_HE_TB && + NS_TEST_EXPECT_MSG_EQ((m_txPsdus[15].txVector.GetPreambleType() == m_tbPreamble && m_txPsdus[15].psduMap.size() == 1 && m_txPsdus[15].psduMap.begin()->second->GetHeader(0).IsBlockAck()), true, @@ -1148,7 +1194,7 @@ OfdmaAckSequenceTest::CheckResults(Time sifs, Time slotTime, uint8_t aifsn) // A fourth STA sends a Block Ack in an HE TB PPDU a SIFS after the reception of the DL MU // PPDU - NS_TEST_EXPECT_MSG_EQ((m_txPsdus[16].txVector.GetPreambleType() == WIFI_PREAMBLE_HE_TB && + NS_TEST_EXPECT_MSG_EQ((m_txPsdus[16].txVector.GetPreambleType() == m_tbPreamble && m_txPsdus[16].psduMap.size() == 1 && m_txPsdus[16].psduMap.begin()->second->GetHeader(0).IsBlockAck()), true, @@ -1221,7 +1267,7 @@ OfdmaAckSequenceTest::CheckResults(Time sifs, Time slotTime, uint8_t aifsn) // A first STA sends a Block Ack in an HE TB PPDU a SIFS after the reception of the DL MU // PPDU - NS_TEST_EXPECT_MSG_EQ((m_txPsdus[12].txVector.GetPreambleType() == WIFI_PREAMBLE_HE_TB && + NS_TEST_EXPECT_MSG_EQ((m_txPsdus[12].txVector.GetPreambleType() == m_tbPreamble && m_txPsdus[12].psduMap.size() == 1 && m_txPsdus[12].psduMap.begin()->second->GetHeader(0).IsBlockAck()), true, @@ -1238,7 +1284,7 @@ OfdmaAckSequenceTest::CheckResults(Time sifs, Time slotTime, uint8_t aifsn) // A second STA sends a Block Ack in an HE TB PPDU a SIFS after the reception of the DL MU // PPDU - NS_TEST_EXPECT_MSG_EQ((m_txPsdus[13].txVector.GetPreambleType() == WIFI_PREAMBLE_HE_TB && + NS_TEST_EXPECT_MSG_EQ((m_txPsdus[13].txVector.GetPreambleType() == m_tbPreamble && m_txPsdus[13].psduMap.size() == 1 && m_txPsdus[13].psduMap.begin()->second->GetHeader(0).IsBlockAck()), true, @@ -1255,7 +1301,7 @@ OfdmaAckSequenceTest::CheckResults(Time sifs, Time slotTime, uint8_t aifsn) // A third STA sends a Block Ack in an HE TB PPDU a SIFS after the reception of the DL MU // PPDU - NS_TEST_EXPECT_MSG_EQ((m_txPsdus[14].txVector.GetPreambleType() == WIFI_PREAMBLE_HE_TB && + NS_TEST_EXPECT_MSG_EQ((m_txPsdus[14].txVector.GetPreambleType() == m_tbPreamble && m_txPsdus[14].psduMap.size() == 1 && m_txPsdus[14].psduMap.begin()->second->GetHeader(0).IsBlockAck()), true, @@ -1272,7 +1318,7 @@ OfdmaAckSequenceTest::CheckResults(Time sifs, Time slotTime, uint8_t aifsn) // A fourth STA sends a Block Ack in an HE TB PPDU a SIFS after the reception of the DL MU // PPDU - NS_TEST_EXPECT_MSG_EQ((m_txPsdus[15].txVector.GetPreambleType() == WIFI_PREAMBLE_HE_TB && + NS_TEST_EXPECT_MSG_EQ((m_txPsdus[15].txVector.GetPreambleType() == m_tbPreamble && m_txPsdus[15].psduMap.size() == 1 && m_txPsdus[15].psduMap.begin()->second->GetHeader(0).IsBlockAck()), true, @@ -1341,8 +1387,11 @@ OfdmaAckSequenceTest::DoRun() NodeContainer wifiApNode; wifiApNode.Create(1); - NodeContainer wifiStaNodes; - wifiStaNodes.Create(m_nStations); + NodeContainer wifiOldStaNodes; + NodeContainer wifiNewStaNodes; + wifiOldStaNodes.Create(m_nStations / 2); + wifiNewStaNodes.Create(m_nStations - m_nStations / 2); + NodeContainer wifiStaNodes(wifiOldStaNodes, wifiNewStaNodes); Ptr spectrumChannel = CreateObject(); Ptr lossModel = CreateObject(); @@ -1413,8 +1462,9 @@ OfdmaAckSequenceTest::DoRun() Config::SetDefault("ns3::WifiMacQueue::MaxDelay", TimeValue(Seconds(2))); WifiHelper wifi; - wifi.SetStandard(WIFI_STANDARD_80211ax); - wifi.SetRemoteStationManager("ns3::IdealWifiManager"); + wifi.SetStandard(m_scenario == WifiOfdmaScenario::EHT ? WIFI_STANDARD_80211be + : WIFI_STANDARD_80211ax); + wifi.SetRemoteStationManager("ns3::MinstrelHtWifiManager"); wifi.ConfigHeOptions("MuBeAifsn", UintegerValue(m_muEdcaParameterSet.muAifsn), "MuBeCwMin", @@ -1467,15 +1517,22 @@ OfdmaAckSequenceTest::DoRun() "ActiveProbing", BooleanValue(false)); - m_staDevices = wifi.Install(phy, mac, wifiStaNodes); + m_staDevices = wifi.Install(phy, mac, wifiOldStaNodes); + + wifi.SetStandard(m_scenario == WifiOfdmaScenario::HE ? WIFI_STANDARD_80211ax + : WIFI_STANDARD_80211be); + m_staDevices = NetDeviceContainer(m_staDevices, wifi.Install(phy, mac, wifiNewStaNodes)); mac.SetType("ns3::ApWifiMac", "BeaconGeneration", BooleanValue(true)); - mac.SetMultiUserScheduler("ns3::TestMultiUserScheduler", - // request channel access at 1.5s - "AccessReqInterval", - TimeValue(Seconds(1.5)), - "DelayAccessReqUponAccess", - BooleanValue(false)); + mac.SetMultiUserScheduler( + "ns3::TestMultiUserScheduler", + "ModulationClass", + EnumValue(m_scenario == WifiOfdmaScenario::EHT ? WIFI_MOD_CLASS_EHT : WIFI_MOD_CLASS_HE), + // request channel access at 1.5s + "AccessReqInterval", + TimeValue(Seconds(1.5)), + "DelayAccessReqUponAccess", + BooleanValue(false)); mac.SetAckManager("ns3::WifiDefaultAckManager", "DlMuAckSequenceType", EnumValue(m_dlMuAckType)); @@ -1629,48 +1686,58 @@ WifiMacOfdmaTestSuite::WifiMacOfdmaTestSuite() {0, 127, 2047, 100} /* EDCA disabled */, {10, 127, 2047, 100} /* worse parameters */}) { - AddTestCase(new OfdmaAckSequenceTest(20, - WifiAcknowledgment::DL_MU_BAR_BA_SEQUENCE, - 10000, - 5440, - 15, - muEdcaParameterSet), - TestCase::QUICK); - AddTestCase(new OfdmaAckSequenceTest(20, - WifiAcknowledgment::DL_MU_AGGREGATE_TF, - 10000, - 5440, - 15, - muEdcaParameterSet), - TestCase::QUICK); - AddTestCase(new OfdmaAckSequenceTest(20, - WifiAcknowledgment::DL_MU_TF_MU_BAR, - 10000, - 5440, - 15, - muEdcaParameterSet), - TestCase::QUICK); - AddTestCase(new OfdmaAckSequenceTest(40, - WifiAcknowledgment::DL_MU_BAR_BA_SEQUENCE, - 10000, - 0, - 15, - muEdcaParameterSet), - TestCase::QUICK); - AddTestCase(new OfdmaAckSequenceTest(40, - WifiAcknowledgment::DL_MU_AGGREGATE_TF, - 10000, - 0, - 15, - muEdcaParameterSet), - TestCase::QUICK); - AddTestCase(new OfdmaAckSequenceTest(40, - WifiAcknowledgment::DL_MU_TF_MU_BAR, - 10000, - 0, - 15, - muEdcaParameterSet), - TestCase::QUICK); + for (const auto scenario : + {WifiOfdmaScenario::HE, WifiOfdmaScenario::HE_EHT, WifiOfdmaScenario::EHT}) + { + AddTestCase(new OfdmaAckSequenceTest(20, + WifiAcknowledgment::DL_MU_BAR_BA_SEQUENCE, + 10000, + 5440, + 15, + muEdcaParameterSet, + scenario), + TestCase::QUICK); + AddTestCase(new OfdmaAckSequenceTest(20, + WifiAcknowledgment::DL_MU_AGGREGATE_TF, + 10000, + 5440, + 15, + muEdcaParameterSet, + scenario), + TestCase::QUICK); + AddTestCase(new OfdmaAckSequenceTest(20, + WifiAcknowledgment::DL_MU_TF_MU_BAR, + 10000, + 5440, + 15, + muEdcaParameterSet, + scenario), + TestCase::QUICK); + AddTestCase(new OfdmaAckSequenceTest(40, + WifiAcknowledgment::DL_MU_BAR_BA_SEQUENCE, + 10000, + 0, + 15, + muEdcaParameterSet, + scenario), + TestCase::QUICK); + AddTestCase(new OfdmaAckSequenceTest(40, + WifiAcknowledgment::DL_MU_AGGREGATE_TF, + 10000, + 0, + 15, + muEdcaParameterSet, + scenario), + TestCase::QUICK); + AddTestCase(new OfdmaAckSequenceTest(40, + WifiAcknowledgment::DL_MU_TF_MU_BAR, + 10000, + 0, + 15, + muEdcaParameterSet, + scenario), + TestCase::QUICK); + } } }