Hi,
I have a doubt in the meaning of the following code that processes compressed block ack:
In the function BlockAckManager::NotifyGotBlockAck (called from the calling sequence: MacLow::ReceiveOk() -> EdcaTxopN::GotBlockAck() -> BlockAckManager::NotifyGotBlockAck()):
else if (blockAck->IsCompressed ())
{
for (PacketQueueI queueIt = it->second.second.begin (); queueIt != queueEnd; )
{
uint16_t currentSeq = (*queueIt).hdr.GetSequenceNumber ();
if (blockAck->IsPacketReceived (currentSeq))
{
while (queueIt != queueEnd
&& (*queueIt).hdr.GetSequenceNumber () == currentSeq)
{
nSuccessfulMpdus++;
if (!m_txOkCallback.IsNull ())
{
m_txOkCallback ((*queueIt).hdr);
}
RemoveFromRetryQueue (recipient, tid, currentSeq);
queueIt = it->second.second.erase (queueIt);
}
}
...
How can multiple queueIt entries have same sequence number as currentSeq (shown in bold font above)?
i.e., Since by definition, every bit of a compressed blockack acknowledges one and only one sequence number of an MPDU, how will it be possible to have multiple packets at that sequence number?
Can anybody explain it to me how the above code is correct, or if I have some misunderstanding about the concept?
Regards
Inam