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

#include <RecipientMacDataService.h>

Inheritance diagram for inet::ieee80211::RecipientMacDataService:
inet::ieee80211::IRecipientMacDataService

Public Member Functions

virtual ~RecipientMacDataService ()
 
virtual std::vector< Packet * > dataFrameReceived (Packet *dataPacket, const Ptr< const Ieee80211DataHeader > &dataHeader) override
 
virtual std::vector< Packet * > managementFrameReceived (Packet *mgmtPacket, const Ptr< const Ieee80211MgmtHeader > &mgmtHeader) override
 
virtual std::vector< Packet * > controlFrameReceived (Packet *controlPacket, const Ptr< const Ieee80211MacHeader > &controlHeader) override
 
- Public Member Functions inherited from inet::ieee80211::IRecipientMacDataService
virtual ~IRecipientMacDataService ()
 

Protected Types

typedef std::vector< Ieee80211DataOrMgmtHeader * > Fragments
 

Protected Member Functions

virtual void initialize () override
 
virtual Packetdefragment (Packet *dataOrMgmtFrame)
 
virtual std::vector< Packet * > dataOrMgmtFrameReceived (Packet *packet, const Ptr< const Ieee80211DataOrMgmtHeader > &header)
 

Protected Attributes

IReassemblybasicReassembly = nullptr
 
IDuplicateRemovalduplicateRemoval = nullptr
 
IDefragmentationdefragmentation = nullptr
 

Additional Inherited Members

- Static Public Attributes inherited from inet::ieee80211::IRecipientMacDataService
static simsignal_t packetDefragmentedSignal = cComponent::registerSignal("packetDefragmented")
 

Member Typedef Documentation

◆ Fragments

Constructor & Destructor Documentation

◆ ~RecipientMacDataService()

inet::ieee80211::RecipientMacDataService::~RecipientMacDataService ( )
virtual
74 {
75  delete duplicateRemoval;
76  delete basicReassembly;
77 }

Member Function Documentation

◆ controlFrameReceived()

std::vector< Packet * > inet::ieee80211::RecipientMacDataService::controlFrameReceived ( Packet controlPacket,
const Ptr< const Ieee80211MacHeader > &  controlHeader 
)
overridevirtual

Implements inet::ieee80211::IRecipientMacDataService.

68 {
69  Enter_Method("controlFrameReceived");
70  return std::vector<Packet *>(); // has nothing to do
71 }

◆ dataFrameReceived()

std::vector< Packet * > inet::ieee80211::RecipientMacDataService::dataFrameReceived ( Packet dataPacket,
const Ptr< const Ieee80211DataHeader > &  dataHeader 
)
overridevirtual

Implements inet::ieee80211::IRecipientMacDataService.

54 {
55  Enter_Method("dataFrameReceived");
56  take(dataPacket);
57  return dataOrMgmtFrameReceived(dataPacket, dataHeader);
58 }

◆ dataOrMgmtFrameReceived()

std::vector< Packet * > inet::ieee80211::RecipientMacDataService::dataOrMgmtFrameReceived ( Packet packet,
const Ptr< const Ieee80211DataOrMgmtHeader > &  header 
)
protectedvirtual
37 {
39  EV_WARN << "Dropping duplicate packet " << *packet << ".\n";
40  PacketDropDetails details;
41  details.setReason(DUPLICATE_DETECTED);
42  emit(packetDroppedSignal, packet, &details);
43  delete packet;
44  return std::vector<Packet *>();
45  }
46  Packet *defragmentedFrame = nullptr;
47  if (basicReassembly) { // FIXME defragmentation
48  defragmentedFrame = defragment(packet);
49  }
50  return defragmentedFrame != nullptr ? std::vector<Packet *>({ defragmentedFrame }) : std::vector<Packet *>();
51 }

Referenced by dataFrameReceived(), and managementFrameReceived().

◆ defragment()

Packet * inet::ieee80211::RecipientMacDataService::defragment ( Packet dataOrMgmtFrame)
protectedvirtual
26 {
27  Packet *packet = basicReassembly->addFragment(dataOrMgmtFrame);
28  if (packet && packet->peekAtFront<Ieee80211DataOrMgmtHeader>()) {
29  emit(packetDefragmentedSignal, packet);
30  return packet;
31  }
32  else
33  return nullptr;
34 }

Referenced by dataOrMgmtFrameReceived().

◆ initialize()

void inet::ieee80211::RecipientMacDataService::initialize ( )
overrideprotectedvirtual
20 {
21  duplicateRemoval = new LegacyDuplicateRemoval();
22  basicReassembly = new BasicReassembly();
23 }

◆ managementFrameReceived()

std::vector< Packet * > inet::ieee80211::RecipientMacDataService::managementFrameReceived ( Packet mgmtPacket,
const Ptr< const Ieee80211MgmtHeader > &  mgmtHeader 
)
overridevirtual

Implements inet::ieee80211::IRecipientMacDataService.

61 {
62  Enter_Method("managementFrameReceived");
63  take(mgmtPacket);
64  return dataOrMgmtFrameReceived(mgmtPacket, mgmtHeader);
65 }

Member Data Documentation

◆ basicReassembly

IReassembly* inet::ieee80211::RecipientMacDataService::basicReassembly = nullptr
protected

◆ defragmentation

IDefragmentation* inet::ieee80211::RecipientMacDataService::defragmentation = nullptr
protected

◆ duplicateRemoval

IDuplicateRemoval* inet::ieee80211::RecipientMacDataService::duplicateRemoval = nullptr
protected

The documentation for this class was generated from the following files:
inet::DUPLICATE_DETECTED
@ DUPLICATE_DETECTED
Definition: Simsignals_m.h:83
inet::ieee80211::IRecipientMacDataService::packetDefragmentedSignal
static simsignal_t packetDefragmentedSignal
Definition: IRecipientMacDataService.h:20
inet::ieee80211::RecipientMacDataService::duplicateRemoval
IDuplicateRemoval * duplicateRemoval
Definition: RecipientMacDataService.h:32
inet::ieee80211::RecipientMacDataService::defragment
virtual Packet * defragment(Packet *dataOrMgmtFrame)
Definition: RecipientMacDataService.cc:25
inet::packetDroppedSignal
simsignal_t packetDroppedSignal
Definition: Simsignals.cc:85
inet::ieee80211::IReassembly::addFragment
virtual Packet * addFragment(Packet *frame)=0
Add a fragment to the reassembly buffer.
inet::ieee80211::RecipientMacDataService::basicReassembly
IReassembly * basicReassembly
Definition: RecipientMacDataService.h:28
inet::ieee80211::IDuplicateRemoval::isDuplicate
virtual bool isDuplicate(const Ptr< const Ieee80211DataOrMgmtHeader > &header)=0
Enter_Method
#define Enter_Method(...)
Definition: SelfDoc.h:71
inet::ieee80211::RecipientMacDataService::dataOrMgmtFrameReceived
virtual std::vector< Packet * > dataOrMgmtFrameReceived(Packet *packet, const Ptr< const Ieee80211DataOrMgmtHeader > &header)
Definition: RecipientMacDataService.cc:36