diff --git a/src/wifi/model/gcr-manager.cc b/src/wifi/model/gcr-manager.cc index bb2cd447c..373b4adc7 100644 --- a/src/wifi/model/gcr-manager.cc +++ b/src/wifi/model/gcr-manager.cc @@ -41,7 +41,9 @@ GcrManager::GetTypeId() MakeEnumChecker(GroupAddressRetransmissionPolicy::NO_ACK_NO_RETRY, "NO_RETRY", GroupAddressRetransmissionPolicy::GCR_UNSOLICITED_RETRY, - "GCR_UR")) + "GCR_UR", + GroupAddressRetransmissionPolicy::GCR_BLOCK_ACK, + "GCR_BA")) .AddAttribute( "GcrProtectionMode", "Protection mode used for groupcast frames when needed: " @@ -175,6 +177,10 @@ GcrManager::KeepGroupcastQueued(Ptr mpdu) NS_ASSERT_MSG(m_retransmissionPolicy != GroupAddressRetransmissionPolicy::NO_ACK_NO_RETRY, "GCR service is not enabled"); NS_ASSERT_MSG(!m_staMembers.empty(), "GCR service should not be used"); + if (m_retransmissionPolicy == GroupAddressRetransmissionPolicy::GCR_BLOCK_ACK) + { + return !mpdu->GetHeader().IsRetry() && !m_nonGcrStas.empty(); + } if (!m_mpdu || !mpdu->GetHeader().IsRetry()) { m_unsolicitedRetryCounter = 0; diff --git a/src/wifi/model/gcr-manager.h b/src/wifi/model/gcr-manager.h index 1dcd7bc15..2f7c064b0 100644 --- a/src/wifi/model/gcr-manager.h +++ b/src/wifi/model/gcr-manager.h @@ -29,7 +29,8 @@ class WifiMpdu; enum class GroupAddressRetransmissionPolicy : uint8_t { NO_ACK_NO_RETRY = 0, - GCR_UNSOLICITED_RETRY + GCR_UNSOLICITED_RETRY, + GCR_BLOCK_ACK }; /// Groupcast protection mode enumeration