Ieee80211Mac

Package: inet.linklayer.ieee80211.mac

Ieee80211Mac

compound module

Implementation of the 802.11b MAC protocol. This module is intended to be used in combination with the Ieee80211Radio module as the physical layer.

Encapsulation/decapsulation must be done in the upper layers. (It is typically in the 802.11 management module, see in Ieee80211Interface). The base class for 802.11 frame messages is Ieee80211MacHeader, but this module expects Ieee80211DataOrMgmtHeader (a subclass) from upper layers (the management module). This module will assign the transmitter address (address 2) and the frame sequence number/fragment number fields in the frames; all other fields must already be filled when this module gets the frame for transmission.

Limitations

Power management and polling (PCF) are not supported.

Physical layer algorithms such as frequency hopping and direct sequence spread spectrum are not modelled directly.

Fields related to the above unsupported features are omitted from management frame formats as well (for example, FH/DS/CF parameter sets, beacon/probe timestamp which is related to physical layer synchronization, listen interval which is related to power management, capability information which is related to PCF and other non-modelled features).

IDcf IHcf IDs IRx ITx

Usage diagram

The following diagram shows usage relationships between types. Unresolved types are missing from the diagram.

Inheritance diagram

The following diagram shows inheritance relationships for this type. Unresolved types are missing from the diagram.

Extends

Name Type Description
MacProtocolBase simple module

Module base for different MAC protocols.

Parameters

Name Type Default value Description
interfaceTableModule string
mibModule string
modeSet string "g(mixed)"
fcsMode string "declared"
initialRadioMode string "receiver"
mtu int 2304B
qosStation bool false

Properties

Name Value Description
display i=block/layer
class Ieee80211Mac

Gates

Name Direction Size Description
upperLayerIn input
upperLayerOut output
lowerLayerIn input
lowerLayerOut output
mgmtIn input
mgmtOut output

Signals

Name Type Unit
modesetChanged inet::physicallayer::Ieee80211ModeSet
linkBroken inet::Packet

Statistics

Name Title Source Record Unit Interpolation Mode
packetDropOther packet drops: other packetDropReasonIsOther(packetDropped) count, sum(packetBytes), vector(packetBytes) none
packetDropNotAddressedToUs packet drops: not addressed to us packetDropReasonIsNotAddressedToUs(packetDropped) count, sum(packetBytes), vector(packetBytes) none
packetDropDuplicateDetected packet drops: duplicate detected packetDropReasonIsDuplicateDetected(packetDropped) count, sum(packetBytes), vector(packetBytes) none
packetReceivedFromUpper packets received from upper layer count, sum(packetBytes), vector(packetBytes) none
packetReceivedFromLower packets received from lower layer count, sum(packetBytes), vector(packetBytes) none
packetDropQueueOverflow packet drops: queue overflow packetDropReasonIsQueueOverflow(packetDropped) count, sum(packetBytes), vector(packetBytes) none
packetDropRetryLimitReached packet drops: retry limit reached packetDropReasonIsRetryLimitReached(packetDropped) count, sum(packetBytes), vector(packetBytes) none
packetSentToLower packets sent to lower layer count, sum(packetBytes), vector(packetBytes) none
packetSentToUpper packets sent to upper layer count, sum(packetBytes), vector(packetBytes) none
linkBroken link breaks count, vector? none
packetDrop packet drops packetDropped count, sum(packetBytes), vector(packetBytes) none
packetDropIncorrectlyReceived packet drops: incorrectly received packetDropReasonIsIncorrectlyReceived(packetDropped) count, sum(packetBytes), vector(packetBytes) none

Direct method calls (observed)

