UdpApp¶
Package: inet.applications.udpapp
compound module UdpApp
Generates traffic for a UDP application. The traffic source and traffic sink modules can be built from queueing model elements.
Usage diagram¶
Inheritance diagram¶
Known subclasses¶
Name |
Type |
Description |
|---|---|---|
compound module |
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. |
|
compound module |
Implements a UDP application that only receives packets. |
|
compound module |
Implements a UDP application that only sends packets. |
Parameters¶
Name |
Type |
Default value |
Description |
|---|---|---|---|
interfaceTableModule |
string |
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 |
|---|---|---|---|
source.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 |
source.packetNameFormat |
string |
“%a-%c” |
See directives in module documentation |
source.packetRepresentation |
string |
“byteCount” |
Determines the chunk of the packet data |
source.packetProtocol |
string |
“unknown” |
|
source.packetLength |
int |
||
source.packetData |
int |
-1 |
|
source.attachCreationTimeTag |
bool |
true |
|
source.attachIdentityTag |
bool |
true |
|
source.attachDirectionTag |
bool |
true |
|
source.clockModule |
string |
“” |
Relative path of a module that implements IClock(1,:ref:2 <neddoc-msg-inet-iclock>); optional |
source.initialProductionOffset |
double |
-1s |
Initial duration before which packets are not produced. When negative, then produce packet in initialize() |
source.productionInterval |
double |
Elapsed time between subsequent packets pushed to the connected packet consumer |
|
source.scheduleForAbsoluteTime |
bool |
true |
When a clock is used, “relative” means that setting the clock will not affect the simulation time of the event |
sink.displayStringTextFormat |
string |
“received %p pk (%l)” |
Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information |
sink.clockModule |
string |
“” |
Relative path of a module that implements IClock(1,:ref:2 <neddoc-msg-inet-iclock>); optional |
sink.initialConsumptionOffset |
double |
0s |
Initial duration before which packets are not consumed |
sink.consumptionInterval |
double |
0s |
Elapsed time between subsequent packets allowed to be pushed by the connected packet producer, 0 means any number of packets can be pushed at the same simulation time |
sink.scheduleForAbsoluteTime |
bool |
true |
When a clock is used, “relative” means that setting the clock will not affect the simulation time of the event |
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¶
//
// Generates traffic for a UDP application. The traffic source and
// traffic sink modules can be built from queueing model elements.
//
module UdpApp like IApp
{
parameters:
string interfaceTableModule;
*.interfaceTableModule = default(absPath(".interfaceTable"));
@application;
@display("i=block/app");
gates:
input socketIn;
output socketOut;
submodules:
source: <default("ActivePacketSource")> like IActivePacketSource if typename != "" {
parameters:
@display("p=200,150");
}
tagger: <default("")> like IPacketFlow {
parameters:
@display("p=200,300");
}
measurementStarter: <default("")> like IPacketFlow {
parameters:
@display("p=200,450");
}
sink: <default("PassivePacketSink")> like IPassivePacketSink if typename != "" {
parameters:
@display("p=500,150");
}
measurementRecorder: <default("")> like IPacketFlow {
parameters:
@display("p=500,450");
}
io: UdpSocketIo {
parameters:
@display("p=350,600");
}
connections allowunconnected:
source.out --> tagger.in if exists(source);
tagger.out --> measurementStarter.in;
measurementStarter.out --> io.trafficIn;
io.socketOut --> socketOut;
socketIn --> io.socketIn;
io.trafficOut --> measurementRecorder.in;
measurementRecorder.out --> sink.in if exists(sink);
}