wifi: Stop A-MSDU aggregation if an A-MSDU is found in the queue
A-MSDUs with no assigned sequence number may be found in the queue after an RTS/CTS failure.
This commit is contained in:
@@ -32,6 +32,7 @@ Release 3-dev
|
||||
|
||||
- (lr-wpan) !1673 - Fixes PHY BUSY_RX -> RX_ON operation
|
||||
- (wifi) - Fix agreement not always properly torn down when Block Ack inactivity timeout is elapsed
|
||||
- (wifi) - Stop A-MSDU aggregation when an A-MSDU is found in the queue
|
||||
|
||||
Release 3.40
|
||||
------------
|
||||
|
||||
@@ -127,11 +127,16 @@ MsduAggregator::GetNextAmsdu(Ptr<WifiMpdu> peekedItem,
|
||||
uint8_t nMsdu = 1;
|
||||
peekedItem = queue->PeekByTidAndAddress(tid, recipient, peekedItem->GetOriginal());
|
||||
|
||||
while (peekedItem &&
|
||||
// stop aggregation if we find an A-MSDU in the queue. This likely happens when an A-MSDU is
|
||||
// prepared but not transmitted due to RTS/CTS failure
|
||||
while (peekedItem && !peekedItem->GetHeader().IsQosAmsdu() &&
|
||||
m_htFem->TryAggregateMsdu(peekedItem = m_htFem->CreateAliasIfNeeded(peekedItem),
|
||||
txParams,
|
||||
availableTime))
|
||||
{
|
||||
NS_ASSERT_MSG(!peekedItem->HasSeqNoAssigned(),
|
||||
"Found item with sequence number assignment after one without: perhaps "
|
||||
"sequence numbers were not released correctly?");
|
||||
// find the next MPDU before dequeuing the current one
|
||||
Ptr<const WifiMpdu> msdu = peekedItem->GetOriginal();
|
||||
peekedItem = queue->PeekByTidAndAddress(tid, recipient, msdu);
|
||||
|
||||
Reference in New Issue
Block a user