call tofunctioninfo
PcapRecorderinet::PcapRecorder::receiveSignalpacketReceivedFromLower
PcapRecorderinet::PcapRecorder::receiveSignalpacketSentToLower
Dsinet::ieee80211::Ds::processDataFrameprocessDataFrame
Ieee80211Macinet::ieee80211::Ieee80211Mac::processLowerFrameprocessLowerFrame("%s")
Ieee80211Macinet::ieee80211::Ieee80211Mac::processUpperFrameprocessUpperFrame("%s")
Rxinet::ieee80211::Rx::lowerFrameReceivedlowerFrameReceived("%s")
Rxinet::ieee80211::Rx::receivedSignalPartChangedreceivedSignalPartChanged
Rxinet::ieee80211::Rx::receptionStateChangedreceptionStateChanged
Rxinet::ieee80211::Rx::transmissionStateChangedtransmissionStateChanged
Txinet::ieee80211::Tx::radioTransmissionFinishedradioTransmissionFinished
OriginatorBlockAckAgreementPolicyinet::ieee80211::OriginatorBlockAckAgreementPolicy::receiveSignalmodesetChanged
Dcafinet::ieee80211::Dcaf::receiveSignalmodesetChanged
Edcafinet::ieee80211::Edcaf::receiveSignalmodesetChanged
Dcfinet::ieee80211::Dcf::corruptedFrameReceivedcorruptedFrameReceived
Dcfinet::ieee80211::Dcf::processLowerFrameprocessLowerFrame(%s)
Dcfinet::ieee80211::Dcf::processUpperFrameprocessUpperFrame(%s)
Dcfinet::ieee80211::Dcf::receiveSignalmodesetChanged
Hcfinet::ieee80211::Hcf::corruptedFrameReceivedcorruptedFrameReceived
Hcfinet::ieee80211::Hcf::processLowerFrameprocessLowerFrame(%s)
Hcfinet::ieee80211::Hcf::processUpperFrameprocessUpperFrame(%s)
Hcfinet::ieee80211::Hcf::receiveSignalmodesetChanged
OriginatorAckPolicyinet::ieee80211::OriginatorAckPolicy::receiveSignalmodesetChanged
OriginatorQosAckPolicyinet::ieee80211::OriginatorQosAckPolicy::receiveSignalmodesetChanged
QosRtsPolicyinet::ieee80211::QosRtsPolicy::receiveSignalmodesetChanged
RtsPolicyinet::ieee80211::RtsPolicy::receiveSignalmodesetChanged
TxopProcedureinet::ieee80211::TxopProcedure::receiveSignalmodesetChanged
OriginatorProtectionMechanisminet::ieee80211::OriginatorProtectionMechanism::receiveSignalmodesetChanged
SingleProtectionMechanisminet::ieee80211::SingleProtectionMechanism::receiveSignalmodesetChanged
AarfRateControlinet::ieee80211::AarfRateControl::receiveSignalmodesetChanged
QosRateSelectioninet::ieee80211::QosRateSelection::receiveSignalmodesetChanged
RateSelectioninet::ieee80211::RateSelection::receiveSignalmodesetChanged
CtsPolicyinet::ieee80211::CtsPolicy::receiveSignalmodesetChanged
QosCtsPolicyinet::ieee80211::QosCtsPolicy::receiveSignalmodesetChanged
RecipientAckPolicyinet::ieee80211::RecipientAckPolicy::receiveSignalmodesetChanged
RecipientQosAckPolicyinet::ieee80211::RecipientQosAckPolicy::receiveSignalmodesetChanged
InterfaceTableinet::InterfaceTable::interfaceChangedinterfaceChanged
ApskScalarRadioinet::physicallayer::ApskRadio::setRadioModesetRadioMode
Ieee80211OfdmRadioinet::physicallayer::Ieee80211OfdmRadio::setRadioModesetRadioMode
Ieee80211DimensionalRadioinet::physicallayer::Ieee80211Radio::setRadioModesetRadioMode
Ieee80211Radioinet::physicallayer::Ieee80211Radio::setRadioModesetRadioMode
Ieee80211ScalarRadioinet::physicallayer::Ieee80211Radio::setRadioModesetRadioMode
Ieee80211UnitDiskRadioinet::physicallayer::Radio::setRadioModesetRadioMode
UnitDiskRadioinet::physicallayer::UnitDiskRadio::setRadioModesetRadioMode

Called methods (observed)

