INET Framework for OMNeT++/OMNEST
Ieee80211MgmtBase Class Reference

#include <Ieee80211MgmtBase.h>

Inheritance diagram for Ieee80211MgmtBase:
PassiveQueueBase INotifiable IPassiveQueue Ieee80211MgmtAdhoc Ieee80211MgmtAPBase Ieee80211MgmtSTA Ieee80211MgmtSTASimplified Ieee80211MgmtAP Ieee80211MgmtAPSimplified

List of all members.

Protected Member Functions

virtual int numInitStages () const
virtual void initialize (int)
virtual void handleMessage (cMessage *msg)
virtual void handleTimer (cMessage *frame)=0
virtual void handleUpperMessage (cPacket *msg)=0
virtual void handleCommand (int msgkind, cPolymorphic *ctrl)=0
virtual void sendOrEnqueue (cPacket *frame)
virtual bool enqueue (cMessage *msg)
virtual cMessage * dequeue ()
virtual void sendOut (cMessage *msg)
virtual void dropManagementFrame (Ieee80211ManagementFrame *frame)
virtual cPacket * decapsulate (Ieee80211DataFrame *frame)
virtual void sendUp (cMessage *msg)
virtual void processFrame (Ieee80211DataOrMgmtFrame *frame)
Processing of different frame types
virtual void handleDataFrame (Ieee80211DataFrame *frame)=0
virtual void handleAuthenticationFrame (Ieee80211AuthenticationFrame *frame)=0
virtual void handleDeauthenticationFrame (Ieee80211DeauthenticationFrame *frame)=0
virtual void handleAssociationRequestFrame (Ieee80211AssociationRequestFrame *frame)=0
virtual void handleAssociationResponseFrame (Ieee80211AssociationResponseFrame *frame)=0
virtual void handleReassociationRequestFrame (Ieee80211ReassociationRequestFrame *frame)=0
virtual void handleReassociationResponseFrame (Ieee80211ReassociationResponseFrame *frame)=0
virtual void handleDisassociationFrame (Ieee80211DisassociationFrame *frame)=0
virtual void handleBeaconFrame (Ieee80211BeaconFrame *frame)=0
virtual void handleProbeRequestFrame (Ieee80211ProbeRequestFrame *frame)=0
virtual void handleProbeResponseFrame (Ieee80211ProbeResponseFrame *frame)=0

Protected Attributes

int frameCapacity
MACAddress myAddress
cQueue dataQueue
cQueue mgmtQueue
long numDataFramesReceived
long numMgmtFramesReceived
long numMgmtFramesDropped
cOutVector dataQueueLenVec
cOutVector dataQueueDropVec

Detailed Description

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

Author:
Andras Varga

Member Function Documentation

cPacket * Ieee80211MgmtBase::decapsulate ( Ieee80211DataFrame *  frame) [protected, virtual]

Utility method to decapsulate a data frame (encapsulation depends on adhoc/STA/AP)

Referenced by Ieee80211MgmtSTASimplified::handleDataFrame(), Ieee80211MgmtSTA::handleDataFrame(), and Ieee80211MgmtAdhoc::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.

{
    // management frames have priority
    if (!mgmtQueue.empty())
        return (cMessage *)mgmtQueue.pop();

    // return a data frame if we have one
    if (dataQueue.empty())
        return NULL;

    cMessage *pk = (cMessage *)dataQueue.pop();

    // statistics
    dataQueueLenVec.record(dataQueue.length());
    return pk;
}
void Ieee80211MgmtBase::dropManagementFrame ( Ieee80211ManagementFrame *  frame) [protected, virtual]

Utility method to dispose of an unhandled frame

Referenced by Ieee80211MgmtSTASimplified::handleAssociationRequestFrame(), Ieee80211MgmtSTA::handleAssociationRequestFrame(), Ieee80211MgmtAPSimplified::handleAssociationRequestFrame(), Ieee80211MgmtAdhoc::handleAssociationRequestFrame(), Ieee80211MgmtSTASimplified::handleAssociationResponseFrame(), Ieee80211MgmtAPSimplified::handleAssociationResponseFrame(), Ieee80211MgmtAP::handleAssociationResponseFrame(), Ieee80211MgmtAdhoc::handleAssociationResponseFrame(), Ieee80211MgmtSTASimplified::handleAuthenticationFrame(), Ieee80211MgmtAPSimplified::handleAuthenticationFrame(), Ieee80211MgmtAdhoc::handleAuthenticationFrame(), Ieee80211MgmtSTASimplified::handleBeaconFrame(), Ieee80211MgmtAPSimplified::handleBeaconFrame(), Ieee80211MgmtAP::handleBeaconFrame(), Ieee80211MgmtAdhoc::handleBeaconFrame(), Ieee80211MgmtSTASimplified::handleDeauthenticationFrame(), Ieee80211MgmtAPSimplified::handleDeauthenticationFrame(), Ieee80211MgmtAdhoc::handleDeauthenticationFrame(), Ieee80211MgmtSTASimplified::handleDisassociationFrame(), Ieee80211MgmtAPSimplified::handleDisassociationFrame(), Ieee80211MgmtAdhoc::handleDisassociationFrame(), Ieee80211MgmtSTASimplified::handleProbeRequestFrame(), Ieee80211MgmtSTA::handleProbeRequestFrame(), Ieee80211MgmtAPSimplified::handleProbeRequestFrame(), Ieee80211MgmtAP::handleProbeRequestFrame(), Ieee80211MgmtAdhoc::handleProbeRequestFrame(), Ieee80211MgmtSTASimplified::handleProbeResponseFrame(), Ieee80211MgmtAPSimplified::handleProbeResponseFrame(), Ieee80211MgmtAP::handleProbeResponseFrame(), Ieee80211MgmtAdhoc::handleProbeResponseFrame(), Ieee80211MgmtSTASimplified::handleReassociationRequestFrame(), Ieee80211MgmtSTA::handleReassociationRequestFrame(), Ieee80211MgmtAPSimplified::handleReassociationRequestFrame(), Ieee80211MgmtAdhoc::handleReassociationRequestFrame(), Ieee80211MgmtSTASimplified::handleReassociationResponseFrame(), Ieee80211MgmtAPSimplified::handleReassociationResponseFrame(), Ieee80211MgmtAP::handleReassociationResponseFrame(), and Ieee80211MgmtAdhoc::handleReassociationResponseFrame().

