Edcaf

Package: inet.linklayer.ieee80211.mac.channelaccess

Edcaf

compound module

IEEE 802.11 Enhanced Distributed Channel Access Function

IPacketQueue InProgressFrames IContention QosAckHandler TxopProcedure QosRecoveryProcedure

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 (no description)

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

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

//
// IEEE 802.11 Enhanced Distributed Channel Access Function
//
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