21 #include "ns3/assert.h"
22 #include "ns3/simulator.h"
23 #include "ns3/fatal-error.h"
55 recipient (recipient),
83 it =
m_agreements.find (std::make_pair (recipient, tid));
89 return it->second.first.IsInactive ();
91 return it->second.first.IsEstablished ();
93 return it->second.first.IsPending ();
95 return it->second.first.IsUnsuccessful ();
106 pair<Mac48Address, uint8_t> key (recipient, reqHdr->
GetTid ());
111 agreement.SetBufferSize (0);
116 agreement.SetImmediateBlockAck ();
120 agreement.SetDelayedBlockAck ();
124 pair<OriginatorBlockAckAgreement, PacketQueue> value (agreement, queue);
137 if ((*i)->hdr.GetAddr1 () == recipient && (*i)->hdr.GetQosTid () == tid)
148 for (list<Bar>::iterator i =
m_bars.begin (); i !=
m_bars.end ();)
150 if (i->recipient == recipient && i->tid == tid)
165 uint8_t tid = respHdr->
GetTid ();
203 Item item (packet, hdr, tStamp);
206 it->second.second.push_back (item);
219 packet = queueIt->packet;
242 i->second.second.erase (queueIt);
269 uint32_t nPackets = 0;
274 uint16_t currentSeq = 0;
275 while (queueIt != (*it).second.second.end ())
277 currentSeq = (*queueIt).hdr.GetSequenceNumber ();
280 while (queueIt != (*it).second.second.end () && (*queueIt).hdr.GetSequenceNumber () == currentSeq)
293 uint32_t nPackets = 0;
294 uint16_t currentSeq = 0;
300 if ((*it)->hdr.GetAddr1 () == recipient && (*it)->hdr.GetQosTid () == tid)
302 currentSeq = (*it)->hdr.GetSequenceNumber ();
305 while (it !=
m_retryPackets.end () && (*it)->hdr.GetSequenceNumber () == currentSeq)
325 uint16_t sequenceFirstLost = 0;
331 bool foundFirstLost =
false;
335 if (it->second.first.m_inactivityEvent.IsRunning ())
340 it->second.first.m_inactivityEvent.Cancel ();
349 for (
PacketQueueI queueIt = it->second.second.begin (); queueIt != queueEnd;)
352 (*queueIt).hdr.GetFragmentNumber ()))
354 queueIt = it->second.second.erase (queueIt);
360 foundFirstLost =
true;
361 sequenceFirstLost = (*queueIt).hdr.GetSequenceNumber ();
362 (*it).second.first.SetStartingSequence (sequenceFirstLost);
371 for (
PacketQueueI queueIt = it->second.second.begin (); queueIt != queueEnd;)
375 uint16_t currentSeq = (*queueIt).hdr.GetSequenceNumber ();
376 while (queueIt != queueEnd
377 && (*queueIt).hdr.GetSequenceNumber () == currentSeq)
379 queueIt = it->second.second.erase (queueIt);
386 foundFirstLost =
true;
387 sequenceFirstLost = (*queueIt).hdr.GetSequenceNumber ();
388 (*it).second.first.SetStartingSequence (sequenceFirstLost);
428 if ((*it).second.first.IsBlockAckRequestNeeded ()
471 it->second.first.SetStartingSequence (startingSeq);
501 nextSeq = nextSeqNumber;
503 it->second.first.NotifyMpduTransmission (nextSeq);
507 Bar request (bar, recipient, tid, it->second.first.IsImmediateBlockAck ());
508 m_bars.push_back (request);
575 if (j->second.second.empty ())
581 for (
PacketQueueI i = j->second.second.begin (); i != j->second.second.end (); i++)
593 if ((*it)->hdr.GetAddr1 () == j->second.first.GetPeer ()
594 && (*it)->hdr.GetQosTid () == j->second.first.GetTid ()
595 && (*it)->hdr.GetSequenceNumber () == i->hdr.GetSequenceNumber ())
602 j->second.second.erase (j->second.second.begin (), end);
603 j->second.first.SetStartingSequence (end->hdr.GetSequenceNumber ());
641 std::list<PacketQueueI>::const_iterator it =
m_retryPackets.begin ();
644 if ((*it)->hdr.GetAddr1 () == recipient && (*it)->hdr.GetQosTid () == tid)
646 return (*it)->hdr.GetSequenceNumber ();