@@ -3075,37 +3075,40 @@ MacLow::AggregateToAmpdu (Ptr<const Packet> packet, const WifiMacHeader hdr)
30753075 }
30763076 }
30773077 }
3078- // VHT/HE single MPDU operation
3079- WifiTxVector dataTxVector = GetDataTxVector (m_currentPacket, &m_currentHdr);
3080- if (!isAmpdu
3081- && hdr.IsQosData ()
3082- && (dataTxVector.GetMode ().GetModulationClass () == WIFI_MOD_CLASS_VHT
3083- || dataTxVector.GetMode ().GetModulationClass () == WIFI_MOD_CLASS_HE))
3078+ if (edcaIt->second ->GetBaAgreementEstablished (hdr.GetAddr1 (), tid))
30843079 {
3085- peekedHdr = hdr;
3086- peekedHdr.SetQosAckPolicy (WifiMacHeader::NORMAL_ACK);
3087-
3088- currentAggregatedPacket = Create<Packet> ();
3089- edcaIt->second ->GetMpduAggregator ()->AggregateSingleMpdu (packet, currentAggregatedPacket);
3090- m_aggregateQueue[tid]->Enqueue (Create<WifiMacQueueItem> (packet, peekedHdr));
3091- if (m_txParams.MustSendRts ())
3092- {
3093- InsertInTxQueue (packet, peekedHdr, tstamp, tid);
3094- }
3095- if (edcaIt->second ->GetBaAgreementEstablished (hdr.GetAddr1 (), tid))
3080+ // VHT/HE single MPDU operation
3081+ WifiTxVector dataTxVector = GetDataTxVector (m_currentPacket, &m_currentHdr);
3082+ if (!isAmpdu
3083+ && hdr.IsQosData ()
3084+ && (dataTxVector.GetMode ().GetModulationClass () == WIFI_MOD_CLASS_VHT
3085+ || dataTxVector.GetMode ().GetModulationClass () == WIFI_MOD_CLASS_HE))
30963086 {
3097- edcaIt->second ->CompleteAmpduTransfer (peekedHdr.GetAddr1 (), tid);
3098- }
3087+ peekedHdr = hdr;
3088+ peekedHdr.SetQosAckPolicy (WifiMacHeader::NORMAL_ACK);
3089+
3090+ currentAggregatedPacket = Create<Packet> ();
3091+ edcaIt->second ->GetMpduAggregator ()->AggregateSingleMpdu (packet, currentAggregatedPacket);
3092+ m_aggregateQueue[tid]->Enqueue (Create<WifiMacQueueItem> (packet, peekedHdr));
3093+ if (m_txParams.MustSendRts ())
3094+ {
3095+ InsertInTxQueue (packet, peekedHdr, tstamp, tid);
3096+ }
3097+ if (edcaIt->second ->GetBaAgreementEstablished (hdr.GetAddr1 (), tid))
3098+ {
3099+ edcaIt->second ->CompleteAmpduTransfer (peekedHdr.GetAddr1 (), tid);
3100+ }
30993101
3100- // Add packet tag
3101- AmpduTag ampdutag;
3102- newPacket = currentAggregatedPacket;
3103- newPacket->AddHeader (peekedHdr);
3104- AddWifiMacTrailer (newPacket);
3105- newPacket->AddPacketTag (ampdutag);
3102+ // Add packet tag
3103+ AmpduTag ampdutag;
3104+ newPacket = currentAggregatedPacket;
3105+ newPacket->AddHeader (peekedHdr);
3106+ AddWifiMacTrailer (newPacket);
3107+ newPacket->AddPacketTag (ampdutag);
31063108
3107- NS_LOG_DEBUG (" tx unicast S-MPDU with sequence number " << hdr.GetSequenceNumber ());
3108- edcaIt->second ->SetAmpduExist (hdr.GetAddr1 (), true );
3109+ NS_LOG_DEBUG (" tx unicast S-MPDU with sequence number " << hdr.GetSequenceNumber ());
3110+ edcaIt->second ->SetAmpduExist (hdr.GetAddr1 (), true );
3111+ }
31093112 }
31103113 }
31113114 }
0 commit comments