Skip to content

Commit 916cd53

Browse files
committed
wifi: Do not allow S-MPDU transmissions as long as ADDBA handshake is not established
1 parent 1e50fef commit 916cd53

File tree

1 file changed

+30
-27
lines changed

1 file changed

+30
-27
lines changed

src/wifi/model/mac-low.cc

Lines changed: 30 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)