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

#include <QoSSequenceNumberAssignment.h>

Inheritance diagram for inet::ieee80211::QoSSequenceNumberAssignment:
inet::ieee80211::ISequenceNumberAssignment

Public Member Functions

virtual void assignSequenceNumber (const Ptr< Ieee80211DataOrMgmtHeader > &header) override
 
- Public Member Functions inherited from inet::ieee80211::ISequenceNumberAssignment
virtual ~ISequenceNumberAssignment ()
 

Protected Types

enum  CacheType { SHARED, TIME_PRIORITY, DATA }
 
typedef std::pair< MacAddress, TidKey
 

Protected Member Functions

virtual CacheType getCacheType (const Ptr< const Ieee80211DataOrMgmtHeader > &header, bool incoming)
 

Protected Attributes

std::map< Key, SequenceNumberCycliclastSentSeqNums
 
std::map< MacAddress, SequenceNumberCycliclastSentTimePrioritySeqNums
 
std::map< MacAddress, SequenceNumberCycliclastSentSharedSeqNums
 
SequenceNumberCyclic lastSentSharedCounterSeqNum = SequenceNumberCyclic(0)
 

Member Typedef Documentation

◆ Key

Member Enumeration Documentation

◆ CacheType

Enumerator
SHARED 
TIME_PRIORITY 
DATA 
23  {
24  SHARED,
26  DATA
27  };

Member Function Documentation

◆ assignSequenceNumber()

void inet::ieee80211::QoSSequenceNumberAssignment::assignSequenceNumber ( const Ptr< Ieee80211DataOrMgmtHeader > &  header)
overridevirtual

Implements inet::ieee80211::ISequenceNumberAssignment.

26 {
27  CacheType type = getCacheType(header, false);
28  SequenceNumberCyclic seqNum;
29  MacAddress address = header->getReceiverAddress();
30  if (type == TIME_PRIORITY) {
31  // Error in spec?
32  // "QoS STA may use values from additional modulo-4096 counters per <Address 1, TID> for sequence numbers assigned to
33  // time priority management frames." 9.3.2.10 Duplicate detection and recovery, But management frames don't have QoS Control field.
34  auto it = lastSentTimePrioritySeqNums.find(address);
35  if (it == lastSentTimePrioritySeqNums.end())
36  lastSentTimePrioritySeqNums[address] = seqNum = SequenceNumberCyclic(0);
37  else
38  it->second = seqNum = it->second + 1;
39  }
40  if (type == SHARED) {
41  auto it = lastSentSharedSeqNums.find(address);
42  if (it == lastSentSharedSeqNums.end())
44  else {
45  if (it->second == lastSentSharedCounterSeqNum)
46  lastSentSharedCounterSeqNum = lastSentSharedCounterSeqNum + 1; // make it different from the last sequence number sent to that RA (spec: "add 2")
47  it->second = seqNum = lastSentSharedCounterSeqNum;
48  }
49  }
50  else if (type == DATA) {
51  const Ptr<const Ieee80211DataHeader>& qosDataHeader = dynamicPtrCast<const Ieee80211DataHeader>(header);
52  Key key(header->getReceiverAddress(), qosDataHeader->getTid());
53  auto it = lastSentSeqNums.find(key);
54  if (it == lastSentSeqNums.end())
55  lastSentSeqNums[key] = seqNum = SequenceNumberCyclic(0);
56  else
57  it->second = seqNum = it->second + 1;
58  }
59  else
60  ASSERT(false);
61 
62  header->setSequenceNumber(seqNum);
63 }

◆ getCacheType()

QoSSequenceNumberAssignment::CacheType inet::ieee80211::QoSSequenceNumberAssignment::getCacheType ( const Ptr< const Ieee80211DataOrMgmtHeader > &  header,
bool  incoming 
)
protectedvirtual
14 {
15  bool isTimePriorityFrame = false; // TODO
16  const MacAddress& address = incoming ? header->getTransmitterAddress() : header->getReceiverAddress();
17  if (isTimePriorityFrame)
18  return TIME_PRIORITY;
19  else if (header->getType() != ST_DATA_WITH_QOS || address.isMulticast())
20  return SHARED;
21  else
22  return DATA;
23 }

Referenced by assignSequenceNumber().

Member Data Documentation

◆ lastSentSeqNums

std::map<Key, SequenceNumberCyclic> inet::ieee80211::QoSSequenceNumberAssignment::lastSentSeqNums
protected

Referenced by assignSequenceNumber().

◆ lastSentSharedCounterSeqNum

SequenceNumberCyclic inet::ieee80211::QoSSequenceNumberAssignment::lastSentSharedCounterSeqNum = SequenceNumberCyclic(0)
protected

Referenced by assignSequenceNumber().

◆ lastSentSharedSeqNums

std::map<MacAddress, SequenceNumberCyclic> inet::ieee80211::QoSSequenceNumberAssignment::lastSentSharedSeqNums
protected

Referenced by assignSequenceNumber().

◆ lastSentTimePrioritySeqNums

std::map<MacAddress, SequenceNumberCyclic> inet::ieee80211::QoSSequenceNumberAssignment::lastSentTimePrioritySeqNums
protected

Referenced by assignSequenceNumber().


The documentation for this class was generated from the following files:
inet::ieee80211::QoSSequenceNumberAssignment::getCacheType
virtual CacheType getCacheType(const Ptr< const Ieee80211DataOrMgmtHeader > &header, bool incoming)
Definition: QoSSequenceNumberAssignment.cc:13
inet::ieee80211::QoSSequenceNumberAssignment::lastSentSharedCounterSeqNum
SequenceNumberCyclic lastSentSharedCounterSeqNum
Definition: QoSSequenceNumberAssignment.h:33
inet::ieee80211::QoSSequenceNumberAssignment::lastSentTimePrioritySeqNums
std::map< MacAddress, SequenceNumberCyclic > lastSentTimePrioritySeqNums
Definition: QoSSequenceNumberAssignment.h:31
inet::ieee80211::QoSSequenceNumberAssignment::DATA
@ DATA
Definition: QoSSequenceNumberAssignment.h:26
inet::ieee80211::QoSSequenceNumberAssignment::SHARED
@ SHARED
Definition: QoSSequenceNumberAssignment.h:24
inet::ieee80211::QoSSequenceNumberAssignment::lastSentSharedSeqNums
std::map< MacAddress, SequenceNumberCyclic > lastSentSharedSeqNums
Definition: QoSSequenceNumberAssignment.h:32
type
removed type
Definition: IUdp-gates.txt:7
inet::ieee80211::QoSSequenceNumberAssignment::Key
std::pair< MacAddress, Tid > Key
Definition: QoSSequenceNumberAssignment.h:28
inet::ieee80211::ST_DATA_WITH_QOS
@ ST_DATA_WITH_QOS
Definition: Ieee80211Frame_m.h:169
inet::ieee80211::QoSSequenceNumberAssignment::CacheType
CacheType
Definition: QoSSequenceNumberAssignment.h:23
inet::ieee80211::QoSSequenceNumberAssignment::TIME_PRIORITY
@ TIME_PRIORITY
Definition: QoSSequenceNumberAssignment.h:25
inet::ieee80211::QoSSequenceNumberAssignment::lastSentSeqNums
std::map< Key, SequenceNumberCyclic > lastSentSeqNums
Definition: QoSSequenceNumberAssignment.h:30