CreditBasedGate

Package: inet.queueing.gate

CreditBasedGate

simple module

This module is a packet gate that operates based on the number of credits it contains. The gate is open if the number of credits is greater than the configured transmit credit limit, it is closed otherwise. The module attaches a CreditGateTag to all packets that pass through. The attached tag allows the gate module to determine if a packet belongs to it when the packet is eventually transmitted.

The number of credits decreases if a packet that passed through this gate is currently being transmitted by the network interface. Otherwise, the number of credits increases below the transmit credit limit or if there are packets waiting to be transmitted. Besides, the number of credits immediately drops down to the transmit credit limit if no more packets are available after the network interface finishes a transmission from this gate.

This module is part of the credit based shaper infrastructure.

See also: CreditGateTag, PacketQueue

Inheritance diagram

The following diagram shows inheritance relationships for this type. Unresolved types are missing from the diagram.

Known subclasses

Name Type Description
Ieee8021qCreditBasedGate simple module

This module is a packet gate that can be used to implement the IEEE 802.1q credit based shaper algorithm in combination with a packet queue.

Extends

Name Type Description
PacketGateBase simple module

This is a base module for various packet gate modules.

Parameters

Name Type Default value Description
displayStringTextFormat string "contains %n cr\nserved %p pk (%l)"

determines the text that is written on top of the submodule

bitrate double nan bps
extraLength int 0b
extraDuration double 0s
idleCreditGainRate double

rate of credit increase while the packets that passed through this gate don't use the physical channel

transmitCreditSpendRate double

rate of credit decrease while the packets that passed through this gate use the physical channel

initialCredit double 0

initial number of credits

transmitCreditLimit double 0

credit limit above which the gate is open

minCredit double -inf

minimum number of credits

maxCredit double inf

maximum number of credits

accumulateCreditInGuardBand bool false

whether credit increases during implicit guard band when no packets can be sent anymore

Properties

Name Value Description
display i=block/cogwheel
class CreditBasedGate

Gates

Name Direction Size Description
in input
out output

Signals

Name Type Unit
creditsChanged double

Statistics

Name Title Source Record Unit Interpolation Mode
numCredits number of credits creditsChanged vector cr linear

Source code

//
// This module is a packet gate that operates based on the number of credits
// it contains. The gate is open if the number of credits is greater than the
// configured transmit credit limit, it is closed otherwise. The module attaches
// a ~CreditGateTag to all packets that pass through. The attached tag allows
// the gate module to determine if a packet belongs to it when the packet is
// eventually transmitted.
//
// The number of credits decreases if a packet that passed through this gate is
// currently being transmitted by the network interface. Otherwise, the number
// of credits increases below the transmit credit limit or if there are packets
// waiting to be transmitted. Besides, the number of credits immediately drops
// down to the transmit credit limit if no more packets are available after the
// network interface finishes a transmission from this gate.
//
// This module is part of the credit based shaper infrastructure.
//
// @see ~CreditGateTag, ~PacketQueue
//
simple CreditBasedGate extends PacketGateBase like IPacketGate
{
    parameters:
        double idleCreditGainRate; // rate of credit increase while the packets that passed through this gate don't use the physical channel
        double transmitCreditSpendRate; // rate of credit decrease while the packets that passed through this gate use the physical channel
        double initialCredit = default(0); // initial number of credits
        double transmitCreditLimit = default(0); // credit limit above which the gate is open
        double minCredit = default(-inf); // minimum number of credits
        double maxCredit = default(inf); // maximum number of credits
        bool accumulateCreditInGuardBand = default(false); // whether credit increases during implicit guard band when no packets can be sent anymore
        displayStringTextFormat = default("contains %n cr\nserved %p pk (%l)"); // determines display string text above the submodule
        @class(CreditBasedGate);
        @signal[creditsChanged](type=double);
        @statistic[numCredits](title="number of credits"; source=creditsChanged; record=vector; unit=cr; interpolationmode=linear);
}
File: src/inet/queueing/gate/CreditBasedGate.ned