HCF -- Hybrid Coordination Function
The following diagram shows usage relationships between types. Unresolved types are missing from the diagram.
The following diagram shows inheritance relationships for this type. Unresolved types are missing from the diagram.
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.) |
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 |
Name | Value | Description |
---|---|---|
class | Hcf | |
display | i=block/queue |
Name | Type | Unit |
---|---|---|
NF_LINK_BREAK | Ieee80211DataOrMgmtFrame | |
NF_PACKET_DROP | Ieee80211Frame |
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 |
// // 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 = "^." + rxModule; @class(Hcf); @display("i=block/queue"); @signal[NF_LINK_BREAK](type=Ieee80211DataOrMgmtFrame); @signal[NF_PACKET_DROP](type=Ieee80211Frame); submodules: edca: Edca { parameters: numEdcafs = 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"); } }