Edcaf

Package: inet.linklayer.ieee80211.mac.channelaccess

Edcaf

compound module

Implements EDCAF (Enhanced Distributed Channel Access Function) for IEEE 802.11. EDCAF represents one access category within EDCA.

pendingQueue : like IPacketQueue

IPacketQueue: This module interface is implemented by packet queue modules.

Source:
pendingQueue: <default("PendingQueue")> like IPacketQueue {
    parameters:
        @display("p=100,100");
} inProgressFrames : InProgressFrames

Source:
inProgressFrames: InProgressFrames {
    parameters:
        pendingQueueModule = default("^.pendingQueue");
        originatorMacDataServiceModule = default("^.^.^.originatorMacDataService");
        ackHandlerModule = default("^.ackHandler");
        @display("p=100,200");
} contention : like IContention

Contention: The default implementation of IContention.

IContention: Interface for modules that implement contention-based channel access.

Source:
contention: <default("Contention")> like IContention {
    parameters:
        @display("p=100,300");
} ackHandler : QosAckHandler

Source:
ackHandler: QosAckHandler {
    parameters:
        @display("p=100,400");
} txopProcedure : TxopProcedure

Source:
txopProcedure: TxopProcedure {
    parameters:
        @display("p=100,500");
} recoveryProcedure : QosRecoveryProcedure

Source:
recoveryProcedure: QosRecoveryProcedure {
    parameters:
        cwCalculatorModule = "^";
        rtsPolicyModule = "^.^.^.rtsPolicy";
        @display("p=100,600");
}

Usage diagram

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

Used in compound modules

Name Type Description
Edca compound module

Implements EDCA (Enhanced Distributed Channel Access) for IEEE 802.11. The implementation allows for a configurable number of access categories, not just four as defined by the standard.

Parameters

Name Type Default value Description
rxModule string
collisionControllerModule string
originatorMacDataServiceModule string
accessCategory string
aifsn int -1
cwMin int -1
cwMax int -1

Properties

Name Value Description
class Edcaf
display i=block/queue

Signals

Name Type Unit
packetSentToPeer inet::Packet
channelOwnershipChanged bool

Statistics

Name Title Source Record Unit Interpolation Mode
packetSentToPeerWithRetry packets sent: with retry ieee80211Retry(packetSentToPeer) count, sum(packetBytes), vector(packetBytes) none
packetSentToPeerBroadcast packets sent: broadcast ieee80211Broadcast(packetSentToPeer) count, sum(packetBytes), vector(packetBytes) none
packetSentToPeerWithoutRetry packets sent: without retry ieee80211NotRetry(packetSentToPeer) count, sum(packetBytes), vector(packetBytes) none
packetSentToPeer packets sent count, sum(packetBytes), vector(packetBytes) none
packetSentToPeerUnicast packets sent: unicast ieee80211Unicast(packetSentToPeer) count, sum(packetBytes), vector(packetBytes) none
channelOwnershipChanged channel ownership count, vector? sample-hold
packetSentToPeerMulticast packets sent: multicast ieee80211Multicast(packetSentToPeer) count, sum(packetBytes), vector(packetBytes) none

Direct method calls (observed)

call tofunctioninfo
Contentioninet::ieee80211::Contention::mediumStateChangedmedium FREE
Contentioninet::ieee80211::Contention::startContentionstartContention
Hcfinet::ieee80211::Hcf::channelGrantedchannelGranted

Called methods (observed)

functioninfocall from
inet::ieee80211::Edcaf::channelAccessGrantedchannelAccessGrantedContention
inet::ieee80211::Edcaf::incrementCwincrementCwHcf
inet::ieee80211::Edcaf::receiveSignalmodesetChangedIeee80211Mac
inet::ieee80211::Edcaf::releaseChannelreleaseChannelHcf
inet::ieee80211::Edcaf::requestChannelrequestChannelHcf
inet::ieee80211::Edcaf::resetCwresetCwHcf

Unassigned submodule parameters

Name Type Default value Description
inProgressFrames.pendingQueueModule string "^.pendingQueue"
inProgressFrames.originatorMacDataServiceModule string "^.^.^.originatorMacDataService"
inProgressFrames.ackHandlerModule string "^.ackHandler"
txopProcedure.txopLimit double -1s
recoveryProcedure.shortRetryLimit int 7
recoveryProcedure.longRetryLimit int 4

Source code

//
// Implements EDCAF (Enhanced Distributed Channel Access Function) for IEEE 802.11.
// EDCAF represents one access category within EDCA.
//
module Edcaf
{
    parameters:
        string rxModule;
        string collisionControllerModule;
        string originatorMacDataServiceModule;
        string accessCategory @enum("AC_BK","AC_BE","AC_VI","AC_VO");
        int aifsn = default(-1);
        int cwMin = default(-1);
        int cwMax = default(-1);
        @class(Edcaf);
        @display("i=block/queue");
        @signal[packetSentToPeer](type=inet::Packet);
        @signal[channelOwnershipChanged](type=bool);
        @statistic[packetSentToPeer](title="packets sent"; record=count,sum(packetBytes),vector(packetBytes); interpolationmode=none);
        @statistic[packetSentToPeerUnicast](title="packets sent: unicast"; source=ieee80211Unicast(packetSentToPeer); record=count,sum(packetBytes),vector(packetBytes); interpolationmode=none);
        @statistic[packetSentToPeerMulticast](title="packets sent: multicast"; source=ieee80211Multicast(packetSentToPeer); record=count,sum(packetBytes),vector(packetBytes); interpolationmode=none);
        @statistic[packetSentToPeerBroadcast](title="packets sent: broadcast "; source=ieee80211Broadcast(packetSentToPeer); record=count,sum(packetBytes),vector(packetBytes); interpolationmode=none);
        @statistic[packetSentToPeerWithRetry](title="packets sent: with retry"; source=ieee80211Retry(packetSentToPeer); record=count,sum(packetBytes),vector(packetBytes); interpolationmode=none);
        @statistic[packetSentToPeerWithoutRetry](title="packets sent: without retry"; source=ieee80211NotRetry(packetSentToPeer); record=count,sum(packetBytes),vector(packetBytes); interpolationmode=none);
        @statistic[channelOwnershipChanged](title="channel ownership"; record=count,vector?; interpolationmode=sample-hold);
    submodules:
        pendingQueue: <default("PendingQueue")> like IPacketQueue {
            parameters:
                @display("p=100,100");
        }
        inProgressFrames: InProgressFrames {
            parameters:
                pendingQueueModule = default("^.pendingQueue");
                originatorMacDataServiceModule = default("^.^.^.originatorMacDataService");
                ackHandlerModule = default("^.ackHandler");
                @display("p=100,200");
        }
        contention: <default("Contention")> like IContention {
            parameters:
                @display("p=100,300");
        }
        // TODO consider moving QosRecoveryProcedure and QosAckHandler from Edcaf to Hcf, because they seem to be prepared to handle all ACs?
        ackHandler: QosAckHandler {
            parameters:
                @display("p=100,400");
        }
        txopProcedure: TxopProcedure {
            parameters:
                @display("p=100,500");
        }
        // TODO consider moving QosRecoveryProcedure and QosAckHandler from Edcaf to Hcf, because they seem to be prepared to handle all ACs?
        recoveryProcedure: QosRecoveryProcedure {
            parameters:
                cwCalculatorModule = "^";
                rtsPolicyModule = "^.^.^.rtsPolicy";
                @display("p=100,600");
        }
}

File: src/inet/linklayer/ieee80211/mac/channelaccess/Edcaf.ned