Ieee80211MgmtAPBase Class Reference

#include <Ieee80211MgmtAPBase.h>

Inheritance diagram for Ieee80211MgmtAPBase:

Ieee80211MgmtBase PassiveQueueBase INotifiable IPassiveQueue Ieee80211MgmtAP Ieee80211MgmtAPSimplified

List of all members.


Detailed Description

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.

Author:
Andras Varga

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

Member Function Documentation

virtual int Ieee80211MgmtAPBase::numInitStages (  )  const [inline, protected, virtual]

Reimplemented from Ieee80211MgmtBase.

Reimplemented in Ieee80211MgmtAP, and Ieee80211MgmtAPSimplified.

00040 {return 2;}

void Ieee80211MgmtAPBase::initialize ( int  stage  )  [protected, virtual]

Reimplemented from Ieee80211MgmtBase.

Reimplemented in Ieee80211MgmtAP, and Ieee80211MgmtAPSimplified.

00025 {
00026     Ieee80211MgmtBase::initialize(stage);
00027 
00028     if (stage==0)
00029     {
00030         hasRelayUnit = gate("uppergateOut")->getPathEndGate()->isConnected();
00031         WATCH(hasRelayUnit);
00032     }
00033 }

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().

00036 {
00037     // adjust toDS/fromDS bits, and shuffle addresses
00038     frame->setToDS(false);
00039     frame->setFromDS(true);
00040 
00041     // move destination address to address1 (receiver address),
00042     // and fill address3 with original source address;
00043     // sender address (address2) will be filled in by MAC
00044     ASSERT(!frame->getAddress3().isUnspecified());
00045     frame->setReceiverAddress(frame->getAddress3());
00046     frame->setAddress3(frame->getTransmitterAddress());
00047 
00048     sendOrEnqueue(frame);
00049 }

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().

00070 {
00071     // create new frame
00072     Ieee80211DataFrame *frame = new Ieee80211DataFrame(ethframe->getName());
00073     frame->setFromDS(true);
00074 
00075     // copy addresses from ethernet frame (transmitter addr will be set to our addr by MAC)
00076     frame->setReceiverAddress(ethframe->getDest());
00077     frame->setAddress3(ethframe->getSrc());
00078 
00079     // encapsulate payload
00080     cPacket *payload = ethframe->decapsulate();
00081     if (!payload)
00082         error("received empty EtherFrame from upper layer");
00083     frame->encapsulate(payload);
00084     delete ethframe;
00085 
00086     // done
00087     return frame;
00088 }

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().

00052 {
00053     // create a matching ethernet frame
00054     EtherFrame *ethframe = new EthernetIIFrame(frame->getName()); //TODO option to use EtherFrameWithSNAP instead
00055     ethframe->setDest(frame->getAddress3());
00056     ethframe->setSrc(frame->getTransmitterAddress());
00057     //XXX set ethertype
00058 
00059     // encapsulate the payload in there
00060     cPacket *payload = frame->decapsulate();
00061     delete frame;
00062     ASSERT(payload!=NULL);
00063     ethframe->encapsulate(payload);
00064 
00065     // done
00066     return ethframe;
00067 }


Member Data Documentation


The documentation for this class was generated from the following files:

Generated on Fri Mar 20 18:51:19 2009 for INET Framework for OMNeT++/OMNEST by  doxygen 1.5.5