|
INET Framework for OMNeT++/OMNEST
|
#include <Ieee80211MgmtBase.h>
Abstract base class for 802.11 infrastructure mode management components. Performs queueing for MAC, and dispatching incoming frames by frame type. Also keeps some simple statistics (frame counts).
Definition at line 36 of file Ieee80211MgmtBase.h.
| cPacket * Ieee80211MgmtBase::decapsulate | ( | Ieee80211DataFrame * | frame | ) | [protected, virtual] |
Utility method to decapsulate a data frame (encapsulation depends on adhoc/STA/AP)
Definition at line 161 of file Ieee80211MgmtBase.cc.
Referenced by Ieee80211MgmtAdhoc::handleDataFrame(), Ieee80211MgmtSTASimplified::handleDataFrame(), and Ieee80211MgmtSTA::handleDataFrame().
{
cPacket *payload = frame->decapsulate();
Ieee802Ctrl *ctrl = new Ieee802Ctrl();
ctrl->setSrc(frame->getAddress3());
ctrl->setDest(frame->getReceiverAddress());
payload->setControlInfo(ctrl);
delete frame;
return payload;
}
| cMessage * Ieee80211MgmtBase::dequeue | ( | ) | [protected, virtual] |
Redefined from PassiveQueueBase.
Implements PassiveQueueBase.
Definition at line 132 of file Ieee80211MgmtBase.cc.
| void Ieee80211MgmtBase::dropManagementFrame | ( | Ieee80211ManagementFrame * | frame | ) | [protected, virtual] |
Utility method to dispose of an unhandled frame
Definition at line 154 of file Ieee80211MgmtBase.cc.
Referenced by Ieee80211MgmtAPSimplified::handleAssociationRequestFrame(), Ieee80211MgmtAdhoc::handleAssociationRequestFrame(), Ieee80211MgmtSTASimplified::handleAssociationRequestFrame(), Ieee80211MgmtSTA::handleAssociationRequestFrame(), Ieee80211MgmtAPSimplified::handleAssociationResponseFrame(), Ieee80211MgmtAdhoc::handleAssociationResponseFrame(), Ieee80211MgmtSTASimplified::handleAssociationResponseFrame(), Ieee80211MgmtAP::handleAssociationResponseFrame(), Ieee80211MgmtAPSimplified::handleAuthenticationFrame(), Ieee80211MgmtAdhoc::handleAuthenticationFrame(), Ieee80211MgmtSTASimplified::handleAuthenticationFrame(), Ieee80211MgmtAPSimplified::handleBeaconFrame(), Ieee80211MgmtAdhoc::handleBeaconFrame(), Ieee80211MgmtSTASimplified::handleBeaconFrame(), Ieee80211MgmtAP::handleBeaconFrame(), Ieee80211MgmtAPSimplified::handleDeauthenticationFrame(), Ieee80211MgmtAdhoc::handleDeauthenticationFrame(), Ieee80211MgmtSTASimplified::handleDeauthenticationFrame(), Ieee80211MgmtAPSimplified::handleDisassociationFrame(), Ieee80211MgmtAdhoc::handleDisassociationFrame(), Ieee80211MgmtSTASimplified::handleDisassociationFrame(), Ieee80211MgmtAPSimplified::handleProbeRequestFrame(), Ieee80211MgmtAdhoc::handleProbeRequestFrame(), Ieee80211MgmtSTASimplified::handleProbeRequestFrame(), Ieee80211MgmtAP::handleProbeRequestFrame(), Ieee80211MgmtSTA::handleProbeRequestFrame(), Ieee80211MgmtAPSimplified::handleProbeResponseFrame(), Ieee80211MgmtAdhoc::handleProbeResponseFrame(), Ieee80211MgmtSTASimplified::handleProbeResponseFrame(), Ieee80211MgmtAP::handleProbeResponseFrame(), Ieee80211MgmtAPSimplified::handleReassociationRequestFrame(), Ieee80211MgmtAdhoc::handleReassociationRequestFrame(), Ieee80211MgmtSTASimplified::handleReassociationRequestFrame(), Ieee80211MgmtSTA::handleReassociationRequestFrame(), Ieee80211MgmtAPSimplified::handleReassociationResponseFrame(), Ieee80211MgmtAdhoc::handleReassociationResponseFrame(), Ieee80211MgmtSTASimplified::handleReassociationResponseFrame(), and Ieee80211MgmtAP::handleReassociationResponseFrame().
{
EV << "ignoring management frame: " << (cMessage *)frame << "\n";
delete frame;
numMgmtFramesDropped++;
}
| bool Ieee80211MgmtBase::enqueue | ( | cMessage * | msg | ) | [protected, virtual] |
Redefined from PassiveQueueBase.
Implements PassiveQueueBase.
Definition at line 106 of file Ieee80211MgmtBase.cc.
{
ASSERT(dynamic_cast<Ieee80211DataOrMgmtFrame *>(msg)!=NULL);
bool isDataFrame = dynamic_cast<Ieee80211DataFrame *>(msg)!=NULL;
if (!isDataFrame)
{
// management frames are inserted into mgmtQueue
mgmtQueue.insert(msg);
return false;
}
else if (frameCapacity && dataQueue.length() >= frameCapacity)
{
EV << "Queue full, dropping packet.\n";
delete msg;
dataQueueDropVec.record(1);
return true;
}
else
{
dataQueue.insert(msg);
dataQueueLenVec.record(dataQueue.length());
return false;
}
}
| virtual void Ieee80211MgmtBase::handleAssociationRequestFrame | ( | Ieee80211AssociationRequestFrame * | frame | ) | [protected, pure virtual] |
Implemented in Ieee80211MgmtSTA, Ieee80211MgmtAP, Ieee80211MgmtSTASimplified, Ieee80211MgmtAdhoc, and Ieee80211MgmtAPSimplified.
Referenced by processFrame().
| virtual void Ieee80211MgmtBase::handleAssociationResponseFrame | ( | Ieee80211AssociationResponseFrame * | frame | ) | [protected, pure virtual] |
Implemented in Ieee80211MgmtSTA, Ieee80211MgmtAP, Ieee80211MgmtSTASimplified, Ieee80211MgmtAdhoc, and Ieee80211MgmtAPSimplified.
Referenced by processFrame().
| virtual void Ieee80211MgmtBase::handleAuthenticationFrame | ( | Ieee80211AuthenticationFrame * | frame | ) | [protected, pure virtual] |
Implemented in Ieee80211MgmtSTA, Ieee80211MgmtAP, Ieee80211MgmtSTASimplified, Ieee80211MgmtAdhoc, and Ieee80211MgmtAPSimplified.
Referenced by processFrame().
| virtual void Ieee80211MgmtBase::handleBeaconFrame | ( | Ieee80211BeaconFrame * | frame | ) | [protected, pure virtual] |
Implemented in Ieee80211MgmtSTA, Ieee80211MgmtAP, Ieee80211MgmtSTASimplified, Ieee80211MgmtAdhoc, and Ieee80211MgmtAPSimplified.
Referenced by processFrame().
| virtual void Ieee80211MgmtBase::handleCommand | ( | int | msgkind, |
| cPolymorphic * | ctrl | ||
| ) | [protected, pure virtual] |
Should be redefined to handle commands from the "agent" (if present)
Implemented in Ieee80211MgmtSTA, Ieee80211MgmtAP, Ieee80211MgmtSTASimplified, Ieee80211MgmtAPSimplified, and Ieee80211MgmtAdhoc.
Referenced by handleMessage().
| virtual void Ieee80211MgmtBase::handleDataFrame | ( | Ieee80211DataFrame * | frame | ) | [protected, pure virtual] |
Implemented in Ieee80211MgmtSTA, Ieee80211MgmtAP, Ieee80211MgmtSTASimplified, Ieee80211MgmtAdhoc, and Ieee80211MgmtAPSimplified.
Referenced by processFrame().
| virtual void Ieee80211MgmtBase::handleDeauthenticationFrame | ( | Ieee80211DeauthenticationFrame * | frame | ) | [protected, pure virtual] |
Implemented in Ieee80211MgmtSTA, Ieee80211MgmtAP, Ieee80211MgmtSTASimplified, Ieee80211MgmtAdhoc, and Ieee80211MgmtAPSimplified.
Referenced by processFrame().
| virtual void Ieee80211MgmtBase::handleDisassociationFrame | ( | Ieee80211DisassociationFrame * | frame | ) | [protected, pure virtual] |
Implemented in Ieee80211MgmtSTA, Ieee80211MgmtAP, Ieee80211MgmtSTASimplified, Ieee80211MgmtAdhoc, and Ieee80211MgmtAPSimplified.
Referenced by processFrame().
| void Ieee80211MgmtBase::handleMessage | ( | cMessage * | msg | ) | [protected, virtual] |
Dispatches incoming messages to handleTimer(), handleUpperMessage() or processFrame().
Reimplemented from PassiveQueueBase.
Definition at line 63 of file Ieee80211MgmtBase.cc.
Referenced by sendOrEnqueue().
{
if (msg->isSelfMessage())
{
// process timers
EV << "Timer expired: " << msg << "\n";
handleTimer(msg);
}
else if (msg->arrivedOn("macIn"))
{
// process incoming frame
EV << "Frame arrived from MAC: " << msg << "\n";
Ieee80211DataOrMgmtFrame *frame = check_and_cast<Ieee80211DataOrMgmtFrame *>(msg);
processFrame(frame);
}
else if (msg->arrivedOn("agentIn"))
{
// process command from agent
EV << "Command arrived from agent: " << msg << "\n";
int msgkind = msg->getKind();
cPolymorphic *ctrl = msg->removeControlInfo();
delete msg;
handleCommand(msgkind, ctrl);
}
else
{
// packet from upper layers, to be sent out
cPacket *pk = PK(msg);
EV << "Packet arrived from upper layers: " << pk << "\n";
if (pk->getByteLength() > 2312)
error("message from higher layer (%s)%s is too long for 802.11b, %d bytes (fragmentation is not supported yet)",
pk->getClassName(), pk->getName(), (int)(pk->getByteLength()));
handleUpperMessage(pk);
}
}
| virtual void Ieee80211MgmtBase::handleProbeRequestFrame | ( | Ieee80211ProbeRequestFrame * | frame | ) | [protected, pure virtual] |
Implemented in Ieee80211MgmtSTA, Ieee80211MgmtAP, Ieee80211MgmtSTASimplified, Ieee80211MgmtAdhoc, and Ieee80211MgmtAPSimplified.
Referenced by processFrame().
| virtual void Ieee80211MgmtBase::handleProbeResponseFrame | ( | Ieee80211ProbeResponseFrame * | frame | ) | [protected, pure virtual] |
Implemented in Ieee80211MgmtSTA, Ieee80211MgmtAP, Ieee80211MgmtSTASimplified, Ieee80211MgmtAdhoc, and Ieee80211MgmtAPSimplified.
Referenced by processFrame().
| virtual void Ieee80211MgmtBase::handleReassociationRequestFrame | ( | Ieee80211ReassociationRequestFrame * | frame | ) | [protected, pure virtual] |
Implemented in Ieee80211MgmtSTA, Ieee80211MgmtAP, Ieee80211MgmtSTASimplified, Ieee80211MgmtAdhoc, and Ieee80211MgmtAPSimplified.
Referenced by processFrame().
| virtual void Ieee80211MgmtBase::handleReassociationResponseFrame | ( | Ieee80211ReassociationResponseFrame * | frame | ) | [protected, pure virtual] |
Implemented in Ieee80211MgmtSTA, Ieee80211MgmtAP, Ieee80211MgmtSTASimplified, Ieee80211MgmtAdhoc, and Ieee80211MgmtAPSimplified.
Referenced by processFrame().
| virtual void Ieee80211MgmtBase::handleTimer | ( | cMessage * | frame | ) | [protected, pure virtual] |
Should be redefined to deal with self-messages
Implemented in Ieee80211MgmtSTA, Ieee80211MgmtAP, Ieee80211MgmtSTASimplified, Ieee80211MgmtAPSimplified, and Ieee80211MgmtAdhoc.
Referenced by handleMessage().
| virtual void Ieee80211MgmtBase::handleUpperMessage | ( | cPacket * | msg | ) | [protected, pure virtual] |
Should be redefined to encapsulate and enqueue msgs from higher layers
Implemented in Ieee80211MgmtSTA, Ieee80211MgmtAP, Ieee80211MgmtSTASimplified, Ieee80211MgmtAPSimplified, and Ieee80211MgmtAdhoc.
Referenced by handleMessage().
| void Ieee80211MgmtBase::initialize | ( | int | stage | ) | [protected, virtual] |
Reimplemented in Ieee80211MgmtSTA, Ieee80211MgmtAP, Ieee80211MgmtSTASimplified, Ieee80211MgmtAPBase, Ieee80211MgmtAPSimplified, and Ieee80211MgmtAdhoc.
Definition at line 29 of file Ieee80211MgmtBase.cc.
{
if (stage==0)
{
PassiveQueueBase::initialize();
dataQueue.setName("wlanDataQueue");
mgmtQueue.setName("wlanMgmtQueue");
dataQueueLenVec.setName("queue length");
dataQueueDropVec.setName("queue drop count");
numDataFramesReceived = 0;
numMgmtFramesReceived = 0;
numMgmtFramesDropped = 0;
WATCH(numDataFramesReceived);
WATCH(numMgmtFramesReceived);
WATCH(numMgmtFramesDropped);
// configuration
frameCapacity = par("frameCapacity");
}
else if (stage==1)
{
// obtain our address from MAC
cModule *mac = getParentModule()->getSubmodule("mac");
if (!mac)
error("MAC module not found; it is expected to be next to this submodule and called 'mac'");
myAddress.setAddress(mac->par("address").stringValue());
}
}
| virtual int Ieee80211MgmtBase::numInitStages | ( | ) | const [inline, protected, virtual] |
Reimplemented in Ieee80211MgmtSTA, Ieee80211MgmtAP, Ieee80211MgmtSTASimplified, Ieee80211MgmtAPBase, Ieee80211MgmtAPSimplified, and Ieee80211MgmtAdhoc.
Definition at line 57 of file Ieee80211MgmtBase.h.
{return 2;}
| void Ieee80211MgmtBase::processFrame | ( | Ieee80211DataOrMgmtFrame * | frame | ) | [protected, virtual] |
Dispatch to frame processing methods according to frame type
Definition at line 179 of file Ieee80211MgmtBase.cc.
Referenced by handleMessage().
{
switch(frame->getType())
{
case ST_DATA:
numDataFramesReceived++;
handleDataFrame(check_and_cast<Ieee80211DataFrame *>(frame));
break;
case ST_AUTHENTICATION:
numMgmtFramesReceived++;
handleAuthenticationFrame(check_and_cast<Ieee80211AuthenticationFrame *>(frame));
break;
case ST_DEAUTHENTICATION:
numMgmtFramesReceived++;
handleDeauthenticationFrame(check_and_cast<Ieee80211DeauthenticationFrame *>(frame));
break;
case ST_ASSOCIATIONREQUEST:
numMgmtFramesReceived++;
handleAssociationRequestFrame(check_and_cast<Ieee80211AssociationRequestFrame *>(frame));
break;
case ST_ASSOCIATIONRESPONSE:
numMgmtFramesReceived++;
handleAssociationResponseFrame(check_and_cast<Ieee80211AssociationResponseFrame *>(frame));
break;
case ST_REASSOCIATIONREQUEST:
numMgmtFramesReceived++;
handleReassociationRequestFrame(check_and_cast<Ieee80211ReassociationRequestFrame *>(frame));
break;
case ST_REASSOCIATIONRESPONSE:
numMgmtFramesReceived++;
handleReassociationResponseFrame(check_and_cast<Ieee80211ReassociationResponseFrame *>(frame)); break;
case ST_DISASSOCIATION:
numMgmtFramesReceived++;
handleDisassociationFrame(check_and_cast<Ieee80211DisassociationFrame *>(frame));
break;
case ST_BEACON:
numMgmtFramesReceived++;
handleBeaconFrame(check_and_cast<Ieee80211BeaconFrame *>(frame));
break;
case ST_PROBEREQUEST:
numMgmtFramesReceived++;
handleProbeRequestFrame(check_and_cast<Ieee80211ProbeRequestFrame *>(frame));
break;
case ST_PROBERESPONSE:
numMgmtFramesReceived++;
handleProbeResponseFrame(check_and_cast<Ieee80211ProbeResponseFrame *>(frame));
break;
default:
error("unexpected frame type (%s)%s", frame->getClassName(), frame->getName());
}
}
| void Ieee80211MgmtBase::sendOrEnqueue | ( | cPacket * | frame | ) | [protected, virtual] |
Utility method for implementing handleUpperMessage(): gives the message to PassiveQueueBase
Definition at line 101 of file Ieee80211MgmtBase.cc.
Referenced by Ieee80211MgmtAPBase::distributeReceivedDataFrame(), Ieee80211MgmtAdhoc::handleUpperMessage(), Ieee80211MgmtAPSimplified::handleUpperMessage(), Ieee80211MgmtSTASimplified::handleUpperMessage(), Ieee80211MgmtAP::handleUpperMessage(), Ieee80211MgmtSTA::handleUpperMessage(), Ieee80211MgmtAP::sendBeacon(), Ieee80211MgmtAP::sendManagementFrame(), and Ieee80211MgmtSTA::sendManagementFrame().
{
PassiveQueueBase::handleMessage(frame);
}
| void Ieee80211MgmtBase::sendOut | ( | cMessage * | msg | ) | [protected, virtual] |
Redefined from PassiveQueueBase: send message to MAC
Implements PassiveQueueBase.
Definition at line 149 of file Ieee80211MgmtBase.cc.
{
send(msg, "macOut");
}
| void Ieee80211MgmtBase::sendUp | ( | cMessage * | msg | ) | [protected, virtual] |
Utility method: sends the packet to the upper layer
Definition at line 174 of file Ieee80211MgmtBase.cc.
Referenced by Ieee80211MgmtAdhoc::handleDataFrame(), Ieee80211MgmtSTASimplified::handleDataFrame(), and Ieee80211MgmtSTA::handleDataFrame().
{
send(msg, "uppergateOut");
}
cQueue Ieee80211MgmtBase::dataQueue [protected] |
Definition at line 44 of file Ieee80211MgmtBase.h.
Referenced by dequeue(), enqueue(), and initialize().
cOutVector Ieee80211MgmtBase::dataQueueDropVec [protected] |
Definition at line 54 of file Ieee80211MgmtBase.h.
Referenced by enqueue(), and initialize().
cOutVector Ieee80211MgmtBase::dataQueueLenVec [protected] |
Definition at line 53 of file Ieee80211MgmtBase.h.
Referenced by dequeue(), enqueue(), and initialize().
int Ieee80211MgmtBase::frameCapacity [protected] |
Definition at line 40 of file Ieee80211MgmtBase.h.
Referenced by enqueue(), and initialize().
cQueue Ieee80211MgmtBase::mgmtQueue [protected] |
Definition at line 45 of file Ieee80211MgmtBase.h.
Referenced by dequeue(), enqueue(), and initialize().
MACAddress Ieee80211MgmtBase::myAddress [protected] |
Definition at line 41 of file Ieee80211MgmtBase.h.
Referenced by initialize(), and Ieee80211MgmtAP::sendManagementFrame().
long Ieee80211MgmtBase::numDataFramesReceived [protected] |
Definition at line 48 of file Ieee80211MgmtBase.h.
Referenced by initialize(), and processFrame().
long Ieee80211MgmtBase::numMgmtFramesDropped [protected] |
Definition at line 50 of file Ieee80211MgmtBase.h.
Referenced by dropManagementFrame(), and initialize().
long Ieee80211MgmtBase::numMgmtFramesReceived [protected] |
Definition at line 49 of file Ieee80211MgmtBase.h.
Referenced by initialize(), and processFrame().