Compound Module Ieee80211CompatibleMac

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

Delegate some upperMac parameters to Ieee80211Mac, to be more compatible with the old MAC. NOTE: NOT ALL PARAMETERS OF THE OLD MAC CAN BE MAPPED.

Dcf Hcf IRx ITx IStatistics

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
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. (The SnrEval80211 and Decider80211 modules should also work if per-packet bitrate setting gets implemented.)

Parameters:

Name Type Default value Description
interfaceTableModule string
mtu int 2304B
address string "auto"

MAC address as hex string (12 hex digits), or "auto". "auto" values will be replaced by a generated MAC address in init stage 0.

modeSet string opMode
qosStation bool false
rateControlType string ""
opMode string "g(mixed)"
bitrate double -1bps

for backward compatibility

basicBitrate double -1bps

for backward compatibility

dataBitrate double bitrate
mgmtBitrate double basicBitrate
multicastBitrate double basicBitrate
controlBitrate double -1bps
initialRateControlRate double -1bps
rtsThresholdBytes int 2346B
retryLimit int -1
EDCA bool false
maxQueueSize int 14
AIFSN0 int 7

AIFSN for background

AIFSN1 int 3

AIFSN for best effort

AIFSN2 int 2

AIFSN for video

AIFSN3 int 2

AIFSN for voice

TXOP0 double 0s
TXOP1 double 0s
TXOP2 double 3.008ms
TXOP3 double 1.504ms
AIFSN int 2

if there is only one AC (EDCA = false)

prioritizeMulticast bool false

if true, prioritize multicast frames (9.3.2.1 Fundamental access)

slotTime double -1s

slot time, -1 means default (mode dependent)

cwMinData int -1

contention window for normal data frames, -1 means default

cwMaxData int -1

contention window for normal data frames, -1 means default

upperMac.typename = EDCA ? "EdcaUpperMac" : "DcfUpperMac";

Properties:

Name Value Description
display i=block/layer
class Ieee80211Mac

Gates:

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

Signals:

Name Type Unit
NF_MODESET_CHANGED inet::physicallayer::Ieee80211ModeSet

Statistics:

Name Title Source Record Unit Interpolation Mode
passedUpPk packets passed to higher layer packetSentToUpper count, sum(packetBytes), vector(packetBytes) none
rcvdPkFromHL packets received from higher layer packetReceivedFromUpper count, sum(packetBytes), vector(packetBytes) none
sentDownPk packets sent to lower layer packetSentToLower count, sum(packetBytes), vector(packetBytes) none
rcvdPkFromLL packets received from lower layer packetReceivedFromLower count, sum(packetBytes), vector(packetBytes) none

Unassigned submodule parameters:

Name Type Default value Description
dcf.channelAccess.contention.initialChannelBusy bool true

assume that channel was busy before the simulation started

dcf.channelAccess.contention.backoffOptimization bool true

we can pretend the frame has arrived into the queue a little bit earlier, and may be able to start transmitting immediately

dcf.rateSelection.multicastFrameBitrate double -1bps
dcf.rateSelection.responseAckFrameBitrate double -1bps
dcf.rateSelection.responseCtsFrameBitrate double -1bps
dcf.rateSelection.dataFrameBitrate double -1bps

fastest

dcf.rateSelection.mgmtFrameBitrate double -1bps

fastest

dcf.rateSelection.controlFrameBitrate double -1bps
dcf.recoveryProcedure.shortRetryLimit int 7
dcf.recoveryProcedure.longRetryLimit int 4
dcf.originatorProtectionMechanism.rateSelectionModule string
dcf.originatorAckPolicy.rateSelectionModule string
dcf.originatorAckPolicy.ackTimeout double -1s
dcf.recipientAckPolicy.rateSelectionModule string
dcf.rtsPolicy.rateSelectionModule string
dcf.rtsPolicy.ctsTimeout double -1s
dcf.rtsPolicy.rtsThreshold int 2346B
dcf.ctsPolicy.rxModule string
dcf.ctsPolicy.rateSelectionModule string
hcf.edca.edcaf.contention.initialChannelBusy bool true

assume that channel was busy before the simulation started

hcf.edca.edcaf.contention.backoffOptimization bool true

we can pretend the frame has arrived into the queue a little bit earlier, and may be able to start transmitting immediately

hcf.rateSelection.multicastFrameBitrate double -1bps
hcf.rateSelection.responseAckFrameBitrate double -1bps
hcf.rateSelection.responseBlockAckFrameBitrate double -1bps
hcf.rateSelection.responseCtsFrameBitrate double -1bps
hcf.rateSelection.dataFrameBitrate double -1bps

fastest

hcf.rateSelection.mgmtFrameBitrate double -1bps

fastest

