Compressed block ACK, number of successfully received MPDUs

73 views
Skip to first unread message

inam

unread,
Feb 8, 2018, 2:48:45 AM2/8/18
to ns-3-users
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

Rediet

unread,
Feb 8, 2018, 5:20:44 AM2/8/18
to ns-3-users
Hello Inam,

When a MSDU or A-MSDU has to be fragmented, the different fragments will have the same sequence number but different fragment numbers.
Since it is a compressed BA, only the sequence number information is included in the bitmap. Thus the going through packets in queue with the same sequence numbers, implicitly stating that fragment numbers change in between.

Rediet

inam

unread,
Feb 8, 2018, 6:43:16 AM2/8/18
to ns-3-users
Thank you Rediet. So, it means that fragmentation is still possible when bloack ack is being used. Right?

inam

unread,
Feb 8, 2018, 6:45:06 AM2/8/18
to ns-3-users
I mean fragmentation is still possible when compressed BA is in use. Is it right?

Rediet

unread,
Feb 8, 2018, 9:05:05 AM2/8/18
to ns-3-users
I've parsed the 802.11-16 standard and couldn't find anything that forbids fragmenting MSDUs while using compressed BA. However, fragmenting A-MSDUs is explicitly prohibited (contrary to what I said in my previous reply...). So potentially a chipset maker can implement it.
The question will be; how will the receiver acknowledge the fragments? It'll probably send a BA saying "OK I've received the MSDU" that'll be read as all fragments of MSDU. In case the transmitter receives a BA with no flag for the sequence number, how should it react then? Resend all fragments even if only one was lost? Since it is not in the standard, compatibility issues should arise. Thence it is possible but not recommended...

inam

unread,
Feb 8, 2018, 9:34:38 AM2/8/18
to ns-3-users
What do you mean by "..the transmitter receives a BA with no flag for the sequence number...". I couldn't get it. Do you mean that the BA reports that a particular sequence number has not been received?

Regards
Inam

Rediet

unread,
Feb 8, 2018, 9:41:25 AM2/8/18
to ns-3-users
It's reporting the receive status through a bitmap.

inam

unread,
Feb 9, 2018, 12:56:43 AM2/9/18
to ns-3-users
Thanks a lot Rediet!
Reply all
Reply to author
Forward
0 new messages