Bug 2156 [wifi] - Duplicate packets when using two level aggregation

This commit is contained in:
Sébastien Deronne
2015-07-23 21:55:17 +02:00
parent 62f72a7048
commit 885bb7e1cd
3 changed files with 8 additions and 3 deletions

View File

@@ -39,6 +39,7 @@ Bugs fixed
- Bug 2138 - SimpleNetDevice could send overlapped packets
- Bug 2153 - Incorrect power limits in wifi power control algorithms
- Bug 2154 - Incorrect power calculation in wifi power adaptation examples
- Bug 2156 - Duplicate packets when using two level aggregation
Known issues
------------

View File

@@ -3046,13 +3046,16 @@ MacLow::PerformMsduAggregation (Ptr<const Packet> packet, WifiMacHeader *hdr, Ti
std::map<AcIndex, MacLowAggregationCapableTransmissionListener*>::const_iterator listenerIt = m_edcaListeners.find (ac);
NS_ASSERT (listenerIt != m_edcaListeners.end ());
queue = listenerIt->second->GetQueue ();
Ptr<const Packet> peekedPacket = queue->DequeueByTidAndAddress (hdr, hdr->GetQosTid (),
WifiMacHeader::ADDR1, hdr->GetAddr1 ());
listenerIt->second->GetMsduAggregator ()->Aggregate (packet, currentAmsduPacket,
listenerIt->second->GetSrcAddressForAggregation (*hdr),
listenerIt->second->GetDestAddressForAggregation (*hdr));
Ptr<const Packet> peekedPacket = queue->PeekByTidAndAddress (hdr, hdr->GetQosTid (),
WifiMacHeader::ADDR1, hdr->GetAddr1 (), tstamp);
peekedPacket = queue->PeekByTidAndAddress (hdr, hdr->GetQosTid (),
WifiMacHeader::ADDR1, hdr->GetAddr1 (), tstamp);
while (peekedPacket != 0)
{
tempPacket = currentAmsduPacket;
@@ -3083,6 +3086,7 @@ MacLow::PerformMsduAggregation (Ptr<const Packet> packet, WifiMacHeader *hdr, Ti
}
else
{
queue->PushFront (packet, *hdr);
return 0;
}
}

View File

@@ -132,7 +132,7 @@ TwoLevelAggregationTest::DoRun (void)
bool result = (packet != 0);
NS_TEST_EXPECT_MSG_EQ (result, true, "aggregation failed");
NS_TEST_EXPECT_MSG_EQ (packet->GetSize (), 3030, "wrong packet size");
NS_TEST_EXPECT_MSG_EQ (m_edca->GetEdcaQueue ()->GetSize (), 1, "removing packet from EDCA queue failed");
NS_TEST_EXPECT_MSG_EQ (m_edca->GetEdcaQueue ()->GetSize (), 0, "aggregated packets not removed from the queue");
//-----------------------------------------------------------------------------------------------------