functioninfocall from
inet::ieee80211::Ieee80211Mac::handleOperationStagehandleOperationStageScenarioManager, SimpleEpEnergyManagement, SimpleEpEnergyStorage
inet::ieee80211::Ieee80211Mac::processLowerFrameprocessLowerFrame("%s")Ieee80211Mac
inet::ieee80211::Ieee80211Mac::processUpperFrameprocessUpperFrame("%s")Ds, Ieee80211Mac
inet::ieee80211::Ieee80211Mac::receiveSignalradioModeChangedApskScalarRadio, Ieee80211OfdmRadio, Ieee80211DimensionalRadio, Ieee80211Radio, Ieee80211ScalarRadio, Ieee80211UnitDiskRadio, UnitDiskRadio
inet::ieee80211::Ieee80211Mac::receiveSignalreceivedSignalPartChangedApskScalarRadio, Ieee80211OfdmRadio, Ieee80211DimensionalRadio, Ieee80211Radio, Ieee80211ScalarRadio, Ieee80211UnitDiskRadio, UnitDiskRadio
inet::ieee80211::Ieee80211Mac::receiveSignalreceptionStateChangedApskScalarRadio, Ieee80211OfdmRadio, Ieee80211DimensionalRadio, Ieee80211Radio, Ieee80211ScalarRadio, Ieee80211UnitDiskRadio, UnitDiskRadio
inet::ieee80211::Ieee80211Mac::receiveSignaltransmissionStateChangedApskScalarRadio, Ieee80211OfdmRadio, Ieee80211DimensionalRadio, Ieee80211Radio, Ieee80211ScalarRadio, Ieee80211UnitDiskRadio, UnitDiskRadio
inet::ieee80211::Ieee80211Mac::sendDownFramesendDownFrame("%s")Tx
inet::ieee80211::Ieee80211Mac::sendUpsendUp("%s")Ds
inet::ieee80211::Ieee80211Mac::sendUpFramesendUpFrame("%s")Dcf, Hcf

Incoming messages (observed)

gatemsgkindctrlsrcModuletags
lowerLayerInPacket0ApskScalarRadioErrorRateInd, MacAddressInd, PacketProtocolTag, SnirInd, Ieee80211ModeReq, DispatchProtocolInd?, DispatchProtocolReq?, InterfaceReq?, MacAddressReq?, NetworkProtocolInd?, SocketReq?, LlcProtocolTag?
lowerLayerInPacket0Ieee80211OfdmRadioErrorRateInd, SnirInd, Ieee80211ChannelInd, Ieee80211ModeInd, PacketProtocolTag?
lowerLayerInPacket0Ieee80211DimensionalRadioErrorRateInd, PacketProtocolTag, SignalPowerInd, SignalTimeInd, SnirInd, Ieee80211ChannelInd, Ieee80211ModeInd
lowerLayerInPacket0Ieee80211RadioErrorRateInd, PacketProtocolTag, SignalPowerInd, SignalTimeInd, SnirInd, Ieee80211ChannelInd, Ieee80211ModeInd
lowerLayerInPacket0Ieee80211ScalarRadioErrorRateInd, PacketProtocolTag, SignalPowerInd, SignalTimeInd, SnirInd, Ieee80211ChannelInd, Ieee80211ModeInd
lowerLayerInPacket0Ieee80211UnitDiskRadioErrorRateInd, PacketProtocolTag, SignalPowerInd, SignalTimeInd, SnirInd, Ieee80211ChannelInd, Ieee80211ModeInd
lowerLayerInPacket0UnitDiskRadioErrorRateInd, PacketProtocolTag, SignalPowerInd, SignalTimeInd, SnirInd
mgmtInPacket0Ieee80211MgmtApIeee80211SubtypeReq, MacAddressReq, PacketProtocolTag
mgmtInPacket0Ieee80211MgmtStaIeee80211SubtypeReq, MacAddressReq, PacketProtocolTag
mgmtInRequest1Ieee80211ConfigureRadioCommandIeee80211MgmtSta
upperLayerInPacket0Ieee80211LlcEpdInterfaceReq, MacAddressReq, PacketProtocolTag, LlcProtocolTag, DispatchProtocolInd?, NetworkProtocolInd?, SocketReq?
upperLayerInPacket0Ieee80211LlcLpdDispatchProtocolReq, InterfaceReq, MacAddressReq, PacketProtocolTag, LlcProtocolTag, DirectionTag?, DispatchProtocolInd?, EcnInd?, ErrorRateInd?, Ieee802SapInd?, Ieee802SapReq?, InterfaceInd?, MacAddressInd?, MulticastReq?, NetworkProtocolInd?, NextHopAddressReq?, SignalPowerInd?, SignalTimeInd?, SnirInd?, SocketReq?, TransportProtocolInd?, UserPriorityReq?, Ieee80211ChannelInd?, Ieee80211ModeInd?
upperLayerInPacket0Ieee80211PortalDirectionTag, InterfaceReq, MacAddressReq, PacketProtocolTag

