#include <Ieee80211Portal.h>
◆ decapsulate()
| void inet::ieee80211::Ieee80211Portal::decapsulate |
( |
Packet * |
packet | ) |
|
|
protectedvirtual |
92 #ifdef INET_WITH_ETHERNET
94 int typeOrLength = packet->getByteLength();
95 const auto& llcHeader = packet->peekAtFront<Ieee8022LlcHeader>();
96 if (llcHeader->getSsap() == 0xAA && llcHeader->getDsap() == 0xAA && llcHeader->getControl() == 0x03) {
97 const auto& snapHeader = dynamicPtrCast<const Ieee8022LlcSnapHeader>(llcHeader);
98 if (snapHeader ==
nullptr)
99 throw cRuntimeError(
"LLC header indicates SNAP header, but SNAP header is missing");
100 if (snapHeader->getOui() == 0) {
102 typeOrLength = snapHeader->getProtocolId();
103 packet->eraseAtFront(snapHeader->getChunkLength());
106 const auto& ethernetHeader = makeShared<EthernetMacHeader>();
107 ethernetHeader->setSrc(packet->getTag<MacAddressInd>()->getSrcAddress());
108 ethernetHeader->setDest(packet->getTag<MacAddressInd>()->getDestAddress());
109 ethernetHeader->setTypeOrLength(typeOrLength);
110 packet->insertAtFront(ethernetHeader);
111 const auto& ethernetFcs = makeShared<EthernetFcs>();
112 ethernetFcs->setFcsMode(
fcsMode);
113 packet->insertAtBack(ethernetFcs);
116 #else // ifdef INET_WITH_ETHERNET
117 throw cRuntimeError(
"INET compiled without ETHERNET feature!");
118 #endif // ifdef INET_WITH_ETHERNET
Referenced by handleMessage().
◆ encapsulate()
| void inet::ieee80211::Ieee80211Portal::encapsulate |
( |
Packet * |
packet | ) |
|
|
protectedvirtual |
60 #ifdef INET_WITH_ETHERNET
61 auto ethernetHeader = packet->popAtFront<EthernetMacHeader>();
64 packet->addTagIfAbsent<MacAddressReq>()->setDestAddress(ethernetHeader->getDest());
65 packet->addTagIfAbsent<MacAddressReq>()->setSrcAddress(ethernetHeader->getSrc());
68 b payloadLength =
B(ethernetHeader->getTypeOrLength());
69 if (packet->getDataLength() < payloadLength)
70 throw cRuntimeError(
"incorrect payload length in ethernet frame");
71 packet->setBackOffset(packet->getFrontOffset() + payloadLength);
74 packet->peekAtFront<Ieee8022LlcHeader>();
77 const auto& ieee8022SnapHeader = makeShared<Ieee8022LlcSnapHeader>();
78 ieee8022SnapHeader->setOui(0);
79 ieee8022SnapHeader->setProtocolId(ethernetHeader->getTypeOrLength());
80 packet->insertAtFront(ieee8022SnapHeader);
83 throw cRuntimeError(
"Unknown packet: '%s'", packet->getFullName());
85 #else // ifdef INET_WITH_ETHERNET
86 throw cRuntimeError(
"INET compiled without ETHERNET feature!");
87 #endif // ifdef INET_WITH_ETHERNET
Referenced by handleMessage().
◆ getProtocol()
| const Protocol* inet::ieee80211::Ieee80211Portal::getProtocol |
( |
| ) |
const |
|
inlineoverridevirtual |
◆ handleMessage()
| void inet::ieee80211::Ieee80211Portal::handleMessage |
( |
cMessage * |
message | ) |
|
|
overrideprotectedvirtual |
41 if (message->arrivedOn(
"upperLayerIn")) {
42 auto packet = check_and_cast<Packet *>(message);
44 send(packet,
"lowerLayerOut");
46 else if (message->arrivedOn(
"lowerLayerIn")) {
47 auto packet = check_and_cast<Packet *>(message);
50 send(packet,
"upperLayerOut");
55 throw cRuntimeError(
"Unknown message");
◆ initialize()
| void inet::ieee80211::Ieee80211Portal::initialize |
( |
int |
stage | ) |
|
|
overrideprotectedvirtual |
33 #ifdef INET_WITH_ETHERNET
35 #endif // ifdef INET_WITH_ETHERNET
◆ numInitStages()
| virtual int inet::ieee80211::Ieee80211Portal::numInitStages |
( |
| ) |
const |
|
inlineoverrideprotectedvirtual |
◆ fcsMode
◆ upperLayerOutConnected
| bool inet::ieee80211::Ieee80211Portal::upperLayerOutConnected = false |
|
protected |
The documentation for this class was generated from the following files: