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.

inet.applications.udpapp.UdpBasicAppUdpBasicAppsimple

Inheritance diagram

Extends

Name

Type

Description

SimpleModule

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

inet::Packet

packetSent

inet::Packet

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);
}

File: src/inet/applications/udpapp/UdpBasicApp.ned