Hcf

Package: inet.linklayer.ieee80211.mac.coordinationfunction

Hcf

compound module

Implements the HCF (Hybrid Coordination Function) for IEEE 802.11.

edca : Edca

Implements EDCA (Enhanced Distributed Channel Access) for IEEE 802.11.

Source:
edca: Edca {
    parameters:
        @display("p=150,100");
} hcca : Hcca

Implements HCCA (Hybrid Coordination Function Controlled Channel Access) for IEEE 802.11.

Source:
hcca: Hcca {
    parameters:
        @display("p=150,200");
} originatorMacDataService : OriginatorQosMacDataService

Source:
originatorMacDataService: OriginatorQosMacDataService {
    parameters:
        @display("p=150,300");
} recipientMacDataService : RecipientQosMacDataService

Source:
recipientMacDataService: RecipientQosMacDataService {
    parameters:
        @display("p=150,400");
} singleProtectionMechanism : SingleProtectionMechanism

Source:
singleProtectionMechanism: SingleProtectionMechanism {
    parameters:
        @display("p=150,500");
} rateSelection : QosRateSelection

Source:
rateSelection: QosRateSelection {
    parameters:
        rateControlModule = "^.rateControl";
        @display("p=350,100");
} rateControl : like IRateControl

IRateControl: Interface for auto rate control modules.

Source:
rateControl: <default("")> like IRateControl if typename != "" {
    parameters:
        @display("p=350,200");
} originatorAckPolicy : like IOriginatorQosAckPolicy

OriginatorQosAckPolicy: Implements the default originator ACK policy for QoS stations.

IOriginatorQosAckPolicy: Interface for originator QoS ACK policies.

Source:
originatorAckPolicy: <default("OriginatorQosAckPolicy")> like IOriginatorQosAckPolicy {
    parameters:
        @display("p=550,100");
} recipientAckPolicy : like IRecipientQosAckPolicy

RecipientQosAckPolicy: Implements the default recipient ACK policy for QoS stations.

IRecipientQosAckPolicy: Interface for recipient QoS ACK policies.

Source:
recipientAckPolicy: <default("RecipientQosAckPolicy")> like IRecipientQosAckPolicy {
    parameters:
        @display("p=550,200");
} rtsPolicy : like IRtsPolicy

QosRtsPolicy: Implements the default RTS policy for QoS stations.

IRtsPolicy: Interface for RTS policies.

Source:
rtsPolicy: <default("QosRtsPolicy")> like IRtsPolicy {
    parameters:
        @display("p=550,300");
} ctsPolicy : like ICtsPolicy

QosCtsPolicy: Implements the default CTS policy for QoS stations.

ICtsPolicy: Interface for CTS policies.

Source:
ctsPolicy: <default("QosCtsPolicy")> like ICtsPolicy {
    parameters:
        @display("p=550,400");
} originatorBlockAckAgreementPolicy : like IOriginatorBlockAckAgreementPolicy

OriginatorBlockAckAgreementPolicy: Implements the default originator block ACK agreement policy

IOriginatorBlockAckAgreementPolicy: Interface for originator Block ACK agreement policies.

Source:
originatorBlockAckAgreementPolicy: <default("OriginatorBlockAckAgreementPolicy")> like IOriginatorBlockAckAgreementPolicy if isBlockAckSupported {
    parameters:
        originatorAckPolicyModule = "^.originatorAckPolicy";
        @display("p=550,500");
} recipientBlockAckAgreementPolicy : like IRecipientBlockAckAgreementPolicy

RecipientBlockAckAgreementPolicy: Implements the default recipient block ACK agreement policy.

IRecipientBlockAckAgreementPolicy: Interface for recipient Block ACK agreement policies.

Source:
recipientBlockAckAgreementPolicy: <default("RecipientBlockAckAgreementPolicy")> like IRecipientBlockAckAgreementPolicy if isBlockAckSupported {
    parameters:
        @display("p=550,600");
}

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)

msgkindctrltagsmsgnamecontext
omnetpp::cMessage0startRxTimeout

Direct method calls (observed)

