Package: inet.linklayer.ieee80211.mac.coordinationfunction
Hcf
compound moduleImplements the HCF (Hybrid 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 |
---|---|---|---|
isBlockAckSupported | bool | false | |
rxModule | string | ||
txModule | string |
Properties
Name | Value | Description |
---|---|---|
class | Hcf | |
display | i=block/layer |
Signals
Name | Type | Unit |
---|---|---|
frameSequenceStarted | ||
frameSequenceAborted | ||
packetDropped | inet::Packet | |
blockAckAgreementAdded | ||
datarateSelected | double | |
blockAckAgreementDeleted | ||
edcaCollisionDetected | unsigned long | |
packetReceivedFromPeer | inet::Packet | |
packetSentToPeer | inet::Packet | |
linkBroken | inet::Packet | |
frameSequenceFinished |
Statistics
Name | Title | Source | Record | Unit | Interpolation Mode |
---|---|---|---|---|---|
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 | |
blockAckAgreementAdded | added block ack agreements | count | |||
blockAckAgreementDeleted | deleted block ack agreements | count | |||
packetSentToPeerWithoutRetry | packets sent: without retry | ieee80211NotRetry(packetSentToPeer) | count, sum(packetBytes), vector(packetBytes) | none | |
linkBroken | link breaks | count, vector? | none | ||
packetSentToPeerBroadcast | packets sent: broadcast | ieee80211Broadcast(packetSentToPeer) | count, sum(packetBytes), vector(packetBytes) | none | |
blockAckAgreementActive | active block ack agreements | warmup(count(blockAckAgreementAdded)-count(blockAckAgreementDeleted)) | vector | sample-hold | |
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 | |
packetReceivedFromPeerMulticast | packets received: multicast | ieee80211Multicast(packetReceivedFromPeer) | count, sum(packetBytes), vector(packetBytes) | none | |
datarateSelected | datarates selected | vector | none | ||
edcaCollisionDetected | EDCA collisions detected | count | |||
packetSentToPeer | packets sent | count, sum(packetBytes), vector(packetBytes) | none | ||
packetDrop | packet drops | packetDropped | count, sum(packetBytes), vector(packetBytes) | none | |
frameSequenceFinished | finished frame sequences | count, vector? | |||
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? | ||
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 | none | |||
frameSequenceDuration | frame sequence durations | frameSequenceDuration(frameSequenceFinished) | histogram, vector? |
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") |
Edcaf | inet::ieee80211::Edcaf::incrementCw | incrementCw |
Edcaf | inet::ieee80211::Edcaf::releaseChannel | releaseChannel |
Edcaf | inet::ieee80211::Edcaf::requestChannel | requestChannel |
Edcaf | inet::ieee80211::Edcaf::resetCw | resetCw |
Hcf | inet::ieee80211::Hcf::frameSequenceFinished | frameSequenceFinished |
Hcf | inet::ieee80211::Hcf::originatorProcessFailedFrame | originatorProcessFailedFrame |
Hcf | inet::ieee80211::Hcf::originatorProcessReceivedFrame | originatorProcessReceivedFrame |
Hcf | inet::ieee80211::Hcf::originatorProcessRtsProtectionFailed | originatorProcessRtsProtectionFailed |
Hcf | inet::ieee80211::Hcf::originatorProcessTransmittedFrame | originatorProcessTransmittedFrame |
Hcf | inet::ieee80211::Hcf::processMgmtFrame | processMgmtFrame |
Hcf | inet::ieee80211::Hcf::processUpperFrame | processUpperFrame(%s) |
Hcf | inet::ieee80211::Hcf::scheduleStartRxTimer | scheduleStartRxTimer |
Hcf | inet::ieee80211::Hcf::transmitControlResponseFrame | transmitControlResponseFrame |
Hcf | inet::ieee80211::Hcf::transmitFrame | transmitFrame |
OriginatorQosMacDataService | inet::ieee80211::OriginatorQosMacDataService::extractFramesToTransmit | extractFramesToTransmit |
TxopProcedure | inet::ieee80211::TxopProcedure::endTxop | endTxop |
TxopProcedure | inet::ieee80211::TxopProcedure::startTxop | startTxop |
InProgressFrames | inet::ieee80211::InProgressFrames::clearDroppedFrames | clearDroppedFrames |
PendingQueue | inet::queueing::PacketQueue::pushPacket | pushPacket |
RecipientQosMacDataService | inet::ieee80211::RecipientQosMacDataService::controlFrameReceived | controlFrameReceived |
RecipientQosMacDataService | inet::ieee80211::RecipientQosMacDataService::dataFrameReceived | dataFrameReceived |
RecipientQosMacDataService | inet::ieee80211::RecipientQosMacDataService::managementFrameReceived | managementFrameReceived |
Called methods (observed)
function | info | call from |
---|---|---|
inet::ieee80211::Hcf::channelGranted | channelGranted | Edcaf |
inet::ieee80211::Hcf::corruptedFrameReceived | corruptedFrameReceived | Ieee80211Mac |
inet::ieee80211::Hcf::frameSequenceFinished | frameSequenceFinished | Hcf |
inet::ieee80211::Hcf::originatorProcessFailedFrame | originatorProcessFailedFrame | Hcf |
inet::ieee80211::Hcf::originatorProcessReceivedFrame | originatorProcessReceivedFrame | Hcf |
inet::ieee80211::Hcf::originatorProcessRtsProtectionFailed | originatorProcessRtsProtectionFailed | Hcf |
inet::ieee80211::Hcf::originatorProcessTransmittedFrame | originatorProcessTransmittedFrame | Hcf |
inet::ieee80211::Hcf::processLowerFrame | processLowerFrame(%s) | Ieee80211Mac |
inet::ieee80211::Hcf::processMgmtFrame | processMgmtFrame | Hcf |
inet::ieee80211::Hcf::processUpperFrame | processUpperFrame(%s) | Ieee80211Mac, Hcf |
inet::ieee80211::Hcf::receiveSignal | modesetChanged | Ieee80211Mac |
inet::ieee80211::Hcf::scheduleStartRxTimer | scheduleStartRxTimer | Hcf |
inet::ieee80211::Hcf::transmissionComplete | transmissionComplete | Tx |
inet::ieee80211::Hcf::transmitControlResponseFrame | transmitControlResponseFrame | Hcf |
inet::ieee80211::Hcf::transmitFrame | transmitFrame | Hcf |
Packet operations (observed)
chunkType | packetAction |
---|---|
Ieee80211AckFrame | Packet |
Ieee80211AddbaRequest | Packet, insertAtFront |
Ieee80211AddbaResponse | Packet, insertAtFront |
Ieee80211BasicBlockAck | Packet |
Ieee80211BasicBlockAckReq | Packet, insertAtFront |
Ieee80211BlockAckReq | peekAtFront |
Ieee80211CtsFrame | Packet |
Ieee80211DataHeader | insertAtFront, peekAtFront, removeAtFront |
Ieee80211DataOrMgmtHeader | peekAtFront, removeAtFront |
Ieee80211MacHeader | peekAtFront, removeAtFront |
Ieee80211MacTrailer | insertAtBack |
Ieee80211MgmtHeader | insertAtFront, peekAtFront |
Ieee80211RtsFrame | insertAtBack, insertAtFront, peekAtFront |
Shared Tagging operations (observed)
tagType | tagAction |
---|---|
Ieee80211ModeInd | findTag |
Ieee80211ModeReq | addTagIfAbsent, findTag |
Unassigned submodule parameters
Name | Type | Default value | Description |
---|---|---|---|
edca.edcaf.inProgressFrames.pendingQueueModule | string | "^.pendingQueue" | |
edca.edcaf.inProgressFrames.originatorMacDataServiceModule | string | "^.^.^.originatorMacDataService" | |
edca.edcaf.inProgressFrames.ackHandlerModule | string | "^.ackHandler" | |
edca.edcaf.txopProcedure.txopLimit | double | -1s | |
edca.edcaf.recoveryProcedure.shortRetryLimit | int | 7 | |
edca.edcaf.recoveryProcedure.longRetryLimit | int | 4 | |
edca.mgmtAndNonQoSRecoveryProcedure.shortRetryLimit | int | 7 | |
edca.mgmtAndNonQoSRecoveryProcedure.longRetryLimit | int | 4 | |
singleProtectionMechanism.rateSelectionModule | string | ||
rateSelection.multicastFrameBitrate | double | -1bps | |
rateSelection.responseAckFrameBitrate | double | -1bps | |
rateSelection.responseBlockAckFrameBitrate | 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 | |
originatorAckPolicy.rateSelectionModule | string | ||
recipientAckPolicy.rateSelectionModule | string | ||
rtsPolicy.rateSelectionModule | string | ||
ctsPolicy.rxModule | string | ||
ctsPolicy.rateSelectionModule | string |
Source code
// // Implements the HCF (Hybrid Coordination Function) for IEEE 802.11. // module Hcf like IHcf { parameters: bool isBlockAckSupported = default(false); string rxModule; string txModule; *.rateSelectionModule = "^.rateSelection"; *.rxModule = "^." + this.rxModule; *.*.originatorMacDataServiceModule = "^.^.originatorMacDataService"; @class(Hcf); @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[edcaCollisionDetected](type=unsigned long); @signal[frameSequenceStarted]; @signal[frameSequenceFinished]; @signal[frameSequenceAborted]; @signal[datarateSelected](type=double); @signal[blockAckAgreementAdded]; @signal[blockAckAgreementDeleted]; @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"; 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[edcaCollisionDetected](title="EDCA collisions detected"; record=count); @statistic[frameSequenceFinished](title="finished frame sequences"; record=count,vector?); @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); @statistic[blockAckAgreementAdded](title="added block ack agreements"; record=count); @statistic[blockAckAgreementDeleted](title="deleted block ack agreements"; record=count); @statistic[blockAckAgreementActive](title="active block ack agreements"; source=warmup(count(blockAckAgreementAdded)-count(blockAckAgreementDeleted)); record=vector; interpolationmode=sample-hold; autoWarmupFilter=false); submodules: edca: Edca { parameters: @display("p=150,100"); } hcca: Hcca { parameters: @display("p=150,200"); } originatorMacDataService: OriginatorQosMacDataService { parameters: @display("p=150,300"); } recipientMacDataService: RecipientQosMacDataService { parameters: @display("p=150,400"); } singleProtectionMechanism: SingleProtectionMechanism { parameters: @display("p=150,500"); } rateSelection: QosRateSelection { parameters: rateControlModule = "^.rateControl"; @display("p=350,100"); } rateControl: <default("")> like IRateControl if typename != "" { parameters: @display("p=350,200"); } originatorAckPolicy: <default("OriginatorQosAckPolicy")> like IOriginatorQosAckPolicy { parameters: @display("p=550,100"); } recipientAckPolicy: <default("RecipientQosAckPolicy")> like IRecipientQosAckPolicy { parameters: @display("p=550,200"); } rtsPolicy: <default("QosRtsPolicy")> like IRtsPolicy { parameters: @display("p=550,300"); } ctsPolicy: <default("QosCtsPolicy")> like ICtsPolicy { parameters: @display("p=550,400"); } originatorBlockAckAgreementPolicy: <default("OriginatorBlockAckAgreementPolicy")> like IOriginatorBlockAckAgreementPolicy if isBlockAckSupported { parameters: originatorAckPolicyModule = "^.originatorAckPolicy"; @display("p=550,500"); } recipientBlockAckAgreementPolicy: <default("RecipientBlockAckAgreementPolicy")> like IRecipientBlockAckAgreementPolicy if isBlockAckSupported { parameters: @display("p=550,600"); } }File: src/inet/linklayer/ieee80211/mac/coordinationfunction/Hcf.ned