Outgoing messages (observed)

gatemsgkindctrldestModuletags
lowerLayerOutPacket0ApskScalarRadioMacAddressInd, PacketProtocolTag, Ieee80211ModeReq, DispatchProtocolInd?, DispatchProtocolReq?, InterfaceReq?, MacAddressReq?, NetworkProtocolInd?, SocketReq?, LlcProtocolTag?
lowerLayerOutPacket0Ieee80211OfdmRadioMacAddressInd, PacketProtocolTag, Ieee80211ModeReq, DirectionTag?, DispatchProtocolInd?, DispatchProtocolReq?, InterfaceReq?, MacAddressReq?, MulticastReq?, NetworkProtocolInd?, SocketReq?, TransportProtocolInd?, LlcProtocolTag?
lowerLayerOutPacket0Ieee80211DimensionalRadioMacAddressInd, PacketProtocolTag, Ieee80211ModeReq, DispatchProtocolInd?, DispatchProtocolReq?, InterfaceReq?, MacAddressReq?, MulticastReq?, NetworkProtocolInd?, SocketReq?, TransportProtocolInd?, LlcProtocolTag?
lowerLayerOutPacket0Ieee80211RadioMacAddressInd, PacketProtocolTag, Ieee80211ModeReq, DirectionTag?, DispatchProtocolInd?, DispatchProtocolReq?, InterfaceReq?, MacAddressReq?, MulticastReq?, NetworkProtocolInd?, TransportProtocolInd?, LlcProtocolTag?
lowerLayerOutPacket0Ieee80211ScalarRadioMacAddressInd, PacketProtocolTag, Ieee80211ModeReq, DirectionTag?, DispatchProtocolInd?, DispatchProtocolReq?, EcnInd?, ErrorRateInd?, Ieee80211SubtypeReq?, Ieee802SapInd?, Ieee802SapReq?, InterfaceInd?, InterfaceReq?, MacAddressReq?, MulticastReq?, NetworkProtocolInd?, NextHopAddressReq?, SignalPowerInd?, SignalTimeInd?, SnirInd?, SocketReq?, TransportProtocolInd?, UserPriorityReq?, LlcProtocolTag?, Ieee80211ChannelInd?, Ieee80211ModeInd?
lowerLayerOutPacket0Ieee80211UnitDiskRadioMacAddressInd, PacketProtocolTag, Ieee80211ModeReq, DispatchProtocolInd?, DispatchProtocolReq?, ErrorRateInd?, Ieee802SapInd?, InterfaceInd?, InterfaceReq?, MacAddressReq?, MulticastReq?, NetworkProtocolInd?, SignalPowerInd?, SignalTimeInd?, SnirInd?, SocketReq?, TransportProtocolInd?, LlcProtocolTag?, Ieee80211ChannelInd?, Ieee80211ModeInd?
lowerLayerOutPacket0UnitDiskRadioMacAddressInd, PacketProtocolTag, Ieee80211ModeReq, DispatchProtocolInd?, DispatchProtocolReq?, InterfaceReq?, MacAddressReq?, NetworkProtocolInd?, SocketReq?, LlcProtocolTag?
lowerLayerOutRequest1ConfigureRadioCommandApskScalarRadio
lowerLayerOutRequest1ConfigureRadioCommandIeee80211OfdmRadio
lowerLayerOutRequest1ConfigureRadioCommandIeee80211DimensionalRadio
lowerLayerOutRequest1ConfigureRadioCommandIeee80211Radio
lowerLayerOutRequest1ConfigureRadioCommandIeee80211ScalarRadio
lowerLayerOutRequest1ConfigureRadioCommandIeee80211UnitDiskRadio
lowerLayerOutRequest1ConfigureRadioCommandUnitDiskRadio
lowerLayerOutRequest1Ieee80211ConfigureRadioCommandIeee80211ScalarRadio
mgmtOutPacket0Ieee80211MgmtApErrorRateInd, InterfaceInd, MacAddressInd, PacketProtocolTag, SignalPowerInd, SignalTimeInd, SnirInd, Ieee80211ChannelInd, Ieee80211ModeInd
mgmtOutPacket0Ieee80211MgmtStaErrorRateInd, InterfaceInd, MacAddressInd, PacketProtocolTag, SignalPowerInd, SignalTimeInd, SnirInd, Ieee80211ChannelInd, Ieee80211ModeInd
upperLayerOutPacket0Ieee80211LlcEpdErrorRateInd, InterfaceInd, MacAddressInd, PacketProtocolTag, SignalPowerInd, SignalTimeInd, SnirInd, Ieee80211ChannelInd, Ieee80211ModeInd
upperLayerOutPacket0Ieee80211LlcLpdInterfaceInd, MacAddressInd, PacketProtocolTag, DispatchProtocolInd?, DispatchProtocolReq?, ErrorRateInd?, InterfaceReq?, MacAddressReq?, NetworkProtocolInd?, SignalPowerInd?, SignalTimeInd?, SnirInd?, SocketReq?, UserPriorityInd?, LlcProtocolTag?, Ieee80211ChannelInd?, Ieee80211ModeInd?, Ieee80211ModeReq?
upperLayerOutPacket0Ieee80211PortalErrorRateInd, InterfaceInd, MacAddressInd, PacketProtocolTag, SignalPowerInd, SignalTimeInd, SnirInd, Ieee80211ChannelInd, Ieee80211ModeInd, UserPriorityInd?

