Package: inet.queueing.gate
CreditBasedGate
simple moduleThis 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