Wi-Fi -The block-ack-manager module reports an error when multiple STAs access the same AP over TCP
When using 802.11ax to create an AP and more than 3 STA networks, install the AP as TCP server, use the TCP BulkSendHelper module to send traffic, let each STA as the receiving client and install PacketSinkHelper. After running the simulation program for a period of time, the program exits with an error, use gdb trace I traced the error stack with gdb and found an error in block-ack-manager.cc at line 390, because HandleInFlightMpdu function wanted to remove an element from an empty List.
BlockAckManager::PacketQueueI BlockAckManager::HandleInFlightMpdu (PacketQueueI mpduIt, MpduStatus status, const AgreementsI& it, const Time& now)
{
NS_LOG_FUNCTION (this << **mpduIt << +static_cast<uint8_t> (status));
if (!(*mpduIt)->IsQueued ()) {
// MPDU is not in the EDCA queue (e.g., its lifetime expired and it was
// removed by another method), remove from the queue of in flight MPDUs
NS_LOG_DEBUG ("MPDU is not stored in the EDCA queue, drop MPDU");
return it->second.second.erase (mpduIt);
}
if (status == ACKNOWLEDGED)
{
// the MPDU has to be dequeued from the EDCA queue
m_queue->DequeueIfQueued (*mpduIt);
** return it->second.second.erase (mpduIt);**
}
This problem has been found to exist since about ns-3.29, and it is strange that it still occurs in ns-3.35. It has a high probability of occurring whenever running an AP and multiple STAs preempting access between them via TCP BulkSendHelper.
Please understand that I can only report this bug by describing the phenomenon, as my organization has some restrictions on uploading source files. I think this bug is relatively easy to reproduce, so if you need additional information, please reply and I can try to provide it by describing it.
Hopefully, this issue will be resolved soon, as it limits larger scale Wi-Fi networking emulation.
Good day.