Packet operations (observed)

chunkTypepacketAction
Ieee80211DataHeaderinsertAtFront
Ieee80211DataOrMgmtHeaderpeekAtFront, popAtFront
Ieee80211MacHeaderpeekAtFront
Ieee80211MacTrailerinsertAtBack, popAtBack
Ieee80211MgmtHeaderinsertAtFront

Shared Tagging operations (observed)

tagTypetagAction
ErrorRateIndfindTag
Ieee80211SubtypeReqgetTag
InterfaceIndaddTagIfAbsent
MacAddressIndaddTagIfAbsent
MacAddressReqgetTag
PacketProtocolTagaddTagIfAbsent
UserPriorityIndaddTagIfAbsent
UserPriorityReqfindTag

Source code

//
// Implementation of the 802.11b MAC protocol. This module is intended
// to be used in combination with the ~Ieee80211Radio module as the physical
// layer.
//
// Encapsulation/decapsulation must be done in the upper layers. (It is
// typically in the 802.11 management module, see in ~Ieee80211Interface).
// The base class for 802.11 frame messages is ~Ieee80211MacHeader, but this
// module expects ~Ieee80211DataOrMgmtHeader (a subclass) from upper layers
// (the management module). This module will assign the transmitter address
// (address 2) and the frame sequence number/fragment number fields in the
// frames; all other fields must already be filled when this module gets
// the frame for transmission.
//
// <b>Limitations</b>
//
// Power management and polling (PCF) are not supported.
//
// Physical layer algorithms such as frequency hopping and
// direct sequence spread spectrum are not modelled directly.
//
// Fields related to the above unsupported features are omitted from
// management frame formats as well (for example, FH/DS/CF parameter sets,
// beacon/probe timestamp which is related to physical layer synchronization,
// listen interval which is related to power management, capability information
// which is related to PCF and other non-modelled features).
//
module Ieee80211Mac extends MacProtocolBase like IIeee80211Mac
{
    parameters:
        string mibModule;
        string modeSet @enum("a","b","g(erp)","g(mixed)","n(mixed-2.4Ghz)","p","ac") = default("g(mixed)");
        string fcsMode @enum("declared","computed") = default("declared");
        string initialRadioMode @enum("off","sleep","receiver","transmitter","transceiver") = default("receiver");

