diff --git a/src/wifi/model/qos-txop.cc b/src/wifi/model/qos-txop.cc index 5270e1c14..5c57fb100 100644 --- a/src/wifi/model/qos-txop.cc +++ b/src/wifi/model/qos-txop.cc @@ -29,6 +29,7 @@ #include "mpdu-aggregator.h" #include "msdu-aggregator.h" #include "qos-blocked-destinations.h" +#include "wifi-mac-queue-scheduler.h" #include "wifi-mac-queue.h" #include "wifi-mac-trailer.h" #include "wifi-phy.h" @@ -112,9 +113,23 @@ QosTxop::QosTxop(AcIndex ac) m_baManager = CreateObject(); m_baManager->SetQueue(m_queue); m_baManager->SetBlockDestinationCallback( - MakeCallback(&QosBlockedDestinations::Block, m_qosBlockedDestinations)); + Callback([this](Mac48Address recipient, uint8_t tid) { + m_mac->GetMacQueueScheduler()->BlockQueues(WifiQueueBlockedReason::WAITING_ADDBA_RESP, + m_ac, + {WIFI_QOSDATA_QUEUE}, + recipient, + m_mac->GetAddress(), + {tid}); + })); m_baManager->SetUnblockDestinationCallback( - MakeCallback(&QosBlockedDestinations::Unblock, m_qosBlockedDestinations)); + Callback([this](Mac48Address recipient, uint8_t tid) { + m_mac->GetMacQueueScheduler()->UnblockQueues(WifiQueueBlockedReason::WAITING_ADDBA_RESP, + m_ac, + {WIFI_QOSDATA_QUEUE}, + recipient, + m_mac->GetAddress(), + {tid}); + })); m_queue->TraceConnectWithoutContext( "Expired", MakeCallback(&BlockAckManager::NotifyDiscardedMpdu, m_baManager)); diff --git a/src/wifi/model/wifi-mac-queue-scheduler.h b/src/wifi/model/wifi-mac-queue-scheduler.h index 4f6ea1105..755d37562 100644 --- a/src/wifi/model/wifi-mac-queue-scheduler.h +++ b/src/wifi/model/wifi-mac-queue-scheduler.h @@ -41,7 +41,8 @@ class WifiMac; */ enum class WifiQueueBlockedReason : uint8_t { - REASONS_COUNT = 0 + WAITING_ADDBA_RESP = 0, + REASONS_COUNT }; /** @@ -56,6 +57,8 @@ operator<<(std::ostream& os, WifiQueueBlockedReason reason) { switch (reason) { + case WifiQueueBlockedReason::WAITING_ADDBA_RESP: + return (os << "WAITING_ADDBA_RESP"); case WifiQueueBlockedReason::REASONS_COUNT: return (os << "REASONS_COUNT"); default: