INET Framework for OMNeT++/OMNEST
inet::ieee80211::QoSDuplicateRemoval Class Reference

#include <QosDuplicateRemoval.h>

Inheritance diagram for inet::ieee80211::QoSDuplicateRemoval:
inet::ieee80211::IDuplicateRemoval

Public Member Functions

virtual bool isDuplicate (const Ptr< const Ieee80211DataOrMgmtHeader > &header) override
 
- Public Member Functions inherited from inet::ieee80211::IDuplicateRemoval
virtual ~IDuplicateRemoval ()
 

Protected Types

typedef std::pair< MacAddress, TidKey
 
typedef std::map< Key, SequenceControlFieldKey2SeqValMap
 
typedef std::map< MacAddress, SequenceControlFieldMac2SeqValMap
 

Protected Attributes

Key2SeqValMap lastSeenSeqNumCache
 
Mac2SeqValMap lastSeenSharedSeqNumCache
 
Mac2SeqValMap lastSeenTimePriorityManagementSeqNumCache
 

Member Typedef Documentation

◆ Key

◆ Key2SeqValMap

◆ Mac2SeqValMap

Member Function Documentation

◆ isDuplicate()

bool inet::ieee80211::QoSDuplicateRemoval::isDuplicate ( const Ptr< const Ieee80211DataOrMgmtHeader > &  header)
overridevirtual

Implements inet::ieee80211::IDuplicateRemoval.

16 {
17  SequenceControlField seqVal(header->getSequenceNumber().get(), header->getFragmentNumber());
18  bool isManagementFrame = dynamicPtrCast<const Ieee80211MgmtHeader>(header) != nullptr;
19  bool isTimePriorityManagementFrame = isManagementFrame && false; // TODO hack
20  if (isTimePriorityManagementFrame || isManagementFrame) {
21  MacAddress transmitterAddr = header->getTransmitterAddress();
23  auto it = cache.find(transmitterAddr);
24  if (it == cache.end()) {
25  cache.insert(std::pair<MacAddress, SequenceControlField>(transmitterAddr, seqVal));
26  return false;
27  }
28  else if (it->second.getSequenceNumber() == seqVal.getSequenceNumber() && it->second.getFragmentNumber() == seqVal.getFragmentNumber() && header->getRetry())
29  return true;
30  else {
31  it->second = seqVal;
32  return false;
33  }
34  }
35  else {
36  const Ptr<const Ieee80211DataHeader>& qosDataHeader = dynamicPtrCast<const Ieee80211DataHeader>(header);
37  Key key(header->getTransmitterAddress(), qosDataHeader->getTid());
38  auto it = lastSeenSeqNumCache.find(key);
39  if (it == lastSeenSeqNumCache.end()) {
40  lastSeenSeqNumCache.insert(std::pair<Key, SequenceControlField>(key, seqVal));
41  return false;
42  }
43  else if (it->second.getSequenceNumber() == seqVal.getSequenceNumber() && it->second.getFragmentNumber() == seqVal.getFragmentNumber() && header->getRetry())
44  return true;
45  else {
46  it->second = seqVal;
47  return false;
48  }
49  }
50 }

Member Data Documentation

◆ lastSeenSeqNumCache

Key2SeqValMap inet::ieee80211::QoSDuplicateRemoval::lastSeenSeqNumCache
protected

Referenced by isDuplicate().

◆ lastSeenSharedSeqNumCache

Mac2SeqValMap inet::ieee80211::QoSDuplicateRemoval::lastSeenSharedSeqNumCache
protected

Referenced by isDuplicate().

◆ lastSeenTimePriorityManagementSeqNumCache

Mac2SeqValMap inet::ieee80211::QoSDuplicateRemoval::lastSeenTimePriorityManagementSeqNumCache
protected

Referenced by isDuplicate().


The documentation for this class was generated from the following files:
inet::ieee80211::QoSDuplicateRemoval::lastSeenSharedSeqNumCache
Mac2SeqValMap lastSeenSharedSeqNumCache
Definition: QosDuplicateRemoval.h:27
inet::ieee80211::QoSDuplicateRemoval::Key
std::pair< MacAddress, Tid > Key
Definition: QosDuplicateRemoval.h:23
inet::ieee80211::QoSDuplicateRemoval::lastSeenTimePriorityManagementSeqNumCache
Mac2SeqValMap lastSeenTimePriorityManagementSeqNumCache
Definition: QosDuplicateRemoval.h:28
inet::ieee80211::QoSDuplicateRemoval::Mac2SeqValMap
std::map< MacAddress, SequenceControlField > Mac2SeqValMap
Definition: QosDuplicateRemoval.h:25
inet::ieee80211::QoSDuplicateRemoval::lastSeenSeqNumCache
Key2SeqValMap lastSeenSeqNumCache
Definition: QosDuplicateRemoval.h:26