Ieee80211Mac

Package: inet.linklayer.ieee80211.mac

Ieee80211Mac

compound module

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

This module has been heavily modularized to enable customization and extension of almost any aspect of its operation, with the aim of better supporting experimentation and research. Because of that, its features and details of operation are determined by its several subcomponents, and can be altered by extending or replacing the appropriate subcomponents.

Some noteworthy features are:

  • Support for 802.11a/b/g/e/p, as well as partial/incomplete support for later WiFi standards such as n and ac.
  • Implements DCF and HCF channel access, including support for QoS (EDCA).
  • Support for both infrastructure mode and ad hoc mode operation.
  • In infrastructure mode, authentication and association can be implicit, or explicitly modeled using frame exchanges.
  • Support for advanced MAC features such as frame aggregation, fragmentation, block acknowledgement and block agreements, rate selection and adaptive rate control algorithms like AARF and ONOE.
  • Ability to work with radio models of varying levels of detail, from simple unit disk radio models to layered radio models that explicitly model forward error correction, scrambling, symbol encoding/decoding, etc, and may represent radio signals with a multi-dimensional power density function over time and frequency.
  • Support for energy consumption modeling.

The IEEE 802.11 header is represented by Ieee80211MacHeader and its subclasses.

Note about the implementation:

Despite its appearance, Ieee80211Mac is not a plain compound module. Although the bulk of its functionality is outsourced to submodules, it is an active module with an underlying C++ class that subclasses from cSimpleModule, and receives/sends messages on its own behalf.

Notable omissions:

  • PCF is missing
  • HCCA is currently not implemented. (The module exists, but it is currently a placeholder.)
  • Fields related to unsupported features are omitted from 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-modeled features).
dcf : like IDcf

Dcf: Implements the DCF (Distributed Coordination Function) for IEEE 802.11.

IDcf: Interface for modules that implement the DCF (Distributed Coordination Function) for IEEE 802.11.

Source:
dcf: <default("Dcf")> like IDcf {
    parameters:
        @display("p=100,100");
} hcf : like IHcf

Hcf: Implements the HCF (Hybrid Coordination Function) for IEEE 802.11.

IHcf: Interface for modules that implement the HCF (Hybrid Coordination Function) for IEEE 802.11.

Source:
hcf: <default("Hcf")> like IHcf if qosStation {
    parameters:
        @display("p=250,100");
} ds : like IDs

Ds: Implements the DS (Distribution Service) for IEEE 802.11, which is responsible for distributing...

IDs: Interface for modules that implement the frame Distribution Service for IEEE 802.11.

Source:
ds: <default("Ds")> like IDs {
    parameters:
        @display("p=400,100");
} rx : like IRx

Rx: Responsible for checking frames received over the radio for errors, for managing the NAV, and for...

IRx: Interface for Rx processes.

Source:
rx: <default("Rx")> like IRx {
    parameters:
        @display("p=100,200");
} tx : like ITx

Tx: Responsible for unconditionally transmitting a frame after waiting for a specified inter-frame...

ITx: Interface for processes that unconditionally transmit a frame after waiting for a specified...

Source:
tx: <default("Tx")> like ITx {
    parameters:
        @display("p=250,200");
}

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, PacketProtocolTag, SnirInd, Ieee80211ChannelInd, Ieee80211ModeInd
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, DispatchProtocolInd?, NetworkProtocolInd?, SocketReq?
upperLayerInPacket0Ieee80211LlcLpdDispatchProtocolReq, InterfaceReq, MacAddressReq, PacketProtocolTag, 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, getTag
UserPriorityIndaddTagIfAbsent
UserPriorityReqfindTag
LlcProtocolTagaddTagIfAbsent

Source code

//
// Implementation of the 802.11 MAC protocol. This module is intended
// to be used in combination with the ~Ieee80211Radio module as the physical
// layer.
//
// This module has been heavily modularized to enable customization
// and extension of almost any aspect of its operation, with the aim of
// better supporting experimentation and research. Because of that, its
// features and details of operation are determined by its several
// subcomponents, and can be altered by extending or replacing the
// appropriate subcomponents.
//
// Some noteworthy features are:
//
// - Support for 802.11a/b/g/e/p, as well as partial/incomplete support for
//   later WiFi standards such as n and ac.
//
// - Implements DCF and HCF channel access, including support for QoS (EDCA).
//
// - Support for both infrastructure mode and ad hoc mode operation.
//
// - In infrastructure mode, authentication and association can be
//   implicit, or explicitly modeled using frame exchanges.
//
// - Support for advanced MAC features such as frame aggregation,
//   fragmentation, block acknowledgement and block agreements,
//   rate selection and adaptive rate control algorithms like AARF and
//   ONOE.
//
// - Ability to work with radio models of varying levels of detail,
//   from simple unit disk radio models to layered radio models that
//   explicitly model forward error correction, scrambling, symbol
//   encoding/decoding, etc, and may represent radio signals with a
//   multi-dimensional power density function over time and frequency.
//
// - Support for energy consumption modeling.
//
// The IEEE 802.11 header is represented by ~Ieee80211MacHeader and its
// subclasses.
//
// Note about the implementation:
//
// Despite its appearance, Ieee80211Mac is not a plain compound module.
// Although the bulk of its functionality is outsourced to submodules,
// it is an active module with an underlying C++ class that subclasses
// from cSimpleModule, and receives/sends messages on its own behalf.
//
// Notable omissions:
//
// - PCF is missing
// - HCCA is currently not implemented. (The module exists, but it is
//   currently a placeholder.)
// - Fields related to unsupported features are omitted from 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-modeled 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