src/wifi/model/mac-low.cc
changeset 11479 a3dcf66928f3
parent 11450 9f4ae69f12b7
child 11535 e9812cb35cef
--- a/src/wifi/model/mac-low.cc	Wed Jul 08 00:09:46 2015 +0200
+++ b/src/wifi/model/mac-low.cc	Wed Jul 08 23:44:17 2015 +0200
@@ -366,7 +366,8 @@
     m_listener (0),
     m_phyMacLowListener (0),
     m_ctsToSelfSupported (false),
-    m_receivedAtLeastOneMpdu (false)
+    m_receivedAtLeastOneMpdu (false),
+    m_mpduReferenceNumber (0)
 {
   NS_LOG_FUNCTION (this);
   m_lastNavDuration = Seconds (0);
@@ -1556,7 +1557,7 @@
                 ", seq=0x" << std::hex << m_currentHdr.GetSequenceControl () << std::dec);
   if (!m_ampdu || hdr->IsRts ())
     {
-      m_phy->SendPacket (packet, txVector, preamble, 0);
+      m_phy->SendPacket (packet, txVector, preamble, 0, 0);
     }
   else
     {
@@ -1571,6 +1572,10 @@
       AmpduTag ampdutag;
       ampdutag.SetAmpdu (true);
       Time delay = Seconds (0);
+      if (queueSize > 1)
+        {
+          txVector.SetAggregation (true);
+        }
       for (; queueSize > 0; queueSize--)
         {
           dequeuedPacket = m_aggregateQueue->Dequeue (&newHdr);
@@ -1591,11 +1596,11 @@
             {
               NS_LOG_DEBUG ("Sending MPDU as part of A-MPDU");
               packetType = 1;
-              m_phy->SendPacket (newPacket, txVector, preamble, packetType);
+              m_phy->SendPacket (newPacket, txVector, preamble, packetType, m_mpduReferenceNumber);
             }
           else
             {
-              Simulator::Schedule (delay, &MacLow::SendPacket, this, newPacket, txVector, preamble, packetType);
+              Simulator::Schedule (delay, &MacLow::SendPacket, this, newPacket, txVector, preamble, packetType, m_mpduReferenceNumber);
             }
           if (queueSize > 1)
             {
@@ -1603,14 +1608,15 @@
             }
           preamble = WIFI_PREAMBLE_NONE;
         }
+      m_mpduReferenceNumber = ((m_mpduReferenceNumber + 1) % 4294967296);
     }
 }
 
 void
-MacLow::SendPacket (Ptr<const Packet> packet, WifiTxVector txVector, WifiPreamble preamble, uint8_t packetType)
+MacLow::SendPacket (Ptr<const Packet> packet, WifiTxVector txVector, WifiPreamble preamble, uint8_t packetType, uint32_t mpduReferenceNumber)
 {
   NS_LOG_DEBUG ("Sending MPDU as part of A-MPDU");
-  m_phy->SendPacket (packet, txVector, preamble, packetType);
+  m_phy->SendPacket (packet, txVector, preamble, packetType, mpduReferenceNumber);
 }
 
 void