UdpBasicApp¶
Package: inet.applications.udpapp
simple module UdpBasicApp
Sends UDP packets to the given IP address at the given interval. Compatible with both Ipv4 and Ipv6.
The sending interval can be a constant or a random value (e.g. exponential(1)).
If the destAddresses parameter contains more than one address, one
of them is randomly chosen for each packet. An address may be given in the
dotted decimal notation, or with the module name. (The L3AddressResolver
class is used to resolve the address.) To disable the model, set
destAddresses to “”.
Received packets are discarded.
The peer can be a UdpSink, another UdpBasicApp (it handles received packets
like UdpSink), or a UdpEchoApp. When used with UdpEchoApp, the rcvdPkLifetime
statistic will contain the round-trip times.
Inheritance diagram¶
Extends¶
Name |
Type |
Description |
|---|---|---|
simple module |
Base module for all INET simple modules. |
Parameters¶
Name |
Type |
Default value |
Description |
|---|---|---|---|
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 |
interfaceTableModule |
string |
The path to the InterfaceTable module |
|
clockModule |
string |
“” |
Relative path of a module that implements IClock(1,:ref:2 <neddoc-msg-inet-iclock>); optional |
localPort |
int |
-1 |
Local port (-1: use ephemeral port) |
destAddresses |
string |
“” |
List of IP addresses, separated by spaces (“”: don’t send) |
localAddress |
string |
“” |
|
packetName |
string |
“UdpBasicAppData” |
|
destPort |
int |
||
messageLength |
int |
Length of messages to generate, in bytes |
|
startTime |
double |
this.sendInterval |
Application start time (start of the first packet) |
stopTime |
double |
-1s |
Time of finishing sending, -1s means forever |
sendInterval |
double |
Should usually be a random value, e.g. exponential(1) |
|
timeToLive |
int |
-1 |
If not -1, set the TTL (IPv4) or Hop Limit (IPv6) field of sent packets to this value |
dontFragment |
bool |
false |
If true, asks IP to not fragment the message during routing |
dscp |
int |
-1 |
If not -1, set the DSCP field (on IPv4/IPv6) of sent packets to this value |
tos |
int |
-1 |
If not -1, set the Type Of Service (IPv4) / Traffic Class (IPv6) field of sent packets to this value |
multicastInterface |
string |
“” |
If not empty, set the multicast output interface option on the socket (interface name expected) |
receiveBroadcast |
bool |
false |
If true, makes the socket receive broadcast packets |
joinLocalMulticastGroups |
bool |
false |
If true, makes the socket receive packets from all multicast groups set on local interfaces |
stopOperationExtraTime |
double |
-1s |
Extra time after lifecycle stop operation finished |
stopOperationTimeout |
double |
2s |
Timeout value for lifecycle stop operation |
Properties¶
Name |
Value |
Description |
|---|---|---|
class |
UdpBasicApp |
|
display |
i=block/app |
|
lifecycleSupport |
Gates¶
Name |
Direction |
Size |
Description |
|---|---|---|---|
socketIn |
input |
||
socketOut |
output |
Signals¶
Name |
Type |
Unit |
Description |
|---|---|---|---|
packetReceived |
|||
packetSent |
Statistics¶
Name |
Title |
Source |
Record |
Unit |
Interpolation Mode |
Description |
|---|---|---|---|---|---|---|
packetReceived |
packets received |
packetReceived |
count,”sum(packetBytes)”,”vector(packetBytes)” |
none |
||
packetSent |
packets sent |
packetSent |
count,”sum(packetBytes)”,”vector(packetBytes)” |
none |
||
rcvdPkLifetime |
received packet lifetime |
dataAge(packetReceived) |
stats,vector |
s |
none |
|
rcvdPkSeqNo |
received packet sequence number |
appPkSeqNo(packetReceived) |
vector |
none |
||
throughput |
throughput |
throughput(packetReceived) |
vector |
bps |
Source code¶
//
// Sends UDP packets to the given IP address at the given interval.
// Compatible with both ~Ipv4 and ~Ipv6.
//
// The sending interval can be a constant or a random value (e.g. exponential(1)).
// If the `destAddresses` parameter contains more than one address, one
// of them is randomly chosen for each packet. An address may be given in the
// dotted decimal notation, or with the module name. (The `L3AddressResolver`
// class is used to resolve the address.) To disable the model, set
// `destAddresses` to "".
//
// Received packets are discarded.
//
// The peer can be a ~UdpSink, another ~UdpBasicApp (it handles received packets
// like ~UdpSink), or a ~UdpEchoApp. When used with ~UdpEchoApp, the `rcvdPkLifetime`
// statistic will contain the round-trip times.
//
simple UdpBasicApp extends SimpleModule like IApp
{
parameters:
@class(UdpBasicApp);
string interfaceTableModule; // The path to the InterfaceTable module
string clockModule = default(""); // Relative path of a module that implements IClock; optional
int localPort = default(-1); // Local port (-1: use ephemeral port)
string destAddresses = default(""); // List of IP addresses, separated by spaces ("": don't send)
string localAddress = default("");
string packetName = default("UdpBasicAppData");
int destPort;
volatile int messageLength @unit(B); // Length of messages to generate, in bytes
double startTime @unit(s) = default(this.sendInterval); // Application start time (start of the first packet)
double stopTime @unit(s) = default(-1s); // Time of finishing sending, -1s means forever
volatile double sendInterval @unit(s); // Should usually be a random value, e.g. exponential(1)
int timeToLive = default(-1); // If not -1, set the TTL (IPv4) or Hop Limit (IPv6) field of sent packets to this value
bool dontFragment = default(false); // If true, asks IP to not fragment the message during routing
int dscp = default(-1); // If not -1, set the DSCP field (on IPv4/IPv6) of sent packets to this value
int tos = default(-1); // If not -1, set the Type Of Service (IPv4) / Traffic Class (IPv6) field of sent packets to this value
string multicastInterface = default(""); // If not empty, set the multicast output interface option on the socket (interface name expected)
bool receiveBroadcast = default(false); // If true, makes the socket receive broadcast packets
bool joinLocalMulticastGroups = default(false); // If true, makes the socket receive packets from all multicast groups set on local interfaces
displayStringTextFormat = default("rcvd: {numReceived} pks\nsent: {numSent} pks");
@display("i=block/app");
@lifecycleSupport;
double stopOperationExtraTime @unit(s) = default(-1s); // Extra time after lifecycle stop operation finished
double stopOperationTimeout @unit(s) = default(2s); // Timeout value for lifecycle stop operation
@signal[packetSent](type=inet::Packet);
@signal[packetReceived](type=inet::Packet);
@statistic[packetReceived](title="packets received"; source=packetReceived; record=count,"sum(packetBytes)","vector(packetBytes)"; interpolationmode=none);
@statistic[throughput](title="throughput"; unit=bps; source="throughput(packetReceived)"; record=vector);
@statistic[packetSent](title="packets sent"; source=packetSent; record=count,"sum(packetBytes)","vector(packetBytes)"; interpolationmode=none);
@statistic[rcvdPkLifetime](title="received packet lifetime"; source="dataAge(packetReceived)"; unit=s; record=stats,vector; interpolationmode=none);
@statistic[rcvdPkSeqNo](title="received packet sequence number"; source="appPkSeqNo(packetReceived)"; record=vector; interpolationmode=none);
gates:
input socketIn @labels(UdpCommand/up);
output socketOut @labels(UdpCommand/down);
}