#include <OriginatorBlockAckAgreementHandler.h>
inet::ieee80211::OriginatorBlockAckAgreementHandler::~OriginatorBlockAckAgreementHandler |
( |
| ) |
|
|
virtual |
std::map< std::pair< MACAddress, Tid >, OriginatorBlockAckAgreement * > blockAckAgreements
Definition: OriginatorBlockAckAgreementHandler.h:33
Implements inet::ieee80211::IOriginatorBlockAckAgreementHandler.
51 simtime_t now = simTime();
53 auto agreement =
id.second;
54 if (agreement->getExpirationTime() == now) {
55 MACAddress receiverAddr =
id.first.first;
56 Tid tid =
id.first.second;
57 procedureCallback->processMgmtFrame(
buildDelba(receiverAddr, tid, 39));
int8_t Tid
Definition: Ieee80211Defs.h:28
virtual void scheduleInactivityTimer(IBlockAckAgreementHandlerCallback *callback)
Definition: OriginatorBlockAckAgreementHandler.cc:94
std::map< std::pair< MACAddress, Tid >, OriginatorBlockAckAgreement * > blockAckAgreements
Definition: OriginatorBlockAckAgreementHandler.h:33
virtual Ieee80211Delba * buildDelba(MACAddress receiverAddr, Tid tid, int reasonCode)
Definition: OriginatorBlockAckAgreementHandler.cc:108
Referenced by processTransmittedDataFrame().
65 Ieee80211AddbaRequest *addbaRequest =
new Ieee80211AddbaRequest(
"AddbaReq");
66 addbaRequest->setReceiverAddress(receiverAddr);
67 addbaRequest->setTid(tid);
68 addbaRequest->setAMsduSupported(blockAckAgreementPolicy->isMsduSupported());
69 addbaRequest->setBlockAckTimeoutValue(blockAckAgreementPolicy->getBlockAckTimeoutValue());
70 addbaRequest->setBufferSize(blockAckAgreementPolicy->getMaximumAllowedBufferSize());
72 addbaRequest->setBlockAckPolicy(blockAckAgreementPolicy->isDelayedAckPolicySupported() ? 0 : 1);
73 addbaRequest->setStartingSequenceNumber(startingSequenceNumber);
Referenced by blockAckAgreementExpired().
110 Ieee80211Delba *delba =
new Ieee80211Delba();
111 delba->setReceiverAddress(receiverAddr);
113 delba->setReasonCode(reasonCode);
115 delba->setInitiator(
true);
simtime_t inet::ieee80211::OriginatorBlockAckAgreementHandler::computeEarliestExpirationTime |
( |
| ) |
|
|
protectedvirtual |
Referenced by scheduleInactivityTimer().
33 simtime_t earliestTime = SIMTIME_MAX;
35 auto agreement =
id.second;
36 if (agreement->getIsAddbaResponseReceived()) {
37 ASSERT(earliestTime >= 0);
38 ASSERT(agreement->getExpirationTime() >= 0);
39 earliestTime =
std::min(earliestTime, agreement->getExpirationTime());
double min(const double a, const double b)
Returns the minimum of a and b.
Definition: SCTPAssociation.h:270
std::map< std::pair< MACAddress, Tid >, OriginatorBlockAckAgreement * > blockAckAgreements
Definition: OriginatorBlockAckAgreementHandler.h:33
void inet::ieee80211::OriginatorBlockAckAgreementHandler::createAgreement |
( |
Ieee80211AddbaRequest * |
addbaRequest | ) |
|
|
protectedvirtual |
Referenced by processTransmittedDataFrame().
26 OriginatorBlockAckAgreement *blockAckAgreement =
new OriginatorBlockAckAgreement(addbaRequest->getReceiverAddress(), addbaRequest->getTid(), addbaRequest->getStartingSequenceNumber(), addbaRequest->getBufferSize(), addbaRequest->getAMsduSupported(), addbaRequest->getBlockAckPolicy() == 0);
27 auto agreementId = std::make_pair(addbaRequest->getReceiverAddress(), addbaRequest->getTid());
std::map< std::pair< MACAddress, Tid >, OriginatorBlockAckAgreement * > blockAckAgreements
Definition: OriginatorBlockAckAgreementHandler.h:33
Implements inet::ieee80211::IOriginatorBlockAckAgreementHandler.
142 auto agreement =
getAgreement(addbaResp->getTransmitterAddress(), addbaResp->getTid());
143 if (blockAckAgreementPolicy->isAddbaReqAccepted(addbaResp, agreement)) {
virtual void scheduleInactivityTimer(IBlockAckAgreementHandlerCallback *callback)
Definition: OriginatorBlockAckAgreementHandler.cc:94
virtual void updateAgreement(OriginatorBlockAckAgreement *agreement, Ieee80211AddbaResponse *addbaResp)
Definition: OriginatorBlockAckAgreementHandler.cc:152
virtual OriginatorBlockAckAgreement * getAgreement(MACAddress receiverAddr, Tid tid) override
Definition: OriginatorBlockAckAgreementHandler.cc:101
Implements inet::ieee80211::IOriginatorBlockAckAgreementHandler.
83 if (
auto basicBlockAck = dynamic_cast<Ieee80211BasicBlockAck*>(blockAck)) {
84 auto agreement =
getAgreement(basicBlockAck->getTransmitterAddress(), basicBlockAck->getTidInfo());
91 throw cRuntimeError(
"Unsupported BlockAck");
virtual void scheduleInactivityTimer(IBlockAckAgreementHandlerCallback *callback)
Definition: OriginatorBlockAckAgreementHandler.cc:94
virtual OriginatorBlockAckAgreement * getAgreement(MACAddress receiverAddr, Tid tid) override
Definition: OriginatorBlockAckAgreementHandler.cc:101
virtual void calculateExpirationTime()
Definition: OriginatorBlockAckAgreement.h:75
void inet::ieee80211::OriginatorBlockAckAgreementHandler::processTransmittedAddbaReq |
( |
Ieee80211AddbaRequest * |
addbaReq | ) |
|
|
overridevirtual |
Implements inet::ieee80211::IOriginatorBlockAckAgreementHandler.
162 auto agreement =
getAgreement(addbaReq->getReceiverAddress(), addbaReq->getTid());
166 throw cRuntimeError(
"Block Ack Agreement should have already been added");
virtual OriginatorBlockAckAgreement * getAgreement(MACAddress receiverAddr, Tid tid) override
Definition: OriginatorBlockAckAgreementHandler.cc:101
virtual void setIsAddbaRequestSent(bool isAddbaRequestSent)
Definition: OriginatorBlockAckAgreement.h:69
Implements inet::ieee80211::IOriginatorBlockAckAgreementHandler.
132 auto agreement =
getAgreement(dataFrame->getReceiverAddress(), dataFrame->getTid());
133 if (blockAckAgreementPolicy->isAddbaReqNeeded(dataFrame) && agreement ==
nullptr) {
134 auto addbaReq =
buildAddbaRequest(dataFrame->getReceiverAddress(), dataFrame->getTid(), dataFrame->getSequenceNumber() + 1, blockAckAgreementPolicy);
136 callback->processMgmtFrame(addbaReq);
virtual void createAgreement(Ieee80211AddbaRequest *addbaRequest)
Definition: OriginatorBlockAckAgreementHandler.cc:24
virtual Ieee80211AddbaRequest * buildAddbaRequest(MACAddress receiverAddr, Tid tid, int startingSequenceNumber, IOriginatorBlockAckAgreementPolicy *blockAckAgreementPolicy)
Definition: OriginatorBlockAckAgreementHandler.cc:63
virtual OriginatorBlockAckAgreement * getAgreement(MACAddress receiverAddr, Tid tid) override
Definition: OriginatorBlockAckAgreementHandler.cc:101
void inet::ieee80211::OriginatorBlockAckAgreementHandler::processTransmittedDelba |
( |
Ieee80211Delba * |
delba | ) |
|
|
overridevirtual |
void inet::ieee80211::OriginatorBlockAckAgreementHandler::terminateAgreement |
( |
MACAddress |
originatorAddr, |
|
|
Tid |
tid |
|
) |
| |
|
protectedvirtual |
Referenced by processReceivedDelba(), and processTransmittedDelba().
121 auto agreementId = std::make_pair(originatorAddr, tid);
124 OriginatorBlockAckAgreement *agreement = it->second;
std::map< std::pair< MACAddress, Tid >, OriginatorBlockAckAgreement * > blockAckAgreements
Definition: OriginatorBlockAckAgreementHandler.h:33
Referenced by processReceivedAddbaResp().
154 agreement->setIsAddbaResponseReceived(
true);
155 agreement->setBufferSize(addbaResp->getBufferSize());
156 agreement->setBlockAckTimeoutValue(addbaResp->getBlockAckTimeoutValue());
157 agreement->calculateExpirationTime();
The documentation for this class was generated from the following files: