INET Framework for OMNeT++/OMNEST
|
#include <Ieee80211MgmtAPBase.h>
Protected Member Functions | |
virtual int | numInitStages () const |
virtual void | initialize (int) |
virtual void | distributeReceivedDataFrame (Ieee80211DataFrame *frame) |
virtual Ieee80211DataFrame * | convertFromEtherFrame (EtherFrame *ethframe) |
virtual EtherFrame * | convertToEtherFrame (Ieee80211DataFrame *frame) |
Protected Attributes | |
bool | hasRelayUnit |
Used in 802.11 infrastructure mode: abstract base class for management frame handling for access points (APs). This class extends Ieee80211MgmtBase with utility functions that are useful for implementing AP functionality.
Ieee80211DataFrame * Ieee80211MgmtAPBase::convertFromEtherFrame | ( | EtherFrame * | ethframe | ) | [protected, virtual] |
Utility function: converts EtherFrame to Ieee80211Frame. This is needed because MACRelayUnit which we use for LAN bridging functionality deals with EtherFrames.
Referenced by Ieee80211MgmtAPSimplified::handleUpperMessage(), and Ieee80211MgmtAP::handleUpperMessage().
{ // create new frame Ieee80211DataFrame *frame = new Ieee80211DataFrame(ethframe->getName()); frame->setFromDS(true); // copy addresses from ethernet frame (transmitter addr will be set to our addr by MAC) frame->setReceiverAddress(ethframe->getDest()); frame->setAddress3(ethframe->getSrc()); // encapsulate payload cPacket *payload = ethframe->decapsulate(); if (!payload) error("received empty EtherFrame from upper layer"); frame->encapsulate(payload); delete ethframe; // done return frame; }
EtherFrame * Ieee80211MgmtAPBase::convertToEtherFrame | ( | Ieee80211DataFrame * | frame | ) | [protected, virtual] |
Utility function: converts the given frame to EtherFrame, deleting the original frame. This function is needed for LAN bridging functionality: MACRelayUnit deals with EtherFrames.
Referenced by Ieee80211MgmtAPSimplified::handleDataFrame(), and Ieee80211MgmtAP::handleDataFrame().
{ // create a matching ethernet frame EtherFrame *ethframe = new EthernetIIFrame(frame->getName()); //TODO option to use EtherFrameWithSNAP instead ethframe->setDest(frame->getAddress3()); ethframe->setSrc(frame->getTransmitterAddress()); //XXX set ethertype // encapsulate the payload in there cPacket *payload = frame->decapsulate(); delete frame; ASSERT(payload!=NULL); ethframe->encapsulate(payload); // done return ethframe; }
void Ieee80211MgmtAPBase::distributeReceivedDataFrame | ( | Ieee80211DataFrame * | frame | ) | [protected, virtual] |
Utility function for APs: sends back a data frame we received from a STA to the wireless LAN, after tweaking fromDS/toDS bits and shuffling addresses as needed.
Referenced by Ieee80211MgmtAPSimplified::handleDataFrame(), and Ieee80211MgmtAP::handleDataFrame().
{ // adjust toDS/fromDS bits, and shuffle addresses frame->setToDS(false); frame->setFromDS(true); // move destination address to address1 (receiver address), // and fill address3 with original source address; // sender address (address2) will be filled in by MAC ASSERT(!frame->getAddress3().isUnspecified()); frame->setReceiverAddress(frame->getAddress3()); frame->setAddress3(frame->getTransmitterAddress()); sendOrEnqueue(frame); }
void Ieee80211MgmtAPBase::initialize | ( | int | stage | ) | [protected, virtual] |
Reimplemented from Ieee80211MgmtBase.
Reimplemented in Ieee80211MgmtAP, and Ieee80211MgmtAPSimplified.
{ Ieee80211MgmtBase::initialize(stage); if (stage==0) { hasRelayUnit = gate("uppergateOut")->getPathEndGate()->isConnected(); WATCH(hasRelayUnit); } }
virtual int Ieee80211MgmtAPBase::numInitStages | ( | ) | const [inline, protected, virtual] |
Reimplemented from Ieee80211MgmtBase.
Reimplemented in Ieee80211MgmtAP, and Ieee80211MgmtAPSimplified.
{return 2;}
bool Ieee80211MgmtAPBase::hasRelayUnit [protected] |
Referenced by Ieee80211MgmtAPSimplified::handleDataFrame(), Ieee80211MgmtAP::handleDataFrame(), and initialize().