UdpRequestResponseApp¶
Package: inet.applications.udpapp
compound module UdpRequestResponseApp
A generic request/response-based server application. For each request it receives, it generates different traffic based on the data the request contains. The client application can be any source that is capable of generating packets with different data. The first byte of the packet data determines the response traffic, which can be configured to produce complex streams of packets with various data and timing distributions.
Inheritance diagram¶
Extends¶
Name |
Type |
Description |
|---|---|---|
compound module |
Generates traffic for a UDP application. The traffic source and traffic sink modules can be built from queueing model elements. |
Parameters¶
Name |
Type |
Default value |
Description |
|---|---|---|---|
interfaceTableModule |
string |
||
numKind |
int |
2 |
Properties¶
Name |
Value |
Description |
|---|---|---|
application |
||
display |
i=block/app |
Gates¶
Name |
Direction |
Size |
Description |
|---|---|---|---|
socketIn |
input |
||
socketOut |
output |
Unassigned submodule parameters¶
Name |
Type |
Default value |
Description |
|---|---|---|---|
string |
“created %p pk (%l)” |
Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information |
|
string |
“%a-%c” |
See directives in module documentation |
|
string |
“byteCount” |
Determines the chunk of the packet data |
|
string |
“unknown” |
||
int |
|||
int |
-1 |
||
bool |
true |
||
bool |
true |
||
bool |
true |
||
string |
“” |
Relative path of a module that implements IClock(1,:ref:2 <neddoc-msg-inet-iclock>); optional |
|
double |
0s |
Initial duration before which packets are not provided |
|
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 |
|
bool |
true |
When a clock is used, relative means that setting the clock will not affect the simulation time of the event |
|
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 |
|
double |
0 |
Initial number of tokens |
|
double |
nan |
Maximum number of tokens |
|
double |
1 |
How many tokens are consumed per processed packet |
|
double |
0 |
How many tokens are consumed per processed bit |
|
source.multiplexer.displayStringTextFormat |
string |
“passed %p pk (%l)” |
Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information |
source.multiplexer.forwardServiceRegistration |
bool |
true |
|
source.multiplexer.forwardProtocolRegistration |
bool |
true |
|
source.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 |
source.tokenGenerator.storageModule |
string |
“^.” + parent.requestConsumerModule + “.server” |
Module path of the token storage where the tokens are generated via C++ method call |
source.tokenGenerator.subscriptionModule |
string |
“^” |
|
source.tokenGenerator.signals |
string |
“tokensDepleted” |
|
source.tokenGenerator.intSignalValue |
int |
-1 |
|
source.tokenGenerator.doubleSignalValue |
double |
nan |
|
source.tokenGenerator.numTokens |
double |
1 |
Number of tokens generated repeatedly |
string |
“contains %p pk (%l) pushed %u\npulled %o removed %r dropped %d” |
Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information |
|
int |
-1 |
Maximum number of packets in the queue, no limit by default |
|
int |
-1b |
Maximum total length of packets in the queue, no limit by default |
|
string |
“” |
Determines which packets are dropped when the queue is overloaded, packets are not dropped by default; the parameter must be the name of a C++ class which implements the IPacketDropperFunction C++ interface and is registered via Register_Class |
|
string |
“” |
Determines the order of packets in the queue, insertion order by default; the parameter must be the name of a C++ class which implements the IPacketComparatorFunction C++ interface and is registered via Register_Class |
|
string |
“” |
Relative module path to the IPacketBuffer module used by this queue, implicit buffer by default |
|
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 |
|
double |
1 |
Initial number of tokens |
|
double |
nan |
Maximum number of tokens |
|
double |
1 |
How many tokens are consumed per processed packet |
|
double |
0 |
How many tokens are consumed per processed bit |
|
sink.classifier.displayStringTextFormat |
string |
“classified %p pk (%l)” |
Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information |
sink.classifier.reverseOrder |
bool |
false |
|
sink.classifier.classifierClass |
string |
Determines the output queue of packets, the parameter must be the name of a C++ class which implements the IPacketClassifierFunction interface and is registered via Register_Class |
|
sink.tokenGenerator.displayStringTextFormat |
string |
“processed %p pk (%l)\ngenerated %t tk\nto %s” |
Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information |
sink.tokenGenerator.storageModule |
string |
“^.” + parent.responseProducerModule + “.server[” + string(index) + “]” |
Module path of the token storage where the tokens are generated via C++ method call |
sink.tokenGenerator.numTokensPerPacket |
double |
1 |
Number of tokens per consumed packet |
sink.tokenGenerator.numTokensPerBit |
double |
0 |
Number of tokens per consumed bit |
io.displayStringTextFormat |
string |
“rcvd: {numReceived} pks\nsent: {numSent} pks” |
Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information |
io.interfaceTableModule |
string |
||
io.localAddress |
string |
“” |
|
io.localPort |
int |
-1 |
|
io.destAddress |
string |
“” |
|
io.destPort |
int |
||
io.timeToLive |
int |
-1 |
If not -1, set the TTL (IPv4) or Hop Limit (IPv6) field of sent packets to this value |
io.dontFragment |
bool |
false |
If true, ask IP to not fragment the message during routing |
io.dscp |
int |
-1 |
If not -1, set the DSCP (IPv4/IPv6) field of sent packets to this value |
io.tos |
int |
-1 |
If not -1, set the Type Of Service (IPv4) / Traffic Class (IPv6) field of sent packets to this value |
io.multicastInterface |
string |
“” |
If not empty, set the multicast output interface option on the socket (interface name expected) |
io.multicastAddresses |
object |
[] |
List of multicast addresses that the application socket joins |
io.receiveBroadcast |
bool |
false |
If true, make the socket receive broadcast packets |
io.joinLocalMulticastGroups |
bool |
false |
If true, make the socket receive packets from all multicast groups set on local interfaces |
io.stopOperationExtraTime |
double |
-1s |
Extra time after lifecycle stop operation finishes |
io.stopOperationTimeout |
double |
2s |
Timeout value for lifecycle stop operation |
Source code¶
//
// A generic request/response-based server application. For each
// request it receives, it generates different traffic based on the data the
// request contains. The client application can be any source that is capable
// of generating packets with different data. The first byte of the packet data
// determines the response traffic, which can be configured to produce complex
// streams of packets with various data and timing distributions.
//
module UdpRequestResponseApp extends UdpApp
{
parameters:
int numKind = default(2);
sink.typename = default("RequestConsumer");
sink.numKind = this.numKind;
sink.responseProducerModule = default("^.source");
sink.classifier.classifierClass = default("inet::queueing::PacketDataClassifier");
source.typename = default("ResponseProducer");
source.numKind = this.numKind;
}
File: src/inet/applications/udpapp/UdpRequestResponseApp.ned