9#include "ns3/attribute-container.h" 
   10#include "ns3/config.h" 
   11#include "ns3/eht-configuration.h" 
   12#include "ns3/fcfs-wifi-queue-scheduler.h" 
   13#include "ns3/he-configuration.h" 
   14#include "ns3/ht-configuration.h" 
   15#include "ns3/ht-frame-exchange-manager.h" 
   16#include "ns3/interference-helper.h" 
   17#include "ns3/mac-tx-middle.h" 
   18#include "ns3/mgt-action-headers.h" 
   19#include "ns3/mobility-helper.h" 
   20#include "ns3/mpdu-aggregator.h" 
   21#include "ns3/msdu-aggregator.h" 
   22#include "ns3/multi-link-element.h" 
   23#include "ns3/node-container.h" 
   24#include "ns3/packet-socket-client.h" 
   25#include "ns3/packet-socket-helper.h" 
   26#include "ns3/packet-socket-server.h" 
   27#include "ns3/pointer.h" 
   28#include "ns3/simulator.h" 
   29#include "ns3/sta-wifi-mac.h" 
   30#include "ns3/string.h" 
   32#include "ns3/vht-configuration.h" 
   33#include "ns3/wifi-default-ack-manager.h" 
   34#include "ns3/wifi-default-protection-manager.h" 
   35#include "ns3/wifi-mac-queue.h" 
   36#include "ns3/wifi-net-device.h" 
   37#include "ns3/wifi-psdu.h" 
   38#include "ns3/yans-wifi-helper.h" 
   39#include "ns3/yans-wifi-phy.h" 
  121    void DoRun() 
override;
 
 
  134                                  .dataMode = 
"HtMcs7",
 
  137                                  .maxAmpduSize = 65535,
 
 
  164    m_device->SetHtConfiguration(htConfiguration);
 
  168        m_device->SetVhtConfiguration(vhtConfiguration);
 
  170        m_device->SetHeConfiguration(heConfiguration);
 
  175        m_device->SetEhtConfiguration(ehtConfiguration);
 
  185        m_phys.back()->SetInterferenceHelper(interferenceHelper);
 
  227    std::vector<Ptr<ChannelAccessManager>> caManagers;
 
  233    m_mac->SetChannelAccessManagers(caManagers);
 
  236    std::vector<Ptr<FrameExchangeManager>> feManagers;
 
  240        feManagers.emplace_back(fem);
 
  242        protectionManager->SetWifiMac(
m_mac);
 
  243        fem->SetProtectionManager(protectionManager);
 
  245        ackManager->SetWifiMac(
m_mac);
 
  246        fem->SetAckManager(ackManager);
 
  249        fem->SetAddress(
m_mac->GetAddress());
 
  251    m_mac->SetFrameExchangeManagers(feManagers);
 
  256        for (
const auto& [
id, link] : 
m_mac->GetLinks())
 
  276        auto mleCommonInfo2 = std::make_shared<CommonInfoBasicMle>();
 
  277        mleCommonInfo2->m_mldMacAddress = 
