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.
Used in compound modules
Name | Type | Description |
---|---|---|
Ieee80211Mac | compound module |
Implementation of the 802.11b MAC protocol. This module is intended to be used in combination with the Ieee80211Radio module as the physical layer. (The SnrEval80211 and Decider80211 modules should also work if per-packet bitrate setting gets implemented.) |
Parameters
Name | Type | Default value | Description |
---|---|---|---|
numEdcafs | int | 4 | |
maxQueueSize | int | 100 | -1 means unlimited |
rateControlType | string | "" | |
isBlockAckSupported | bool | false | |
prioritizeMulticast | bool | false |
if true, prioritize multicast frames (9.3.2.1 Fundamental access) |
rxModule | string | ||
txModule | string |
Properties
Name | Value | Description |
---|---|---|
class | Hcf | |
display | i=block/queue |
Signals
Name | Type | Unit |
---|---|---|
NF_LINK_BREAK | inet::ieee80211::Ieee80211DataOrMgmtFrame | |
NF_PACKET_DROP | inet::ieee80211::Ieee80211Frame |
Unassigned submodule parameters
Name | Type | Default value | Description |
---|---|---|---|
edca.edcaf.contention.initialChannelBusy | bool | true |
assume that channel was busy before the simulation started |
edca.edcaf.contention.backoffOptimization | bool | true |
we can pretend the frame has arrived into the queue a little bit earlier, and may be able to start transmitting immediately |
rateSelection.multicastFrameBitrate | double | -1bps | |
rateSelection.responseAckFrameBitrate | double | -1bps | |
rateSelection.responseBlockAckFrameBitrate | double | -1bps | |
rateSelection.responseCtsFrameBitrate | double | -1bps | |
rateSelection.dataFrameBitrate | double | -1bps |
fastest |
rateSelection.mgmtFrameBitrate | double | -1bps |
fastest |
rateSelection.controlFrameBitrate | double | -1bps | |
singleProtectionMechanism.rateSelectionModule | string | ||
edcaMgmtAndNonQoSRecoveryProcedure.shortRetryLimit | int | 7 | |
edcaMgmtAndNonQoSRecoveryProcedure.longRetryLimit | int | 4 | |
edcaDataRecoveryProcedures.shortRetryLimit | int | 7 | |
edcaDataRecoveryProcedures.longRetryLimit | int | 4 | |
edcaTxopProcedures.txopLimit | double | -1s | |
originatorAckPolicy.rateSelectionModule | string | ||
originatorAckPolicy.blockAckReqTreshold | 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 { parameters: int numEdcafs = default(4); int maxQueueSize = default(100); // -1 means unlimited string rateControlType = default(""); bool isBlockAckSupported = default(false); bool prioritizeMulticast = default(false); // if true, prioritize multicast frames (9.3.2.1 Fundamental access) string rxModule; string txModule; *.rateSelectionModule = "^.rateSelection"; *.rxModule = "^." + this.rxModule; @class(Hcf); @display("i=block/queue"); @signal[NF_LINK_BREAK](type=inet::ieee80211::Ieee80211DataOrMgmtFrame); @signal[NF_PACKET_DROP](type=inet::ieee80211::Ieee80211Frame); submodules: edca: Edca { parameters: numEdcafs = parent.numEdcafs; @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"); } rateSelection: QoSRateSelection { parameters: rateControlModule = "^.rateControl"; @display("p=400,100"); } rateControl: <rateControlType> like IRateControl if rateControlType != "" { parameters: @display("p=400,200"); } singleProtectionMechanism: SingleProtectionMechanism { parameters: @display("p=400,300"); } edcaMgmtAndNonQoSRecoveryProcedure: NonQoSRecoveryProcedure { parameters: cwCalculatorModule = "^.edca.edcaf[1]"; // best effort rtsPolicyModule = "^.rtsPolicy"; @display("p=700,300"); } edcaDataRecoveryProcedures[numEdcafs]: QoSRecoveryProcedure { parameters: cwCalculatorModule = "^.edca.edcaf[" + string(index) + "]"; rtsPolicyModule = "^.rtsPolicy"; @display("p=700,400,column,100"); } edcaTxopProcedures[numEdcafs]: TxopProcedure { parameters: @display("p=400,400,column,100"); } originatorAckPolicy: OriginatorQoSAckPolicy { parameters: @display("p=1000,100"); } recipientAckPolicy: RecipientQoSAckPolicy { parameters: @display("p=1000,200"); } rtsPolicy: QoSRtsPolicy { parameters: @display("p=1000,300"); } ctsPolicy: QoSCtsPolicy { parameters: @display("p=1000,400"); } originatorBlockAckAgreementPolicy: OriginatorBlockAckAgreementPolicy if isBlockAckSupported { parameters: originatorAckPolicyModule = "^.originatorAckPolicy"; @display("p=1000,500"); } recipientBlockAckAgreementPolicy: RecipientBlockAckAgreementPolicy if isBlockAckSupported { parameters: @display("p=1000,600"); } }File: src/inet/linklayer/ieee80211/mac/coordinationfunction/Hcf.ned