#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 |
virtual int Ieee80211MgmtAPBase::numInitStages | ( | ) | const [inline, protected, virtual] |
Reimplemented from Ieee80211MgmtBase.
Reimplemented in Ieee80211MgmtAP, and Ieee80211MgmtAPSimplified.
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 }
bool Ieee80211MgmtAPBase::hasRelayUnit [protected] |
Referenced by Ieee80211MgmtAPSimplified::handleDataFrame(), Ieee80211MgmtAP::handleDataFrame(), and initialize().