Mac48Address(
"00:00:00:00:00:02");
 
  283            m_managers.at(i)->AddStationMleCommonInfo(mleCommonInfo2->m_mldMacAddress,
 
  287        auto mleCommonInfo3 = std::make_shared<CommonInfoBasicMle>();
 
  288        mleCommonInfo3->m_mldMacAddress = 
Mac48Address(
"00:00:00:00:00:03");
 
  291            m_managers.at(i)->AddStationMleCommonInfo(mleCommonInfo3->m_mldMacAddress,
 
 
  340    return m_mac->GetBEQueue();
 
 
  346    std::list<Ptr<const WifiMpdu>> mpdus(mpduList.cbegin(), mpduList.cend());
 
  347    m_mac->GetTxopQueue(
AC_BE)->DequeueIfQueued(mpdus);
 
 
  376    for (std::size_t i = 0; i < count; i++)
 
 
  398    auto mpduAggregator = htFem->GetMpduAggregator();
 
  407    txParams.
m_txVector = 
m_mac->GetWifiRemoteStationManager()->GetDataTxVector(
 
  412    auto mpduList = mpduAggregator->GetNextAmpdu(item, txParams, 
Time::Min());
 
  417    m_mac->m_txMiddle->SetSequenceNumberFor(&item->GetHeader());
 
  418    item->UnassignSeqNo();
 
  428    mpduList = mpduAggregator->GetNextAmpdu(item, txParams, 
Time::Min());
 
  439                          "queue should be empty");
 
  441    for (
uint32_t i = 0; i < psdu->GetNMpdus(); i++)
 
  458    txParams.
m_txVector = 
m_mac->GetWifiRemoteStationManager()->GetDataTxVector(
 
  463    mpduList = mpduAggregator->GetNextAmpdu(item, txParams, 
Time::Min());
 
  467                          "a single packet for this destination should not result in an A-MPDU");
 
  473    txParams.
m_txVector = 
m_mac->GetWifiRemoteStationManager()->GetDataTxVector(
 
  478    mpduList = mpduAggregator->GetNextAmpdu(item, txParams, 
Time::Min());
 
  482                          "no MPDU aggregation should be performed if there is no agreement");
 
  484    m_mac->SetFrameRetryLimit(1); 
 
  485    m_mac->TraceConnectWithoutContext(
"DroppedMpdu",
 
  488    htFem->NormalAckTimeout(item, txParams.
m_txVector);
 
 
  521    void DoRun() 
override;
 
 
  528                                  .dataMode = 
"HtMcs2", 
 
  530                                  .maxAmsduSize = 3050,
 
  531                                  .maxAmpduSize = 65535,
 
 
  554    auto msduAggregator = htFem->GetMsduAggregator();
 
  555    auto mpduAggregator = htFem->GetMpduAggregator();
 
  559    txParams.
m_txVector = 
m_mac->GetWifiRemoteStationManager()->GetDataTxVector(
 
  562    htFem->TryAddMpdu(peeked, txParams, 
Time::Min());
 
  563    auto item = msduAggregator->GetNextAmsdu(peeked, txParams, 
Time::Min());
 
  574                          "Unexpected number of MSDUs left in the EDCA queue");
 
  584    txParams.
m_txVector = 
m_mac->GetWifiRemoteStationManager()->GetDataTxVector(
 
  587    htFem->TryAddMpdu(peeked, txParams, 
Time::Min());
 
  588    item = msduAggregator->GetNextAmsdu(peeked, txParams, 
Time::Min());
 
  596                          "queue should be empty");
 
  610    txParams.
m_txVector = 
m_mac->GetWifiRemoteStationManager()->GetDataTxVector(
 
  620                          "There must be 2 MSDUs in the A-MSDU");
 
  622    auto mpduList = mpduAggregator->GetNextAmpdu(item, txParams, 
m_params.
txopLimit);
 
  639                          "Expecting the first MPDU to contain an A-MSDU");
 
  643                          "Expecting the second MPDU to contain an A-MSDU");
 
  647                          "Expecting the third MPDU not to contain an A-MSDU");
 
  655                          "Unexpected number of items left in the EDCA queue");
 
  660    txParams.
m_txVector = 
m_mac->GetWifiRemoteStationManager()->GetDataTxVector(
 
  670                          "There must be 2 MSDUs in the A-MSDU");
 
  672    auto mpduList2 = mpduAggregator->GetNextAmpdu(item, txParams, 
m_params.
txopLimit);
 
  678                          "Unexpected number of items left in the EDCA queue");
 
  681    mpduList.at(0)->UnassignSeqNo();
 
  682    mpduList.at(1)->UnassignSeqNo();
 
  683    mpduList.at(2)->UnassignSeqNo();
 
  684    mpduList2.at(0)->UnassignSeqNo();
 
  685    mpduList2.at(1)->UnassignSeqNo();
 
  686    mpduList2.at(2)->UnassignSeqNo();
 
  694    txParams.
m_txVector = 
m_mac->GetWifiRemoteStationManager()->GetDataTxVector(
 
  698    htFem->TryAddMpdu(peeked, txParams, 
Time::Min());
 
  699    item = msduAggregator->GetNextAmsdu(peeked, txParams, 
Time::Min());
 
  709                          "Unexpected number of items left in the EDCA queue");
 
  713    txParams.
m_txVector = 
m_mac->GetWifiRemoteStationManager()->GetDataTxVector(
 
  719                          "Expecting the peeked MPDU not to contain an A-MSDU");
 
  726                          "Expecting the returned MPDU not to contain an A-MSDU");
 
 
  747    void DoRun() 
