Package: inet.linklayer.ieee80211.mac.coordinationfunction
Dcf
compound moduleImplements the DCF (Distributed Coordination Function) for IEEE 802.11.
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.
Parameters
Name | Type | Default value | Description |
---|---|---|---|
rxModule | string | ||
txModule | string |
Properties
Name | Value | Description |
---|---|---|
class | Dcf | |
display | i=block/layer |
Signals
Name | Type | Unit |
---|---|---|
frameSequenceStarted | ||
packetDropped | inet::Packet | |
datarateSelected | double | |
packetReceivedFromPeer | inet::Packet | |
packetSentToPeer | inet::Packet | |
linkBroken | inet::Packet | |
frameSequenceFinished |
Statistics
Name | Title | Source | Record | Unit | Interpolation Mode |
---|---|---|---|---|---|
packetReceivedFromPeerMulticast | packets received: multicast | ieee80211Multicast(packetReceivedFromPeer) | count, sum(packetBytes), vector(packetBytes) | none | |
packetDropNotAddressedToUs | packet drops: not addressed to us | packetDropReasonIsNotAddressedToUs(packetDropped) | count, sum(packetBytes), vector(packetBytes) | none | |
packetDropQueueOverflow | packet drops: queue overflow | packetDropReasonIsQueueOverflow(packetDropped) | count, sum(packetBytes), vector(packetBytes) | none | |
packetDropRetryLimitReached | packet drops: retry limit reached | packetDropReasonIsRetryLimitReached(packetDropped) | count, sum(packetBytes), vector(packetBytes) | none | |
datarateSelected | datarates selected | vector | none | ||
packetSentToPeerWithoutRetry | packets sent: without retry | ieee80211NotRetry(packetSentToPeer) | count, sum(packetBytes), vector(packetBytes) | none | |
packetSentToPeer | packets sent | count, sum(packetBytes), vector(packetBytes) | none | ||
linkBroken | link breaks | count, vector? | none | ||
packetDrop | packet drops | packetDropped | count, sum(packetBytes), vector(packetBytes) | none | |
frameSequenceFinished | finished frame sequences | count | |||
packetSentToPeerUnicast | packets sent: unicast | ieee80211Unicast(packetSentToPeer) | count, sum(packetBytes), vector(packetBytes) | none | |
packetReceivedFromPeerUnicast | packets received: unicast | ieee80211Unicast(packetReceivedFromPeer) | count, sum(packetBytes), vector(packetBytes) | none | |
packetSentToPeerWithRetry | packets sent: with retry | ieee80211Retry(packetSentToPeer) | count, sum(packetBytes), vector(packetBytes) | none | |
frameSequenceNumPackets | frame sequences: number of packets | frameSequenceNumPackets(frameSequenceFinished) | histogram, vector? | ||
packetSentToPeerBroadcast | packets sent: broadcast | ieee80211Broadcast(packetSentToPeer) | count, sum(packetBytes), vector(packetBytes) | none | |
packetReceivedFromPeerWithRetry | packets received: with retry | ieee80211Retry(packetReceivedFromPeer) | count, sum(packetBytes), vector(packetBytes) | none | |
frameSequenceActive | frame sequence active | warmup(count(frameSequenceStarted)-count(frameSequenceFinished)) | vector | sample-hold | |
packetReceivedFromPeer | packets received | count, sum(packetBytes), vector(packetBytes) | none | ||
frameSequenceDuration | frame sequence durations | frameSequenceDuration(frameSequenceFinished) | histogram, vector? | ||
packetReceivedFromPeerWithoutRetry | packets received: without retry | ieee80211NotRetry(packetReceivedFromPeer) | count, sum(packetBytes), vector(packetBytes) | none | |
packetSentToPeerMulticast | packets sent: multicast | ieee80211Multicast(packetSentToPeer) | count, sum(packetBytes), vector(packetBytes) | none | |
packetReceivedFromPeerBroadcast | packets received: broadcast | ieee80211Broadcast(packetReceivedFromPeer) | count, sum(packetBytes), vector(packetBytes) | none |
Scheduled messages (observed)
msg | kind | ctrl | tags | msgname | context |
---|---|---|---|---|---|
omnetpp::cMessage | 0 | startRxTimeout |
Direct method calls (observed)
call to | function | info |
---|---|---|
Ieee80211Interface | inet::NetworkInterface::receiveSignal | POST_MODEL_CHANGE |
Ieee80211Mac | inet::ieee80211::Ieee80211Mac::sendUpFrame | sendUpFrame("%s") |
Tx | inet::ieee80211::Tx::transmitFrame | transmitFrame("%s") |
Dcaf | inet::ieee80211::Dcaf::incrementCw | incrementCw |
Dcaf | inet::ieee80211::Dcaf::releaseChannel | releaseChannel |
Dcaf | inet::ieee80211::Dcaf::requestChannel | requestChannel |
Dcaf | inet::ieee80211::Dcaf::resetCw | resetCw |
Dcf | inet::ieee80211::Dcf::frameSequenceFinished | frameSequenceFinished |
Dcf | inet::ieee80211::Dcf::originatorProcessFailedFrame | originatorProcessFailedFrame |
Dcf | inet::ieee80211::Dcf::originatorProcessReceivedFrame | originatorProcessReceivedFrame |
Dcf | inet::ieee80211::Dcf::originatorProcessRtsProtectionFailed | originatorProcessRtsProtectionFailed |
Dcf | inet::ieee80211::Dcf::originatorProcessTransmittedFrame | originatorProcessTransmittedFrame |
Dcf | inet::ieee80211::Dcf::scheduleStartRxTimer | scheduleStartRxTimer |
Dcf | inet::ieee80211::Dcf::transmitControlResponseFrame | transmitControlResponseFrame |
Dcf | inet::ieee80211::Dcf::transmitFrame | transmitFrame |
OriginatorMacDataService | inet::ieee80211::OriginatorMacDataService::extractFramesToTransmit | extractFramesToTransmit |
InProgressFrames | inet::ieee80211::InProgressFrames::clearDroppedFrames | clearDroppedFrames |
PendingQueue | inet::queueing::PacketQueue::pushPacket | pushPacket |
AarfRateControl | inet::ieee80211::AarfRateControl::getRate | getRate |
RecipientMacDataService | inet::ieee80211::RecipientMacDataService::controlFrameReceived | controlFrameReceived |
RecipientMacDataService | inet::ieee80211::RecipientMacDataService::dataFrameReceived | dataFrameReceived |
RecipientMacDataService | inet::ieee80211::RecipientMacDataService::managementFrameReceived | managementFrameReceived |
Aodv | inet::aodv::Aodv::receiveSignal | linkBroken |
Dymo | inet::dymo::Dymo::receiveSignal | linkBroken |
Gpsr | inet::Gpsr::receiveSignal | linkBroken |
Called methods (observed)
function | info | call from |
---|---|---|
inet::ieee80211::Dcf::channelGranted | channelGranted | Dcaf |
inet::ieee80211::Dcf::corruptedFrameReceived | corruptedFrameReceived | Ieee80211Mac |
inet::ieee80211::Dcf::frameSequenceFinished | frameSequenceFinished | Dcf |
inet::ieee80211::Dcf::originatorProcessFailedFrame | originatorProcessFailedFrame | Dcf |
inet::ieee80211::Dcf::originatorProcessReceivedFrame | originatorProcessReceivedFrame | Dcf |
inet::ieee80211::Dcf::originatorProcessRtsProtectionFailed | originatorProcessRtsProtectionFailed | Dcf |
inet::ieee80211::Dcf::originatorProcessTransmittedFrame | originatorProcessTransmittedFrame | Dcf |
inet::ieee80211::Dcf::processLowerFrame | processLowerFrame(%s) | Ieee80211Mac |
inet::ieee80211::Dcf::processUpperFrame | processUpperFrame(%s) | Ieee80211Mac |
inet::ieee80211::Dcf::receiveSignal | modesetChanged | Ieee80211Mac |
inet::ieee80211::Dcf::scheduleStartRxTimer | scheduleStartRxTimer | Dcf |
inet::ieee80211::Dcf::transmissionComplete | transmissionComplete | Tx |
inet::ieee80211::Dcf::transmitControlResponseFrame | transmitControlResponseFrame | Dcf |
inet::ieee80211::Dcf::transmitFrame | transmitFrame | Dcf |
Packet operations (observed)
chunkType | packetAction |
---|---|
Ieee80211AckFrame | Packet |
Ieee80211CtsFrame | Packet |
Ieee80211DataHeader | insertAtFront |
Ieee80211DataOrMgmtHeader | peekAtFront, removeAtFront |
Ieee80211MacHeader | peekAtFront, removeAtFront |
Ieee80211MacTrailer | insertAtBack |
Ieee80211MgmtHeader | insertAtFront |
Ieee80211RtsFrame | insertAtBack, insertAtFront, peekAtFront |
Shared Tagging operations (observed)
tagType | tagAction |
---|---|
Ieee80211ModeInd | findTag |
Ieee80211ModeReq | addTagIfAbsent, findTag |
Unassigned submodule parameters
Name | Type | Default value | Description |
---|---|---|---|
channelAccess.inProgressFrames.pendingQueueModule | string | "^.pendingQueue" | |
channelAccess.inProgressFrames.originatorMacDataServiceModule | string | "^.^.originatorMacDataService" | |
channelAccess.inProgressFrames.ackHandlerModule | string | "^.^.ackHandler" | |
rateSelection.multicastFrameBitrate | double | -1bps | |
rateSelection.responseAckFrameBitrate | double | -1bps | |
rateSelection.responseCtsFrameBitrate | double | -1bps | |
rateSelection.dataFrameBitrate | double | -1bps |
fastest |
rateSelection.dataFrameBandwidth | double | nan Hz |
unspecified by default |
rateSelection.dataFrameNumSpatialStreams | int | -1 |
unspecified by default |
rateSelection.mgmtFrameBitrate | double | -1bps |
fastest |
rateSelection.controlFrameBitrate | double | -1bps | |
recoveryProcedure.shortRetryLimit | int | 7 | |
recoveryProcedure.longRetryLimit | int | 4 | |
originatorProtectionMechanism.rateSelectionModule | string | ||
originatorAckPolicy.rateSelectionModule | string | ||
recipientAckPolicy.rateSelectionModule | string | ||
rtsPolicy.rateSelectionModule | string | ||
ctsPolicy.rxModule | string | ||
ctsPolicy.rateSelectionModule | string |
Source code
// // Implements the DCF (Distributed Coordination Function) for IEEE 802.11. // module Dcf like IDcf { parameters: string rxModule; string txModule; *.rateSelectionModule = "^.rateSelection"; *.rxModule = "^." + this.rxModule; @class(Dcf); @display("i=block/layer"); @signal[packetSentToPeer](type=inet::Packet); @signal[packetReceivedFromPeer](type=inet::Packet); @signal[linkBroken](type=inet::Packet); @signal[packetDropped](type=inet::Packet); @signal[frameSequenceStarted]; @signal[frameSequenceFinished]; @signal[datarateSelected](type=double); @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[packetReceivedFromPeer](title="packets received"; record=count,sum(packetBytes),vector(packetBytes); interpolationmode=none); @statistic[packetReceivedFromPeerUnicast](title="packets received: unicast"; source=ieee80211Unicast(packetReceivedFromPeer); record=count,sum(packetBytes),vector(packetBytes); interpolationmode=none); @statistic[packetReceivedFromPeerMulticast](title="packets received: multicast"; source=ieee80211Multicast(packetReceivedFromPeer); record=count,sum(packetBytes),vector(packetBytes); interpolationmode=none); @statistic[packetReceivedFromPeerBroadcast](title="packets received: broadcast"; source=ieee80211Broadcast(packetReceivedFromPeer); record=count,sum(packetBytes),vector(packetBytes); interpolationmode=none); @statistic[packetReceivedFromPeerWithRetry](title="packets received: with retry"; source=ieee80211Retry(packetReceivedFromPeer); record=count,sum(packetBytes),vector(packetBytes); interpolationmode=none); @statistic[packetReceivedFromPeerWithoutRetry](title="packets received: without retry"; source=ieee80211NotRetry(packetReceivedFromPeer); record=count,sum(packetBytes),vector(packetBytes); interpolationmode=none); @statistic[linkBroken](title="link breaks"; record=count,vector?; interpolationmode=none); @statistic[packetDrop](title="packet drops"; source=packetDropped; record=count,sum(packetBytes),vector(packetBytes); interpolationmode=none); @statistic[packetDropNotAddressedToUs](title="packet drops: not addressed to us"; source=packetDropReasonIsNotAddressedToUs(packetDropped); record=count,sum(packetBytes),vector(packetBytes); interpolationmode=none); @statistic[packetDropQueueOverflow](title="packet drops: queue overflow"; source=packetDropReasonIsQueueOverflow(packetDropped); record=count,sum(packetBytes),vector(packetBytes); interpolationmode=none); @statistic[packetDropRetryLimitReached](title="packet drops: retry limit reached"; source=packetDropReasonIsRetryLimitReached(packetDropped); record=count,sum(packetBytes),vector(packetBytes); interpolationmode=none); @statistic[frameSequenceFinished](title="finished frame sequences"; record=count); @statistic[frameSequenceDuration](title="frame sequence durations"; source=frameSequenceDuration(frameSequenceFinished); record=histogram,vector?); @statistic[frameSequenceNumPackets](title="frame sequences: number of packets"; source=frameSequenceNumPackets(frameSequenceFinished); record=histogram,vector?); @statistic[frameSequenceActive](title="frame sequence active"; source=warmup(count(frameSequenceStarted)-count(frameSequenceFinished)); record=vector; interpolationmode=sample-hold; autoWarmupFilter=false); @statistic[datarateSelected](title="datarates selected"; record=vector; interpolationmode=none); submodules: // TODO consider merging Dcaf into Dcf, because its not like the relationship between Hcf and Edcaf or // TODO maybe move PendingQueue and InProgressFrames in Edcaf? channelAccess: Dcaf { parameters: @display("p=150,100"); } originatorMacDataService: OriginatorMacDataService { parameters: @display("p=150,200"); } recipientMacDataService: RecipientMacDataService { parameters: @display("p=150,300"); } rateSelection: RateSelection { parameters: rateControlModule = "^.rateControl"; @display("p=350,100"); } rateControl: <default("")> like IRateControl if typename != "" { parameters: @display("p=350,200"); } recoveryProcedure: NonQosRecoveryProcedure { parameters: cwCalculatorModule = "^.channelAccess"; rtsPolicyModule = "^.rtsPolicy"; @display("p=350,300"); } originatorProtectionMechanism: OriginatorProtectionMechanism { parameters: @display("p=150,400"); } ackHandler: AckHandler { parameters: @display("p=350,400"); } originatorAckPolicy: <default("OriginatorAckPolicy")> like IOriginatorAckPolicy { parameters: @display("p=550,100"); } recipientAckPolicy: <default("RecipientAckPolicy")> like IRecipientAckPolicy { parameters: @display("p=550,200"); } rtsPolicy: <default("RtsPolicy")> like IRtsPolicy { parameters: @display("p=550,300"); } ctsPolicy: <default("CtsPolicy")> like ICtsPolicy { parameters: @display("p=550,400"); } }File: src/inet/linklayer/ieee80211/mac/coordinationfunction/Dcf.ned