Package: inet.linklayer.ieee80211.mac.channelaccess
Edcaf
compound moduleImplements EDCAF (Enhanced Distributed Channel Access Function) for IEEE 802.11. EDCAF represents one access category within EDCA.
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 to | function | info |
---|---|---|
Contention | inet::ieee80211::Contention::mediumStateChanged | medium FREE |
Contention | inet::ieee80211::Contention::startContention | startContention |
Hcf | inet::ieee80211::Hcf::channelGranted | channelGranted |
Called methods (observed)
function | info | call from |
---|---|---|
inet::ieee80211::Edcaf::channelAccessGranted | channelAccessGranted | Contention |
inet::ieee80211::Edcaf::incrementCw | incrementCw | Hcf |
inet::ieee80211::Edcaf::receiveSignal | modesetChanged | Ieee80211Mac |
inet::ieee80211::Edcaf::releaseChannel | releaseChannel | Hcf |
inet::ieee80211::Edcaf::requestChannel | requestChannel | Hcf |
inet::ieee80211::Edcaf::resetCw | resetCw | Hcf |
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