author | Tom Henderson <tomh@tomh.org> |
Wed, 06 May 2015 14:23:50 -0700 | |
changeset 11388 | e367c5bde0fa |
parent 11352 | a1f6f647d516 |
child 11450 | 9f4ae69f12b7 |
permissions | -rw-r--r-- |
11352
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
1 |
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */ |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
2 |
/* |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
3 |
* Copyright (c) 2015 |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
4 |
* |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
5 |
* This program is free software; you can redistribute it and/or modify |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
6 |
* it under the terms of the GNU General Public License version 2 as |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
7 |
* published by the Free Software Foundation; |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
8 |
* |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
9 |
* This program is distributed in the hope that it will be useful, |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
10 |
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
11 |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
12 |
* GNU General Public License for more details. |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
13 |
* |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
14 |
* You should have received a copy of the GNU General Public License |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
15 |
* along with this program; if not, write to the Free Software |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
16 |
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
17 |
* |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
18 |
* Author: Sébastien Deronne <sebastien.deronne@gmail.com> |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
19 |
*/ |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
20 |
|
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
21 |
#include "ns3/string.h" |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
22 |
#include "ns3/test.h" |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
23 |
#include "ns3/object-factory.h" |
11388
e367c5bde0fa
clear valgrind warnings for aggregation test
Tom Henderson <tomh@tomh.org>
parents:
11352
diff
changeset
|
24 |
#include "ns3/simulator.h" |
11352
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
25 |
#include "ns3/wifi-mac-queue.h" |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
26 |
#include "ns3/mac-low.h" |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
27 |
#include "ns3/edca-txop-n.h" |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
28 |
#include "ns3/yans-wifi-phy.h" |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
29 |
|
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
30 |
using namespace ns3; |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
31 |
|
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
32 |
class TwoLevelAggregationTest : public TestCase |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
33 |
{ |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
34 |
public: |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
35 |
TwoLevelAggregationTest (); |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
36 |
|
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
37 |
private: |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
38 |
virtual void DoRun (void); |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
39 |
Ptr<MacLow> m_low; |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
40 |
Ptr<YansWifiPhy> m_phy; |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
41 |
Ptr<EdcaTxopN> m_edca; |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
42 |
Ptr<WifiRemoteStationManager> m_manager; |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
43 |
ObjectFactory m_factory; |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
44 |
Ptr<MpduAggregator> m_mpduAggregator; |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
45 |
Ptr<MsduAggregator> m_msduAggregator; |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
46 |
}; |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
47 |
|
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
48 |
TwoLevelAggregationTest::TwoLevelAggregationTest () |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
49 |
: TestCase ("Check the correctness of two-level aggregation operations") |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
50 |
{ |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
51 |
} |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
52 |
|
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
53 |
void |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
54 |
TwoLevelAggregationTest::DoRun (void) |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
55 |
{ |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
56 |
/* |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
57 |
* Create and configure phy layer. |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
58 |
*/ |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
59 |
m_phy = CreateObject<YansWifiPhy> (); |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
60 |
m_phy->ConfigureStandard (WIFI_PHY_STANDARD_80211n_5GHZ); |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
61 |
|
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
62 |
/* |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
63 |
* Create and configure manager. |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
64 |
*/ |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
65 |
m_factory = ObjectFactory (); |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
66 |
m_factory.SetTypeId ("ns3::ConstantRateWifiManager"); |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
67 |
m_factory.Set ("DataMode", StringValue ("OfdmRate65MbpsBW20MHz")); |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
68 |
m_manager = m_factory.Create<WifiRemoteStationManager> (); |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
69 |
m_manager->SetupPhy(m_phy); |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
70 |
|
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
71 |
/* |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
72 |
* Create and configure maclayer. |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
73 |
*/ |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
74 |
m_low = CreateObject<MacLow> (); |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
75 |
m_low->SetPhy(m_phy); |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
76 |
m_low->SetWifiRemoteStationManager (m_manager); |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
77 |
|
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
78 |
m_edca = CreateObject<EdcaTxopN> (); |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
79 |
m_edca->SetLow (m_low); |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
80 |
m_edca->SetAccessCategory (AC_BE); |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
81 |
m_edca->SetWifiRemoteStationManager (m_manager); |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
82 |
m_edca->CompleteConfig (); |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
83 |
|
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
84 |
/* |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
85 |
* Configure aggregation. |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
86 |
*/ |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
87 |
m_factory = ObjectFactory (); |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
88 |
m_factory.SetTypeId ("ns3::MsduStandardAggregator"); |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
89 |
m_factory.Set ("MaxAmsduSize", UintegerValue(4095)); |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
90 |
m_msduAggregator = m_factory.Create<MsduAggregator> (); |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
91 |
m_edca->SetMsduAggregator (m_msduAggregator); |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
92 |
|
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
93 |
m_factory = ObjectFactory (); |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
94 |
m_factory.SetTypeId ("ns3::MpduStandardAggregator"); |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
95 |
m_factory.Set ("MaxAmpduSize", UintegerValue(65535)); |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
96 |
m_mpduAggregator = m_factory.Create<MpduAggregator> (); |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
97 |
m_low->SetMpduAggregator (m_mpduAggregator); |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
98 |
|
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
99 |
/* |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
100 |
* Create dummy packets of 1500 bytes and fill mac header fields that will be used for the tests. |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
101 |
*/ |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
102 |
Ptr<const Packet> pkt = Create<Packet> (1500); |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
103 |
Ptr<Packet> currentAggregatedPacket = Create<Packet> (); |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
104 |
WifiMacHeader hdr, peekedHdr; |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
105 |
hdr.SetAddr1 (Mac48Address ("00:00:00:00:00:01")); |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
106 |
hdr.SetAddr2 (Mac48Address ("00:00:00:00:00:02")); |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
107 |
hdr.SetType (WIFI_MAC_QOSDATA); |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
108 |
hdr.SetQosTid (0); |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
109 |
Time tstamp; |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
110 |
|
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
111 |
//----------------------------------------------------------------------------------------------------- |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
112 |
|
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
113 |
/* |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
114 |
* Test MSDU aggregation of two packets using MacLow::PerformMsduAggregation. |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
115 |
* It checks whether aggregation succeeded: |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
116 |
* - returned packet should be different from 0; |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
117 |
* - A-MSDU frame size should be 3030 bytes (= 2 packets + headers + padding); |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
118 |
* - one packet should be removed from the queue (the other packet is removed later in MacLow::AggregateToAmpdu) . |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
119 |
*/ |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
120 |
m_edca->GetEdcaQueue()->Enqueue(pkt, hdr); |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
121 |
m_edca->GetEdcaQueue()->Enqueue(pkt, hdr); |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
122 |
|
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
123 |
Ptr<const Packet> peekedPacket = m_edca->GetEdcaQueue()->PeekByTidAndAddress (&peekedHdr, 0, |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
124 |
WifiMacHeader::ADDR1, |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
125 |
hdr.GetAddr1 (), |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
126 |
&tstamp); |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
127 |
m_low->m_currentPacket = peekedPacket->Copy (); |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
128 |
m_low->m_currentHdr = peekedHdr; |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
129 |
|
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
130 |
Ptr<Packet> packet = m_low->PerformMsduAggregation(peekedPacket, &peekedHdr, &tstamp, currentAggregatedPacket, 0); |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
131 |
|
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
132 |
bool result = (packet != 0); |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
133 |
NS_TEST_EXPECT_MSG_EQ (result, true, "aggregation failed"); |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
134 |
NS_TEST_EXPECT_MSG_EQ (packet->GetSize(), 3030, "wrong packet size"); |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
135 |
NS_TEST_EXPECT_MSG_EQ (m_edca->GetEdcaQueue()->GetSize(), 1, "removing packet from EDCA queue failed"); |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
136 |
|
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
137 |
//----------------------------------------------------------------------------------------------------- |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
138 |
|
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
139 |
/* |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
140 |
* Aggregation is refused when the maximum size is reached. |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
141 |
* It checks whether MSDU aggregation has been rejected because the maximum MPDU size is set to 0 (returned packet should be equal to 0). |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
142 |
* This test is needed to ensure that no packets are removed from the queue in MacLow::PerformMsduAggregation, since aggregation will no occur in MacLow::AggregateToAmpdu. |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
143 |
*/ |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
144 |
m_factory = ObjectFactory (); |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
145 |
m_factory.SetTypeId ("ns3::MpduStandardAggregator"); |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
146 |
m_factory.Set ("MaxAmpduSize", UintegerValue(0)); |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
147 |
m_mpduAggregator = m_factory.Create<MpduAggregator> (); |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
148 |
m_low->SetMpduAggregator (m_mpduAggregator); |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
149 |
|
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
150 |
m_edca->GetEdcaQueue()->Enqueue(pkt, hdr); |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
151 |
packet = m_low->PerformMsduAggregation(peekedPacket, &peekedHdr, &tstamp, currentAggregatedPacket, 0); |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
152 |
|
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
153 |
result = (packet != 0); |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
154 |
NS_TEST_EXPECT_MSG_EQ (result, false, "maximum aggregated frame size check failed"); |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
155 |
|
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
156 |
//----------------------------------------------------------------------------------------------------- |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
157 |
|
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
158 |
/* |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
159 |
* Aggregation does not occur zhen there is no more packets in the queue. |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
160 |
* It checks whether MSDU aggregation has been rejected because there is no packets ready in the queue (returned packet should be equal to 0). |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
161 |
* This test is needed to ensure that there is no issue when the queue is empty. |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
162 |
*/ |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
163 |
m_factory = ObjectFactory (); |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
164 |
m_factory.SetTypeId ("ns3::MpduStandardAggregator"); |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
165 |
m_factory.Set ("MaxAmpduSize", UintegerValue(4095)); |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
166 |
m_mpduAggregator = m_factory.Create<MpduAggregator> (); |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
167 |
m_low->SetMpduAggregator (m_mpduAggregator); |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
168 |
|
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
169 |
m_edca->GetEdcaQueue()->Remove(pkt); |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
170 |
m_edca->GetEdcaQueue()->Remove(pkt); |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
171 |
packet = m_low->PerformMsduAggregation(peekedPacket, &peekedHdr, &tstamp, currentAggregatedPacket, 0); |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
172 |
|
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
173 |
result = (packet != 0); |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
174 |
NS_TEST_EXPECT_MSG_EQ (result, false, "aggregation failed to stop as queue is empty"); |
11388
e367c5bde0fa
clear valgrind warnings for aggregation test
Tom Henderson <tomh@tomh.org>
parents:
11352
diff
changeset
|
175 |
Simulator::Destroy (); |
11352
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
176 |
} |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
177 |
|
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
178 |
//----------------------------------------------------------------------------- |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
179 |
class WifiAggregationTestSuite : public TestSuite |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
180 |
{ |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
181 |
public: |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
182 |
WifiAggregationTestSuite (); |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
183 |
}; |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
184 |
|
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
185 |
WifiAggregationTestSuite::WifiAggregationTestSuite () |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
186 |
: TestSuite ("aggregation-wifi", UNIT) |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
187 |
{ |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
188 |
AddTestCase (new TwoLevelAggregationTest, TestCase::QUICK); |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
189 |
} |
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
190 |
|
a1f6f647d516
add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff
changeset
|
191 |
static WifiAggregationTestSuite g_wifiAggregationTestSuite; |