wifi: Trace dropped QoS old packets

This commit is contained in:
Stefano Avallone
2021-09-01 13:49:17 +02:00
committed by Stefano Avallone
parent d9c1111ef1
commit 382a2aa3f6
4 changed files with 31 additions and 1 deletions

View File

@@ -401,6 +401,10 @@ BlockAckManager::HandleInFlightMpdu (PacketQueueI mpduIt, MpduStatus status,
if (it->second.first.GetDistance (hdr.GetSequenceNumber ()) >= SEQNO_SPACE_HALF_SIZE)
{
NS_LOG_DEBUG ("Old packet. Remove from the EDCA queue, too");
if (!m_droppedOldMpduCallback.IsNull ())
{
m_droppedOldMpduCallback (*queueIt);
}
queue->Remove (queueIt);
return it->second.second.erase (mpduIt);
}
@@ -607,6 +611,10 @@ BlockAckManager::NotifyDiscardedMpdu (Ptr<const WifiMacQueueItem> mpdu)
if (it->second.first.GetDistance ((*mpduIt)->GetHeader ().GetSequenceNumber ()) >= SEQNO_SPACE_HALF_SIZE)
{
m_queue->DequeueIfQueued (*mpduIt);
if (!m_droppedOldMpduCallback.IsNull ())
{
m_droppedOldMpduCallback (*mpduIt);
}
mpduIt = it->second.second.erase (mpduIt);
}
else
@@ -843,6 +851,12 @@ BlockAckManager::SetTxFailedCallback (TxFailed callback)
m_txFailedCallback = callback;
}
void
BlockAckManager::SetDroppedOldMpduCallback (DroppedOldMpdu callback)
{
m_droppedOldMpduCallback = callback;
}
uint16_t
BlockAckManager::GetRecipientBufferSize (Mac48Address recipient, uint8_t tid) const
{

View File

@@ -356,6 +356,11 @@ public:
* typedef for a callback to invoke when an MPDU is negatively ack'ed.
*/
typedef Callback <void, Ptr<const WifiMacQueueItem>> TxFailed;
/**
* typedef for a callback to invoke when an MPDU is dropped.
*/
typedef Callback <void, Ptr<const WifiMacQueueItem>> DroppedOldMpdu;
/**
* \param callback the callback to invoke when a
* packet transmission was completed successfully.
@@ -366,6 +371,10 @@ public:
* packet transmission was completed unsuccessfully.
*/
void SetTxFailedCallback (TxFailed callback);
/**
* \param callback the callback to invoke when an old MPDU is dropped
*/
void SetDroppedOldMpduCallback (DroppedOldMpdu callback);
/**
* TracedCallback signature for state changes.
@@ -483,6 +492,7 @@ private:
Callback<void, Mac48Address, uint8_t> m_unblockPackets; ///< unblock packets callback
TxOk m_txOkCallback; ///< transmit OK callback
TxFailed m_txFailedCallback; ///< transmit failed callback
DroppedOldMpdu m_droppedOldMpduCallback; ///< the dropped MPDU callback
/**
* The trace source fired when a state transition occurred.

View File

@@ -149,6 +149,7 @@ QosTxop::SetDroppedMpduCallback (DroppedMpdu callback)
{
NS_LOG_FUNCTION (this << &callback);
Txop::SetDroppedMpduCallback (callback);
m_baManager->SetDroppedOldMpduCallback (callback.Bind (WIFI_MAC_DROP_QOS_OLD_PACKET));
}
void
@@ -390,6 +391,10 @@ QosTxop::PeekNextMpdu (WifiMacQueueItem::QueueIteratorPair queueIt, uint8_t tid,
&& IsQosOldPacket (*queueIt.it))
{
NS_LOG_DEBUG ("Removing an old packet from EDCA queue: " << **queueIt.it);
if (!m_droppedMpduCallback.IsNull ())
{
m_droppedMpduCallback (WIFI_MAC_DROP_QOS_OLD_PACKET, *queueIt.it);
}
queueIt.it = m_queue->Remove (queueIt.it);
queueIt.it = peek ();
}

View File

@@ -55,7 +55,8 @@ enum WifiMacDropReason : uint8_t
{
WIFI_MAC_DROP_FAILED_ENQUEUE = 0,
WIFI_MAC_DROP_EXPIRED_LIFETIME,
WIFI_MAC_DROP_REACHED_RETRY_LIMIT
WIFI_MAC_DROP_REACHED_RETRY_LIMIT,
WIFI_MAC_DROP_QOS_OLD_PACKET
};
/**