call tofunctioninfo
Ieee80211Interfaceinet::NetworkInterface::receiveSignalPOST_MODEL_CHANGE
Ieee80211Macinet::ieee80211::Ieee80211Mac::sendUpFramesendUpFrame("%s")
Txinet::ieee80211::Tx::transmitFrametransmitFrame("%s")
Edcafinet::ieee80211::Edcaf::incrementCwincrementCw
Edcafinet::ieee80211::Edcaf::releaseChannelreleaseChannel
Edcafinet::ieee80211::Edcaf::requestChannelrequestChannel
Edcafinet::ieee80211::Edcaf::resetCwresetCw
Hcfinet::ieee80211::Hcf::frameSequenceFinishedframeSequenceFinished
Hcfinet::ieee80211::Hcf::originatorProcessFailedFrameoriginatorProcessFailedFrame
Hcfinet::ieee80211::Hcf::originatorProcessReceivedFrameoriginatorProcessReceivedFrame
Hcfinet::ieee80211::Hcf::originatorProcessRtsProtectionFailedoriginatorProcessRtsProtectionFailed
Hcfinet::ieee80211::Hcf::originatorProcessTransmittedFrameoriginatorProcessTransmittedFrame
Hcfinet::ieee80211::Hcf::processMgmtFrameprocessMgmtFrame
Hcfinet::ieee80211::Hcf::processUpperFrameprocessUpperFrame(%s)
Hcfinet::ieee80211::Hcf::scheduleStartRxTimerscheduleStartRxTimer
Hcfinet::ieee80211::Hcf::transmitControlResponseFrametransmitControlResponseFrame
Hcfinet::ieee80211::Hcf::transmitFrametransmitFrame
OriginatorQosMacDataServiceinet::ieee80211::OriginatorQosMacDataService::extractFramesToTransmitextractFramesToTransmit
TxopProcedureinet::ieee80211::TxopProcedure::endTxopendTxop
TxopProcedureinet::ieee80211::TxopProcedure::startTxopstartTxop
InProgressFramesinet::ieee80211::InProgressFrames::clearDroppedFramesclearDroppedFrames
PendingQueueinet::queueing::PacketQueue::pushPacketpushPacket
RecipientQosMacDataServiceinet::ieee80211::RecipientQosMacDataService::controlFrameReceivedcontrolFrameReceived
RecipientQosMacDataServiceinet::ieee80211::RecipientQosMacDataService::dataFrameReceiveddataFrameReceived
RecipientQosMacDataServiceinet::ieee80211::RecipientQosMacDataService::managementFrameReceivedmanagementFrameReceived

Called methods (observed)

functioninfocall from
inet::ieee80211::Hcf::channelGrantedchannelGrantedEdcaf
inet::ieee80211::Hcf::corruptedFrameReceivedcorruptedFrameReceivedIeee80211Mac
inet::ieee80211::Hcf::frameSequenceFinishedframeSequenceFinishedHcf
inet::ieee80211::Hcf::originatorProcessFailedFrameoriginatorProcessFailedFrameHcf
inet::ieee80211::Hcf::originatorProcessReceivedFrameoriginatorProcessReceivedFrameHcf
inet::ieee80211::Hcf::originatorProcessRtsProtectionFailedoriginatorProcessRtsProtectionFailedHcf
inet::ieee80211::Hcf::originatorProcessTransmittedFrameoriginatorProcessTransmittedFrameHcf
inet::ieee80211::Hcf::processLowerFrameprocessLowerFrame(%s)Ieee80211Mac
inet::ieee80211::Hcf::processMgmtFrameprocessMgmtFrameHcf
inet::ieee80211::Hcf::processUpperFrameprocessUpperFrame(%s)Ieee80211Mac, Hcf
inet::ieee80211::Hcf::receiveSignalmodesetChangedIeee80211Mac
inet::ieee80211::Hcf::scheduleStartRxTimerscheduleStartRxTimerHcf
inet::ieee80211::Hcf::transmissionCompletetransmissionCompleteTx
inet::ieee80211::Hcf::transmitControlResponseFrametransmitControlResponseFrameHcf
inet::ieee80211::Hcf::transmitFrametransmitFrameHcf

Packet operations (observed)

chunkTypepacketAction
Ieee80211AckFramePacket
Ieee80211AddbaRequestPacket, insertAtFront
Ieee80211AddbaResponsePacket, insertAtFront
Ieee80211BasicBlockAckPacket
Ieee80211BasicBlockAckReqPacket, insertAtFront
Ieee80211BlockAckReqpeekAtFront
Ieee80211CtsFramePacket
Ieee80211DataHeaderinsertAtFront, peekAtFront, removeAtFront
Ieee80211DataOrMgmtHeaderpeekAtFront, removeAtFront
Ieee80211MacHeaderpeekAtFront, removeAtFront
Ieee80211MacTrailerinsertAtBack
Ieee80211MgmtHeaderinsertAtFront, peekAtFront
Ieee80211RtsFrameinsertAtBack, insertAtFront, peekAtFront

Shared Tagging operations (observed)

tagTypetagAction
Ieee80211ModeIndfindTag
Ieee80211ModeReqaddTagIfAbsent, 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