CreditBasedGate¶
Package: inet.queueing.gate
simple module CreditBasedGate
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, otherwise it is closed. 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¶
Known subclasses¶
Name |
Type |
Description |
|---|---|---|
simple module |
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 |
|---|---|---|
simple module |
Base module for various packet gate modules. |
Parameters¶
Name |
Type |
Default value |
Description |
|---|---|---|---|
displayStringTextFormat |
string |
“contains {currentCredit} cr, rate {currentCreditGainRate} crps\nserved %p pk (%l)” |
Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information |
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 |
|---|---|---|
class |
CreditBasedGate |
|
display |
i=block/cogwheel |
Gates¶
Name |
Direction |
Size |
Description |
|---|---|---|---|
in |
input |
||
out |
output |
Signals¶
Name |
Type |
Unit |
Description |
|---|---|---|---|
creditsChanged |
double |
||
gateStateChanged |
bool |
||
packetPulledIn |
|||
packetPulledOut |
|||
packetPushedIn |
|||
packetPushedOut |
Statistics¶
Name |
Title |
Source |
Record |
Unit |
Interpolation Mode |
Description |
|---|---|---|---|---|---|---|
flowIncomingDataRate |
flow specific incoming data rate |
throughput(demuxFlow(merge(packetPushedIn, packetPulledIn))) |
vector |
bps |
linear |
the statistical value is the flow specific data rate of the incoming packets |
flowIncomingPacketLengths |
flow specific incoming packet lengths |
packetLength(demuxFlow(merge(packetPushedIn, packetPulledIn))) |
sum,histogram,vector |
b |
none |
the statistical value is the flow specific length of the incoming packet |
flowOutgoingDataRate |
flow specific outgoing data rate |
throughput(demuxFlow(merge(packetPushedOut, packetPulledOut))) |
vector |
bps |
linear |
the statistical value is the flow specific data rate of the outgoing packets |
flowOutgoingPacketLengths |
flow specific outgoing packet lengths |
packetLength(demuxFlow(merge(packetPushedOut, packetPulledOut))) |
sum,histogram,vector |
b |
none |
the statistical value is the flow specific length of the outgoing packet |
gateState |
gate state |
gateStateChanged |
vector |
sample-hold |
||
incomingDataRate |
incoming data rate |
throughput(merge(packetPushedIn, packetPulledIn)) |
vector |
bps |
linear |
the statistical value is the data rate of the incoming packets |
incomingPacketLengths |
incoming packet lengths |
packetLength(merge(packetPushedIn, packetPulledIn)) |
sum,histogram,vector |
b |
none |
the statistical value is the length of the incoming packet |
incomingPackets |
incoming packets |
merge(packetPushedIn, packetPulledIn) |
count |
pk |
the statistical value is the incoming packet |
|
numCredits |
number of credits |
creditsChanged |
vector |
cr |
linear |
|
outgoingDataRate |
outgoing data rate |
throughput(merge(packetPushedOut, packetPulledOut)) |
vector |
bps |
linear |
the statistical value is the data rate of the outgoing packets |
outgoingPacketLengths |
outgoing packet lengths |
packetLength(merge(packetPushedOut, packetPulledOut)) |
sum,histogram,vector |
b |
none |
the statistical value is the length of the outgoing packet |
outgoingPackets |
outgoing packets |
merge(packetPushedOut, packetPulledOut) |
count |
pk |
the statistical value is the outgoing packet |
Source code¶
//
// 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, otherwise it is closed. 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 {currentCredit} cr, rate {currentCreditGainRate} crps\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);
}