override;
 
 
  752                               std::to_string(bufferSize),
 
  755                                  .dataMode = 
"HeMcs11",
 
  756                                  .bufferSize = bufferSize,
 
  758                                  .maxAmpduSize = 65535,
 
 
  773    auto mpduAggregator = htFem->GetMpduAggregator();
 
  777    txParams.
m_txVector = 
m_mac->GetWifiRemoteStationManager()->GetDataTxVector(
 
  782    auto mpduList = mpduAggregator->GetNextAmpdu(item, txParams, 
Time::Min());
 
  788                          "A-MPDU contains an unexpected number of MPDUs");
 
  791                          expectedRemainingPacketsInQueue,
 
  792                          "Queue contains an unexpected number of MPDUs");
 
 
  813    void DoRun() 
override;
 
 
  818                               std::to_string(bufferSize),
 
  821                                  .dataMode = 
"EhtMcs13",
 
  822                                  .bufferSize = bufferSize,
 
  824                                  .maxAmpduSize = 102000,
 
 
  838    const std::size_t maxNMpdus = 750;
 
  842        auto fem = 
m_mac->GetFrameExchangeManager(linkId);
 
  844        auto mpduAggregator = htFem->GetMpduAggregator();
 
  845        std::vector<Ptr<WifiMpdu>> mpduList;
 
  851            txParams.
m_txVector = 
m_mac->GetWifiRemoteStationManager()->GetDataTxVector(
 
  853                m_phys.at(linkId)->GetChannelWidth());
 
  856            mpduList = mpduAggregator->GetNextAmpdu(item, txParams, 
Time::Min());
 
  860        uint16_t expectedRemainingPacketsInQueue;
 
  873                                      "A-MPDU contains an unexpected number of MPDUs");
 
  874                expectedRemainingPacketsInQueue = 1200 - maxNMpdus;
 
  876                                      expectedRemainingPacketsInQueue,
 
  877                                      "Queue contains an unexpected number of MPDUs");
 
  884                                      "A-MPDU contains an unexpected number of MPDUs");
 
  887                                      expectedRemainingPacketsInQueue,
 
  888                                      "Queue contains an unexpected number of MPDUs");
 
  904                                      "A-MPDU contains an unexpected number of MPDUs");
 
  907                                      expectedRemainingPacketsInQueue,
 
  908                                      "Queue contains an unexpected number of MPDUs");
 
  915                                      expectedRemainingPacketsInQueue,
 
  916                                      "Queue contains an unexpected number of MPDUs");
 
 
  958    void DoRun() 
override;
 
  965    std::vector<Ptr<WifiMpdu>>::const_iterator
 
 
 1001    : 