{
    EV << "ignoring management frame: " << (cMessage *)frame << "\n";
    delete frame;
    numMgmtFramesDropped++;
}
bool Ieee80211MgmtBase::enqueue ( cMessage *  msg) [protected, virtual]

Redefined from PassiveQueueBase.

Implements PassiveQueueBase.

{
    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]
virtual void Ieee80211MgmtBase::handleAssociationResponseFrame ( Ieee80211AssociationResponseFrame *  frame) [protected, pure virtual]
virtual void Ieee80211MgmtBase::handleAuthenticationFrame ( Ieee80211AuthenticationFrame *  frame) [protected, pure virtual]
virtual void Ieee80211MgmtBase::handleBeaconFrame ( Ieee80211BeaconFrame *  frame) [protected, pure virtual]
virtual void Ieee80211MgmtBase::handleCommand ( int  msgkind,
cPolymorphic *  ctrl 
) [protected, pure virtual]

Should be redefined to handle commands from the "agent" (if present)

Implemented in Ieee80211MgmtAdhoc, Ieee80211MgmtAP, Ieee80211MgmtAPSimplified, Ieee80211MgmtSTA, and Ieee80211MgmtSTASimplified.

Referenced by handleMessage().

virtual void Ieee80211MgmtBase::handleDataFrame ( Ieee80211DataFrame *  frame) [protected, pure virtual]
virtual void Ieee80211MgmtBase::handleDeauthenticationFrame ( Ieee80211DeauthenticationFrame *  frame) [protected, pure virtual]
virtual void Ieee80211MgmtBase::handleDisassociationFrame ( Ieee80211DisassociationFrame *  frame) [protected, pure virtual]
void Ieee80211MgmtBase::handleMessage ( cMessage *  msg) [protected, virtual]

Dispatches incoming messages to handleTimer(), handleUpperMessage() or processFrame().

Reimplemented from PassiveQueueBase.

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]
virtual void Ieee80211MgmtBase::handleProbeResponseFrame ( Ieee80211ProbeResponseFrame *  frame) [protected, pure virtual]
virtual void Ieee80211MgmtBase::handleReassociationRequestFrame ( Ieee80211ReassociationRequestFrame *  frame) [protected, pure virtual]
virtual void Ieee80211MgmtBase::handleReassociationResponseFrame ( Ieee80211ReassociationResponseFrame *  frame) [protected, pure virtual]
virtual void Ieee80211MgmtBase::handleTimer ( cMessage *  frame) [protected, pure virtual]

Should be redefined to deal with self-messages

Implemented in Ieee80211MgmtAdhoc, Ieee80211MgmtAP, Ieee80211MgmtAPSimplified, Ieee80211MgmtSTA, and Ieee80211MgmtSTASimplified.

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 Ieee80211MgmtAdhoc, Ieee80211MgmtAP, Ieee80211MgmtAPSimplified, Ieee80211MgmtSTA, and Ieee80211MgmtSTASimplified.

Referenced by handleMessage().

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

Reimplemented in Ieee80211MgmtAdhoc, Ieee80211MgmtAP, Ieee80211MgmtAPBase, Ieee80211MgmtAPSimplified, Ieee80211MgmtSTA, and Ieee80211MgmtSTASimplified.

{
    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]
void Ieee80211MgmtBase::processFrame ( Ieee80211DataOrMgmtFrame *  frame) [protected, virtual]

Dispatch to frame processing methods according to frame type

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::sendOut ( cMessage *  msg) [protected, virtual]

Redefined from PassiveQueueBase: send message to MAC

Implements PassiveQueueBase.

{
    send(msg, "macOut");
}
void Ieee80211MgmtBase::sendUp ( cMessage *  msg) [protected, virtual]

Utility method: sends the packet to the upper layer

Referenced by Ieee80211MgmtSTASimplified::handleDataFrame(), Ieee80211MgmtSTA::handleDataFrame(), and Ieee80211MgmtAdhoc::handleDataFrame().

{
    send(msg, "uppergateOut");
}

Member Data Documentation

cQueue Ieee80211MgmtBase::dataQueue [protected]

Referenced by dequeue(), enqueue(), and initialize().

cOutVector Ieee80211MgmtBase::dataQueueDropVec [protected]

Referenced by enqueue(), and initialize().

cOutVector Ieee80211MgmtBase::dataQueueLenVec [protected]

Referenced by dequeue(), enqueue(), and initialize().

Referenced by enqueue(), and initialize().

cQueue Ieee80211MgmtBase::mgmtQueue [protected]

Referenced by dequeue(), enqueue(), and initialize().


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