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

#include <Ieee80211LlcEpd.h>

Inheritance diagram for inet::ieee80211::Ieee80211LlcEpd:
inet::ieee80211::IIeee80211Llc

Public Member Functions

const ProtocolgetProtocol () const override
 

Protected Member Functions

virtual int numInitStages () const override
 
virtual void initialize (int stage) override
 
virtual void handleMessage (cMessage *message) override
 
virtual void encapsulate (Packet *frame)
 
virtual void decapsulate (Packet *frame)
 

Member Function Documentation

◆ decapsulate()

void inet::ieee80211::Ieee80211LlcEpd::decapsulate ( Packet frame)
protectedvirtual
63 {
64  const auto& epdHeader = frame->popAtFront<Ieee802EpdHeader>();
65  auto payloadProtocol = ProtocolGroup::ethertype.findProtocol(epdHeader->getEtherType());
66  frame->addTagIfAbsent<DispatchProtocolReq>()->setProtocol(payloadProtocol);
67  frame->addTagIfAbsent<PacketProtocolTag>()->setProtocol(payloadProtocol);
68 }

Referenced by handleMessage().

◆ encapsulate()

void inet::ieee80211::Ieee80211LlcEpd::encapsulate ( Packet frame)
protectedvirtual
50 {
51  const Protocol *protocol = frame->getTag<PacketProtocolTag>()->getProtocol();
53  if (ethType == -1)
54  throw cRuntimeError("EtherType not found for protocol %s", protocol ? protocol->getName() : "(nullptr)");
55  const auto& llcHeader = makeShared<Ieee802EpdHeader>();
56  llcHeader->setEtherType(ethType);
57  frame->insertAtFront(llcHeader);
58  frame->addTagIfAbsent<PacketProtocolTag>()->setProtocol(&Protocol::ieee802epd);
59  frame->addTagIfAbsent<LlcProtocolTag>()->setProtocol(&Protocol::ieee802epd);
60 }

Referenced by handleMessage().

◆ getProtocol()

const Protocol * inet::ieee80211::Ieee80211LlcEpd::getProtocol ( ) const
overridevirtual

Implements inet::ieee80211::IIeee80211Llc.

71 {
72  return &Protocol::ieee802epd;
73 }

Referenced by encapsulate().

◆ handleMessage()

void inet::ieee80211::Ieee80211LlcEpd::handleMessage ( cMessage *  message)
overrideprotectedvirtual
26 {
27  if (message->arrivedOn("upperLayerIn")) {
28  auto packet = check_and_cast<Packet *>(message);
29  encapsulate(packet);
30  send(packet, "lowerLayerOut");
31  }
32  else if (message->arrivedOn("lowerLayerIn")) {
33  auto packet = check_and_cast<Packet *>(message);
34  decapsulate(packet);
35  if (packet->getTag<PacketProtocolTag>()->getProtocol() != nullptr)
36  send(packet, "upperLayerOut");
37  else {
38  EV_WARN << "Unknown protocol, dropping packet\n";
39  PacketDropDetails details;
40  details.setReason(NO_PROTOCOL_FOUND);
41  emit(packetDroppedSignal, packet, &details);
42  delete packet;
43  }
44  }
45  else
46  throw cRuntimeError("Unknown message");
47 }

◆ initialize()

void inet::ieee80211::Ieee80211LlcEpd::initialize ( int  stage)
overrideprotectedvirtual
22 {
23 }

◆ numInitStages()

virtual int inet::ieee80211::Ieee80211LlcEpd::numInitStages ( ) const
inlineoverrideprotectedvirtual
20 { return NUM_INIT_STAGES; }

The documentation for this class was generated from the following files:
inet::ieee80211::Ieee80211LlcEpd::decapsulate
virtual void decapsulate(Packet *frame)
Definition: Ieee80211LlcEpd.cc:62
protocol
removed DscpReq Ipv4ControlInfo Ipv6ControlInfo up L3AddressInd DispatchProtocolReq L4PortInd Ipv4ControlInfo Ipv6ControlInfo down protocol
Definition: IUdp-gates.txt:25
inet::ProtocolGroup::findProtocol
const Protocol * findProtocol(int protocolNumber) const
Definition: ProtocolGroup.cc:25
DispatchProtocolReq
removed DscpReq Ipv4ControlInfo Ipv6ControlInfo up L3AddressInd DispatchProtocolReq L4PortInd Ipv4ControlInfo Ipv6ControlInfo down DispatchProtocolReq
Definition: IUdp-gates.txt:25
inet::ieee80211::Ieee80211LlcEpd::encapsulate
virtual void encapsulate(Packet *frame)
Definition: Ieee80211LlcEpd.cc:49
inet::packetDroppedSignal
simsignal_t packetDroppedSignal
Definition: Simsignals.cc:85
PacketProtocolTag
removed DscpReq Ipv4ControlInfo Ipv6ControlInfo up L3AddressInd DispatchProtocolReq L4PortInd Ipv4ControlInfo Ipv6ControlInfo down PacketProtocolTag
Definition: IUdp-gates.txt:25
inet::ProtocolGroup::findProtocolNumber
int findProtocolNumber(const Protocol *protocol) const
Definition: ProtocolGroup.cc:40
inet::NO_PROTOCOL_FOUND
@ NO_PROTOCOL_FOUND
Definition: Simsignals_m.h:81
NUM_INIT_STAGES
#define NUM_INIT_STAGES
Definition: InitStageRegistry.h:73
inet::ieee80211::Ieee80211LlcEpd::getProtocol
const Protocol * getProtocol() const override
Definition: Ieee80211LlcEpd.cc:70
inet::Protocol::ieee802epd
static const Protocol ieee802epd
Definition: Protocol.h:90
inet::ProtocolGroup::ethertype
static ProtocolGroup ethertype
Definition: ProtocolGroup.h:40