QueueFiller¶
Package: inet.queueing.source
compound module QueueFiller
Produces packets in order to prevent a queue from becoming empty.
Usage diagram¶
Inheritance diagram¶
Properties¶
Name |
Value |
Description |
|---|---|---|
display |
i=block/source |
Gates¶
Name |
Direction |
Size |
Description |
|---|---|---|---|
out |
output |
Unassigned submodule parameters¶
Name |
Type |
Default value |
Description |
|---|---|---|---|
provider.displayStringTextFormat |
string |
“created %p pk (%l)” |
Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information |
provider.packetNameFormat |
string |
“%a-%c” |
See directives in module documentation |
provider.packetRepresentation |
string |
“byteCount” |
Determines the chunk of the packet data |
provider.packetProtocol |
string |
“unknown” |
|
provider.packetLength |
int |
||
provider.packetData |
int |
-1 |
|
provider.attachCreationTimeTag |
bool |
true |
|
provider.attachIdentityTag |
bool |
true |
|
provider.attachDirectionTag |
bool |
true |
|
provider.clockModule |
string |
“” |
Relative path of a module that implements IClock(1,:ref:2 <neddoc-msg-inet-iclock>); optional |
provider.initialProvidingOffset |
double |
0s |
Initial duration before which packets are not provided |
provider.providingInterval |
double |
0s |
Elapsed time between subsequent packets allowed to be pulled by the connected packet collector, 0 means any number of packets can be pulled at the same simulation time |
provider.scheduleForAbsoluteTime |
bool |
true |
When a clock is used, relative means that setting the clock will not affect the simulation time of the event |
server.displayStringTextFormat |
string |
“contains {numTokens} tk\nserved {numProcessedPackets} pk ({processedTotalLength})” |
Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information |
server.initialNumTokens |
double |
0 |
Initial number of tokens |
server.maxNumTokens |
double |
nan |
Maximum number of tokens |
server.tokenConsumptionPerPacket |
double |
1 |
How many tokens are consumed per processed packet |
server.tokenConsumptionPerBit |
double |
0 |
How many tokens are consumed per processed bit |
tokenGenerator.displayStringTextFormat |
string |
“generated {numTokensGenerated} tk\nto {storageModule}” |
Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information |
tokenGenerator.storageModule |
string |
“^.server” |
Module path of the token storage where the tokens are generated via C++ method call |
tokenGenerator.queueModule |
string |
Module path of the observed packet queue |
|
tokenGenerator.minNumPackets |
int |
1 |
|
tokenGenerator.minTotalLength |
int |
0 b |
|
tokenGenerator.numTokens |
double |
1 |
Number of tokens generated when the queue becomes empty |
Source code¶
//
// Produces packets in order to prevent a queue from becoming empty.
//
module QueueFiller like IActivePacketSource
{
parameters:
@display("i=block/source");
gates:
output out @labels(pull);
submodules:
provider: <default("PassivePacketSource")> like IPassivePacketSource {
parameters:
providingInterval = default(0s);
@display("p=250,100");
}
server: <default("TokenBasedServer")> like IPacketServer {
parameters:
@display("p=250,200");
}
tokenGenerator: <default("QueueBasedTokenGenerator")> like ITokenGenerator {
parameters:
storageModule = default("^.server");
@display("p=100,100");
}
connections:
provider.out --> server.in;
server.out --> { @display("m=s"); } --> out;
}