--- a/src/devices/wifi/msdu-aggregator.cc Sun May 24 11:39:41 2009 +0100
+++ b/src/devices/wifi/msdu-aggregator.cc Thu May 28 11:07:41 2009 +0200
@@ -59,7 +59,7 @@
padding = (4 - ((hdr.GetLength () + 14) %4 )) % 4;
- if (padding > 0)
+ if (padding > 0 && deserialized < maxSize)
{
aggregatedPacket->RemoveAtStart (padding);
deserialized += padding;
--- a/src/devices/wifi/msdu-standard-aggregator.cc Sun May 24 11:39:41 2009 +0100
+++ b/src/devices/wifi/msdu-standard-aggregator.cc Thu May 28 11:07:41 2009 +0200
@@ -57,19 +57,20 @@
Ptr<Packet> currentPacket;
AmsduSubframeHeader currentHdr;
- uint32_t padding = CalculatePadding (packet);
+ uint32_t padding = CalculatePadding (aggregatedPacket);
uint32_t actualSize = aggregatedPacket->GetSize ();
if ((14 + packet->GetSize () + actualSize + padding) <= m_maxAmsduLength)
{
+ if (padding)
+ {
+ aggregatedPacket->AddPaddingAtEnd (padding);
+ }
currentHdr.SetDestinationAddr (dest);
currentHdr.SetSourceAddr (src);
currentHdr.SetLength (packet->GetSize ());
currentPacket = packet->Copy ();
- if (padding)
- {
- currentPacket->AddPaddingAtEnd (padding);
- }
+
currentPacket->AddHeader (currentHdr);
aggregatedPacket->AddAtEnd (currentPacket);
return true;
@@ -80,7 +81,7 @@
uint32_t
MsduStandardAggregator::CalculatePadding (Ptr<const Packet> packet)
{
- return (4 - ((packet->GetSize() + 14) %4 )) % 4;
+ return (4 - (packet->GetSize() %4 )) % 4;
}
} //namespace ns3
--- a/src/devices/wifi/msdu-standard-aggregator.h Sun May 24 11:39:41 2009 +0100
+++ b/src/devices/wifi/msdu-standard-aggregator.h Thu May 28 11:07:41 2009 +0200
@@ -43,7 +43,8 @@
virtual bool Aggregate (Ptr<const Packet> packet, Ptr<Packet> aggregatedPacket,
Mac48Address src, Mac48Address dest);
private:
- /* Calculates how much padding must be added to the end of packet.
+ /* Calculates how much padding must be added to the end of aggregated packet,
+ after that a new packet is added.
Each A-MSDU subframe is padded so that its length is multiple of 4 octects.
*/
uint32_t CalculatePadding (Ptr<const Packet> packet);