hcf.rateSelection.controlFrameBitrate double -1bps
hcf.singleProtectionMechanism.rateSelectionModule string
hcf.edcaMgmtAndNonQoSRecoveryProcedure.shortRetryLimit int 7
hcf.edcaMgmtAndNonQoSRecoveryProcedure.longRetryLimit int 4
hcf.edcaDataRecoveryProcedures.shortRetryLimit int 7
hcf.edcaDataRecoveryProcedures.longRetryLimit int 4
hcf.edcaTxopProcedures.txopLimit double -1s
hcf.originatorAckPolicy.rateSelectionModule string
hcf.originatorAckPolicy.blockAckReqTreshold int 5
hcf.originatorAckPolicy.maxBlockAckPolicyFrameLength int 1000B
hcf.originatorAckPolicy.blockAckTimeout double -1s
hcf.originatorAckPolicy.ackTimeout double -1s
hcf.recipientAckPolicy.rateSelectionModule string
hcf.rtsPolicy.rateSelectionModule string
hcf.rtsPolicy.ctsTimeout double -1s
hcf.rtsPolicy.rtsThreshold int 2346B
hcf.ctsPolicy.rxModule string
hcf.ctsPolicy.rateSelectionModule string
hcf.originatorBlockAckAgreementPolicy.delayedAckPolicySupported bool false
hcf.originatorBlockAckAgreementPolicy.aMsduSupported bool true
hcf.originatorBlockAckAgreementPolicy.maximumAllowedBufferSize int 64
hcf.originatorBlockAckAgreementPolicy.blockAckTimeoutValue double 0s

0 means that it depends on the originator

hcf.recipientBlockAckAgreementPolicy.delayedAckPolicySupported bool false
hcf.recipientBlockAckAgreementPolicy.aMsduSupported bool true
hcf.recipientBlockAckAgreementPolicy.maximumAllowedBufferSize int 64
hcf.recipientBlockAckAgreementPolicy.blockAckTimeoutValue double 0s

0 means that it depends on the originator

Source code:

//
// Delegate some upperMac parameters to Ieee80211Mac, to be more compatible with the old MAC.
// NOTE: NOT ALL PARAMETERS OF THE OLD MAC CAN BE MAPPED.
//
module Ieee80211CompatibleMac extends Ieee80211Mac
{
    parameters:
        string rateControlType = default("");
        string opMode @enum("a","b","g(erp)","g(mixed)","n","p") = default("g(mixed)");
        double bitrate @unit("bps") = default(-1bps); // for backward compatibility
        double basicBitrate @unit("bps") = default(-1bps); // for backward compatibility
        double dataBitrate @unit("bps") = default(bitrate);
        double mgmtBitrate @unit("bps") = default(basicBitrate);
        double multicastBitrate @unit("bps") = default(basicBitrate);
        double controlBitrate @unit("bps") = default(-1bps);
        double initialRateControlRate @unit("bps") = default(-1bps);
        int rtsThresholdBytes @unit("B") = default(2346B);
        int retryLimit = default(-1);
        bool EDCA = default(false);
        int maxQueueSize = default(14);

        int AIFSN0 = default(7); // AIFSN for background
        int AIFSN1 = default(3); // AIFSN for best effort
        int AIFSN2 = default(2); // AIFSN for video
        int AIFSN3 = default(2); // AIFSN for voice
        double TXOP0 @unit(s) = default(0s);
        double TXOP1 @unit(s) = default(0s);
        double TXOP2 @unit(s) = default(3.008ms);
        double TXOP3 @unit(s) = default(1.504ms);
        int AIFSN = default(2); // if there is only one AC (EDCA = false)
        bool prioritizeMulticast = default(false); // if true, prioritize multicast frames (9.3.2.1 Fundamental access)
        double slotTime @unit("s") = default(-1s); // slot time, -1 means default (mode dependent)
        int cwMinData = default(-1); // contention window for normal data frames, -1 means default
        int cwMaxData = default(-1); // contention window for normal data frames, -1 means default

        //upperMac.typename = EDCA ? "EdcaUpperMac" : "DcfUpperMac";

        modeSet = opMode; // BasicRateSelection
        *.maxQueueSize = maxQueueSize;
        *.rateControlType = rateControlType;
        *.rateSelection.multicastFrameBitrate = multicastBitrate; // BasicRateSelection
        *.rateSelection.dataFrameBitrate = dataBitrate; // BasicRateSelection
        *.rateSelection.mgmtFrameBitrate = mgmtBitrate;
        *.rateSelection.controlFrameBitrate = controlBitrate;
        *.rateSelection.responseAckFrameBitrate = controlBitrate;
        *.rateControl.initialRate = initialRateControlRate;
        dcf.rtsPolicy.rtsThreshold = rtsThresholdBytes;
        upperMac.rtsThreshold = rtsThresholdBytes; // DcfUpperMac, EdcaUpperMac
        upperMac.shortRetryLimit = retryLimit; // DcfUpperMac, EdcaUpperMac
        upperMac.maxQueueSize = maxQueueSize; // DcfUpperMac, EdcaUpperMac

        upperMac.aifsn0 = AIFSN0; // EdcaUpperMac
        upperMac.aifsn1 = AIFSN1; // EdcaUpperMac
        upperMac.aifsn2 = AIFSN2; // EdcaUpperMac
        upperMac.aifsn3 = AIFSN3; // EdcaUpperMac
        upperMac.txopLimit0 = TXOP0; // EdcaUpperMac
        upperMac.txopLimit1 = TXOP1; // EdcaUpperMac
        upperMac.txopLimit2 = TXOP2; // EdcaUpperMac
        upperMac.txopLimit3 = TXOP3; // EdcaUpperMac
        //TODO upperMac.difsn =  AIFSN;
        upperMac.prioritizeMulticast = prioritizeMulticast; // DcfUpperMac, EdcaUpperMac
        upperMac.slotTime = slotTime; // DcfUpperMac, EdcaUpperMac
        dcf.channelAccess.cwMin = cwMinData; // DcfUpperMac
        dcf.channelAccess.cwMax = cwMaxData; // DcfUpperMac
        upperMac.cwMinMulticast = cwMulticast; // DcfUpperMac, EdcaUpperMac
}