Edca

Package: inet.linklayer.ieee80211.mac.channelaccess

compound module Edca

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.

Usage diagram

Inheritance diagram

Used in compound modules

Name

Type

Description

Hcf

compound module

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

Extends

Name

Type

Description

Module

compound module

Base module for all INET compound modules.

Parameters

Name

Type

Default value

Description

displayStringTextFormat

string

“”

Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information

numEdcafs

int

4

rxModule

string

rateSelectionModule

string

Properties

Name

Value

Description

class

Edca

display

i=block/star

Unassigned submodule parameters

Name

Type

Default value

Description

edcaf.pendingQueue.displayStringTextFormat

string

“contains %p pk (%l) pushed %u\npulled %o removed %r dropped %d”

Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information

edcaf.pendingQueue.packetCapacity

int

100

Maximum number of packets in the queue, no limit by default

edcaf.pendingQueue.dataCapacity

int

-1b

Maximum total length of packets in the queue, no limit by default

edcaf.pendingQueue.dropperClass

string

“inet::queueing::PacketAtCollectionEndDropper”

Determines which packets are dropped when the queue is overloaded, packets are not dropped by default; the parameter must be the name of a C++ class which implements the IPacketDropperFunction C++ interface and is registered via Register_Class

edcaf.pendingQueue.comparatorClass

string

“inet::ieee80211::MgmtOverDataComparator”

Determines the order of packets in the queue, insertion order by default; the parameter must be the name of a C++ class which implements the IPacketComparatorFunction C++ interface and is registered via Register_Class

edcaf.pendingQueue.bufferModule

string

“”

Relative module path to the IPacketBuffer module used by this queue, implicit buffer by default

edcaf.inProgressFrames.displayStringTextFormat

string

“{numInProgress} packets”

Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information

edcaf.inProgressFrames.pendingQueueModule

string

“^.pendingQueue”

edcaf.inProgressFrames.originatorMacDataServiceModule

string

“^.^.^.originatorMacDataService”

edcaf.inProgressFrames.ackHandlerModule

string

“^.ackHandler”

edcaf.contention.displayStringTextFormat

string

“{fsmState}”

Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information

edcaf.contention.initialChannelBusy

bool

true

Assume that the channel was busy before the simulation started

edcaf.contention.backoffOptimization

bool

true

We can pretend the frame has arrived into the queue a little bit earlier, and maybe able to start transmitting immediately

edcaf.ackHandler.displayStringTextFormat

string

“”

Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information

edcaf.txopProcedure.displayStringTextFormat

string

“”

Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information

edcaf.txopProcedure.txopLimit

double

-1s

edcaf.recoveryProcedure.displayStringTextFormat

string

“”

Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information

edcaf.recoveryProcedure.shortRetryLimit

int

7

edcaf.recoveryProcedure.longRetryLimit

int

4

collisionController.displayStringTextFormat

string

“”

Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information

mgmtAndNonQoSRecoveryProcedure.displayStringTextFormat

string

“”

Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information

mgmtAndNonQoSRecoveryProcedure.shortRetryLimit

int

7

mgmtAndNonQoSRecoveryProcedure.longRetryLimit

int

4

Source code

//
// 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.
//
module Edca extends Module
{
    parameters:
        int numEdcafs = default(4);
        string rxModule;
        string rateSelectionModule;

        *.rateSelectionModule = "^." + this.rateSelectionModule;
        *.rxModule = "^." + this.rxModule;
        *.collisionControllerModule = "^.collisionController";

        edcaf[0].accessCategory = default("AC_BK");
        edcaf[1].accessCategory = default("AC_BE");
        edcaf[2].accessCategory = default("AC_VI");
        edcaf[3].accessCategory = default("AC_VO");

        @class(Edca);
        @display("i=block/star");
    submodules:
        edcaf[numEdcafs]: Edcaf {
            parameters:
                @display("p=100,100,row,150");
        }
        collisionController: <default("EdcaCollisionController")> like ICollisionController {
            parameters:
                @display("p=100,200");
        }
        mgmtAndNonQoSRecoveryProcedure: NonQosRecoveryProcedure {
            parameters:
                cwCalculatorModule = "^.edcaf[1]"; // Best effort
                rtsPolicyModule = "^.^.rtsPolicy";
                @display("p=400,200");
        }
}

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