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

PendingQueue: Implements a priority queue for IEEE 802.11 MAC frames.

IPacketQueue: Interface for 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

Manages acknowledgment handling for QoS frames in IEEE 802.11 networks.

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

Implements the Transmission Opportunity (TXOP) mechanism in IEEE 802.11 QoS networks.

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

Implements frame retransmission and recovery procedures for QoS frames in IEEE 802.11 networks.

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.

Inheritance diagram

The following diagram shows inheritance relationships for this type. 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.

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

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 Description
packetSentToPeer inet::Packet
channelOwnershipChanged bool

Statistics

Name Title Source Record Unit Interpolation Mode Description
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

Unassigned submodule parameters

Name Type Default value Description
inProgressFrames.displayStringTextFormat string ""

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

inProgressFrames.pendingQueueModule string "^.pendingQueue"
inProgressFrames.originatorMacDataServiceModule string "^.^.^.originatorMacDataService"
inProgressFrames.ackHandlerModule string "^.ackHandler"
ackHandler.displayStringTextFormat string ""

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

txopProcedure.displayStringTextFormat string ""

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

txopProcedure.txopLimit double -1s
recoveryProcedure.displayStringTextFormat string ""

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

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 extends Module
{
    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, as 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, as 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