Dcf

Package: inet.linklayer.ieee80211.mac.coordinationfunction

Dcf

compound module

IEEE 802.11 Distributed Coordination Function

channelAccess : Dcaf

Source:
channelAccess: Dcaf {
    parameters:
        @display("p=150,100");
} originatorMacDataService : OriginatorMacDataService

Source:
originatorMacDataService: OriginatorMacDataService {
    parameters:
        @display("p=150,200");
} recipientMacDataService : RecipientMacDataService

Source:
recipientMacDataService: RecipientMacDataService {
    parameters:
        @display("p=150,300");
} rateSelection : RateSelection

Source:
rateSelection: RateSelection {
    parameters:
        rateControlModule = "^.rateControl";
        @display("p=400,100");
} rateControl : like IRateControl

IRateControl: Interface for auto rate control modules.

Source:
rateControl: <rateControlType> like IRateControl if rateControlType != "" {
    parameters:
        @display("p=400,200");
} recoveryProcedure : NonQoSRecoveryProcedure

Source:
recoveryProcedure: NonQoSRecoveryProcedure {
    parameters:
        cwCalculatorModule = "^.channelAccess";
        rtsPolicyModule = "^.rtsPolicy";
        @display("p=400,300");
} originatorProtectionMechanism : OriginatorProtectionMechanism

Source:
originatorProtectionMechanism: OriginatorProtectionMechanism {
    parameters:
        @display("p=400,400");
} originatorAckPolicy : OriginatorAckPolicy

Source:
originatorAckPolicy: OriginatorAckPolicy {
    parameters:
        @display("p=650,100");
} recipientAckPolicy : RecipientAckPolicy

Source:
recipientAckPolicy: RecipientAckPolicy {
    parameters:
        @display("p=650,200");
} rtsPolicy : RtsPolicy

Source:
rtsPolicy: RtsPolicy {
    parameters:
        @display("p=650,300");
} ctsPolicy : CtsPolicy

Source:
ctsPolicy: CtsPolicy {
    parameters:
        @display("p=650,400");
}

Usage diagram

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

Used in compound modules

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
maxQueueSize int 100 -1 means unlimited
rxModule string
txModule string
rateControlType string ""
prioritizeMulticast bool false

if true, prioritize multicast frames (9.3.2.1 Fundamental access)

Properties

Name Value Description
class Dcf
display i=block/queue

Signals

Name Type Unit
NF_LINK_BREAK inet::ieee80211::Ieee80211DataOrMgmtFrame
NF_PACKET_DROP inet::ieee80211::Ieee80211Frame

Unassigned submodule parameters

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

assume that channel was busy before the simulation started

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

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

fastest

rateSelection.mgmtFrameBitrate double -1bps

fastest

rateSelection.controlFrameBitrate double -1bps
recoveryProcedure.shortRetryLimit int 7
recoveryProcedure.longRetryLimit int 4
originatorProtectionMechanism.rateSelectionModule string
originatorAckPolicy.rateSelectionModule string
originatorAckPolicy.ackTimeout double -1s
recipientAckPolicy.rateSelectionModule string
rtsPolicy.rateSelectionModule string
rtsPolicy.ctsTimeout double -1s
rtsPolicy.rtsThreshold int 2346B
ctsPolicy.rxModule string
ctsPolicy.rateSelectionModule string

Source code

//
// IEEE 802.11 Distributed Coordination Function
//
module Dcf
{
    parameters:
        int maxQueueSize = default(100); // -1 means unlimited

        string rxModule;
        string txModule;
        string rateControlType = default("");
        bool prioritizeMulticast = default(false); // if true, prioritize multicast frames (9.3.2.1 Fundamental access)

        *.rateSelectionModule = "^.rateSelection";
        *.rxModule = "^." + this.rxModule;

        @class(Dcf);
        @display("i=block/queue");
        @signal[NF_LINK_BREAK](type=inet::ieee80211::Ieee80211DataOrMgmtFrame);
        @signal[NF_PACKET_DROP](type=inet::ieee80211::Ieee80211Frame);

    submodules:
        channelAccess: Dcaf {
            parameters:
                @display("p=150,100");
        }
        originatorMacDataService: OriginatorMacDataService {
            parameters:
                @display("p=150,200");
        }
        recipientMacDataService: RecipientMacDataService {
            parameters:
                @display("p=150,300");
        }
        rateSelection: RateSelection {
            parameters:
                rateControlModule = "^.rateControl";
                @display("p=400,100");
        }
        rateControl: <rateControlType> like IRateControl if rateControlType != "" {
            parameters:
                @display("p=400,200");
        }
        recoveryProcedure: NonQoSRecoveryProcedure {
            parameters:
                cwCalculatorModule = "^.channelAccess";
                rtsPolicyModule = "^.rtsPolicy";
                @display("p=400,300");
        }
        originatorProtectionMechanism: OriginatorProtectionMechanism {
            parameters:
                @display("p=400,400");
        }
        originatorAckPolicy: OriginatorAckPolicy {
            parameters:
                @display("p=650,100");
        }
        recipientAckPolicy: RecipientAckPolicy {
            parameters:
                @display("p=650,200");
        }
        rtsPolicy: RtsPolicy {
            parameters:
                @display("p=650,300");
        }
        ctsPolicy: CtsPolicy {
            parameters:
                @display("p=650,400");
        }
}
File: src/inet/linklayer/ieee80211/mac/coordinationfunction/Dcf.ned