TestCase(
"Test case to check that the Wifi Mac forwards up the same packets received at " 
 1003      m_notifyMacHdrRxEnd(notifyMacHdrRxEnd)
 
 
 1024                          "No DL MU PPDU expected");
 
 1033                              "Missing MAC header notification: m_txPsdu was not reset");
 
 1039    if (!psduMap[
SU_STA_ID]->GetHeader(0).IsQosData())
 
 1048        std::size_t dist = std::distance(mpdu->begin(), mpdu->end());
 
 1050        m_nMsdus.push_back(dist > 0 ? dist : 1);
 
 
 1062                          "Notified of MAC header RX end while no PSDU is being transmitted");
 
 1065    auto expectedHdr = (*m_expectedMpdu)->GetHeader();
 
 1067        auto macHdr = mac->GetFrameExchangeManager()->GetReceivedMacHdr();
 
 1070                              "Expected the FEM to store the MAC header being received");
 
 1072                              expectedHdr.GetSequenceNumber(),
 
 1073                              "Wrong sequence number in the MAC header stored by the FEM");
 
 1076    if (expectedHdr.IsQosData())
 
 1086            auto macHeader = mac->GetFrameExchangeManager()->GetReceivedMacHdr();
 
 1089                                  "Expected the FEM to store no MAC header");
 
 
 1111    wifiApNode.Create(1);
 
 1115    phy.SetChannel(channel.Create());
 
 1119    wifi.SetRemoteStationManager(
"ns3::IdealWifiManager");
 
 1123    mac.SetType(
"ns3::StaWifiMac",
 
 1131                "BE_BlockAckThreshold",
 
 1137    staDevices = wifi.Install(phy, mac, wifiStaNode);
 
 1142    apDevices = wifi.Install(phy, mac, wifiApNode);
 
 1147    positionAlloc->Add(Vector(0.0, 0.0, 0.0));
 
 1148    positionAlloc->Add(Vector(1.0, 0.0, 0.0));
 
 1149    mobility.SetPositionAllocator(positionAlloc);
 
 1151    mobility.SetMobilityModel(
"ns3::ConstantPositionMobilityModel");
 
 1152    mobility.Install(wifiApNode);
 
 1153    mobility.Install(wifiStaNode);
 
 1165    packetSocket.
Install(wifiStaNode);
 
 1166    packetSocket.
Install(wifiApNode);
 
 1172    client->SetRemote(socket);
 
 1174    client->SetStartTime(
Seconds(1));
 
 1175    client->SetStopTime(
Seconds(3));
 
 1177                        &PacketSocketClient::SetAttribute,
 
 1183    server->SetLocal(socket);
 
 1184    wifiApNode.Get(0)->AddApplication(server);
 
 1185    server->SetStartTime(
Seconds(0));
 
 1186    server->SetStopTime(
Seconds(4));
 
 1188    sta_device->GetMac()->TraceConnectWithoutContext(
 
 1191    sta_device->GetPhy()->TraceConnectWithoutContext(
 
 1194    ap_device->GetPhy()->TraceConnectWithoutContext(
 
 1195        "PhyRxMacHeaderEnd",
 
 1197            .Bind(ap_device->GetMac()));
 
 1198    ap_device->GetMac()->TraceConnectWithoutContext(
 
 1221                          "Unexpected number of MAC headers notified to the FEM");
 
 
bool m_discarded
whether the packet should be discarded
void DoTeardown() override
Implementation to do any local setup required for this TestCase.
Ptr< QosTxop > GetBeQueue() const
void DoSetup() override
Implementation to do any local setup required for this TestCase.
ObjectFactory m_factory
factory
Params m_params
test parameters
void EnqueuePkts(std::size_t count, uint32_t size, const Mac48Address &dest)
Enqueue the given number of packets addressed to the given station and of the given size.
std::vector< Ptr< WifiRemoteStationManager > > m_managers
remote station managers
void DoRun() override
Implementation to actually run this TestCase.
Ptr< WifiNetDevice > m_device
WifiNetDevice.
void DequeueMpdus(const std::vector< Ptr< WifiMpdu > > &mpduList)
Dequeue a PSDU.
void EstablishAgreement(const Mac48Address &recipient)
Establish a BlockAck agreement.
void MpduDiscarded(WifiMacDropReason reason, Ptr< const WifiMpdu > mpdu)
Fired when the MAC discards an MPDU.
std::vector< Ptr< WifiPhy > > m_phys
Phys.
Ptr< StaWifiMac > m_mac
Mac.
802.11be aggregation test which permits up to 1024 MPDUs in A-MPDU according to the negotiated buffer...
void DoRun() override
Implementation to actually run this TestCase.
EhtAggregationTest(uint16_t bufferSize)
Constructor.
802.11ax aggregation test which permits 64 or 256 MPDUs in A-MPDU according to the negotiated buffer ...
HeAggregationTest(uint16_t bufferSize)
Constructor.
void DoRun() override
Implementation to actually run this TestCase.
Test for A-MSDU and A-MPDU aggregation.
void DoRun() override
Implementation to actually run this TestCase.
void NotifyPsduForwardedDown(WifiConstPsduMap psduMap, WifiTxVector txVector, double txPowerW)
Callback invoked when the sender MAC passes a PSDU(s) to the PHY.
void NotifyMacHeaderEndRx(Ptr< WifiMac > mac, const WifiMacHeader &macHdr, const WifiTxVector &txVector, Time psduDuration)
Callback invoked when the reception of the MAC header of an MPDU is completed.
std::list< Ptr< const Packet > > m_packetList
List of packets passed to the MAC.
~PreservePacketsInAmpdus() override
PreservePacketsInAmpdus(bool notifyMacHdrRxEnd)
Constructor.
std::vector< std::size_t > m_nMsdus
Number of MSDUs in MPDUs passed to the PHY.
std::vector< std::size_t > m_nMpdus
Number of MPDUs in PSDUs passed to the PHY.
std::vector< Ptr< WifiMpdu > >::const_iterator m_expectedMpdu
next MPDU expected to be received
std::size_t m_nMacHdrs
Number of notified MAC headers in QoS data frames.
void NotifyMacForwardUp(Ptr< const Packet > p)
Callback invoked when the receiver MAC forwards a packet up to the upper layer.
void NotifyMacTransmit(Ptr< const Packet > packet)
Callback invoked when an MSDU is passed to the MAC.
bool m_notifyMacHdrRxEnd
whether notification of MAC header reception end is enabled
Ptr< const WifiPsdu > m_txPsdu
PSDU being transmitted.
Two Level Aggregation Test.
void DoRun() override
Implementation to actually run this TestCase.
TwoLevelAggregationTest()
Wifi Aggregation Test Suite.
WifiAggregationTestSuite()
A container for one type of attribute.
AttributeValue implementation for Boolean.
The IEEE 802.11be EHT Capabilities.
void SetMaxMpduLength(uint16_t length)
Set the maximum MPDU length.
void SetMaxAmpduLength(uint32_t maxAmpduLength)
Set the maximum A-MPDU length.
FrameExchangeManager is a base class handling the basic frame exchange sequences for non-QoS stations...
The IEEE 802.11ax HE Capabilities.
void SetMaxAmpduLength(uint32_t maxAmpduLength)
Set the maximum AMPDU length.
void SetChannelWidthSet(uint8_t channelWidthSet)
Set channel width set.
The HT Capabilities Information Element.
void SetMaxAmsduLength(uint16_t maxAmsduLength)
Set the maximum AMSDU length.
void SetMaxAmpduLength(uint32_t maxAmpduLength)
Set the maximum AMPDU length.
static Mac48Address GetBroadcast()
Helper class used to assign positions and mobility models to nodes.
holds a vector of ns3::NetDevice pointers
keep track of a set of node pointers.
void Create(uint32_t n)
Create n nodes and append pointers to them to the end of this NodeContainer.
Ptr< Node > Get(uint32_t i) const
Get the Ptr<Node> stored in this container at a given index.
uint32_t AddApplication(Ptr< Application > application)
Associate an Application to this Node.
void SetAttribute(std::string name, const AttributeValue &value)
Set a single attribute, raising fatal errors if unsuccessful.
Instantiate subclasses of ns3::Object.
Ptr< Object > Create() const
Create an Object instance of the configured TypeId.
void Set(const std::string &name, const AttributeValue &value, Args &&... args)
Set an attribute to be set during construction.
void SetTypeId(TypeId tid)
Set the TypeId of the Objects to be created by this factory.
an address for a packet socket
void SetProtocol(uint16_t protocol)
Set the protocol.
void SetPhysicalAddress(const Address address)
Set the destination address.
void SetSingleDevice(uint32_t device)
Set the address to match only a specified NetDevice.
Give ns3::PacketSocket powers to ns3::Node.
void Install(Ptr< Node > node) const
Aggregate an instance of a ns3::PacketSocketFactory onto the provided node.
AttributeValue implementation for Pointer.
Smart pointer class similar to boost::intrusive_ptr.
Ptr< BlockAckManager > GetBaManager()
Get the Block Ack Manager associated with this QosTxop.
Ptr< WifiMpdu > PeekNextMpdu(uint8_t linkId, uint8_t tid=8, Mac48Address recipient=Mac48Address::GetBroadcast(), Ptr< const WifiMpdu > mpdu=nullptr)
Peek the next frame to transmit on the given link to the given receiver and of the given TID from the...
Ptr< WifiMpdu > GetNextMpdu(uint8_t linkId, Ptr< WifiMpdu > peekedItem, WifiTxParameters &txParams, Time availableTime, bool initialFrame)
Prepare the frame to transmit on the given link starting from the MPDU that has been previously peeke...
static EventId Schedule(const Time &delay, FUNC f, Ts &&... args)
Schedule an event to expire after delay.
static void Destroy()
Execute the events scheduled with ScheduleDestroy().
static void Run()
Run the simulation.
static void Stop()
Tell the Simulator the calling event should be the last one executed.
The IEEE 802.11 SSID Information Element.
AttributeValue implementation for Ssid.
Status code for association response.
void SetSuccess()
Set success bit to 0 (success).
Hold variables of type string.
void AddTestCase(TestCase *testCase, Duration duration=Duration::QUICK)
Add an individual child TestCase to this test suite.
Simulation virtual time values and global simulation resolution.
static Time Min()
Minimum representable Time Not to be confused with Min(Time,Time).
AttributeValue implementation for Time.
Ptr< WifiMacQueue > GetWifiMacQueue() const
Return the packet queue associated with this Txop.
Hold an unsigned integer type.
The IEEE 802.11ac VHT Capabilities.
void SetMaxMpduLength(uint16_t length)
Set the maximum MPDU length.
helps to create WifiNetDevice objects
create MAC layers for a ns3::WifiNetDevice.
std::vector< Ptr< WifiMpdu > >::const_iterator end() const
Return a const iterator to past-the-last MPDU.
std::vector< Ptr< WifiMpdu > >::const_iterator begin() const
Return a const iterator to the first MPDU.
hold a list of per-remote-station state.
This class stores the TX parameters (TX vector, protection mechanism, acknowledgment mechanism,...
WifiTxVector m_txVector
TXVECTOR of the frame being prepared.
void Clear()
Reset the TX parameters.
This class mimics the TXVECTOR which is to be passed to the PHY in order to define the parameters whi...
manage and create wifi channel objects for the YANS model.
static YansWifiChannelHelper Default()
Create a channel helper in a default working state.
Make it easy to create and manage PHY objects for the YANS model.
void SetDefault(std::string name, const AttributeValue &value)
Ptr< T > CreateObject(Args &&... args)
Create an object by type, with varying number of constructor parameters.
Ptr< T > CreateObjectWithAttributes(Args... args)
Allocate an Object on the heap and initialize with a set of attributes.
Ptr< T > Create(Ts &&... args)
Create class instances by constructors with varying numbers of arguments and return them by Ptr.
#define NS_TEST_ASSERT_MSG_EQ(actual, limit, msg)
Test that an actual and expected (limit) value are equal and report and abort if not.
#define NS_TEST_EXPECT_MSG_NE(actual, limit, msg)
Test that an actual and expected (limit) value are not equal and report if not.
#define NS_TEST_EXPECT_MSG_EQ(actual, limit, msg)
Test that an actual and expected (limit) value are equal and report if not.
Time MicroSeconds(uint64_t value)
Construct a Time in the indicated unit.
Time NanoSeconds(uint64_t value)
Construct a Time in the indicated unit.
Time Seconds(double value)
Construct a Time in the indicated unit.
WifiStandard
Identifies the IEEE 802.11 specifications that a Wifi device can be configured to use.
WifiMacDropReason
The reason why an MPDU was dropped.
Every class exported by the ns3 library is enclosed in the ns3 namespace.
U * PeekPointer(const Ptr< U > &p)
Callback< R, Args... > MakeCallback(R(T::*memPtr)(Args...), OBJ objPtr)
Build Callbacks for class method members which take varying numbers of arguments and potentially retu...
std::string GetFrameExchangeManagerTypeIdName(WifiStandard standard, bool qosSupported)
Get the TypeId name for the FrameExchangeManager corresponding to the given standard.
Ptr< T1 > DynamicCast(const Ptr< T2 > &p)
Cast a Ptr.
static constexpr uint8_t SINGLE_LINK_OP_ID
Link ID for single link operations (helps tracking places where correct link ID is to be used to supp...
std::unordered_map< uint16_t, Ptr< const WifiPsdu > > WifiConstPsduMap
Map of const PSDUs indexed by STA-ID.
static constexpr uint16_t SU_STA_ID
STA_ID to identify a single user (SU)
uint8_t nLinks
number of links (>1 only for EHT)
uint32_t maxAmpduSize
maximum A-MPDU size (bytes)
uint16_t bufferSize
the size (in number of MPDUs) of the BlockAck buffer
WifiStandard standard
the standard of the device
uint16_t maxAmsduSize
maximum A-MSDU size (bytes)
std::string dataMode
data mode
Time txopLimit
TXOP limit duration.
Structure holding information specific to a single link.
std::optional< Mac48Address > bssid
BSSID of the AP to associate with over this link.
static WifiAggregationTestSuite g_wifiAggregationTestSuite
the test suite