        int mtu @unit(B) = default(2304B);
        bool qosStation = default(false);

        *.mibModule = default(absPath(this.mibModule));
        *.rxModule = "^.rx";
        *.txModule = "^.tx";

        @display("i=block/layer");
        @class(Ieee80211Mac);
        @signal[linkBroken](type=inet::Packet); // TODO this signal is only present for the statistic to pass the signal check, to be removed
        @signal[modesetChanged](type=inet::physicallayer::Ieee80211ModeSet);
        @statistic[packetSentToUpper](title="packets sent to upper layer"; record=count,sum(packetBytes),vector(packetBytes); interpolationmode=none);
        @statistic[packetSentToLower](title="packets sent to lower layer"; record=count,sum(packetBytes),vector(packetBytes); interpolationmode=none);
        @statistic[packetReceivedFromUpper](title="packets received from upper layer"; record=count,sum(packetBytes),vector(packetBytes); interpolationmode=none);
        @statistic[packetReceivedFromLower](title="packets received from lower layer"; record=count,sum(packetBytes),vector(packetBytes); interpolationmode=none);
        @statistic[linkBroken](title="link breaks"; record=count,vector?; interpolationmode=none);
        @statistic[packetDrop](title="packet drops"; source=packetDropped; record=count,sum(packetBytes),vector(packetBytes); interpolationmode=none);
        @statistic[packetDropIncorrectlyReceived](title="packet drops: incorrectly received"; source=packetDropReasonIsIncorrectlyReceived(packetDropped); record=count,sum(packetBytes),vector(packetBytes); interpolationmode=none);
        @statistic[packetDropNotAddressedToUs](title="packet drops: not addressed to us"; source=packetDropReasonIsNotAddressedToUs(packetDropped); record=count,sum(packetBytes),vector(packetBytes); interpolationmode=none);
        @statistic[packetDropQueueOverflow](title="packet drops: queue overflow"; source=packetDropReasonIsQueueOverflow(packetDropped); record=count,sum(packetBytes),vector(packetBytes); interpolationmode=none);
        @statistic[packetDropRetryLimitReached](title="packet drops: retry limit reached"; source=packetDropReasonIsRetryLimitReached(packetDropped); record=count,sum(packetBytes),vector(packetBytes); interpolationmode=none);
        @statistic[packetDropDuplicateDetected](title="packet drops: duplicate detected"; source=packetDropReasonIsDuplicateDetected(packetDropped); record=count,sum(packetBytes),vector(packetBytes); interpolationmode=none);
        @statistic[packetDropOther](title="packet drops: other"; source=packetDropReasonIsOther(packetDropped); record=count,sum(packetBytes),vector(packetBytes); interpolationmode=none);
    gates:
        input mgmtIn;
        output mgmtOut;
    submodules:
        dcf: <default("Dcf")> like IDcf {
            parameters:
                @display("p=100,100");
        }
        hcf: <default("Hcf")> like IHcf if qosStation {
            parameters:
                @display("p=250,100");
        }
        ds: <default("Ds")> like IDs {
            parameters:
                @display("p=400,100");
        }
        rx: <default("Rx")> like IRx {
            parameters:
                @display("p=100,200");
        }
        tx: <default("Tx")> like ITx {
            parameters:
                @display("p=250,200");
        }
}

File: src/inet/linklayer/ieee80211/mac/Ieee80211Mac.ned