Package: inet.linklayer.ieee80211.mac.coordinationfunction
Hcf
compound moduleHCF -- Hybrid Coordination Function
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 | 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 | count(frameSequenceStarted)-count(frameSequenceFinished) | vector | sample-hold | |
packetReceivedFromPeer | packets received | none | |||
frameSequenceDuration | frame sequence durations | frameSequenceDuration(frameSequenceFinished) | histogram, vector? |
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 | ||
originatorAckPolicy.blockAckReqThreshold | int | 5 | |
originatorAckPolicy.maxBlockAckPolicyFrameLength | int | 1000B | |
originatorAckPolicy.blockAckTimeout | double | -1s | |
originatorAckPolicy.ackTimeout | double | -1s | |
recipientAckPolicy.rateSelectionModule | string | ||
rtsPolicy.rateSelectionModule | string | ||
rtsPolicy.ctsTimeout | double | -1s | |
rtsPolicy.rtsThreshold | int | 2346B | |
ctsPolicy.rxModule | string | ||
ctsPolicy.rateSelectionModule | string | ||
originatorBlockAckAgreementPolicy.delayedAckPolicySupported | bool | false | |
originatorBlockAckAgreementPolicy.aMsduSupported | bool | true | |
originatorBlockAckAgreementPolicy.maximumAllowedBufferSize | int | 64 | |
originatorBlockAckAgreementPolicy.blockAckTimeoutValue | double | 0s |
0 means that it depends on the originator |
recipientBlockAckAgreementPolicy.delayedAckPolicySupported | bool | false | |
recipientBlockAckAgreementPolicy.aMsduSupported | bool | true | |
recipientBlockAckAgreementPolicy.maximumAllowedBufferSize | int | 64 | |
recipientBlockAckAgreementPolicy.blockAckTimeoutValue | double | 0s |
0 means that it depends on the originator |
Source code
// // HCF -- Hybrid Coordination Function // module Hcf like IHcf { parameters: bool isBlockAckSupported = default(false); string rxModule; string txModule; *.rateSelectionModule = "^.rateSelection"; *.rxModule = "^." + 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=count(frameSequenceStarted)-count(frameSequenceFinished); record=vector; interpolationmode=sample-hold); @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=count(blockAckAgreementAdded)-count(blockAckAgreementDeleted); record=vector; interpolationmode=sample-hold); 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: OriginatorQosAckPolicy { parameters: @display("p=550,100"); } recipientAckPolicy: RecipientQosAckPolicy { parameters: @display("p=550,200"); } rtsPolicy: QosRtsPolicy { parameters: @display("p=550,300"); } ctsPolicy: QosCtsPolicy { parameters: @display("p=550,400"); } originatorBlockAckAgreementPolicy: OriginatorBlockAckAgreementPolicy if isBlockAckSupported { parameters: originatorAckPolicyModule = "^.originatorAckPolicy"; @display("p=550,500"); } recipientBlockAckAgreementPolicy: RecipientBlockAckAgreementPolicy if isBlockAckSupported { parameters: @display("p=550,600"); } }File: src/inet/linklayer/ieee80211/mac/coordinationfunction/Hcf.ned